first commit

This commit is contained in:
pycm1k 2025-03-31 16:09:18 +04:00
commit 2dc28940ba
249 changed files with 6492 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/*/db/*

View File

@ -0,0 +1,2 @@
01-nginx-site-confs-default
02-default-location

View File

@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDsTCCApmgAwIBAgIUP04TMPaeKONYanM18MhmpJyZRG8wDQYJKoZIhvcNAQEL
BQAwaDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMREwDwYDVQQHDAhDYXJsc2Jh
ZDEXMBUGA1UECgwOTGludXhzZXJ2ZXIuaW8xFDASBgNVBAsMC0xTSU8gU2VydmVy
MQowCAYDVQQDDAEqMB4XDTI1MDEwNDEzNTY0M1oXDTM1MDEwMjEzNTY0M1owaDEL
MAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMREwDwYDVQQHDAhDYXJsc2JhZDEXMBUG
A1UECgwOTGludXhzZXJ2ZXIuaW8xFDASBgNVBAsMC0xTSU8gU2VydmVyMQowCAYD
VQQDDAEqMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApvOpNrJkgksM
pDx4Q193nyqj3lskEyl3z2tjdNBzx1e22Xnu+klRsRX/oKdUZQOKN0wt3JC148X9
aTlaoFh9WCCY7sKw3X3Ytskruzg51C2iqeS1U37U5pET5HEoeHg+zQSIqCyckddT
nlhal91wbrmTYJmyZAI0V+Y6T69ItxbtCX1oXeEWxHQHCCA+yz446fx3PXdQJaF1
/yK5FRSH7CnVHpdvwg+UJ8eBkHcVadEWpIz+nWgd6S9UPUTRe3XMxZzH8auNQNpE
XasayyVmLArwZBcG5ib9FhlxDDa1ohC4VAjTAbudAScjGXvPvsiQ5ZAOcqMShPEa
gQD72wTV7QIDAQABo1MwUTAdBgNVHQ4EFgQUuBDdnCcNzDWs7xJaHjV/9hYVep4w
HwYDVR0jBBgwFoAUuBDdnCcNzDWs7xJaHjV/9hYVep4wDwYDVR0TAQH/BAUwAwEB
/zANBgkqhkiG9w0BAQsFAAOCAQEAdmbfVF5WZwLRJdaajgz1BZNC6o4tXtSHGIvv
oCN/i0t5Rbk1OP4qVMt9BBIMrO+oeXrifQYBH3hdwq5VINWE0VDOoT9klzcOBlIw
jw7+CjhhUJTdifFogORvMkm55WCbmk7oStBOnTIm6AqGmMgMmx2LTFF45SaWWZ/2
VM2KfCdSCl3dUvikfBEKj+KS+NsiFdJ1w5yRTBX+wMyV1+NZ8H/oQXcnaWnZjTLq
qIG7ryG0NOD810P9DaPQWZ1NydwlAO4ilpz2kUnmVwDWqnYeaqk7ECnPUlhoQJnP
nI0zloDMGB7PNLacZqFpWPQzO4nOdukjlsWxDpCqGCce9nEiqg==
-----END CERTIFICATE-----

View File

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCm86k2smSCSwyk
PHhDX3efKqPeWyQTKXfPa2N00HPHV7bZee76SVGxFf+gp1RlA4o3TC3ckLXjxf1p
OVqgWH1YIJjuwrDdfdi2ySu7ODnULaKp5LVTftTmkRPkcSh4eD7NBIioLJyR11Oe
WFqX3XBuuZNgmbJkAjRX5jpPr0i3Fu0JfWhd4RbEdAcIID7LPjjp/Hc9d1AloXX/
IrkVFIfsKdUel2/CD5Qnx4GQdxVp0RakjP6daB3pL1Q9RNF7dczFnMfxq41A2kRd
qxrLJWYsCvBkFwbmJv0WGXEMNrWiELhUCNMBu50BJyMZe8++yJDlkA5yoxKE8RqB
APvbBNXtAgMBAAECggEAGEgkdSVGvgvj/PfN4V//ZMx4Wfef4b5Bw+QRao+Dj1uK
vMsMaXsEISvwaobRHQIB9nSjekrSfEbdymdCREOqiLNGWvpBFsMzeQj9ox9p4G96
Eu4F5hdyfU2zesxvKkUJk/BUCesMeJ+8nzFS4ndICiqpLJRzdYfmjLRFCIrsxLLE
6V3O8mD9yPaapYPyABHQF8CpO7aV4q+RYIJG92l4cBl8WBYFHhc0pOZ/fFaTtpoq
nnDqS8xOkD9JnF8Ftv3kGpZvdNYT/GhN5DSd0b2iixa36nShuLb++rL1p4aV9muF
XLSMNnXHOc9G5zbmqsz5NHjoUh2vn8J0wz9KqKwfFwKBgQDWJiQwS7iB1jxHh3+2
ONzY1AuQCB6B+dgALTAEpR7iW5WSJs81KC7ou+5u0arlzGSe7O/P40Zz4hnVI6Ku
kmcwcG93EBeECnk0mh2Jpg89+eeLNuknhgQQjtlClU2N0xS24eu2TlmljAgEBc8s
YK02TdgDGHSaimsq5uiTf+8lPwKBgQDHlD9lbZG6e5teOMpD01JxWCM7+BqAp0PV
i/L6gfOC2YfBq4vyUON025D6SFra/vfrKk2SJt2DSNJGuy+RyB4+WtjrgVRYEg5C
34nFPRNthtEnQbFFoCwHITnFYGAdtug+lcBbn3NFbllVYNKtBHUn5FFOmRhATN2h
D6BQHQ8d0wKBgQCxieuEsrIjyjYtYxOpQdkuVhXD8kdAoJ7H/q6Jm09QgHcvNMei
nU7OmkehTmgtnddpvqtOoXDeT/v0rVeI/U1ZZk2y2v9z867qwj5syORoEFA7JWoE
32FtTNCoF9m1E+Nff0uI18oQqlhW5W4Nr5TKqZzFbDf3i3wvlEILTww3xwKBgFgf
HBLj20mU1Fg5CQ4Dm85SFVSgSsttj2UV4xY7FNM8y1V3Mlau4o+xdwUbt4oktEDQ
r+mNYZdbKwVyFyHuU3RC1q69rwkoB8X9P66oNhDRSz5jIivU+ju3rvN4h1f3b/pa
UtHhyJrqi2VIWB1u72/Kvx/ON0gE6IL6DFXzTr5jAoGAfGEMM8I58oFI1AN1eson
bI5xLLKEPDQltN/jxujq0zrFvtaix8J7sJoeU2kAt653dt9dx8DmoeKK4rI4aBP9
wvJv8OBZLCe96XU05X47YLvaCYYaV36t9gvig1eNcUIxbSD5S1rx0OJB4euB9k2K
5wfVZVJosuvZgcdCOzT0M+A=
-----END PRIVATE KEY-----

View File

@ -0,0 +1,6 @@
logrotate state -- version 2
"/var/log/acpid.log" 2025-1-5-2:0:0
"/config/log/nginx/access.log" 2025-2-19-2:0:0
"/var/log/php83/*.log" 2025-1-5-2:0:0
"/config/log/nginx/error.log" 2025-2-19-2:0:0
"/config/log/php/error.log" 2025-3-30-2:0:0

View File

View File

@ -0,0 +1,25 @@
11.200.0.254 - - [18/Feb/2025:11:52:59 +0000] "GET / HTTP/1.0" 200 10252 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:52:59 +0000] "GET /speedtest.js HTTP/1.0" 200 16969 "https://speed.rgk.fm/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:52:59 +0000] "GET /favicon.ico HTTP/1.0" 200 16958 "https://speed.rgk.fm/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:04 +0000] "GET /speedtest_worker.js?r=0.7351293721344307 HTTP/1.0" 200 28116 "https://speed.rgk.fm/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:04 +0000] "GET /backend/getIP.php?isp=true&distance=km&r=0.8233991322335903 HTTP/1.0" 200 269 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:04 +0000] "GET /backend/empty.php?r=0.7909521890473048 HTTP/1.0" 200 0 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:04 +0000] "GET /backend/empty.php?r=0.47380308899069257 HTTP/1.0" 200 0 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:04 +0000] "GET /backend/empty.php?r=0.8104355913966543 HTTP/1.0" 200 0 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:04 +0000] "GET /backend/empty.php?r=0.360671867804248 HTTP/1.0" 200 0 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:04 +0000] "GET /backend/empty.php?r=0.8185937714940519 HTTP/1.0" 200 0 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:04 +0000] "GET /backend/empty.php?r=0.9544301599061062 HTTP/1.0" 200 0 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:04 +0000] "GET /backend/empty.php?r=0.5857418403791979 HTTP/1.0" 200 0 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:04 +0000] "GET /backend/empty.php?r=0.955275366625701 HTTP/1.0" 200 0 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:04 +0000] "GET /backend/empty.php?r=0.03348617717981095 HTTP/1.0" 200 0 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:04 +0000] "GET /backend/empty.php?r=0.4601854727673702 HTTP/1.0" 200 0 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:18 +0000] "GET /backend/garbage.php?r=0.6668336204777379&ckSize=100 HTTP/1.0" 200 21744584 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:17 +0000] "GET /backend/garbage.php?r=0.507874293950064&ckSize=100 HTTP/1.0" 200 50025928 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:19 +0000] "GET /backend/garbage.php?r=0.26224926580786634&ckSize=100 HTTP/1.0" 200 5893696 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:19 +0000] "GET /backend/garbage.php?r=0.3418228082065937&ckSize=100 HTTP/1.0" 200 24183400 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:21 +0000] "GET /backend/garbage.php?r=0.3697324349037352&ckSize=100 HTTP/1.0" 200 53215744 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:30 +0000] "POST /backend/empty.php?r=0.36074655255261745 HTTP/1.0" 200 0 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:30 +0000] "POST /backend/empty.php?r=0.2513526305942826 HTTP/1.0" 200 0 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:30 +0000] "POST /backend/empty.php?r=0.6721801944736925 HTTP/1.0" 200 0 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:31 +0000] "POST /results/telemetry.php?r=0.7715405757029059 HTTP/1.0" 200 10 "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"
11.200.0.254 - - [18/Feb/2025:11:53:31 +0000] "GET /results/?id=0009tz4 HTTP/1.0" 200 17618 "https://speed.rgk.fm/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 YaBrowser/24.12.0.0 Safari/537.36"

Binary file not shown.

Binary file not shown.

View File

View File

@ -0,0 +1,4 @@
2025/02/18 11:53:30 [error] 256#256: *163 FastCGI sent in stderr: "PHP message: PHP Warning: PHP Request Startup: POST Content-Length of 20971520 bytes exceeds the limit of 8388608 bytes in Unknown on line 0" while reading response header from upstream, client: 11.200.0.254, server: _, request: "POST /backend/empty.php?r=0.36074655255261745 HTTP/1.0", upstream: "fastcgi://127.0.0.1:9000", host: "speed.rgk.fm", referrer: "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307"
2025/02/18 11:53:30 [error] 255#255: *165 FastCGI sent in stderr: "PHP message: PHP Warning: PHP Request Startup: POST Content-Length of 20971520 bytes exceeds the limit of 8388608 bytes in Unknown on line 0" while reading response header from upstream, client: 11.200.0.254, server: _, request: "POST /backend/empty.php?r=0.2513526305942826 HTTP/1.0", upstream: "fastcgi://127.0.0.1:9000", host: "speed.rgk.fm", referrer: "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307"
2025/02/18 11:53:30 [error] 258#258: *164 FastCGI sent in stderr: "PHP message: PHP Warning: PHP Request Startup: POST Content-Length of 20971520 bytes exceeds the limit of 8388608 bytes in Unknown on line 0" while reading response header from upstream, client: 11.200.0.254, server: _, request: "POST /backend/empty.php?r=0.6721801944736925 HTTP/1.0", upstream: "fastcgi://127.0.0.1:9000", host: "speed.rgk.fm", referrer: "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307"
2025/02/18 11:53:31 [error] 258#258: *169 FastCGI sent in stderr: "PHP message: PHP Warning: file_put_contents(/app/www/public/results/idObfuscation_salt.php): Failed to open stream: Permission denied in /app/www/public/results/idObfuscation.php on line 14" while reading response header from upstream, client: 11.200.0.254, server: _, request: "POST /results/telemetry.php?r=0.7715405757029059 HTTP/1.0", upstream: "fastcgi://127.0.0.1:9000", host: "speed.rgk.fm", referrer: "https://speed.rgk.fm/speedtest_worker.js?r=0.7351293721344307"

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,2 @@
[30-Mar-2025 02:00:02] NOTICE: fpm is running, pid 4343
[30-Mar-2025 02:00:02] NOTICE: ready to handle connections

View File

@ -0,0 +1,4 @@
[23-Mar-2025 02:00:02] NOTICE: fpm is running, pid 3473
[23-Mar-2025 02:00:02] NOTICE: ready to handle connections
[30-Mar-2025 02:00:00] NOTICE: Terminating ...
[30-Mar-2025 02:00:00] NOTICE: exiting, bye-bye!

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,13 @@
-----BEGIN DH PARAMETERS-----
MIICCAKCAgEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz
+8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a
87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7
YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi
7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD
ssbzSibBsu/6iGtCOGEfz9zeNVs7ZRkDW7w09N75nAI4YbRvydbmyQd62R0mkff3
7lmMsPrBhtkcrv4TCYUTknC0EwyTvEN5RPT9RFLi103TZPLiHnH1S/9croKrnJ32
nuhtK8UiNjoNq8Uhl5sN6todv5pC1cRITgq80Gv6U93vPBsg7j/VnXwl5B0rZp4e
8W5vUsMWTfT7eTDp5OWIV7asfV9C1p9tGHdjzx1VA0AEh/VbpX4xzHpxNciG77Qx
iu1qHgEtnmgyqQdgCpGBMMRtx3j5ca0AOAkpmaMzy4t6Gh25PXFAADwqTs6p+Y0K
zAqCkc3OyX3Pjsm1Wn+IpGtNtahR9EGC4caKAH5eZV9q//////////8CAQI=
-----END DH PARAMETERS-----

View File

@ -0,0 +1,84 @@
## Version 2024/05/27 - Changelog: https://github.com/linuxserver/docker-baseimage-alpine-nginx/commits/master/root/defaults/nginx/nginx.conf.sample
### Based on alpine defaults
# https://git.alpinelinux.org/aports/tree/main/nginx/nginx.conf?h=3.20-stable
user abc;
# Set number of worker processes automatically based on number of CPU cores.
include /config/nginx/worker_processes.conf;
# Enables the use of JIT for regular expressions to speed-up their processing.
pcre_jit on;
# Configures default error logger.
error_log /config/log/nginx/error.log;
# Includes files with directives to load dynamic modules.
include /etc/nginx/modules/*.conf;
# Include files with config snippets into the root context.
include /etc/nginx/conf.d/*.conf;
events {
# The maximum number of simultaneous connections that can be opened by
# a worker process.
worker_connections 1024;
}
http {
# Includes mapping of file name extensions to MIME types of responses
# and defines the default type.
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Name servers used to resolve names of upstream servers into addresses.
# It's also needed when using tcpsocket and udpsocket in Lua modules.
#resolver 1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001;
include /config/nginx/resolver.conf;
# Don't tell nginx version to the clients. Default is 'on'.
server_tokens off;
# Specifies the maximum accepted body size of a client request, as
# indicated by the request header Content-Length. If the stated content
# length is greater than this size, then the client receives the HTTP
# error code 413. Set to 0 to disable. Default is '1m'.
client_max_body_size 0;
# Sendfile copies data between one FD and other from within the kernel,
# which is more efficient than read() + write(). Default is off.
sendfile on;
# Causes nginx to attempt to send its HTTP response head in one packet,
# instead of using partial frames. Default is 'off'.
tcp_nopush on;
# all ssl related config moved to ssl.conf
# included in server blocks where listen 443 is defined
# Enable gzipping of responses.
#gzip on;
# Set the Vary HTTP header as defined in the RFC 2616. Default is 'off'.
gzip_vary on;
# Helper variable for proxying websockets.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# Enable http2 by default for all servers
http2 on;
# Sets the path, format, and configuration for a buffered log write.
access_log /config/log/nginx/access.log;
# Includes virtual hosts configs.
include /etc/nginx/http.d/*.conf;
include /config/nginx/site-confs/*.conf;
}
daemon off;
pid /run/nginx.pid;

View File

@ -0,0 +1,84 @@
## Version 2024/05/27 - Changelog: https://github.com/linuxserver/docker-baseimage-alpine-nginx/commits/master/root/defaults/nginx/nginx.conf.sample
### Based on alpine defaults
# https://git.alpinelinux.org/aports/tree/main/nginx/nginx.conf?h=3.20-stable
user abc;
# Set number of worker processes automatically based on number of CPU cores.
include /config/nginx/worker_processes.conf;
# Enables the use of JIT for regular expressions to speed-up their processing.
pcre_jit on;
# Configures default error logger.
error_log /config/log/nginx/error.log;
# Includes files with directives to load dynamic modules.
include /etc/nginx/modules/*.conf;
# Include files with config snippets into the root context.
include /etc/nginx/conf.d/*.conf;
events {
# The maximum number of simultaneous connections that can be opened by
# a worker process.
worker_connections 1024;
}
http {
# Includes mapping of file name extensions to MIME types of responses
# and defines the default type.
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Name servers used to resolve names of upstream servers into addresses.
# It's also needed when using tcpsocket and udpsocket in Lua modules.
#resolver 1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001;
include /config/nginx/resolver.conf;
# Don't tell nginx version to the clients. Default is 'on'.
server_tokens off;
# Specifies the maximum accepted body size of a client request, as
# indicated by the request header Content-Length. If the stated content
# length is greater than this size, then the client receives the HTTP
# error code 413. Set to 0 to disable. Default is '1m'.
client_max_body_size 0;
# Sendfile copies data between one FD and other from within the kernel,
# which is more efficient than read() + write(). Default is off.
sendfile on;
# Causes nginx to attempt to send its HTTP response head in one packet,
# instead of using partial frames. Default is 'off'.
tcp_nopush on;
# all ssl related config moved to ssl.conf
# included in server blocks where listen 443 is defined
# Enable gzipping of responses.
#gzip on;
# Set the Vary HTTP header as defined in the RFC 2616. Default is 'off'.
gzip_vary on;
# Helper variable for proxying websockets.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# Enable http2 by default for all servers
http2 on;
# Sets the path, format, and configuration for a buffered log write.
access_log /config/log/nginx/access.log;
# Includes virtual hosts configs.
include /etc/nginx/http.d/*.conf;
include /config/nginx/site-confs/*.conf;
}
daemon off;
pid /run/nginx.pid;

View File

@ -0,0 +1,3 @@
# This file is auto-generated only on first start, based on the container's /etc/resolv.conf file. Feel free to modify it as you wish.
resolver 127.0.0.11 valid=30s;

View File

@ -0,0 +1,44 @@
## Version 2024/07/16 - Changelog: https://github.com/linuxserver/docker-baseimage-alpine-nginx/commits/master/root/defaults/nginx/site-confs/default.conf.sample
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name _;
include /config/nginx/ssl.conf;
set $root /app/www/public;
if (!-d /app/www/public) {
set $root /config/www;
}
root $root;
index index.html index.htm index.php;
location / {
# enable for basic auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
try_files $uri $uri/ /index.html /index.htm /index.php$is_args$args;
}
location ~ ^(.+\.php)(.*)$ {
# enable the next two lines for http auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
fastcgi_split_path_info ^(.+\.php)(.*)$;
if (!-f $document_root$fastcgi_script_name) { return 404; }
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
# deny access to .htaccess/.htpasswd files
location ~ /\.ht {
deny all;
}
}

View File

@ -0,0 +1,44 @@
## Version 2024/07/16 - Changelog: https://github.com/linuxserver/docker-baseimage-alpine-nginx/commits/master/root/defaults/nginx/site-confs/default.conf.sample
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name _;
include /config/nginx/ssl.conf;
set $root /app/www/public;
if (!-d /app/www/public) {
set $root /config/www;
}
root $root;
index index.html index.htm index.php;
location / {
# enable for basic auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
try_files $uri $uri/ /index.html /index.htm /index.php$is_args$args;
}
location ~ ^(.+\.php)(.*)$ {
# enable the next two lines for http auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
fastcgi_split_path_info ^(.+\.php)(.*)$;
if (!-f $document_root$fastcgi_script_name) { return 404; }
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
# deny access to .htaccess/.htpasswd files
location ~ /\.ht {
deny all;
}
}

View File

@ -0,0 +1,39 @@
## Version 2023/08/13 - Changelog: https://github.com/linuxserver/docker-baseimage-alpine-nginx/commits/master/root/defaults/nginx/ssl.conf.sample
### Mozilla Recommendations
# generated 2023-06-25, Mozilla Guideline v5.7, nginx 1.24.0, OpenSSL 3.1.1, intermediate configuration
# https://ssl-config.mozilla.org/#server=nginx&version=1.24.0&config=intermediate&openssl=3.1.1&guideline=5.7
ssl_certificate /config/keys/cert.crt;
ssl_certificate_key /config/keys/cert.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
ssl_dhparam /config/nginx/dhparams.pem;
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
#add_header Strict-Transport-Security "max-age=63072000" always;
# OCSP stapling
#ssl_stapling on;
#ssl_stapling_verify on;
# verify chain of trust of OCSP response using Root CA and Intermediate certs
#ssl_trusted_certificate /config/keys/cert.crt;
# Optional additional headers
#add_header Cache-Control "no-transform" always;
#add_header Content-Security-Policy "upgrade-insecure-requests; frame-ancestors 'self'" always;
#add_header Permissions-Policy "interest-cohort=()" always;
#add_header Referrer-Policy "same-origin" always;
#add_header X-Content-Type-Options "nosniff" always;
#add_header X-Frame-Options "SAMEORIGIN" always;
#add_header X-UA-Compatible "IE=Edge" always;
#add_header X-XSS-Protection "1; mode=block" always;

View File

@ -0,0 +1,39 @@
## Version 2023/08/13 - Changelog: https://github.com/linuxserver/docker-baseimage-alpine-nginx/commits/master/root/defaults/nginx/ssl.conf.sample
### Mozilla Recommendations
# generated 2023-06-25, Mozilla Guideline v5.7, nginx 1.24.0, OpenSSL 3.1.1, intermediate configuration
# https://ssl-config.mozilla.org/#server=nginx&version=1.24.0&config=intermediate&openssl=3.1.1&guideline=5.7
ssl_certificate /config/keys/cert.crt;
ssl_certificate_key /config/keys/cert.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
ssl_dhparam /config/nginx/dhparams.pem;
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
#add_header Strict-Transport-Security "max-age=63072000" always;
# OCSP stapling
#ssl_stapling on;
#ssl_stapling_verify on;
# verify chain of trust of OCSP response using Root CA and Intermediate certs
#ssl_trusted_certificate /config/keys/cert.crt;
# Optional additional headers
#add_header Cache-Control "no-transform" always;
#add_header Content-Security-Policy "upgrade-insecure-requests; frame-ancestors 'self'" always;
#add_header Permissions-Policy "interest-cohort=()" always;
#add_header Referrer-Policy "same-origin" always;
#add_header X-Content-Type-Options "nosniff" always;
#add_header X-Frame-Options "SAMEORIGIN" always;
#add_header X-UA-Compatible "IE=Edge" always;
#add_header X-XSS-Protection "1; mode=block" always;

View File

@ -0,0 +1,3 @@
# This file is auto-generated only on first start, based on the cpu cores detected. Feel free to change it to any other number or to auto to let nginx handle it automatically.
worker_processes 4;

View File

@ -0,0 +1,2 @@
; Edit this file to override php.ini directives

View File

@ -0,0 +1,5 @@
; Edit this file to override www.conf and php-fpm.conf directives and restart the container
; Pool name
[www]

Binary file not shown.

View File

@ -0,0 +1,490 @@
<!DOCTYPE html>
<html>
<head>
<link rel="shortcut icon" href="favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=no" />
<meta charset="UTF-8" />
<script type="text/javascript" src="speedtest.js"></script>
<script type="text/javascript">
function I(i){return document.getElementById(i);}
//LIST OF TEST SERVERS. See documentation for details if needed
var SPEEDTEST_SERVERS=[
{ //this server doesn't actually exist, remove it
name:"Example Server 1", //user friendly name for the server
server:"//test1.mydomain.com/", //URL to the server. // at the beginning will be replaced with http:// or https:// automatically
dlURL:"backend/garbage.php", //path to download test on this server (garbage.php or replacement)
ulURL:"backend/empty.php", //path to upload test on this server (empty.php or replacement)
pingURL:"backend/empty.php", //path to ping/jitter test on this server (empty.php or replacement)
getIpURL:"backend/getIP.php" //path to getIP on this server (getIP.php or replacement)
},
{ //this server doesn't actually exist, remove it
name:"Example Server 2", //user friendly name for the server
server:"//test2.example.com/", //URL to the server. // at the beginning will be replaced with http:// or https:// automatically
dlURL:"garbage.php", //path to download test on this server (garbage.php or replacement)
ulURL:"empty.php", //path to upload test on this server (empty.php or replacement)
pingURL:"empty.php", //path to ping/jitter test on this server (empty.php or replacement)
getIpURL:"getIP.php" //path to getIP on this server (getIP.php or replacement)
}
//add other servers here, comma separated
];
//INITIALIZE SPEEDTEST
var s=new Speedtest(); //create speed test object
s.setParameter("telemetry_level","basic"); //enable telemetry
//SERVER AUTO SELECTION
function initServers(){
var noServersAvailable=function(){
I("message").innerHTML="No servers available";
}
var runServerSelect=function(){
s.selectServer(function(server){
if(server!=null){ //at least 1 server is available
I("loading").className="hidden"; //hide loading message
//populate server list for manual selection
for(var i=0;i<SPEEDTEST_SERVERS.length;i++){
if(SPEEDTEST_SERVERS[i].pingT==-1) continue;
var option=document.createElement("option");
option.value=i;
option.textContent=SPEEDTEST_SERVERS[i].name;
if(SPEEDTEST_SERVERS[i]===server) option.selected=true;
I("server").appendChild(option);
}
//show test UI
I("testWrapper").className="visible";
initUI();
}else{ //no servers are available, the test cannot proceed
noServersAvailable();
}
});
}
if(typeof SPEEDTEST_SERVERS === "string"){
//need to fetch list of servers from specified URL
s.loadServerList(SPEEDTEST_SERVERS,function(servers){
if(servers==null){ //failed to load server list
noServersAvailable();
}else{ //server list loaded
SPEEDTEST_SERVERS=servers;
runServerSelect();
}
});
}else{
//hardcoded server list
s.addTestPoints(SPEEDTEST_SERVERS);
runServerSelect();
}
}
var meterBk=/Trident.*rv:(\d+\.\d+)/i.test(navigator.userAgent)?"#EAEAEA":"#80808040";
var dlColor="#6060AA",
ulColor="#616161";
var progColor=meterBk;
//CODE FOR GAUGES
function drawMeter(c,amount,bk,fg,progress,prog){
var ctx=c.getContext("2d");
var dp=window.devicePixelRatio||1;
var cw=c.clientWidth*dp, ch=c.clientHeight*dp;
var sizScale=ch*0.0055;
if(c.width==cw&&c.height==ch){
ctx.clearRect(0,0,cw,ch);
}else{
c.width=cw;
c.height=ch;
}
ctx.beginPath();
ctx.strokeStyle=bk;
ctx.lineWidth=12*sizScale;
ctx.arc(c.width/2,c.height-58*sizScale,c.height/1.8-ctx.lineWidth,-Math.PI*1.1,Math.PI*0.1);
ctx.stroke();
ctx.beginPath();
ctx.strokeStyle=fg;
ctx.lineWidth=12*sizScale;
ctx.arc(c.width/2,c.height-58*sizScale,c.height/1.8-ctx.lineWidth,-Math.PI*1.1,amount*Math.PI*1.2-Math.PI*1.1);
ctx.stroke();
if(typeof progress !== "undefined"){
ctx.fillStyle=prog;
ctx.fillRect(c.width*0.3,c.height-16*sizScale,c.width*0.4*progress,4*sizScale);
}
}
function mbpsToAmount(s){
return 1-(1/(Math.pow(1.3,Math.sqrt(s))));
}
function format(d){
d=Number(d);
if(d<10) return d.toFixed(2);
if(d<100) return d.toFixed(1);
return d.toFixed(0);
}
//UI CODE
var uiData=null;
function startStop(){
if(s.getState()==3){
//speed test is running, abort
s.abort();
data=null;
I("startStopBtn").className="";
I("server").disabled=false;
initUI();
}else{
//test is not running, begin
I("startStopBtn").className="running";
I("shareArea").style.display="none";
I("server").disabled=true;
s.onupdate=function(data){
uiData=data;
};
s.onend=function(aborted){
I("startStopBtn").className="";
I("server").disabled=false;
updateUI(true);
if(!aborted){
//if testId is present, show sharing panel, otherwise do nothing
try{
var testId=uiData.testId;
if(testId!=null){
var shareURL=window.location.href.substring(0,window.location.href.lastIndexOf("/"))+"/results/?id="+testId;
I("resultsImg").src=shareURL;
I("resultsURL").value=shareURL;
I("testId").innerHTML=testId;
I("shareArea").style.display="";
}
}catch(e){}
}
};
s.start();
}
}
//this function reads the data sent back by the test and updates the UI
function updateUI(forced){
if(!forced&&s.getState()!=3) return;
if(uiData==null) return;
var status=uiData.testState;
I("ip").textContent=uiData.clientIp;
I("dlText").textContent=(status==1&&uiData.dlStatus==0)?"...":format(uiData.dlStatus);
drawMeter(I("dlMeter"),mbpsToAmount(Number(uiData.dlStatus*(status==1?oscillate():1))),meterBk,dlColor,Number(uiData.dlProgress),progColor);
I("ulText").textContent=(status==3&&uiData.ulStatus==0)?"...":format(uiData.ulStatus);
drawMeter(I("ulMeter"),mbpsToAmount(Number(uiData.ulStatus*(status==3?oscillate():1))),meterBk,ulColor,Number(uiData.ulProgress),progColor);
I("pingText").textContent=format(uiData.pingStatus);
I("jitText").textContent=format(uiData.jitterStatus);
}
function oscillate(){
return 1+0.02*Math.sin(Date.now()/100);
}
//update the UI every frame
window.requestAnimationFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||(function(callback,element){setTimeout(callback,1000/60);});
function frame(){
requestAnimationFrame(frame);
updateUI();
}
frame(); //start frame loop
//function to (re)initialize UI
function initUI(){
drawMeter(I("dlMeter"),0,meterBk,dlColor,0);
drawMeter(I("ulMeter"),0,meterBk,ulColor,0);
I("dlText").textContent="";
I("ulText").textContent="";
I("pingText").textContent="";
I("jitText").textContent="";
I("ip").textContent="";
}
</script>
<style type="text/css">
html,body{
border:none; padding:0; margin:0;
background:#FFFFFF;
color:#202020;
}
body{
text-align:center;
font-family:"Roboto",sans-serif;
}
h1{
color:#404040;
}
#loading{
background-color:#FFFFFF;
color:#404040;
text-align:center;
}
span.loadCircle{
display:inline-block;
width:2em;
height:2em;
vertical-align:middle;
background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAP1BMVEUAAAB2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZyFzwnAAAAFHRSTlMAEvRFvX406baecwbf0casimhSHyiwmqgAAADpSURBVHja7dbJbQMxAENRahnN5lkc//5rDRAkDeRgHszXgACJoKiIiIiIiIiIiIiIiIiIiIj4HHspsrpAVhdVVguzrA4OWc10WcEqpwKbnBo0OU1Q5NSpsoJFTgOecrrdEag85DRgktNqfoEdTjnd7hrEHMEJvmRUYJbTYk5Agy6nau6Abp5Cm7mDBtRdPi9gyKdU7w4p1fsLvyqs8hl4z9/w3n/Hmr9WoQ65lAU4d7lMYOz//QboRR5jBZibLMZdAR6O/Vfa1PlxNr3XdS3HzK/HVPRu/KnLs8iAOh993VpRRERERMT/fAN60wwWaVyWwAAAAABJRU5ErkJggg==');
background-size:2em 2em;
margin-right:0.5em;
animation: spin 0.6s linear infinite;
}
@keyframes spin{
0%{transform:rotate(0deg);}
100%{transform:rotate(359deg);}
}
#startStopBtn{
display:inline-block;
margin:0 auto;
color:#6060AA;
background-color:rgba(0,0,0,0);
border:0.15em solid #6060FF;
border-radius:0.3em;
transition:all 0.3s;
box-sizing:border-box;
width:8em; height:3em;
line-height:2.7em;
cursor:pointer;
box-shadow: 0 0 0 rgba(0,0,0,0.1), inset 0 0 0 rgba(0,0,0,0.1);
}
#startStopBtn:hover{
box-shadow: 0 0 2em rgba(0,0,0,0.1), inset 0 0 1em rgba(0,0,0,0.1);
}
#startStopBtn.running{
background-color:#FF3030;
border-color:#FF6060;
color:#FFFFFF;
}
#startStopBtn:before{
content:"Start";
}
#startStopBtn.running:before{
content:"Abort";
}
#serverArea{
margin-top:1em;
}
#server{
font-size:1em;
padding:0.2em;
}
#test{
margin-top:2em;
margin-bottom:12em;
}
div.testArea{
display:inline-block;
width:16em;
height:12.5em;
position:relative;
box-sizing:border-box;
}
div.testArea2{
display:inline-block;
width:14em;
height:7em;
position:relative;
box-sizing:border-box;
text-align:center;
}
div.testArea div.testName{
position:absolute;
top:0.1em; left:0;
width:100%;
font-size:1.4em;
z-index:9;
}
div.testArea2 div.testName{
display:block;
text-align:center;
font-size:1.4em;
}
div.testArea div.meterText{
position:absolute;
bottom:1.55em; left:0;
width:100%;
font-size:2.5em;
z-index:9;
}
div.testArea2 div.meterText{
display:inline-block;
font-size:2.5em;
}
div.meterText:empty:before{
content:"0.00";
}
div.testArea div.unit{
position:absolute;
bottom:2em; left:0;
width:100%;
z-index:9;
}
div.testArea2 div.unit{
display:inline-block;
}
div.testArea canvas{
position:absolute;
top:0; left:0; width:100%; height:100%;
z-index:1;
}
div.testGroup{
display:block;
margin: 0 auto;
}
#shareArea{
width:95%;
max-width:40em;
margin:0 auto;
margin-top:2em;
}
#shareArea > *{
display:block;
width:100%;
height:auto;
margin: 0.25em 0;
}
#privacyPolicy{
position:fixed;
top:2em;
bottom:2em;
left:2em;
right:2em;
overflow-y:auto;
width:auto;
height:auto;
box-shadow:0 0 3em 1em #000000;
z-index:999999;
text-align:left;
background-color:#FFFFFF;
padding:1em;
}
a.privacy{
text-align:center;
font-size:0.8em;
color:#808080;
padding: 0 3em;
}
div.closePrivacyPolicy {
width: 100%;
text-align: center;
}
div.closePrivacyPolicy a.privacy {
padding: 1em 3em;
}
@media all and (max-width:40em){
body{
font-size:0.8em;
}
}
div.visible{
animation: fadeIn 0.4s;
display:block;
}
div.hidden{
animation: fadeOut 0.4s;
display:none;
}
@keyframes fadeIn{
0%{
opacity:0;
}
100%{
opacity:1;
}
}
@keyframes fadeOut{
0%{
display:block;
opacity:1;
}
100%{
display:block;
opacity:0;
}
}
</style>
<title>LibreSpeed Example</title>
</head>
<body onload="initServers()">
<h1>LibreSpeed Example</h1>
<div id="loading" class="visible">
<p id="message"><span class="loadCircle"></span>Selecting a server...</p>
</div>
<div id="testWrapper" class="hidden">
<div id="startStopBtn" onclick="startStop()"></div><br/>
<a class="privacy" href="#" onclick="I('privacyPolicy').style.display=''">Privacy</a>
<div id="serverArea">
Server: <select id="server" onchange="s.setSelectedServer(SPEEDTEST_SERVERS[this.value])"></select>
</div>
<div id="test">
<div class="testGroup">
<div class="testArea2">
<div class="testName">Ping</div>
<div id="pingText" class="meterText" style="color:#AA6060"></div>
<div class="unit">ms</div>
</div>
<div class="testArea2">
<div class="testName">Jitter</div>
<div id="jitText" class="meterText" style="color:#AA6060"></div>
<div class="unit">ms</div>
</div>
</div>
<div class="testGroup">
<div class="testArea">
<div class="testName">Download</div>
<canvas id="dlMeter" class="meter"></canvas>
<div id="dlText" class="meterText"></div>
<div class="unit">Mbit/s</div>
</div>
<div class="testArea">
<div class="testName">Upload</div>
<canvas id="ulMeter" class="meter"></canvas>
<div id="ulText" class="meterText"></div>
<div class="unit">Mbit/s</div>
</div>
</div>
<div id="ipArea">
<span id="ip"></span>
</div>
<div id="shareArea" style="display:none">
<h3>Share results</h3>
<p>Test ID: <span id="testId"></span></p>
<input type="text" value="" id="resultsURL" readonly="readonly" onclick="this.select();this.focus();this.select();document.execCommand('copy');alert('Link copied')"/>
<img src="" id="resultsImg" />
</div>
</div>
<a href="https://github.com/librespeed/speedtest">Source code</a>
</div>
<div id="privacyPolicy" style="display:none">
<h2>Privacy Policy</h2>
<p>This HTML5 speed test server is configured with telemetry enabled.</p>
<h4>What data we collect</h4>
<p>
At the end of the test, the following data is collected and stored:
<ul>
<li>Test ID</li>
<li>Time of testing</li>
<li>Test results (download and upload speed, ping and jitter)</li>
<li>IP address</li>
<li>ISP information</li>
<li>Approximate location (inferred from IP address, not GPS)</li>
<li>User agent and browser locale</li>
<li>Test log (contains no personal information)</li>
</ul>
</p>
<h4>How we use the data</h4>
<p>
Data collected through this service is used to:
<ul>
<li>Allow sharing of test results (sharable image for forums, etc.)</li>
<li>To improve the service offered to you (for instance, to detect problems on our side)</li>
</ul>
No personal information is disclosed to third parties.
</p>
<h4>Your consent</h4>
<p>
By starting the test, you consent to the terms of this privacy policy.
</p>
<h4>Data removal</h4>
<p>
If you want to have your information deleted, you need to provide either the ID of the test or your IP address. This is the only way to identify your data, without this information we won't be able to comply with your request.<br/><br/>
Contact this email address for all deletion requests: <a href="mailto:PUT@YOUR_EMAIL.HERE">TO BE FILLED BY DEVELOPER</a>.
</p>
<br/><br/>
<div class="closePrivacyPolicy">
<a class="privacy" href="#" onclick="I('privacyPolicy').style.display='none'">Close</a>
</div>
<br/>
</div>
</body>
</html>

View File

@ -0,0 +1,245 @@
<!DOCTYPE html>
<html>
<head>
<link rel="shortcut icon" href="favicon.ico">
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=no" />
<title>LibreSpeed Example</title>
<script type="text/javascript" src="speedtest.js"></script>
<script type="text/javascript">
//LIST OF TEST SERVERS. See documentation for details if needed
var SPEEDTEST_SERVERS=[
{ //this server doesn't actually exist, remove it
name:"Example Server 1", //user friendly name for the server
server:"//test1.mydomain.com/", //URL to the server. // at the beginning will be replaced with http:// or https:// automatically
dlURL:"backend/garbage.php", //path to download test on this server (garbage.php or replacement)
ulURL:"backend/empty.php", //path to upload test on this server (empty.php or replacement)
pingURL:"backend/empty.php", //path to ping/jitter test on this server (empty.php or replacement)
getIpURL:"backend/getIP.php" //path to getIP on this server (getIP.php or replacement)
},
{ //this server doesn't actually exist, remove it
name:"Example Server 2", //user friendly name for the server
server:"//test2.example.com/", //URL to the server. // at the beginning will be replaced with http:// or https:// automatically
dlURL:"garbage.php", //path to download test on this server (garbage.php or replacement)
ulURL:"empty.php", //path to upload test on this server (empty.php or replacement)
pingURL:"empty.php", //path to ping/jitter test on this server (empty.php or replacement)
getIpURL:"getIP.php" //path to getIP on this server (getIP.php or replacement)
}
//add other servers here, comma separated
];
//INITIALIZE SPEEDTEST
var s=new Speedtest(); //create speedtest object
s.onupdate=function(data){ //callback to update data in UI
I("ip").textContent=data.clientIp;
I("dlText").textContent=(data.testState==1&&data.dlStatus==0)?"...":data.dlStatus;
I("ulText").textContent=(data.testState==3&&data.ulStatus==0)?"...":data.ulStatus;
I("pingText").textContent=data.pingStatus;
I("jitText").textContent=data.jitterStatus;
}
s.onend=function(aborted){ //callback for test ended/aborted
I("startStopBtn").className=""; //show start button again
if(aborted){ //if the test was aborted, clear the UI and prepare for new test
initUI();
}
}
function selectServer(){ //called after loading server list
s.selectServer(function(server){ //run server selection. When the server has been selected, display it in the UI
if(server==null){
I("serverId").textContent="No servers available";
}else{
I("startStopBtn").style.display=""; //show start/stop button again
I("serverId").textContent=server.name; //show name of test server
}
});
}
function loadServers(){ //called when the page is fully loaded
I("startStopBtn").style.display="none"; //hide start/stop button during server selection
if(typeof SPEEDTEST_SERVERS === "string"){
//load servers from url
s.loadServerList(SPEEDTEST_SERVERS,function(servers){
//list loaded
SPEEDTEST_SERVERS=servers;
selectServer();
});
}else{
//hardcoded list of servers, already loaded
s.addTestPoints(SPEEDTEST_SERVERS);
selectServer();
}
}
function startStop(){ //start/stop button pressed
if(s.getState()==3){
//speedtest is running, abort
s.abort();
}else{
//test is not running, begin
s.start();
I("startStopBtn").className="running";
}
}
//function to (re)initialize UI
function initUI(){
I("dlText").textContent="";
I("ulText").textContent="";
I("pingText").textContent="";
I("jitText").textContent="";
I("ip").textContent="";
}
function I(id){return document.getElementById(id);}
</script>
<style type="text/css">
html,body{
border:none; padding:0; margin:0;
background:#FFFFFF;
color:#202020;
}
body{
text-align:center;
font-family:"Roboto",sans-serif;
}
h1{
color:#404040;
}
#startStopBtn{
display:inline-block;
margin:0 auto;
color:#6060AA;
background-color:rgba(0,0,0,0);
border:0.15em solid #6060FF;
border-radius:0.3em;
transition:all 0.3s;
box-sizing:border-box;
width:8em; height:3em;
line-height:2.7em;
cursor:pointer;
box-shadow: 0 0 0 rgba(0,0,0,0.1), inset 0 0 0 rgba(0,0,0,0.1);
}
#startStopBtn:hover{
box-shadow: 0 0 2em rgba(0,0,0,0.1), inset 0 0 1em rgba(0,0,0,0.1);
}
#startStopBtn.running{
background-color:#FF3030;
border-color:#FF6060;
color:#FFFFFF;
}
#startStopBtn:before{
content:"Start";
}
#startStopBtn.running:before{
content:"Abort";
}
#test{
margin-top:2em;
margin-bottom:12em;
}
div.testArea{
display:inline-block;
width:14em;
height:9em;
position:relative;
box-sizing:border-box;
}
div.testName{
position:absolute;
top:0.1em; left:0;
width:100%;
font-size:1.4em;
z-index:9;
}
div.meterText{
position:absolute;
bottom:1.5em; left:0;
width:100%;
font-size:2.5em;
z-index:9;
}
#dlText{
color:#6060AA;
}
#ulText{
color:#309030;
}
#pingText,#jitText{
color:#AA6060;
}
div.meterText:empty:before{
color:#505050 !important;
content:"0.00";
}
div.unit{
position:absolute;
bottom:2em; left:0;
width:100%;
z-index:9;
}
div.testGroup{
display:inline-block;
}
@media all and (max-width:65em){
body{
font-size:1.5vw;
}
}
@media all and (max-width:40em){
body{
font-size:0.8em;
}
div.testGroup{
display:block;
margin: 0 auto;
}
}
</style>
</head>
<body>
<h1>LibreSpeed Example</h1>
<div id="startStopBtn" onclick="startStop()"></div>
<div id="serverId">Selecting server...</div>
<div id="test">
<div class="testGroup">
<div class="testArea">
<div class="testName">Download</div>
<div id="dlText" class="meterText"></div>
<div class="unit">Mbit/s</div>
</div>
<div class="testArea">
<div class="testName">Upload</div>
<div id="ulText" class="meterText"></div>
<div class="unit">Mbit/s</div>
</div>
</div>
<div class="testGroup">
<div class="testArea">
<div class="testName">Ping</div>
<div id="pingText" class="meterText"></div>
<div class="unit">ms</div>
</div>
<div class="testArea">
<div class="testName">Jitter</div>
<div id="jitText" class="meterText"></div>
<div class="unit">ms</div>
</div>
</div>
<div id="ipArea">
IP Address: <span id="ip"></span>
</div>
</div>
<a href="https://github.com/librespeed/speedtest">Source code</a>
<script type="text/javascript">
initUI();
loadServers();
</script>
</body>
</html>

View File

@ -0,0 +1,38 @@
<!DOCTYPE html>
<html>
<meta charset="UTF-8" />
<head>
<title>LibreSpeed Example</title>
<link rel="shortcut icon" href="favicon.ico">
</head>
<script type="text/javascript" src="speedtest.js"></script>
<body>
<h1>LibreSpeed Example</h1>
<h4>IP Address</h4>
<p id="ip"></p>
<h4>Download</h4>
<p id="download"></p>
<h4>Upload</h4>
<p id="upload"></p>
<h4>Latency</h4>
<p id="ping"></p>
<script type="text/javascript">
var s=new Speedtest();
s.onupdate = function (data) { // when status is received, put the values in the appropriate fields
document.getElementById('download').textContent = data.dlStatus + ' Mbit/s'
document.getElementById('upload').textContent = data.ulStatus + ' Mbit/s'
document.getElementById('ping').textContent = data.pingStatus + ' ms, ' + data.jitterStatus + ' ms jitter'
document.getElementById('ip').textContent = data.clientIp
}
s.start(); // start the speed test with default settings
</script>
<a href="https://github.com/librespeed/speedtest">Source code</a>
</body>
</html>

View File

@ -0,0 +1,256 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>LibreSpeed Example</title>
<link rel="shortcut icon" href="favicon.ico">
<style type="text/css">
html,
body {
margin: 0;
padding: 0;
border: none;
text-align: center;
}
#startBtn {
display: inline-block;
border: 0.15em solid #000000;
padding: 0.3em 0.5em;
margin: 0.6em;
color: #000000;
text-decoration: none;
}
#ip {
margin: 0.8em 0;
font-size: 1.2em;
}
#chart1Area,
#chart2Area {
width: 100%;
max-width: 30em;
height: 10em;
display: block;
margin: 0 auto;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.bundle.min.js"></script> <!--THIS LIBRARY SUCKS!-->
<script src="speedtest.js"></script>
<script type="text/javascript">
var s = null
function runTest() {
var chart1ctx = document.getElementById('chart1Area').getContext('2d')
var chart2ctx = document.getElementById('chart2Area').getContext('2d')
var dlDataset = {
label: 'Download',
fill: false,
lineTension: 0.1,
backgroundColor: 'rgba(75,192,192,0.4)',
borderColor: 'rgba(75,192,192,1)',
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0.0,
borderJoinStyle: 'miter',
pointBorderColor: 'rgba(75,192,192,1)',
pointBackgroundColor: '#fff',
pointBorderWidth: 1,
pointHoverRadius: 5,
pointHoverBackgroundColor: 'rgba(75,192,192,1)',
pointHoverBorderColor: 'rgba(220,220,220,1)',
pointHoverBorderWidth: 2,
pointRadius: 1,
pointHitRadius: 10,
data: [0],
spanGaps: false
}
var ulDataset = {
label: 'Upload',
fill: false,
lineTension: 0.1,
backgroundColor: 'rgba(192,192,75,0.4)',
borderColor: 'rgba(192,192,75,1)',
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0.0,
borderJoinStyle: 'miter',
pointBorderColor: 'rgba(192,192,75,1)',
pointBackgroundColor: '#fff',
pointBorderWidth: 1,
pointHoverRadius: 5,
pointHoverBackgroundColor: 'rgba(192,192,75,1)',
pointHoverBorderColor: 'rgba(220,220,220,1)',
pointHoverBorderWidth: 2,
pointRadius: 1,
pointHitRadius: 10,
data: [0],
spanGaps: false
}
var pingDataset = {
label: 'Ping',
fill: false,
lineTension: 0.1,
backgroundColor: 'rgba(75,220,75,0.4)',
borderColor: 'rgba(75,220,75,1)',
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0.0,
borderJoinStyle: 'miter',
pointBorderColor: 'rgba(75,220,75,1)',
pointBackgroundColor: '#fff',
pointBorderWidth: 1,
pointHoverRadius: 5,
pointHoverBackgroundColor: 'rgba(75,220,75,1)',
pointHoverBorderColor: 'rgba(220,220,220,1)',
pointHoverBorderWidth: 2,
pointRadius: 1,
pointHitRadius: 10,
data: [],
spanGaps: false
}
var jitterDataset = {
label: 'Jitter',
fill: false,
lineTension: 0.1,
backgroundColor: 'rgba(220,75,75,0.4)',
borderColor: 'rgba(220,75,75,1)',
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0.0,
borderJoinStyle: 'miter',
pointBorderColor: 'rgba(220,75,75,1)',
pointBackgroundColor: '#fff',
pointBorderWidth: 1,
pointHoverRadius: 5,
pointHoverBackgroundColor: 'rgba(220,75,75,1)',
pointHoverBorderColor: 'rgba(220,220,220,1)',
pointHoverBorderWidth: 2,
pointRadius: 1,
pointHitRadius: 10,
data: [],
spanGaps: false
}
var chart1Options = {
type: 'line',
data: {
datasets: [dlDataset, ulDataset]
},
options: {
responsive: true,
legend: {
position: 'bottom'
},
scales: {
xAxes: [{
display: true,
scaleLabel: {
display: false
},
ticks: {
beginAtZero: true
}
}],
yAxes: [{
display: true,
scaleLabel: 'Speed',
ticks: {
beginAtZero: true
}
}]
}
}
}
var chart2Options = {
type: 'line',
data: {
datasets: [pingDataset, jitterDataset]
},
options: {
responsive: true,
legend: {
position: 'bottom'
},
scales: {
xAxes: [{
display: true,
scaleLabel: {
display: false
},
ticks: {
beginAtZero: true
}
}],
yAxes: [{
display: true,
scaleLabel: 'Latency',
ticks: {
beginAtZero: true
}
}]
}
}
}
var chart1 = new Chart(chart1ctx, chart1Options)
var chart2 = new Chart(chart2ctx, chart2Options)
document.getElementById('startBtn').style.display = 'none'
document.getElementById('testArea').style.display = ''
document.getElementById('abortBtn').style.display = ''
s=new Speedtest();
s.onupdate = function (data) {
var status = data.testState
if (status === 1 && Number(data.dlStatus) > 0) {
for(var i=~~(20*Number(data.dlProgress));i<20;i++) chart1.data.datasets[0].data[i]=(Number(data.dlStatus))
chart1.data.labels[chart1.data.datasets[0].data.length - 1] = ''
chart1.update()
}
if (status === 3 && Number(data.ulStatus) > 0) {
for(var i=~~(20*Number(data.ulProgress));i<20;i++) chart1.data.datasets[1].data[i]=(Number(data.ulStatus))
chart1.data.labels[chart1.data.datasets[1].data.length - 1] = ''
chart1.update()
}
if (status === 2 && Number(data.pingStatus) > 0) {
chart2.data.datasets[0].data.push(Number(data.pingStatus))
chart2.data.datasets[1].data.push(Number(data.jitterStatus))
chart2.data.labels[chart2.data.datasets[0].data.length - 1] = ''
chart2.data.labels[chart2.data.datasets[1].data.length - 1] = ''
chart2.update()
}
ip.textContent = data.clientIp
}
s.onend=function(aborted){
document.getElementById('abortBtn').style.display = 'none'
document.getElementById('startBtn').style.display = ''
s = null
if (aborted) {
document.getElementById('testArea').style.display = 'none'
}
}
s.start();
}
function abortTest() {
if (s) s.abort();
}
</script>
</head>
<body>
<h1>LibreSpeed - Chart.js example</h1>
<div id="testArea" style="display:none">
<p id="ip">Please wait...</p>
<h2>Speed</h2>
<canvas id="chart1Area"></canvas>
<h2>Latency</h2>
<canvas id="chart2Area"></canvas>
<br/>
<a href="javascript:abortTest()" id="abortBtn">Abort</a>
</div>
<a href="javascript:runTest()" id="startBtn">Run speed test</a>
<br/><br/> Charts by <a href="http://www.chartjs.org/">Chart.js</a><br/><br/><a href="https://github.com/librespeed/speedtest">Source code</a>
</body>
</html>

View File

@ -0,0 +1,174 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=no" />
<title>LibreSpeed Example</title>
<link rel="shortcut icon" href="favicon.ico">
<script type="text/javascript" src="speedtest.js"></script>
<script type="text/javascript">
//INITIALIZE SPEEDTEST
var s=new Speedtest(); //create speedtest object
//CUSTOM SETTINGS HERE
s.setParameter("test_order","D_U"); //we only want download and upload test
s.setParameter("time_auto",false); //fixed duration for tests
s.setParameter("time_dl_max",10); //10 seconds for the download test
s.setParameter("time_ul_max",15); //15 seconds for the upload test
//END OF CUSTOM SETTINGS
s.onupdate=function(data){ //callback to update data in UI
I("dlText").textContent=(data.testState==1&&data.dlStatus==0)?"...":data.dlStatus;
I("ulText").textContent=(data.testState==3&&data.ulStatus==0)?"...":data.ulStatus;
}
s.onend=function(aborted){ //callback for test ended/aborted
I("startStopBtn").className=""; //show start button again
if(aborted){ //if the test was aborted, clear the UI and prepare for new test
initUI();
}
}
function startStop(){ //start/stop button pressed
if(s.getState()==3){
//speedtest is running, abort
s.abort();
}else{
//test is not running, begin
s.start();
I("startStopBtn").className="running";
}
}
//function to (re)initialize UI
function initUI(){
I("dlText").textContent="";
I("ulText").textContent="";
}
function I(id){return document.getElementById(id);}
</script>
<style type="text/css">
html,body{
border:none; padding:0; margin:0;
background:#FFFFFF;
color:#202020;
}
body{
text-align:center;
font-family:"Roboto",sans-serif;
}
h1{
color:#404040;
}
#startStopBtn{
display:inline-block;
margin:0 auto;
color:#6060AA;
background-color:rgba(0,0,0,0);
border:0.15em solid #6060FF;
border-radius:0.3em;
transition:all 0.3s;
box-sizing:border-box;
width:8em; height:3em;
line-height:2.7em;
cursor:pointer;
box-shadow: 0 0 0 rgba(0,0,0,0.1), inset 0 0 0 rgba(0,0,0,0.1);
}
#startStopBtn:hover{
box-shadow: 0 0 2em rgba(0,0,0,0.1), inset 0 0 1em rgba(0,0,0,0.1);
}
#startStopBtn.running{
background-color:#FF3030;
border-color:#FF6060;
color:#FFFFFF;
}
#startStopBtn:before{
content:"Start";
}
#startStopBtn.running:before{
content:"Abort";
}
#test{
margin-top:2em;
margin-bottom:12em;
}
div.testArea{
display:inline-block;
width:14em;
height:9em;
position:relative;
box-sizing:border-box;
}
div.testName{
position:absolute;
top:0.1em; left:0;
width:100%;
font-size:1.4em;
z-index:9;
}
div.meterText{
position:absolute;
bottom:1.5em; left:0;
width:100%;
font-size:2.5em;
z-index:9;
}
#dlText{
color:#6060AA;
}
#ulText{
color:#309030;
}
div.meterText:empty:before{
color:#505050 !important;
content:"0.00";
}
div.unit{
position:absolute;
bottom:2em; left:0;
width:100%;
z-index:9;
}
div.testGroup{
display:inline-block;
}
@media all and (max-width:65em){
body{
font-size:2vw;
}
}
@media all and (max-width:40em){
body{
font-size:0.8em;
}
div.testGroup{
display:block;
margin: 0 auto;
}
}
</style>
</head>
<body>
<h1>LibreSpeed Example</h1>
<div id="startStopBtn" onclick="startStop()"></div>
<div id="test">
<div class="testGroup">
<div class="testArea">
<div class="testName">Download</div>
<div id="dlText" class="meterText"></div>
<div class="unit">Mbit/s</div>
</div>
<div class="testArea">
<div class="testName">Upload</div>
<div id="ulText" class="meterText"></div>
<div class="unit">Mbit/s</div>
</div>
</div>
</div>
<a href="https://github.com/librespeed/speedtest">Source code</a>
<script type="text/javascript">
initUI();
</script>
</body>
</html>

View File

@ -0,0 +1,262 @@
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=no" />
<meta charset="UTF-8" />
<link rel="shortcut icon" href="favicon.ico">
<script type="text/javascript" src="speedtest.js"></script>
<script type="text/javascript">
function I(i){return document.getElementById(i);}
//INITIALIZE SPEEDTEST
var s=new Speedtest(); //create speedtest object
var meterBk=/Trident.*rv:(\d+\.\d+)/i.test(navigator.userAgent)?"#EAEAEA":"#80808040";
var dlColor="#6060AA",
ulColor="#616161";
var progColor=meterBk;
//CODE FOR GAUGES
function drawMeter(c,amount,bk,fg,progress,prog){
var ctx=c.getContext("2d");
var dp=window.devicePixelRatio||1;
var cw=c.clientWidth*dp, ch=c.clientHeight*dp;
var sizScale=ch*0.0055;
if(c.width==cw&&c.height==ch){
ctx.clearRect(0,0,cw,ch);
}else{
c.width=cw;
c.height=ch;
}
ctx.beginPath();
ctx.strokeStyle=bk;
ctx.lineWidth=12*sizScale;
ctx.arc(c.width/2,c.height-58*sizScale,c.height/1.8-ctx.lineWidth,-Math.PI*1.1,Math.PI*0.1);
ctx.stroke();
ctx.beginPath();
ctx.strokeStyle=fg;
ctx.lineWidth=12*sizScale;
ctx.arc(c.width/2,c.height-58*sizScale,c.height/1.8-ctx.lineWidth,-Math.PI*1.1,amount*Math.PI*1.2-Math.PI*1.1);
ctx.stroke();
if(typeof progress !== "undefined"){
ctx.fillStyle=prog;
ctx.fillRect(c.width*0.3,c.height-16*sizScale,c.width*0.4*progress,4*sizScale);
}
}
function mbpsToAmount(s){
return 1-(1/(Math.pow(1.3,Math.sqrt(s))));
}
function format(d){
d=Number(d);
if(d<10) return d.toFixed(2);
if(d<100) return d.toFixed(1);
return d.toFixed(0);
}
//UI CODE
var uiData=null;
function startStop(){
if(s.getState()==3){
//speedtest is running, abort
s.abort();
data=null;
I("startStopBtn").className="";
initUI();
}else{
//test is not running, begin
I("startStopBtn").className="running";
s.onupdate=function(data){
uiData=data;
};
s.onend=function(aborted){
I("startStopBtn").className="";
updateUI(true);
};
s.start();
}
}
//this function reads the data sent back by the test and updates the UI
function updateUI(forced){
if(!forced&&s.getState()!=3) return;
if(uiData==null) return;
var status=uiData.testState;
I("ip").textContent=uiData.clientIp;
I("dlText").textContent=(status==1&&uiData.dlStatus==0)?"...":format(uiData.dlStatus);
drawMeter(I("dlMeter"),mbpsToAmount(Number(uiData.dlStatus*(status==1?oscillate():1))),meterBk,dlColor,Number(uiData.dlProgress),progColor);
I("ulText").textContent=(status==3&&uiData.ulStatus==0)?"...":format(uiData.ulStatus);
drawMeter(I("ulMeter"),mbpsToAmount(Number(uiData.ulStatus*(status==3?oscillate():1))),meterBk,ulColor,Number(uiData.ulProgress),progColor);
I("pingText").textContent=format(uiData.pingStatus);
I("jitText").textContent=format(uiData.jitterStatus);
}
function oscillate(){
return 1+0.02*Math.sin(Date.now()/100);
}
//update the UI every frame
window.requestAnimationFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||(function(callback,element){setTimeout(callback,1000/60);});
function frame(){
requestAnimationFrame(frame);
updateUI();
}
frame(); //start frame loop
//function to (re)initialize UI
function initUI(){
drawMeter(I("dlMeter"),0,meterBk,dlColor,0);
drawMeter(I("ulMeter"),0,meterBk,ulColor,0);
I("dlText").textContent="";
I("ulText").textContent="";
I("pingText").textContent="";
I("jitText").textContent="";
I("ip").textContent="";
}
</script>
<style type="text/css">
html,body{
border:none; padding:0; margin:0;
background:#FFFFFF;
color:#202020;
}
body{
text-align:center;
font-family:"Roboto",sans-serif;
}
h1{
color:#404040;
}
#startStopBtn{
display:inline-block;
margin:0 auto;
color:#6060AA;
background-color:rgba(0,0,0,0);
border:0.15em solid #6060FF;
border-radius:0.3em;
transition:all 0.3s;
box-sizing:border-box;
width:8em; height:3em;
line-height:2.7em;
cursor:pointer;
box-shadow: 0 0 0 rgba(0,0,0,0.1), inset 0 0 0 rgba(0,0,0,0.1);
}
#startStopBtn:hover{
box-shadow: 0 0 2em rgba(0,0,0,0.1), inset 0 0 1em rgba(0,0,0,0.1);
}
#startStopBtn.running{
background-color:#FF3030;
border-color:#FF6060;
color:#FFFFFF;
}
#startStopBtn:before{
content:"Start";
}
#startStopBtn.running:before{
content:"Abort";
}
#test{
margin-top:2em;
margin-bottom:12em;
}
div.testArea{
display:inline-block;
width:16em;
height:12.5em;
position:relative;
box-sizing:border-box;
}
div.testArea2{
display:inline-block;
width:14em;
height:7em;
position:relative;
box-sizing:border-box;
text-align:center;
}
div.testArea div.testName{
position:absolute;
top:0.1em; left:0;
width:100%;
font-size:1.4em;
z-index:9;
}
div.testArea2 div.testName{
display:block;
text-align:center;
font-size:1.4em;
}
div.testArea div.meterText{
position:absolute;
bottom:1.55em; left:0;
width:100%;
font-size:2.5em;
z-index:9;
}
div.testArea2 div.meterText{
display:inline-block;
font-size:2.5em;
}
div.meterText:empty:before{
content:"0.00";
}
div.testArea div.unit{
position:absolute;
bottom:2em; left:0;
width:100%;
z-index:9;
}
div.testArea2 div.unit{
display:inline-block;
}
div.testArea canvas{
position:absolute;
top:0; left:0; width:100%; height:100%;
z-index:1;
}
div.testGroup{
display:block;
margin: 0 auto;
}
@media all and (max-width:40em){
body{
font-size:0.8em;
}
}
</style>
<title>LibreSpeed Example</title>
</head>
<body>
<h1>LibreSpeed Example</h1>
<div id="testWrapper">
<div id="startStopBtn" onclick="startStop()"></div>
<div id="test">
<div class="testGroup">
<div class="testArea2">
<div class="testName">Ping</div>
<div id="pingText" class="meterText" style="color:#AA6060"></div>
<div class="unit">ms</div>
</div>
<div class="testArea2">
<div class="testName">Jitter</div>
<div id="jitText" class="meterText" style="color:#AA6060"></div>
<div class="unit">ms</div>
</div>
</div>
<div class="testGroup">
<div class="testArea">
<div class="testName">Download</div>
<canvas id="dlMeter" class="meter"></canvas>
<div id="dlText" class="meterText"></div>
<div class="unit">Mbit/s</div>
</div>
<div class="testArea">
<div class="testName">Upload</div>
<canvas id="ulMeter" class="meter"></canvas>
<div id="ulText" class="meterText"></div>
<div class="unit">Mbit/s</div>
</div>
</div>
<div id="ipArea">
<span id="ip"></span>
</div>
</div>
<a href="https://github.com/librespeed/speedtest">Source code</a>
</div>
<script type="text/javascript">setTimeout(function(){initUI()},100);</script>
</body>
</html>

View File

@ -0,0 +1,192 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=no" />
<title>LibreSpeed Example</title>
<link rel="shortcut icon" href="favicon.ico">
<script type="text/javascript" src="speedtest.js"></script>
<script type="text/javascript">
//INITIALIZE SPEEDTEST
var s=new Speedtest(); //create speedtest object
s.onupdate=function(data){ //callback to update data in UI
I("ip").textContent=data.clientIp;
I("dlText").textContent=(data.testState==1&&data.dlStatus==0)?"...":data.dlStatus;
I("ulText").textContent=(data.testState==3&&data.ulStatus==0)?"...":data.ulStatus;
I("pingText").textContent=data.pingStatus;
I("jitText").textContent=data.jitterStatus;
}
s.onend=function(aborted){ //callback for test ended/aborted
I("startStopBtn").className=""; //show start button again
if(aborted){ //if the test was aborted, clear the UI and prepare for new test
initUI();
}
}
function startStop(){ //start/stop button pressed
if(s.getState()==3){
//speedtest is running, abort
s.abort();
}else{
//test is not running, begin
s.start();
I("startStopBtn").className="running";
}
}
//function to (re)initialize UI
function initUI(){
I("dlText").textContent="";
I("ulText").textContent="";
I("pingText").textContent="";
I("jitText").textContent="";
I("ip").textContent="";
}
function I(id){return document.getElementById(id);}
</script>
<style type="text/css">
html,body{
border:none; padding:0; margin:0;
background:#FFFFFF;
color:#202020;
}
body{
text-align:center;
font-family:"Roboto",sans-serif;
}
h1{
color:#404040;
}
#startStopBtn{
display:inline-block;
margin:0 auto;
color:#6060AA;
background-color:rgba(0,0,0,0);
border:0.15em solid #6060FF;
border-radius:0.3em;
transition:all 0.3s;
box-sizing:border-box;
width:8em; height:3em;
line-height:2.7em;
cursor:pointer;
box-shadow: 0 0 0 rgba(0,0,0,0.1), inset 0 0 0 rgba(0,0,0,0.1);
}
#startStopBtn:hover{
box-shadow: 0 0 2em rgba(0,0,0,0.1), inset 0 0 1em rgba(0,0,0,0.1);
}
#startStopBtn.running{
background-color:#FF3030;
border-color:#FF6060;
color:#FFFFFF;
}
#startStopBtn:before{
content:"Start";
}
#startStopBtn.running:before{
content:"Abort";
}
#test{
margin-top:2em;
margin-bottom:12em;
}
div.testArea{
display:inline-block;
width:14em;
height:9em;
position:relative;
box-sizing:border-box;
}
div.testName{
position:absolute;
top:0.1em; left:0;
width:100%;
font-size:1.4em;
z-index:9;
}
div.meterText{
position:absolute;
bottom:1.5em; left:0;
width:100%;
font-size:2.5em;
z-index:9;
}
#dlText{
color:#6060AA;
}
#ulText{
color:#309030;
}
#pingText,#jitText{
color:#AA6060;
}
div.meterText:empty:before{
color:#505050 !important;
content:"0.00";
}
div.unit{
position:absolute;
bottom:2em; left:0;
width:100%;
z-index:9;
}
div.testGroup{
display:inline-block;
}
@media all and (max-width:65em){
body{
font-size:1.5vw;
}
}
@media all and (max-width:40em){
body{
font-size:0.8em;
}
div.testGroup{
display:block;
margin: 0 auto;
}
}
</style>
</head>
<body>
<h1>LibreSpeed Example</h1>
<div id="startStopBtn" onclick="startStop()"></div>
<div id="test">
<div class="testGroup">
<div class="testArea">
<div class="testName">Download</div>
<div id="dlText" class="meterText"></div>
<div class="unit">Mbit/s</div>
</div>
<div class="testArea">
<div class="testName">Upload</div>
<div id="ulText" class="meterText"></div>
<div class="unit">Mbit/s</div>
</div>
</div>
<div class="testGroup">
<div class="testArea">
<div class="testName">Ping</div>
<div id="pingText" class="meterText"></div>
<div class="unit">ms</div>
</div>
<div class="testArea">
<div class="testName">Jitter</div>
<div id="jitText" class="meterText"></div>
<div class="unit">ms</div>
</div>
</div>
<div id="ipArea">
IP Address: <span id="ip"></span>
</div>
</div>
<a href="https://github.com/librespeed/speedtest">Source code</a>
<script type="text/javascript">
initUI();
</script>
</body>
</html>

View File

@ -0,0 +1,212 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=no" />
<title>LibreSpeed Example</title>
<link rel="shortcut icon" href="favicon.ico">
<script type="text/javascript" src="speedtest.js"></script>
<script type="text/javascript">
//INITIALIZE SPEEDTEST
var s=new Speedtest(); //create speedtest object
s.onupdate=function(data){ //callback to update data in UI
I("ip").textContent=data.clientIp;
I("dlText").textContent=(data.testState==1&&data.dlStatus==0)?"...":data.dlStatus;
I("ulText").textContent=(data.testState==3&&data.ulStatus==0)?"...":data.ulStatus;
I("pingText").textContent=data.pingStatus;
I("jitText").textContent=data.jitterStatus;
var prog=(Number(data.dlProgress)*2+Number(data.ulProgress)*2+Number(data.pingProgress))/5;
I("progress").style.width=(100*prog)+"%";
}
s.onend=function(aborted){ //callback for test ended/aborted
I("startStopBtn").className=""; //show start button again
if(aborted){ //if the test was aborted, clear the UI and prepare for new test
initUI();
}
}
function startStop(){ //start/stop button pressed
if(s.getState()==3){
//speedtest is running, abort
s.abort();
}else{
//test is not running, begin
s.start();
I("startStopBtn").className="running";
}
}
//function to (re)initialize UI
function initUI(){
I("dlText").textContent="";
I("ulText").textContent="";
I("pingText").textContent="";
I("jitText").textContent="";
I("ip").textContent="";
}
function I(id){return document.getElementById(id);}
</script>
<style type="text/css">
html,body{
border:none; padding:0; margin:0;
background:#FFFFFF;
color:#202020;
}
body{
text-align:center;
font-family:"Roboto",sans-serif;
}
h1{
color:#404040;
}
#startStopBtn{
display:inline-block;
margin:0 auto;
color:#6060AA;
background-color:rgba(0,0,0,0);
border:0.15em solid #6060FF;
border-radius:0.3em;
transition:all 0.3s;
box-sizing:border-box;
width:8em; height:3em;
line-height:2.7em;
cursor:pointer;
box-shadow: 0 0 0 rgba(0,0,0,0.1), inset 0 0 0 rgba(0,0,0,0.1);
}
#startStopBtn:hover{
box-shadow: 0 0 2em rgba(0,0,0,0.1), inset 0 0 1em rgba(0,0,0,0.1);
}
#startStopBtn.running{
background-color:#FF3030;
border-color:#FF6060;
color:#FFFFFF;
}
#startStopBtn:before{
content:"Start";
}
#startStopBtn.running:before{
content:"Abort";
}
#test{
margin-top:2em;
margin-bottom:12em;
}
div.testArea{
display:inline-block;
width:14em;
height:9em;
position:relative;
box-sizing:border-box;
}
div.testName{
position:absolute;
top:0.1em; left:0;
width:100%;
font-size:1.4em;
z-index:9;
}
div.meterText{
position:absolute;
bottom:1.5em; left:0;
width:100%;
font-size:2.5em;
z-index:9;
}
#dlText{
color:#6060AA;
}
#ulText{
color:#309030;
}
#pingText,#jitText{
color:#AA6060;
}
div.meterText:empty:before{
color:#505050 !important;
content:"0.00";
}
div.unit{
position:absolute;
bottom:2em; left:0;
width:100%;
z-index:9;
}
div.testGroup{
display:inline-block;
}
@media all and (max-width:65em){
body{
font-size:1.5vw;
}
}
@media all and (max-width:40em){
body{
font-size:0.8em;
}
div.testGroup{
display:block;
margin: 0 auto;
}
}
#progressBar{
width:90%;
height:0.3em;
background-color:#EEEEEE;
position:relative;
display:block;
margin:0 auto;
margin-bottom:2em;
}
#progress{
position:absolute;
top:0; left:0;
height:100%;
width:0%;
transition: width 2s;
background-color:#90BBFF;
}
</style>
</head>
<body>
<h1>LibreSpeed Example</h1>
<div id="startStopBtn" onclick="startStop()"></div>
<div id="test">
<div id="progressBar"><div id="progress"></div></div>
<div class="testGroup">
<div class="testArea">
<div class="testName">Download</div>
<div id="dlText" class="meterText"></div>
<div class="unit">Mbit/s</div>
</div>
<div class="testArea">
<div class="testName">Upload</div>
<div id="ulText" class="meterText"></div>
<div class="unit">Mbit/s</div>
</div>
</div>
<div class="testGroup">
<div class="testArea">
<div class="testName">Ping</div>
<div id="pingText" class="meterText"></div>
<div class="unit">ms</div>
</div>
<div class="testArea">
<div class="testName">Jitter</div>
<div id="jitText" class="meterText"></div>
<div class="unit">ms</div>
</div>
</div>
<div id="ipArea">
IP Address: <span id="ip"></span>
</div>
</div>
<a href="https://github.com/librespeed/speedtest">Source code</a>
<script type="text/javascript">
initUI();
</script>
</body>
</html>

View File

@ -0,0 +1,352 @@
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=no" />
<meta charset="UTF-8" />
<link rel="shortcut icon" href="favicon.ico">
<script type="text/javascript" src="speedtest.js"></script>
<script type="text/javascript">
function I(i){return document.getElementById(i);}
//INITIALIZE SPEEDTEST
var s=new Speedtest(); //create speedtest object
s.setParameter("telemetry_level","basic"); //enable telemetry
var meterBk=/Trident.*rv:(\d+\.\d+)/i.test(navigator.userAgent)?"#EAEAEA":"#80808040";
var dlColor="#6060AA",
ulColor="#616161";
var progColor=meterBk;
//CODE FOR GAUGES
function drawMeter(c,amount,bk,fg,progress,prog){
var ctx=c.getContext("2d");
var dp=window.devicePixelRatio||1;
var cw=c.clientWidth*dp, ch=c.clientHeight*dp;
var sizScale=ch*0.0055;
if(c.width==cw&&c.height==ch){
ctx.clearRect(0,0,cw,ch);
}else{
c.width=cw;
c.height=ch;
}
ctx.beginPath();
ctx.strokeStyle=bk;
ctx.lineWidth=12*sizScale;
ctx.arc(c.width/2,c.height-58*sizScale,c.height/1.8-ctx.lineWidth,-Math.PI*1.1,Math.PI*0.1);
ctx.stroke();
ctx.beginPath();
ctx.strokeStyle=fg;
ctx.lineWidth=12*sizScale;
ctx.arc(c.width/2,c.height-58*sizScale,c.height/1.8-ctx.lineWidth,-Math.PI*1.1,amount*Math.PI*1.2-Math.PI*1.1);
ctx.stroke();
if(typeof progress !== "undefined"){
ctx.fillStyle=prog;
ctx.fillRect(c.width*0.3,c.height-16*sizScale,c.width*0.4*progress,4*sizScale);
}
}
function mbpsToAmount(s){
return 1-(1/(Math.pow(1.3,Math.sqrt(s))));
}
function format(d){
d=Number(d);
if(d<10) return d.toFixed(2);
if(d<100) return d.toFixed(1);
return d.toFixed(0);
}
//UI CODE
var uiData=null;
function startStop(){
if(s.getState()==3){
//speedtest is running, abort
s.abort();
data=null;
I("startStopBtn").className="";
initUI();
}else{
//test is not running, begin
I("startStopBtn").className="running";
I("shareArea").style.display="none";
s.onupdate=function(data){
uiData=data;
};
s.onend=function(aborted){
I("startStopBtn").className="";
updateUI(true);
if(!aborted){
//if testId is present, show sharing panel, otherwise do nothing
try{
var testId=uiData.testId;
if(testId!=null){
var shareURL=window.location.href.substring(0,window.location.href.lastIndexOf("/"))+"/results/?id="+testId;
I("resultsImg").src=shareURL;
I("resultsURL").value=shareURL;
I("testId").innerHTML=testId;
I("shareArea").style.display="";
}
}catch(e){}
}
};
s.start();
}
}
//this function reads the data sent back by the test and updates the UI
function updateUI(forced){
if(!forced&&s.getState()!=3) return;
if(uiData==null) return;
var status=uiData.testState;
I("ip").textContent=uiData.clientIp;
I("dlText").textContent=(status==1&&uiData.dlStatus==0)?"...":format(uiData.dlStatus);
drawMeter(I("dlMeter"),mbpsToAmount(Number(uiData.dlStatus*(status==1?oscillate():1))),meterBk,dlColor,Number(uiData.dlProgress),progColor);
I("ulText").textContent=(status==3&&uiData.ulStatus==0)?"...":format(uiData.ulStatus);
drawMeter(I("ulMeter"),mbpsToAmount(Number(uiData.ulStatus*(status==3?oscillate():1))),meterBk,ulColor,Number(uiData.ulProgress),progColor);
I("pingText").textContent=format(uiData.pingStatus);
I("jitText").textContent=format(uiData.jitterStatus);
}
function oscillate(){
return 1+0.02*Math.sin(Date.now()/100);
}
//update the UI every frame
window.requestAnimationFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||(function(callback,element){setTimeout(callback,1000/60);});
function frame(){
requestAnimationFrame(frame);
updateUI();
}
frame(); //start frame loop
//function to (re)initialize UI
function initUI(){
drawMeter(I("dlMeter"),0,meterBk,dlColor,0);
drawMeter(I("ulMeter"),0,meterBk,ulColor,0);
I("dlText").textContent="";
I("ulText").textContent="";
I("pingText").textContent="";
I("jitText").textContent="";
I("ip").textContent="";
}
</script>
<style type="text/css">
html,body{
border:none; padding:0; margin:0;
background:#FFFFFF;
color:#202020;
}
body{
text-align:center;
font-family:"Roboto",sans-serif;
}
h1{
color:#404040;
}
#startStopBtn{
display:inline-block;
margin:0 auto;
color:#6060AA;
background-color:rgba(0,0,0,0);
border:0.15em solid #6060FF;
border-radius:0.3em;
transition:all 0.3s;
box-sizing:border-box;
width:8em; height:3em;
line-height:2.7em;
cursor:pointer;
box-shadow: 0 0 0 rgba(0,0,0,0.1), inset 0 0 0 rgba(0,0,0,0.1);
}
#startStopBtn:hover{
box-shadow: 0 0 2em rgba(0,0,0,0.1), inset 0 0 1em rgba(0,0,0,0.1);
}
#startStopBtn.running{
background-color:#FF3030;
border-color:#FF6060;
color:#FFFFFF;
}
#startStopBtn:before{
content:"Start";
}
#startStopBtn.running:before{
content:"Abort";
}
#test{
margin-top:2em;
margin-bottom:12em;
}
div.testArea{
display:inline-block;
width:16em;
height:12.5em;
position:relative;
box-sizing:border-box;
}
div.testArea2{
display:inline-block;
width:14em;
height:7em;
position:relative;
box-sizing:border-box;
text-align:center;
}
div.testArea div.testName{
position:absolute;
top:0.1em; left:0;
width:100%;
font-size:1.4em;
z-index:9;
}
div.testArea2 div.testName{
display:block;
text-align:center;
font-size:1.4em;
}
div.testArea div.meterText{
position:absolute;
bottom:1.55em; left:0;
width:100%;
font-size:2.5em;
z-index:9;
}
div.testArea2 div.meterText{
display:inline-block;
font-size:2.5em;
}
div.meterText:empty:before{
content:"0.00";
}
div.testArea div.unit{
position:absolute;
bottom:2em; left:0;
width:100%;
z-index:9;
}
div.testArea2 div.unit{
display:inline-block;
}
div.testArea canvas{
position:absolute;
top:0; left:0; width:100%; height:100%;
z-index:1;
}
div.testGroup{
display:block;
margin: 0 auto;
}
#shareArea{
width:95%;
max-width:40em;
margin:0 auto;
margin-top:2em;
}
#shareArea > *{
display:block;
width:100%;
height:auto;
margin: 0.25em 0;
}
#privacyPolicy{
position:fixed;
top:2em;
bottom:2em;
left:2em;
right:2em;
overflow-y:auto;
width:auto;
height:auto;
box-shadow:0 0 3em 1em #000000;
z-index:999999;
text-align:left;
background-color:#FFFFFF;
padding:1em;
}
a.privacy{
text-align:center;
font-size:0.8em;
color:#808080;
display:block;
}
@media all and (max-width:40em){
body{
font-size:0.8em;
}
}
</style>
<title>LibreSpeed Speedtest</title>
</head>
<body>
<h1>LibreSpeed Speedtest</h1>
<div id="testWrapper">
<div id="startStopBtn" onclick="startStop()"></div><br/>
<a class="privacy" href="#" onclick="I('privacyPolicy').style.display=''">Privacy</a>
<div id="test">
<div class="testGroup">
<div class="testArea2">
<div class="testName">Ping</div>
<div id="pingText" class="meterText" style="color:#AA6060"></div>
<div class="unit">ms</div>
</div>
<div class="testArea2">
<div class="testName">Jitter</div>
<div id="jitText" class="meterText" style="color:#AA6060"></div>
<div class="unit">ms</div>
</div>
</div>
<div class="testGroup">
<div class="testArea">
<div class="testName">Download</div>
<canvas id="dlMeter" class="meter"></canvas>
<div id="dlText" class="meterText"></div>
<div class="unit">Mbps</div>
</div>
<div class="testArea">
<div class="testName">Upload</div>
<canvas id="ulMeter" class="meter"></canvas>
<div id="ulText" class="meterText"></div>
<div class="unit">Mbps</div>
</div>
</div>
<div id="ipArea">
<span id="ip"></span>
</div>
<div id="shareArea" style="display:none">
<h3>Share results</h3>
<p>Test ID: <span id="testId"></span></p>
<input type="text" value="" id="resultsURL" readonly="readonly" onclick="this.select();this.focus();this.select();document.execCommand('copy');alert('Link copied')"/>
<img src="" id="resultsImg" />
</div>
</div>
<a href="https://github.com/librespeed/speedtest">Source code</a>
</div>
<div id="privacyPolicy" style="display:none">
<h2>Privacy Policy</h2>
<p>This HTML5 Speedtest server is configured with telemetry enabled.</p>
<h4>What data we collect</h4>
<p>
At the end of the test, the following data is collected and stored:
<ul>
<li>Test ID</li>
<li>Time of testing</li>
<li>Test results (download and upload speed, ping and jitter)</li>
<li>IP address</li>
<li>ISP information</li>
<li>Approximate location (inferred from IP address, not GPS)</li>
<li>User agent and browser locale</li>
<li>Test log (contains no personal information)</li>
</ul>
</p>
<h4>How we use the data</h4>
<p>
Data collected through this service is used to:
<ul>
<li>Allow sharing of test results (sharable image for forums, etc.)</li>
<li>To improve the service offered to you (for instance, to detect problems on our side)</li>
</ul>
No personal information is disclosed to third parties.
</p>
<h4>Your consent</h4>
<p>
By starting the test, you consent to the terms of this privacy policy.
</p>
<h4>Data removal</h4>
<p>
If you want to have your information deleted, you need to provide either the ID of the test or your IP address. This is the only way to identify your data, without this information we won't be able to comply with your request.<br/><br/>
Contact the web admin for all deletion requests.
</p>
<br/><br/>
<a class="privacy" href="#" onclick="I('privacyPolicy').style.display='none'">Close</a><br/>
</div>
<script type="text/javascript">setTimeout(function(){initUI()},100);</script>
</body>
</html>

View File

@ -0,0 +1,224 @@
<?php
require_once 'telemetry_db.php';
error_reporting(0);
putenv('GDFONTPATH='.realpath('.'));
/**
* @param string $name
*
* @return string|null
*/
function tryFont($name)
{
if (is_array(imageftbbox(12, 0, $name, 'M'))) {
return $name;
}
$fullPathToFont = realpath('.').'/'.$name.'.ttf';
if (is_array(imageftbbox(12, 0, $fullPathToFont, 'M'))) {
return $fullPathToFont;
}
return null;
}
/**
* @param int|float $d
*
* @return string
*/
function format($d)
{
if ($d < 10) {
return number_format($d, 2, '.', '');
}
if ($d < 100) {
return number_format($d, 1, '.', '');
}
return number_format($d, 0, '.', '');
}
/**
* @param array $speedtest
*
* @return array
*/
function formatSpeedtestDataForImage($speedtest)
{
// format values for the image
$speedtest['dl'] = format($speedtest['dl']);
$speedtest['ul'] = format($speedtest['ul']);
$speedtest['ping'] = format($speedtest['ping']);
$speedtest['jitter'] = format($speedtest['jitter']);
$speedtest['timestamp'] = $speedtest['timestamp'];
$ispinfo = json_decode($speedtest['ispinfo'], true)['processedString'];
$dash = strpos($ispinfo, '-');
if ($dash !== false) {
$ispinfo = substr($ispinfo, $dash + 2);
$par = strrpos($ispinfo, '(');
if ($par !== false) {
$ispinfo = substr($ispinfo, 0, $par);
}
} else {
$ispinfo = '';
}
$speedtest['ispinfo'] = $ispinfo;
return $speedtest;
}
/**
* @param array $speedtest
*
* @return void
*/
function drawImage($speedtest)
{
// format values for the image
$data = formatSpeedtestDataForImage($speedtest);
$dl = $data['dl'];
$ul = $data['ul'];
$ping = $data['ping'];
$jit = $data['jitter'];
$ispinfo = $data['ispinfo'];
$timestamp = $data['timestamp'];
// initialize the image
$SCALE = 1.25;
$SMALL_SEP = 8 * $SCALE;
$WIDTH = 400 * $SCALE;
$HEIGHT = 229 * $SCALE;
$im = imagecreatetruecolor($WIDTH, $HEIGHT);
$BACKGROUND_COLOR = imagecolorallocate($im, 255, 255, 255);
// configure fonts
$FONT_LABEL = tryFont('OpenSans-Semibold');
$FONT_LABEL_SIZE = 14 * $SCALE;
$FONT_LABEL_SIZE_BIG = 16 * $SCALE;
$FONT_METER = tryFont('OpenSans-Light');
$FONT_METER_SIZE = 20 * $SCALE;
$FONT_METER_SIZE_BIG = 22 * $SCALE;
$FONT_MEASURE = tryFont('OpenSans-Semibold');
$FONT_MEASURE_SIZE = 12 * $SCALE;
$FONT_MEASURE_SIZE_BIG = 12 * $SCALE;
$FONT_ISP = tryFont('OpenSans-Semibold');
$FONT_ISP_SIZE = 9 * $SCALE;
$FONT_TIMESTAMP = tryFont("OpenSans-Light");
$FONT_TIMESTAMP_SIZE = 8 * $SCALE;
$FONT_WATERMARK = tryFont('OpenSans-Light');
$FONT_WATERMARK_SIZE = 8 * $SCALE;
// configure text colors
$TEXT_COLOR_LABEL = imagecolorallocate($im, 40, 40, 40);
$TEXT_COLOR_PING_METER = imagecolorallocate($im, 170, 96, 96);
$TEXT_COLOR_JIT_METER = imagecolorallocate($im, 170, 96, 96);
$TEXT_COLOR_DL_METER = imagecolorallocate($im, 96, 96, 170);
$TEXT_COLOR_UL_METER = imagecolorallocate($im, 96, 96, 96);
$TEXT_COLOR_MEASURE = imagecolorallocate($im, 40, 40, 40);
$TEXT_COLOR_ISP = imagecolorallocate($im, 40, 40, 40);
$SEPARATOR_COLOR = imagecolorallocate($im, 192, 192, 192);
$TEXT_COLOR_TIMESTAMP = imagecolorallocate($im, 160, 160, 160);
$TEXT_COLOR_WATERMARK = imagecolorallocate($im, 160, 160, 160);
// configure positioning or the different parts on the image
$POSITION_X_PING = 125 * $SCALE;
$POSITION_Y_PING_LABEL = 24 * $SCALE;
$POSITION_Y_PING_METER = 60 * $SCALE;
$POSITION_Y_PING_MEASURE = 60 * $SCALE;
$POSITION_X_JIT = 275 * $SCALE;
$POSITION_Y_JIT_LABEL = 24 * $SCALE;
$POSITION_Y_JIT_METER = 60 * $SCALE;
$POSITION_Y_JIT_MEASURE = 60 * $SCALE;
$POSITION_X_DL = 120 * $SCALE;
$POSITION_Y_DL_LABEL = 105 * $SCALE;
$POSITION_Y_DL_METER = 143 * $SCALE;
$POSITION_Y_DL_MEASURE = 169 * $SCALE;
$POSITION_X_UL = 280 * $SCALE;
$POSITION_Y_UL_LABEL = 105 * $SCALE;
$POSITION_Y_UL_METER = 143 * $SCALE;
$POSITION_Y_UL_MEASURE = 169 * $SCALE;
$POSITION_X_ISP = 4 * $SCALE;
$POSITION_Y_ISP = 205 * $SCALE;
$SEPARATOR_Y = 211 * $SCALE;
$POSITION_X_TIMESTAMP= 4 * $SCALE;
$POSITION_Y_TIMESTAMP = 223 * $SCALE;
$POSITION_Y_WATERMARK = 223 * $SCALE;
// configure labels
$MBPS_TEXT = 'Mbit/s';
$MS_TEXT = 'ms';
$PING_TEXT = 'Ping';
$JIT_TEXT = 'Jitter';
$DL_TEXT = 'Download';
$UL_TEXT = 'Upload';
$WATERMARK_TEXT = 'LibreSpeed';
// create text boxes for each part of the image
$mbpsBbox = imageftbbox($FONT_MEASURE_SIZE_BIG, 0, $FONT_MEASURE, $MBPS_TEXT);
$msBbox = imageftbbox($FONT_MEASURE_SIZE, 0, $FONT_MEASURE, $MS_TEXT);
$pingBbox = imageftbbox($FONT_LABEL_SIZE, 0, $FONT_LABEL, $PING_TEXT);
$pingMeterBbox = imageftbbox($FONT_METER_SIZE, 0, $FONT_METER, $ping);
$jitBbox = imageftbbox($FONT_LABEL_SIZE, 0, $FONT_LABEL, $JIT_TEXT);
$jitMeterBbox = imageftbbox($FONT_METER_SIZE, 0, $FONT_METER, $jit);
$dlBbox = imageftbbox($FONT_LABEL_SIZE_BIG, 0, $FONT_LABEL, $DL_TEXT);
$dlMeterBbox = imageftbbox($FONT_METER_SIZE_BIG, 0, $FONT_METER, $dl);
$ulBbox = imageftbbox($FONT_LABEL_SIZE_BIG, 0, $FONT_LABEL, $UL_TEXT);
$ulMeterBbox = imageftbbox($FONT_METER_SIZE_BIG, 0, $FONT_METER, $ul);
$watermarkBbox = imageftbbox($FONT_WATERMARK_SIZE, 0, $FONT_WATERMARK, $WATERMARK_TEXT);
$POSITION_X_WATERMARK = $WIDTH - $watermarkBbox[4] - 4 * $SCALE;
// put the parts together to draw the image
imagefilledrectangle($im, 0, 0, $WIDTH, $HEIGHT, $BACKGROUND_COLOR);
// ping
imagefttext($im, $FONT_LABEL_SIZE, 0, $POSITION_X_PING - $pingBbox[4] / 2, $POSITION_Y_PING_LABEL, $TEXT_COLOR_LABEL, $FONT_LABEL, $PING_TEXT);
imagefttext($im, $FONT_METER_SIZE, 0, $POSITION_X_PING - $pingMeterBbox[4] / 2 - $msBbox[4] / 2 - $SMALL_SEP / 2, $POSITION_Y_PING_METER, $TEXT_COLOR_PING_METER, $FONT_METER, $ping);
imagefttext($im, $FONT_MEASURE_SIZE, 0, $POSITION_X_PING + $pingMeterBbox[4] / 2 + $SMALL_SEP / 2 - $msBbox[4] / 2, $POSITION_Y_PING_MEASURE, $TEXT_COLOR_MEASURE, $FONT_MEASURE, $MS_TEXT);
// jitter
imagefttext($im, $FONT_LABEL_SIZE, 0, $POSITION_X_JIT - $jitBbox[4] / 2, $POSITION_Y_JIT_LABEL, $TEXT_COLOR_LABEL, $FONT_LABEL, $JIT_TEXT);
imagefttext($im, $FONT_METER_SIZE, 0, $POSITION_X_JIT - $jitMeterBbox[4] / 2 - $msBbox[4] / 2 - $SMALL_SEP / 2, $POSITION_Y_JIT_METER, $TEXT_COLOR_JIT_METER, $FONT_METER, $jit);
imagefttext($im, $FONT_MEASURE_SIZE, 0, $POSITION_X_JIT + $jitMeterBbox[4] / 2 + $SMALL_SEP / 2 - $msBbox[4] / 2, $POSITION_Y_JIT_MEASURE, $TEXT_COLOR_MEASURE, $FONT_MEASURE, $MS_TEXT);
// dl
imagefttext($im, $FONT_LABEL_SIZE_BIG, 0, $POSITION_X_DL - $dlBbox[4] / 2, $POSITION_Y_DL_LABEL, $TEXT_COLOR_LABEL, $FONT_LABEL, $DL_TEXT);
imagefttext($im, $FONT_METER_SIZE_BIG, 0, $POSITION_X_DL - $dlMeterBbox[4] / 2, $POSITION_Y_DL_METER, $TEXT_COLOR_DL_METER, $FONT_METER, $dl);
imagefttext($im, $FONT_MEASURE_SIZE_BIG, 0, $POSITION_X_DL - $mbpsBbox[4] / 2, $POSITION_Y_DL_MEASURE, $TEXT_COLOR_MEASURE, $FONT_MEASURE, $MBPS_TEXT);
// ul
imagefttext($im, $FONT_LABEL_SIZE_BIG, 0, $POSITION_X_UL - $ulBbox[4] / 2, $POSITION_Y_UL_LABEL, $TEXT_COLOR_LABEL, $FONT_LABEL, $UL_TEXT);
imagefttext($im, $FONT_METER_SIZE_BIG, 0, $POSITION_X_UL - $ulMeterBbox[4] / 2, $POSITION_Y_UL_METER, $TEXT_COLOR_UL_METER, $FONT_METER, $ul);
imagefttext($im, $FONT_MEASURE_SIZE_BIG, 0, $POSITION_X_UL - $mbpsBbox[4] / 2, $POSITION_Y_UL_MEASURE, $TEXT_COLOR_MEASURE, $FONT_MEASURE, $MBPS_TEXT);
// isp
imagefttext($im, $FONT_ISP_SIZE, 0, $POSITION_X_ISP, $POSITION_Y_ISP, $TEXT_COLOR_ISP, $FONT_ISP, $ispinfo);
// separator
imagefilledrectangle($im, 0, $SEPARATOR_Y, $WIDTH, $SEPARATOR_Y, $SEPARATOR_COLOR);
// timestamp
imagefttext($im, $FONT_TIMESTAMP_SIZE, 0, $POSITION_X_TIMESTAMP, $POSITION_Y_TIMESTAMP, $TEXT_COLOR_TIMESTAMP, $FONT_TIMESTAMP, $timestamp);
// watermark
imagefttext($im, $FONT_WATERMARK_SIZE, 0, $POSITION_X_WATERMARK, $POSITION_Y_WATERMARK, $TEXT_COLOR_WATERMARK, $FONT_WATERMARK, $WATERMARK_TEXT);
// send the image to the browser
header('Content-Type: image/png');
imagepng($im);
}
$speedtest = getSpeedtestUserById($_GET['id']);
if (!is_array($speedtest)) {
exit(1);
}
drawImage($speedtest);

View File

@ -0,0 +1,45 @@
server {
server_name speed.rgk.fm;
index index.html;
location / {
proxy_pass http://11.200.0.254:2222/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
client_max_body_size 0;
}
location /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
# listen [::]:443 ssl http2; # managed by Certbot
listen 443 ssl;
http2 on;
ssl_certificate /ssl/rgk/rgk_bundle.crt; # managed by Certbot
ssl_certificate_key /ssl/rgk/rgk.key; # managed by Certbot
ssl_trusted_certificate /ssl/rgk/rgk_bundle.crt;
}
server {
if ($host = speed.rgk.fm) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
# listen [::]:80;
server_name speed.rgk.fm;
return 404; # managed by Certbot
}

View File

@ -0,0 +1,44 @@
server {
server_name zbx.rgk.fm;
index index.html;
location / {
proxy_pass http://11.200.0.254:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
client_max_body_size 0;
}
location /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
# listen [::]:443 ssl http2; # managed by Certbot
listen 443 ssl;
http2 on; # managed by Certbot
ssl_certificate /ssl/rgk/rgk_bundle.crt; # managed by Certbot
ssl_certificate_key /ssl/rgk/rgk.key; # managed by Certbot
ssl_trusted_certificate /ssl/rgk/rgk_bundle.crt;
}
server {
if ($host = zbx.rgk.fm) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
# listen [::]:80;
server_name zbx.rgk.fm;
return 404; # managed by Certbot
}

54
nginx/docker-compose.yaml Normal file
View File

@ -0,0 +1,54 @@
services:
nginx:
image: nginx:latest
container_name: nginx
restart: unless-stopped
volumes:
- nginx_data:/etc/nginx/
- /app/nginx/data/conf.d:/etc/nginx/conf.d
- /app/ssl:/ssl
ports:
- 80:80
- 443:443
networks:
overlay_net:
ipv4_address: 11.200.0.3
deploy:
resources:
limits:
memory: 100M
librespeed:
image: lscr.io/linuxserver/librespeed:latest
container_name: librespeed
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/Samara
- PASSWORD=PASSW0RD
- CUSTOM_RESULTS=true
- DB_TYPE=sqlite
- DB_NAME=lib_speed
- DB_HOSTNAME=librespeed
- DB_USERNAME=DB_admin
- DB_PASSWORD=DB_PAssW0RD
# - DB_PORT=DB_PORT #optional
# - IPINFO_APIKEY=ACCESS_TOKEN #optional
volumes:
- /app/librespeed/config:/config
ports:
- 2222:80
networks:
overlay_net:
deploy:
resources:
limits:
memory: 100M
volumes:
nginx_data:
networks:
overlay_net:
external: true

View File

@ -0,0 +1 @@
{"creation_dt": "2024-10-01T04:44:37Z", "creation_host": "certbot"}

View File

@ -0,0 +1 @@
{"n": "xo99UPo724cbVaaXcG5-WYu5Djw82Gf2Nu7l2rjY7M0v3OhjGe-blgqBZSCl8Q3uM3gp8Jz_PsQjAkEHRfDrfzQwS_xuoVOQsjMaVpeTzuU1tDxnl9OnhTPyPsNbIqM87rR9tEoPpz_32BZxuXRNL3LUqTbeH4f7Zodnj4P9tQu0Ift7m3VmBIZmuZvqjpLIYtMu0iV25ypr84j_BiKGREn9Z9_xOtGJMbkWgbQ0kw2NZy0in_hiB9SNnOY1-zdJo6dmJ0Fz3mk41JyKWblZ47mbYwH4anRnw7aPoPmfRXn5ZUBQm_CjMLX2V_w21lsTmfiSeA0xvKWNXk0g3x2uVQ", "e": "AQAB", "d": "BDhukHcRKKRhh1uIIoKmut6Ga3AKVws2p4pCZnjBW58s4kQqPxXht7m3cF_WRx5lrsBiG9QqdLoUiGq7bdgmGUkRsbvG2jT9gVwmtip4oNAsaQ1Tol2EVQd6oazjVgQkOmqptVhRpttsODKZ7jgzn8uQC5y38fGg_Vfpcpp6nQt-Ci6lyUDFl3G5Cjc0f5e8OUY059iwtPP2avULEhe2-UD1GvkkqamZ8mcI0mgS4GZmR68wreRrbWgSsHPUrXrJOU6lLJIFCtWUZZYC7TlsNhM4yH-zpH2NLXiybnSyDMH4wXukDxc4NzZPjkfGp195GgpfkXhd6CuSWUmDJiKRwQ", "p": "7n-GTPxOZPIoKUxA0LrDenYuZI0_yJMAyN_qtBgk9E_iF5yjY4bgkuGCJsdmfwTkCISObnD80HIh0N66ov0T70EXjnhmifUcvuAWqZ-8KNANq73WdJ9SDuL-vxq08qMEXtWhrP1ExNeM-2NAF_SRRlayAM0xuSlMp28FrwhITfE", "q": "1SGwLhawITFeVbJpHtOVQ9Chcvc79DqttC67ggmYqjgMT6lgReHWM-CqfYWUOieQfhHyn2bVGctz3kb83wTaQ8Nvl9-FKVdEKftuca626MLqFBWNQfdjdwNKfFO03lrIZHKCmwgbjE4JadkbgzJCRYqtXyhjZV06qd2pgD0QkqU", "dp": "358QxNR5iOsJPxexWkUTjpqLC1rpaF51iONzBKPy2mSgYHVNOb-4h-AMEeI7N3PVgCsSBXnJgoTRMi_0nWhgLaBBvyMjOc1qw4oHlcohOb9CYjqgfz73SOAL7hHTggHZ0jXK3xGmTk6xcPBxo0R8hpA5XMkJC00vA3r0wFYqvXE", "dq": "IHtV4nBKv4RKoDzkkHImmYM-V8seNAaNWpyUryjPP4HzPmDN71iP0LA4y5CEGqjU-KG7nFeLurarHgEroMGYkiNC6p6CKN7H4K4VEvZRof-ytQTj1l3hps21mGUZd5nWWJirFv2RVTy_aoZQDxqlxvtvmMULAPPIcQL7RjQIRpE", "qi": "P-MBoj2qp1m9lLItej56OYOpunHboejGpqH3YWvA2YkkB90K5BNtP8QB9aasHSe-t0wVBt4MklbEAhkXzlDTvvoyLXmjv_Z7XNBkHKguZo6Qlv2eXYMriiOU7yYFwn-FLBWGNoMzNTWapo-b_IHOCKASPJ1HLXY5Ip3wYsE9_TI", "kty": "RSA"}

View File

@ -0,0 +1 @@
{"body": {}, "uri": "https://acme-v02.api.letsencrypt.org/acme/acct/1976177457"}

23
ssl/archive/pycm1k/cert1.pem Executable file
View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID1DCCA1qgAwIBAgISBJoRh3EANUFVTP+8x1kRmP36MAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NTAeFw0yNDEwMDIwMzM1NDdaFw0yNDEyMzEwMzM1NDZaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE5pj2/0
OJS/mtx5lmpgULDSoxH6WwCbiFWEnQVxZSexROjq2qqmHFZwf4RlJYeQTR6gw8iQ
6MBZqBgR9eLQYTOjggJjMIICXzAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFI3bXCIU
7VwkJUVGKYHR1gOOcLdsMB8GA1UdIwQYMBaAFJ8rX888IU+dBLftKyzExnCL0tcN
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U1Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTUuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEEBgorBgEEAdZ5AgQCBIH1BIHy
APAAdQBIsONr2qZHNA/lagL6nTDrHFIBy1bdLIHZu7+rOdiEcwAAAZJLgeo7AAAE
AwBGMEQCIGDsBpyzFKJ0nlp4cv0X/MoidovS3ZSIR54uSFZVtgSsAiBHalHuKJLo
5t10hSpUKHGUngvmXzmewbeDxJptNhDl3wB3AKLjCuRF772tm3447Udnd1PXgluE
lNcrXhssxLlQpEfnAAABkkuB6m0AAAQDAEgwRgIhANuVCBYBT4mIz7naLKYFDGy+
i2O6uXCNgzAkQBtHHBIaAiEA6TrKM5yEShKhkc9nIAW+YHL2P/u+ZotZkG0KCGOj
Gt4wCgYIKoZIzj0EAwMDaAAwZQIxANiwsQoiWOhSerdi376OqLZEZnruI19b5ick
8D0xvgQ8zpbXlg07CdgbLt6bN+xPPwIwMJ0ZJ7T0zfqmjrTAZdQeZChzg1tssd3l
m1PLZSzmrFtxqK7HS3XoDyoGF8gUXDNR
-----END CERTIFICATE-----

View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID1TCCA1ugAwIBAgISBJWYDGw6FfIu3hgm1nwkvmUPMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNDExMDEwNTIxNDBaFw0yNTAxMzAwNTIxMzlaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIVznb1w
2qiAlqmvC0N9Oide2sBTykZSgLiIrE/jCys2Ofe45VBBKOV8vAbo2s9M8x/Yxgb8
69TTBui+8x3esEGjggJkMIICYDAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFHmv1l9f
bpMTvWJzQjZzuobd378LMB8GA1UdIwQYMBaAFJMnRpgDqVFojpjWxEJI2yO/WJTS
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U2Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTYuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEFBgorBgEEAdZ5AgQCBIH2BIHz
APEAdwDPEVbu1S58r/OHW9lpLpvpGnFnSrAX7KwB0lt3zsw7CAAAAZLmYaIyAAAE
AwBIMEYCIQCHL4HZ4Uwd2ozgsSX/lXG5RbtnQPxVjb07O4TdGKdZqgIhAN6DRwCV
gawn+fXWPGv4D13mPRKpocL+ucTXRQCWzvXJAHYAfVkeEuF4KnscYWd8Xv340Idc
FKBOlZ65Ay/ZDowuebgAAAGS5mGh/gAABAMARzBFAiB7kthEzj/7XIgoWP92cRNq
HFkyhCDCmp5w6vZb7TEMywIhAIe3A7f23ai2d2iVU/D4yvtz+cgrMiMIUHYelXZ0
LA/rMAoGCCqGSM49BAMDA2gAMGUCMQD367vrTiOhqNKeCFUPa1ANgkGEafJjAdgJ
6sFI9ZXLrItvwCP0kglx+APjXu2ow/wCMDvF4R4DicYLYllR6BHNH4r7WOicYOM6
4cAMLtGu1xlvjIQLZqnsvZx5eqaoU2io2g==
-----END CERTIFICATE-----

View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID1TCCA1ugAwIBAgISA4IxF6s70e4FWxaBO1Gdb9vGMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NTAeFw0yNDExMDEwNTIyMDdaFw0yNTAxMzAwNTIyMDZaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABG829N0Y
BvePrMfRGbhZAx+j3xmnij5cGIhAZgEzGRuUJXni6WVkTPIyKwyUWDGNCHidXAwn
QmIyxa8wNN4uYyKjggJkMIICYDAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFFRDG33k
mS+9YfTBoRPtiBpCfGSiMB8GA1UdIwQYMBaAFJ8rX888IU+dBLftKyzExnCL0tcN
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U1Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTUuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEFBgorBgEEAdZ5AgQCBIH2BIHz
APEAdwCi4wrkRe+9rZt+OO1HZ3dT14JbhJTXK14bLMS5UKRH5wAAAZLmYggQAAAE
AwBIMEYCIQDuoGJbUBEsKxFv79KIniaxTQXQFdABzPGEQ1Mf47Ln6AIhAOH0iaGS
CxE5UegJoWZH6pxGzvJYYLNZRqCA8aBJioecAHYAzxFW7tUufK/zh1vZaS6b6Rpx
Z0qwF+ysAdJbd87MOwgAAAGS5mIQHwAABAMARzBFAiBtDBSlgBIgf46vYp2Ui1Kt
SmbUapMNKCN1EVihy7nMigIhAKhtwwWHTLdHVkBbNIL60ts5UwygWqzO4Hu1F+Mf
Zk6eMAoGCCqGSM49BAMDA2gAMGUCMQDvJdmrCBNMZsceItNDWOGe3cGhQhjQ8Fof
jUuS9B+cnLb7m7xjwdJEfRzi59e0s9UCMBcJfRLMT9R4hUX0NCtPhI3wHFLsK+y1
8DUMXWBC9CQSyPrjYCZ4Lg3eDDU8ZS7m+g==
-----END CERTIFICATE-----

View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID1TCCA1ugAwIBAgISA6oWZJHtsg0VkhQO4CtAfZXOMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNDExMzAyMjAxNDlaFw0yNTAyMjgyMjAxNDhaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIIrfevi
CDIXPiMMZ01mhI9xOf0xD3RsL3gyd815wPqz4XP5VGI6fujXrtWPkSgdZe2MsuJq
/T4MxAyhUlefbVOjggJkMIICYDAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFKiev0YM
knx+HC0mOWYN1k/j/0vaMB8GA1UdIwQYMBaAFJMnRpgDqVFojpjWxEJI2yO/WJTS
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U2Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTYuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEFBgorBgEEAdZ5AgQCBIH2BIHz
APEAdwB9WR4S4XgqexxhZ3xe/fjQh1wUoE6VnrkDL9kOjC55uAAAAZN/TbQQAAAE
AwBIMEYCIQD3ljHtEbIgq5o1LOnJvO2yiLJurbIu4lkSUc0lKfFxiwIhAMaaEIMp
2DGIBBtSfU2ODnS2oydu0uA0EFptQ9g+1U/OAHYAouMK5EXvva2bfjjtR2d3U9eC
W4SU1yteGyzEuVCkR+cAAAGTf020DQAABAMARzBFAiA5XM2Ue3ymAyziDIDSR34V
i2z1QK5xtmkRhp9AAWh4FAIhAMKKwsd4kMYnois6FxxXS5+EMEI7Jv4Jlu1kHCSS
lXufMAoGCCqGSM49BAMDA2gAMGUCMB1QuRGKi1fnDMQtnmPwBl7/fa0egFT68aAq
UpHmc5lmSIHHfCMqv1NbMFPccjAaDAIxAJP5AYSn62P/VOwWxxZHiydva+ilzQnZ
2W+ng4UFDm9Dp1sueblYJQomOsSSSAEgpg==
-----END CERTIFICATE-----

View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID1DCCA1qgAwIBAgISA4NuI8y6DOCDf5PBnec3u9Q3MAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNDEyMzEyMjAxMzhaFw0yNTAzMzEyMjAxMzdaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLkn84Ll
WSeixHCriT2kEmdayHLio/98Sin6qzkNP+6SPADG3fHGlfOYzLn5+fSbK25fSQPp
GNIV9JbNfyhPaNujggJjMIICXzAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFPhDobZs
CUvzyLzt6Zcgm6pMYxzDMB8GA1UdIwQYMBaAFJMnRpgDqVFojpjWxEJI2yO/WJTS
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U2Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTYuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEEBgorBgEEAdZ5AgQCBIH1BIHy
APAAdgDM+w9qhXEJZf6Vm1PO6bJ8IumFXA2XjbapflTA/kwNsAAAAZQe8q/kAAAE
AwBHMEUCIQCRaph2Nsm1u0esSjzZkYpbd0h5Dy5WlICgyMYsTMlbhAIgWq1Y8a6O
x5/PdhSasLvtU9HoWamlZBmIHoGfPv9UuC8AdgDPEVbu1S58r/OHW9lpLpvpGnFn
SrAX7KwB0lt3zsw7CAAAAZQe8rBvAAAEAwBHMEUCIQC2gK2vWNQVvvLPZgl6Mmav
RhowRhLQ3Tc/6y7iDD0nMwIgA8BbLw1TXm5RT0o7PizQLqk2Lfxu53uevXY7iJtP
nJ4wCgYIKoZIzj0EAwMDaAAwZQIwG/6ZsbzGIYbaTrWLmNwk7AcpUimJgZiVTfrn
S2IX87vlnnmahgtOYMevmyCXlsvKAjEA0tVUgjcN5dbQbdl92Z5ClKf14YUmGMhZ
cjHSwHAVd6YjUhKqc4mRMAmisqZVjEPA
-----END CERTIFICATE-----

View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID1jCCA1ygAwIBAgISBHCtny1vqemlF9IZv7w1k9olMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNTAyMDMwMzUxMTdaFw0yNTA1MDQwMzUxMTZaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLxtjAZa
Vc/HwdqMskhmCGAPa6sUR1+ZHBrlybSqXwl4ARLSyR4jt5XZhe61JRAv9YOneZ/m
zg9cFceJ30mBROCjggJlMIICYTAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFHVJBcYX
k4JqNd3gRFXPfcWzTp6+MB8GA1UdIwQYMBaAFJMnRpgDqVFojpjWxEJI2yO/WJTS
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U2Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTYuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEGBgorBgEEAdZ5AgQCBIH3BIH0
APIAdwCi4wrkRe+9rZt+OO1HZ3dT14JbhJTXK14bLMS5UKRH5wAAAZTKJKnuAAAE
AwBIMEYCIQDhm8CcxqgQU49uCrRbAR7tpLRn3S89wuenO36qxvHNYAIhAPU3r7rB
8kbOcgdNdNhFGXN+tzrxbDOodFYZAXfa9Ux4AHcATnWjJ1yaEMM4W2zU3z9S6x3w
4I4bjWnAsfpksWKaOd8AAAGUyiSp6AAABAMASDBGAiEAgbQWKLxpy3sumpBFbGtV
uQW2T8cwh2R4g8/vTN5oEwECIQCKKYhxF2L1MEan+774rTNtZhVBJX8Zjm20FXyW
O/AOeTAKBggqhkjOPQQDAwNoADBlAjBE3vkoUCaOjOGGQC82R6bcYRP88PmyXDKq
U6GpCkgcrnUd9MM2LKJdYey/8qRlcNICMQCYMQBJ8S/ovNZx+/fGOYUcbbHcXyeN
ftwsyMaQTZsDBsoz7n/DRhSikoMXqWx9R0Q=
-----END CERTIFICATE-----

View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID0jCCA1mgAwIBAgISAzwSLh2p0otEtrfCMEDdTcSuMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNTAyMjgyMjAxMzZaFw0yNTA1MjkyMjAxMzVaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFUTMTSK
hygulWBdMY0bLCBaSnXDZvRf6VJxlkViKjdbm/a/SZ0XZKC8Py/uP+ZQSO3gGZ9J
E72CChv5nCINJSKjggJiMIICXjAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOJT3g/C
vYXcWyqfRpu65KMqrWUUMB8GA1UdIwQYMBaAFJMnRpgDqVFojpjWxEJI2yO/WJTS
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U2Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTYuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEDBgorBgEEAdZ5AgQCBIH0BIHx
AO8AdgCi4wrkRe+9rZt+OO1HZ3dT14JbhJTXK14bLMS5UKRH5wAAAZVOydtfAAAE
AwBHMEUCIQDMNsJa7LuO+bSQPNP9AmU7rXhMqZoC3bG1guu2PEOsUwIgUv97yx2W
sjpa8GC9Gm45V3sawtsbf76wRvzSQJH4c3AAdQATSt8atZhCCXgMb+9MepGkFrcj
Sc5YV2rfrtqnwqvgIgAAAZVOyd09AAAEAwBGMEQCIF4gXbIBzVOHUzUnn/1S21Tw
Po8lldzw2t3PwcPnuvGlAiB3tLql/Gm7IbL8mhYnO647yFkp9ywJ5TQM/5njtRwk
0TAKBggqhkjOPQQDAwNnADBkAjBuiQWjzfg5Uu0T1TQ8kdOxuehAkDPgAL+jlo0q
g85kE+K/awgWOlMny9XVVMhhENMCMCFm5XqJiK5d6zf4SRsAP6LHiReN3CuUmcjC
ey9fwSKf8z6769Ilerw0E6/ymc04CA==
-----END CERTIFICATE-----

26
ssl/archive/pycm1k/chain1.pem Executable file
View File

@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRAIOPbGPOsTmMYgZigxXJ/d4wDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNCzqK
a2GOtu/cX1jnxkJFVKtj9mZhSAouWXW0gQI3ULc/FnncmOyhKJdyIBwsz9V8UiBO
VHhbhBRrwJCuhezAUUE8Wod/Bk3U/mDR+mwt4X2VEIiiCFQPmRpM5uoKrNijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfK1/PPCFPnQS37SssxMZw
i9LXDTAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAH3KdNEVCQdqk0LKyuNImTKdRJY1C
2uw2SJajuhqkyGPY8C+zzsufZ+mgnhnq1A2KVQOSykOEnUbx1cy637rBAihx97r+
bcwbZM6sTDIaEriR/PLk6LKs9Be0uoVxgOKDcpG9svD33J+G9Lcfv1K9luDmSTgG
6XNFIN5vfI5gs/lMPyojEMdIzK9blcl2/1vKxO8WGCcjvsQ1nJ/Pwt8LQZBfOFyV
XP8ubAp/au3dc4EKWG9MO5zcx1qT9+NXRGdVWxGvmBFRAajciMfXME1ZuGmk3/GO
koAM7ZkjZmleyokP1LGzmfJcUd9s7eeu1/9/eg5XlXd/55GtYjAM+C4DG5i7eaNq
cm2F+yxYIPt6cbbtYVNJCGfHWqHEQ4FYStUyFnv8sjyqU8ypgZaNJ9aVcWSICLOI
E1/Qv/7oKsnZCWJ926wU6RqG1OYPGOi1zuABhLw61cuPVDT28nQS/e6z95cJXq0e
K1BcaJ6fJZsmbjRgD5p3mvEf5vdQM7MCEvU0tHbsx2I5mHHJoABHb8KVBgWp/lcX
GWiWaeOyB7RP+OfDtvi2OsapxXiV7vNVs7fMlrRjY1joKaqmmycnBvAq14AEbtyL
sVfOS66B8apkeFX2NY4XPEYV4ZSCe8VHPrdrERk2wILG3T/EGmSIkCYVUMSnjmJd
VQD9F6Na/+zmXCc=
-----END CERTIFICATE-----

View File

@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
Ig46v9mFmBvyH04=
-----END CERTIFICATE-----

View File

@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRAIOPbGPOsTmMYgZigxXJ/d4wDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNCzqK
a2GOtu/cX1jnxkJFVKtj9mZhSAouWXW0gQI3ULc/FnncmOyhKJdyIBwsz9V8UiBO
VHhbhBRrwJCuhezAUUE8Wod/Bk3U/mDR+mwt4X2VEIiiCFQPmRpM5uoKrNijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfK1/PPCFPnQS37SssxMZw
i9LXDTAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAH3KdNEVCQdqk0LKyuNImTKdRJY1C
2uw2SJajuhqkyGPY8C+zzsufZ+mgnhnq1A2KVQOSykOEnUbx1cy637rBAihx97r+
bcwbZM6sTDIaEriR/PLk6LKs9Be0uoVxgOKDcpG9svD33J+G9Lcfv1K9luDmSTgG
6XNFIN5vfI5gs/lMPyojEMdIzK9blcl2/1vKxO8WGCcjvsQ1nJ/Pwt8LQZBfOFyV
XP8ubAp/au3dc4EKWG9MO5zcx1qT9+NXRGdVWxGvmBFRAajciMfXME1ZuGmk3/GO
koAM7ZkjZmleyokP1LGzmfJcUd9s7eeu1/9/eg5XlXd/55GtYjAM+C4DG5i7eaNq
cm2F+yxYIPt6cbbtYVNJCGfHWqHEQ4FYStUyFnv8sjyqU8ypgZaNJ9aVcWSICLOI
E1/Qv/7oKsnZCWJ926wU6RqG1OYPGOi1zuABhLw61cuPVDT28nQS/e6z95cJXq0e
K1BcaJ6fJZsmbjRgD5p3mvEf5vdQM7MCEvU0tHbsx2I5mHHJoABHb8KVBgWp/lcX
GWiWaeOyB7RP+OfDtvi2OsapxXiV7vNVs7fMlrRjY1joKaqmmycnBvAq14AEbtyL
sVfOS66B8apkeFX2NY4XPEYV4ZSCe8VHPrdrERk2wILG3T/EGmSIkCYVUMSnjmJd
VQD9F6Na/+zmXCc=
-----END CERTIFICATE-----

View File

@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
Ig46v9mFmBvyH04=
-----END CERTIFICATE-----

View File

@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
Ig46v9mFmBvyH04=
-----END CERTIFICATE-----

View File

@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
Ig46v9mFmBvyH04=
-----END CERTIFICATE-----

View File

@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
Ig46v9mFmBvyH04=
-----END CERTIFICATE-----

View File

@ -0,0 +1,49 @@
-----BEGIN CERTIFICATE-----
MIID1DCCA1qgAwIBAgISBJoRh3EANUFVTP+8x1kRmP36MAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NTAeFw0yNDEwMDIwMzM1NDdaFw0yNDEyMzEwMzM1NDZaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE5pj2/0
OJS/mtx5lmpgULDSoxH6WwCbiFWEnQVxZSexROjq2qqmHFZwf4RlJYeQTR6gw8iQ
6MBZqBgR9eLQYTOjggJjMIICXzAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFI3bXCIU
7VwkJUVGKYHR1gOOcLdsMB8GA1UdIwQYMBaAFJ8rX888IU+dBLftKyzExnCL0tcN
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U1Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTUuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEEBgorBgEEAdZ5AgQCBIH1BIHy
APAAdQBIsONr2qZHNA/lagL6nTDrHFIBy1bdLIHZu7+rOdiEcwAAAZJLgeo7AAAE
AwBGMEQCIGDsBpyzFKJ0nlp4cv0X/MoidovS3ZSIR54uSFZVtgSsAiBHalHuKJLo
5t10hSpUKHGUngvmXzmewbeDxJptNhDl3wB3AKLjCuRF772tm3447Udnd1PXgluE
lNcrXhssxLlQpEfnAAABkkuB6m0AAAQDAEgwRgIhANuVCBYBT4mIz7naLKYFDGy+
i2O6uXCNgzAkQBtHHBIaAiEA6TrKM5yEShKhkc9nIAW+YHL2P/u+ZotZkG0KCGOj
Gt4wCgYIKoZIzj0EAwMDaAAwZQIxANiwsQoiWOhSerdi376OqLZEZnruI19b5ick
8D0xvgQ8zpbXlg07CdgbLt6bN+xPPwIwMJ0ZJ7T0zfqmjrTAZdQeZChzg1tssd3l
m1PLZSzmrFtxqK7HS3XoDyoGF8gUXDNR
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRAIOPbGPOsTmMYgZigxXJ/d4wDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNCzqK
a2GOtu/cX1jnxkJFVKtj9mZhSAouWXW0gQI3ULc/FnncmOyhKJdyIBwsz9V8UiBO
VHhbhBRrwJCuhezAUUE8Wod/Bk3U/mDR+mwt4X2VEIiiCFQPmRpM5uoKrNijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfK1/PPCFPnQS37SssxMZw
i9LXDTAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAH3KdNEVCQdqk0LKyuNImTKdRJY1C
2uw2SJajuhqkyGPY8C+zzsufZ+mgnhnq1A2KVQOSykOEnUbx1cy637rBAihx97r+
bcwbZM6sTDIaEriR/PLk6LKs9Be0uoVxgOKDcpG9svD33J+G9Lcfv1K9luDmSTgG
6XNFIN5vfI5gs/lMPyojEMdIzK9blcl2/1vKxO8WGCcjvsQ1nJ/Pwt8LQZBfOFyV
XP8ubAp/au3dc4EKWG9MO5zcx1qT9+NXRGdVWxGvmBFRAajciMfXME1ZuGmk3/GO
koAM7ZkjZmleyokP1LGzmfJcUd9s7eeu1/9/eg5XlXd/55GtYjAM+C4DG5i7eaNq
cm2F+yxYIPt6cbbtYVNJCGfHWqHEQ4FYStUyFnv8sjyqU8ypgZaNJ9aVcWSICLOI
E1/Qv/7oKsnZCWJ926wU6RqG1OYPGOi1zuABhLw61cuPVDT28nQS/e6z95cJXq0e
K1BcaJ6fJZsmbjRgD5p3mvEf5vdQM7MCEvU0tHbsx2I5mHHJoABHb8KVBgWp/lcX
GWiWaeOyB7RP+OfDtvi2OsapxXiV7vNVs7fMlrRjY1joKaqmmycnBvAq14AEbtyL
sVfOS66B8apkeFX2NY4XPEYV4ZSCe8VHPrdrERk2wILG3T/EGmSIkCYVUMSnjmJd
VQD9F6Na/+zmXCc=
-----END CERTIFICATE-----

View File

@ -0,0 +1,49 @@
-----BEGIN CERTIFICATE-----
MIID1TCCA1ugAwIBAgISBJWYDGw6FfIu3hgm1nwkvmUPMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNDExMDEwNTIxNDBaFw0yNTAxMzAwNTIxMzlaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIVznb1w
2qiAlqmvC0N9Oide2sBTykZSgLiIrE/jCys2Ofe45VBBKOV8vAbo2s9M8x/Yxgb8
69TTBui+8x3esEGjggJkMIICYDAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFHmv1l9f
bpMTvWJzQjZzuobd378LMB8GA1UdIwQYMBaAFJMnRpgDqVFojpjWxEJI2yO/WJTS
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U2Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTYuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEFBgorBgEEAdZ5AgQCBIH2BIHz
APEAdwDPEVbu1S58r/OHW9lpLpvpGnFnSrAX7KwB0lt3zsw7CAAAAZLmYaIyAAAE
AwBIMEYCIQCHL4HZ4Uwd2ozgsSX/lXG5RbtnQPxVjb07O4TdGKdZqgIhAN6DRwCV
gawn+fXWPGv4D13mPRKpocL+ucTXRQCWzvXJAHYAfVkeEuF4KnscYWd8Xv340Idc
FKBOlZ65Ay/ZDowuebgAAAGS5mGh/gAABAMARzBFAiB7kthEzj/7XIgoWP92cRNq
HFkyhCDCmp5w6vZb7TEMywIhAIe3A7f23ai2d2iVU/D4yvtz+cgrMiMIUHYelXZ0
LA/rMAoGCCqGSM49BAMDA2gAMGUCMQD367vrTiOhqNKeCFUPa1ANgkGEafJjAdgJ
6sFI9ZXLrItvwCP0kglx+APjXu2ow/wCMDvF4R4DicYLYllR6BHNH4r7WOicYOM6
4cAMLtGu1xlvjIQLZqnsvZx5eqaoU2io2g==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
Ig46v9mFmBvyH04=
-----END CERTIFICATE-----

View File

@ -0,0 +1,49 @@
-----BEGIN CERTIFICATE-----
MIID1TCCA1ugAwIBAgISA4IxF6s70e4FWxaBO1Gdb9vGMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NTAeFw0yNDExMDEwNTIyMDdaFw0yNTAxMzAwNTIyMDZaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABG829N0Y
BvePrMfRGbhZAx+j3xmnij5cGIhAZgEzGRuUJXni6WVkTPIyKwyUWDGNCHidXAwn
QmIyxa8wNN4uYyKjggJkMIICYDAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFFRDG33k
mS+9YfTBoRPtiBpCfGSiMB8GA1UdIwQYMBaAFJ8rX888IU+dBLftKyzExnCL0tcN
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U1Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTUuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEFBgorBgEEAdZ5AgQCBIH2BIHz
APEAdwCi4wrkRe+9rZt+OO1HZ3dT14JbhJTXK14bLMS5UKRH5wAAAZLmYggQAAAE
AwBIMEYCIQDuoGJbUBEsKxFv79KIniaxTQXQFdABzPGEQ1Mf47Ln6AIhAOH0iaGS
CxE5UegJoWZH6pxGzvJYYLNZRqCA8aBJioecAHYAzxFW7tUufK/zh1vZaS6b6Rpx
Z0qwF+ysAdJbd87MOwgAAAGS5mIQHwAABAMARzBFAiBtDBSlgBIgf46vYp2Ui1Kt
SmbUapMNKCN1EVihy7nMigIhAKhtwwWHTLdHVkBbNIL60ts5UwygWqzO4Hu1F+Mf
Zk6eMAoGCCqGSM49BAMDA2gAMGUCMQDvJdmrCBNMZsceItNDWOGe3cGhQhjQ8Fof
jUuS9B+cnLb7m7xjwdJEfRzi59e0s9UCMBcJfRLMT9R4hUX0NCtPhI3wHFLsK+y1
8DUMXWBC9CQSyPrjYCZ4Lg3eDDU8ZS7m+g==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRAIOPbGPOsTmMYgZigxXJ/d4wDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNCzqK
a2GOtu/cX1jnxkJFVKtj9mZhSAouWXW0gQI3ULc/FnncmOyhKJdyIBwsz9V8UiBO
VHhbhBRrwJCuhezAUUE8Wod/Bk3U/mDR+mwt4X2VEIiiCFQPmRpM5uoKrNijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfK1/PPCFPnQS37SssxMZw
i9LXDTAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAH3KdNEVCQdqk0LKyuNImTKdRJY1C
2uw2SJajuhqkyGPY8C+zzsufZ+mgnhnq1A2KVQOSykOEnUbx1cy637rBAihx97r+
bcwbZM6sTDIaEriR/PLk6LKs9Be0uoVxgOKDcpG9svD33J+G9Lcfv1K9luDmSTgG
6XNFIN5vfI5gs/lMPyojEMdIzK9blcl2/1vKxO8WGCcjvsQ1nJ/Pwt8LQZBfOFyV
XP8ubAp/au3dc4EKWG9MO5zcx1qT9+NXRGdVWxGvmBFRAajciMfXME1ZuGmk3/GO
koAM7ZkjZmleyokP1LGzmfJcUd9s7eeu1/9/eg5XlXd/55GtYjAM+C4DG5i7eaNq
cm2F+yxYIPt6cbbtYVNJCGfHWqHEQ4FYStUyFnv8sjyqU8ypgZaNJ9aVcWSICLOI
E1/Qv/7oKsnZCWJ926wU6RqG1OYPGOi1zuABhLw61cuPVDT28nQS/e6z95cJXq0e
K1BcaJ6fJZsmbjRgD5p3mvEf5vdQM7MCEvU0tHbsx2I5mHHJoABHb8KVBgWp/lcX
GWiWaeOyB7RP+OfDtvi2OsapxXiV7vNVs7fMlrRjY1joKaqmmycnBvAq14AEbtyL
sVfOS66B8apkeFX2NY4XPEYV4ZSCe8VHPrdrERk2wILG3T/EGmSIkCYVUMSnjmJd
VQD9F6Na/+zmXCc=
-----END CERTIFICATE-----

View File

@ -0,0 +1,49 @@
-----BEGIN CERTIFICATE-----
MIID1TCCA1ugAwIBAgISA6oWZJHtsg0VkhQO4CtAfZXOMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNDExMzAyMjAxNDlaFw0yNTAyMjgyMjAxNDhaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIIrfevi
CDIXPiMMZ01mhI9xOf0xD3RsL3gyd815wPqz4XP5VGI6fujXrtWPkSgdZe2MsuJq
/T4MxAyhUlefbVOjggJkMIICYDAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFKiev0YM
knx+HC0mOWYN1k/j/0vaMB8GA1UdIwQYMBaAFJMnRpgDqVFojpjWxEJI2yO/WJTS
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U2Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTYuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEFBgorBgEEAdZ5AgQCBIH2BIHz
APEAdwB9WR4S4XgqexxhZ3xe/fjQh1wUoE6VnrkDL9kOjC55uAAAAZN/TbQQAAAE
AwBIMEYCIQD3ljHtEbIgq5o1LOnJvO2yiLJurbIu4lkSUc0lKfFxiwIhAMaaEIMp
2DGIBBtSfU2ODnS2oydu0uA0EFptQ9g+1U/OAHYAouMK5EXvva2bfjjtR2d3U9eC
W4SU1yteGyzEuVCkR+cAAAGTf020DQAABAMARzBFAiA5XM2Ue3ymAyziDIDSR34V
i2z1QK5xtmkRhp9AAWh4FAIhAMKKwsd4kMYnois6FxxXS5+EMEI7Jv4Jlu1kHCSS
lXufMAoGCCqGSM49BAMDA2gAMGUCMB1QuRGKi1fnDMQtnmPwBl7/fa0egFT68aAq
UpHmc5lmSIHHfCMqv1NbMFPccjAaDAIxAJP5AYSn62P/VOwWxxZHiydva+ilzQnZ
2W+ng4UFDm9Dp1sueblYJQomOsSSSAEgpg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
Ig46v9mFmBvyH04=
-----END CERTIFICATE-----

View File

@ -0,0 +1,49 @@
-----BEGIN CERTIFICATE-----
MIID1DCCA1qgAwIBAgISA4NuI8y6DOCDf5PBnec3u9Q3MAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNDEyMzEyMjAxMzhaFw0yNTAzMzEyMjAxMzdaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLkn84Ll
WSeixHCriT2kEmdayHLio/98Sin6qzkNP+6SPADG3fHGlfOYzLn5+fSbK25fSQPp
GNIV9JbNfyhPaNujggJjMIICXzAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFPhDobZs
CUvzyLzt6Zcgm6pMYxzDMB8GA1UdIwQYMBaAFJMnRpgDqVFojpjWxEJI2yO/WJTS
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U2Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTYuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEEBgorBgEEAdZ5AgQCBIH1BIHy
APAAdgDM+w9qhXEJZf6Vm1PO6bJ8IumFXA2XjbapflTA/kwNsAAAAZQe8q/kAAAE
AwBHMEUCIQCRaph2Nsm1u0esSjzZkYpbd0h5Dy5WlICgyMYsTMlbhAIgWq1Y8a6O
x5/PdhSasLvtU9HoWamlZBmIHoGfPv9UuC8AdgDPEVbu1S58r/OHW9lpLpvpGnFn
SrAX7KwB0lt3zsw7CAAAAZQe8rBvAAAEAwBHMEUCIQC2gK2vWNQVvvLPZgl6Mmav
RhowRhLQ3Tc/6y7iDD0nMwIgA8BbLw1TXm5RT0o7PizQLqk2Lfxu53uevXY7iJtP
nJ4wCgYIKoZIzj0EAwMDaAAwZQIwG/6ZsbzGIYbaTrWLmNwk7AcpUimJgZiVTfrn
S2IX87vlnnmahgtOYMevmyCXlsvKAjEA0tVUgjcN5dbQbdl92Z5ClKf14YUmGMhZ
cjHSwHAVd6YjUhKqc4mRMAmisqZVjEPA
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
Ig46v9mFmBvyH04=
-----END CERTIFICATE-----

View File

@ -0,0 +1,49 @@
-----BEGIN CERTIFICATE-----
MIID1jCCA1ygAwIBAgISBHCtny1vqemlF9IZv7w1k9olMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNTAyMDMwMzUxMTdaFw0yNTA1MDQwMzUxMTZaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLxtjAZa
Vc/HwdqMskhmCGAPa6sUR1+ZHBrlybSqXwl4ARLSyR4jt5XZhe61JRAv9YOneZ/m
zg9cFceJ30mBROCjggJlMIICYTAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFHVJBcYX
k4JqNd3gRFXPfcWzTp6+MB8GA1UdIwQYMBaAFJMnRpgDqVFojpjWxEJI2yO/WJTS
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U2Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTYuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEGBgorBgEEAdZ5AgQCBIH3BIH0
APIAdwCi4wrkRe+9rZt+OO1HZ3dT14JbhJTXK14bLMS5UKRH5wAAAZTKJKnuAAAE
AwBIMEYCIQDhm8CcxqgQU49uCrRbAR7tpLRn3S89wuenO36qxvHNYAIhAPU3r7rB
8kbOcgdNdNhFGXN+tzrxbDOodFYZAXfa9Ux4AHcATnWjJ1yaEMM4W2zU3z9S6x3w
4I4bjWnAsfpksWKaOd8AAAGUyiSp6AAABAMASDBGAiEAgbQWKLxpy3sumpBFbGtV
uQW2T8cwh2R4g8/vTN5oEwECIQCKKYhxF2L1MEan+774rTNtZhVBJX8Zjm20FXyW
O/AOeTAKBggqhkjOPQQDAwNoADBlAjBE3vkoUCaOjOGGQC82R6bcYRP88PmyXDKq
U6GpCkgcrnUd9MM2LKJdYey/8qRlcNICMQCYMQBJ8S/ovNZx+/fGOYUcbbHcXyeN
ftwsyMaQTZsDBsoz7n/DRhSikoMXqWx9R0Q=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
Ig46v9mFmBvyH04=
-----END CERTIFICATE-----

View File

@ -0,0 +1,49 @@
-----BEGIN CERTIFICATE-----
MIID0jCCA1mgAwIBAgISAzwSLh2p0otEtrfCMEDdTcSuMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNTAyMjgyMjAxMzZaFw0yNTA1MjkyMjAxMzVaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFUTMTSK
hygulWBdMY0bLCBaSnXDZvRf6VJxlkViKjdbm/a/SZ0XZKC8Py/uP+ZQSO3gGZ9J
E72CChv5nCINJSKjggJiMIICXjAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOJT3g/C
vYXcWyqfRpu65KMqrWUUMB8GA1UdIwQYMBaAFJMnRpgDqVFojpjWxEJI2yO/WJTS
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U2Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTYuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEDBgorBgEEAdZ5AgQCBIH0BIHx
AO8AdgCi4wrkRe+9rZt+OO1HZ3dT14JbhJTXK14bLMS5UKRH5wAAAZVOydtfAAAE
AwBHMEUCIQDMNsJa7LuO+bSQPNP9AmU7rXhMqZoC3bG1guu2PEOsUwIgUv97yx2W
sjpa8GC9Gm45V3sawtsbf76wRvzSQJH4c3AAdQATSt8atZhCCXgMb+9MepGkFrcj
Sc5YV2rfrtqnwqvgIgAAAZVOyd09AAAEAwBGMEQCIF4gXbIBzVOHUzUnn/1S21Tw
Po8lldzw2t3PwcPnuvGlAiB3tLql/Gm7IbL8mhYnO647yFkp9ywJ5TQM/5njtRwk
0TAKBggqhkjOPQQDAwNnADBkAjBuiQWjzfg5Uu0T1TQ8kdOxuehAkDPgAL+jlo0q
g85kE+K/awgWOlMny9XVVMhhENMCMCFm5XqJiK5d6zf4SRsAP6LHiReN3CuUmcjC
ey9fwSKf8z6769Ilerw0E6/ymc04CA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
Ig46v9mFmBvyH04=
-----END CERTIFICATE-----

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg34SsQZA7egcya8+z
Jnpx9CaUt+SzFl22KdHzTFY6vyGhRANCAAROaY9v9DiUv5rceZZqYFCw0qMR+lsA
m4hVhJ0FcWUnsUTo6tqqphxWcH+EZSWHkE0eoMPIkOjAWagYEfXi0GEz
-----END PRIVATE KEY-----

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgmMnDy4Agm/E1iAvp
L9tVfXRX3zfUMcS1ewuFJDRWagihRANCAASFc529cNqogJaprwtDfTonXtrAU8pG
UoC4iKxP4wsrNjn3uOVQQSjlfLwG6NrPTPMf2MYG/OvU0wbovvMd3rBB
-----END PRIVATE KEY-----

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgYwgVqh+ojHRF6EwF
WVEYYMtyETrMI3cj17rj4G0Ya5mhRANCAARvNvTdGAb3j6zH0Rm4WQMfo98Zp4o+
XBiIQGYBMxkblCV54ullZEzyMisMlFgxjQh4nVwMJ0JiMsWvMDTeLmMi
-----END PRIVATE KEY-----

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgLCq+VMi69tPinKkK
Y7t/UxBAlN/IxBcQVQqzCY4+fk+hRANCAASCK33r4ggyFz4jDGdNZoSPcTn9MQ90
bC94MnfNecD6s+Fz+VRiOn7o167Vj5EoHWXtjLLiav0+DMQMoVJXn21T
-----END PRIVATE KEY-----

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgcV/qdSRo7A+BtS3/
XYz/tRvcmn+nx6GbMES6DzvyEemhRANCAAS5J/OC5VknosRwq4k9pBJnWshy4qP/
fEop+qs5DT/ukjwAxt3xxpXzmMy5+fn0mytuX0kD6RjSFfSWzX8oT2jb
-----END PRIVATE KEY-----

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgrsKfk3kkF0Q8VnWR
owFkrp1eVEJd2GTZzl41MRAJ2s6hRANCAAS8bYwGWlXPx8HajLJIZghgD2urFEdf
mRwa5cm0ql8JeAES0skeI7eV2YXutSUQL/WDp3mf5s4PXBXHid9JgUTg
-----END PRIVATE KEY-----

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg2a/lNbUMYiNYF1D4
QJoiFcq9E5f3/qKX+zViOaQrXkyhRANCAARVEzE0iocoLpVgXTGNGywgWkp1w2b0
X+lScZZFYio3W5v2v0mdF2SgvD8v7j/mUEjt4BmfSRO9ggob+ZwiDSUi
-----END PRIVATE KEY-----

14
ssl/live/README Executable file
View File

@ -0,0 +1,14 @@
This directory contains your keys and certificates.
`[cert name]/privkey.pem` : the private key for your certificate.
`[cert name]/fullchain.pem`: the certificate file used in most server software.
`[cert name]/chain.pem` : used for OCSP stapling in Nginx >=1.3.7.
`[cert name]/cert.pem` : will break many server configurations, and should not be used
without reading further documentation (see link below).
WARNING: DO NOT MOVE OR RENAME THESE FILES!
Certbot expects these files to remain in this location in order
to function properly!
We recommend not moving these files. For more information, see the Certbot
User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.

14
ssl/live/pycm1k/README Executable file
View File

@ -0,0 +1,14 @@
This directory contains your keys and certificates.
`privkey.pem` : the private key for your certificate.
`fullchain.pem`: the certificate file used in most server software.
`chain.pem` : used for OCSP stapling in Nginx >=1.3.7.
`cert.pem` : will break many server configurations, and should not be used
without reading further documentation (see link below).
WARNING: DO NOT MOVE OR RENAME THESE FILES!
Certbot expects these files to remain in this location in order
to function properly!
We recommend not moving these files. For more information, see the Certbot
User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.

23
ssl/live/pycm1k/cert.pem Normal file
View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID0jCCA1mgAwIBAgISAzwSLh2p0otEtrfCMEDdTcSuMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNTAyMjgyMjAxMzZaFw0yNTA1MjkyMjAxMzVaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFUTMTSK
hygulWBdMY0bLCBaSnXDZvRf6VJxlkViKjdbm/a/SZ0XZKC8Py/uP+ZQSO3gGZ9J
E72CChv5nCINJSKjggJiMIICXjAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOJT3g/C
vYXcWyqfRpu65KMqrWUUMB8GA1UdIwQYMBaAFJMnRpgDqVFojpjWxEJI2yO/WJTS
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U2Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTYuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEDBgorBgEEAdZ5AgQCBIH0BIHx
AO8AdgCi4wrkRe+9rZt+OO1HZ3dT14JbhJTXK14bLMS5UKRH5wAAAZVOydtfAAAE
AwBHMEUCIQDMNsJa7LuO+bSQPNP9AmU7rXhMqZoC3bG1guu2PEOsUwIgUv97yx2W
sjpa8GC9Gm45V3sawtsbf76wRvzSQJH4c3AAdQATSt8atZhCCXgMb+9MepGkFrcj
Sc5YV2rfrtqnwqvgIgAAAZVOyd09AAAEAwBGMEQCIF4gXbIBzVOHUzUnn/1S21Tw
Po8lldzw2t3PwcPnuvGlAiB3tLql/Gm7IbL8mhYnO647yFkp9ywJ5TQM/5njtRwk
0TAKBggqhkjOPQQDAwNnADBkAjBuiQWjzfg5Uu0T1TQ8kdOxuehAkDPgAL+jlo0q
g85kE+K/awgWOlMny9XVVMhhENMCMCFm5XqJiK5d6zf4SRsAP6LHiReN3CuUmcjC
ey9fwSKf8z6769Ilerw0E6/ymc04CA==
-----END CERTIFICATE-----

26
ssl/live/pycm1k/chain.pem Normal file
View File

@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
Ig46v9mFmBvyH04=
-----END CERTIFICATE-----

View File

@ -0,0 +1,49 @@
-----BEGIN CERTIFICATE-----
MIID0jCCA1mgAwIBAgISAzwSLh2p0otEtrfCMEDdTcSuMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNTAyMjgyMjAxMzZaFw0yNTA1MjkyMjAxMzVaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFUTMTSK
hygulWBdMY0bLCBaSnXDZvRf6VJxlkViKjdbm/a/SZ0XZKC8Py/uP+ZQSO3gGZ9J
E72CChv5nCINJSKjggJiMIICXjAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOJT3g/C
vYXcWyqfRpu65KMqrWUUMB8GA1UdIwQYMBaAFJMnRpgDqVFojpjWxEJI2yO/WJTS
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U2Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTYuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEDBgorBgEEAdZ5AgQCBIH0BIHx
AO8AdgCi4wrkRe+9rZt+OO1HZ3dT14JbhJTXK14bLMS5UKRH5wAAAZVOydtfAAAE
AwBHMEUCIQDMNsJa7LuO+bSQPNP9AmU7rXhMqZoC3bG1guu2PEOsUwIgUv97yx2W
sjpa8GC9Gm45V3sawtsbf76wRvzSQJH4c3AAdQATSt8atZhCCXgMb+9MepGkFrcj
Sc5YV2rfrtqnwqvgIgAAAZVOyd09AAAEAwBGMEQCIF4gXbIBzVOHUzUnn/1S21Tw
Po8lldzw2t3PwcPnuvGlAiB3tLql/Gm7IbL8mhYnO647yFkp9ywJ5TQM/5njtRwk
0TAKBggqhkjOPQQDAwNnADBkAjBuiQWjzfg5Uu0T1TQ8kdOxuehAkDPgAL+jlo0q
g85kE+K/awgWOlMny9XVVMhhENMCMCFm5XqJiK5d6zf4SRsAP6LHiReN3CuUmcjC
ey9fwSKf8z6769Ilerw0E6/ymc04CA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
Ig46v9mFmBvyH04=
-----END CERTIFICATE-----

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg2a/lNbUMYiNYF1D4
QJoiFcq9E5f3/qKX+zViOaQrXkyhRANCAARVEzE0iocoLpVgXTGNGywgWkp1w2b0
X+lScZZFYio3W5v2v0mdF2SgvD8v7j/mUEjt4BmfSRO9ggob+ZwiDSUi
-----END PRIVATE KEY-----

28
ssl/privkey.key Normal file
View File

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDJYpXDXOcqJlW8
xJbKZLjgp9Q8wJwivEZdSrh3tDH8YF8J6QOkzNcOspGE3FK0WMSZDhdZJs9p8lVj
JFb3bvJQgrhIkYBw6pAWlBZQdF+kIsF184CE0v8Dt+95aCqrExEPWPeWzxC17KZD
NTScw2Ls35c5aJG3MAv+E7CDnsM95lNq0REUXbbf1/WHWfy8quD1CDI0VwURn4eX
Lg+am2eiXSI8iIFlrSPCct5JKbG8Icu6uMtabm+/bxQBTRFvOd9xZ+z5pzv52g9/
KbX+jKFpmPF0TE5l0HIhIailZzhX/QixFhS3oHjuUQwxveKpOnJuQmuhJImSl/fg
k3jvqg1lAgMBAAECggEBAMJAxhVcV97ge3NKbelsnqiVOrQfVnxq/7SdjrJoro6y
pvn4OfuNWyRiOtvdailsNrcsUHk+ZnPbvWGUfA7QhgwDC590OmCw4avlzGBu4JKC
s/oCl8WHgVUk52pEgGPkUGBtgOWHdqcFTpslh0pvbczvH//QTj5Vqju64lkTm2Do
Q5UVl1mvPB5nybxE99IIsvlkfQFANnFyqroy32dGlu6Do9kPpXJBRZ7X9c8elrh/
wR6bGUJUeJ1tzlp/T4ARp7jMXPEJhqIidP2Ogj+dDTeTvD2HOoEXdLW1lsJJuBLR
NkLSnx3mMPrNChGaSsS5obKZotTWtqoRjsvKrC+hrAECgYEA9xADrMaGnGBvq2jG
AbfASw2VCrZfr31l5FHYL+Yiu/09JuIe+2ktfhMLhQimJoe9G1aGBK+T+rCLjPxx
e6cN+Jr01NXZrZP3tPJfKVdo7TWVQ0g5Dh3U5kSfNS2Wfmlb0PkondL73cvPzX67
QTjPIyfYr0SM4kYOzBl0W//A1BUCgYEA0KuQHIP7K4xJFz1s1B1XazJSNpDVF5CP
T4FYGk1cO7nAVjUTrYC3JL7FBYKFVZdvy2rCAMw7NvpjUVYNwn36XiU44uPTSrTE
IYgMDoHSNMzLS1tLt/x9bytSY26c2W+YsWJ+VdiieOtwLzgUNFSa153GHBF1M5L/
g2PBITySGBECgYABFPnfJNNsFeQHTSMo2MQnz/xqGpharWLn2A/pTcmzJw3AgNb/
5NsFJVI0l/AaVRfX6c4WcSplu6YwzN42W2ntP8h4siMM5ov8J9+Qz8gu2cA4ljVh
wXGwPHayBewVy6JSTPUHk+f0dbMIRFjPlU8a6U7Cnbs8NnBUJnxi9sDCbQKBgD3T
t31bdZ4vkLB8GLS4hOBUJpvYSesTgALUliAk78EahmyEiXINAza193Zsd8kmd49T
8GuAF8NwaOD+mFEaNoaSjMpdKoumB77PqpLZ0EiorUuEn2jCPQAlW+HuMjcSo7Fb
N4eECo+9Yp37BbGDp+Ve8AX8/jbrxR1O/zgz1C2hAoGBAM3aY0yWaETVhRjpXAIY
h46cyNBavc74zsUoSjsq9WKRwq6oD8ES5fUQItFChtXHOkwhctL37jJwFHZovpHX
uIBEnUNtL8xoY+h7cxqK0KGylbNJFYPf6iVZt27/mhOd6fI+aBpaRaqqJ36vZms6
VXQXXJEDJ0/0WLrBYfW9PEyi
-----END PRIVATE KEY-----

15
ssl/renewal/pycm1k.conf Executable file
View File

@ -0,0 +1,15 @@
# renew_before_expiry = 30 days
version = 2.11.0
archive_dir = /etc/letsencrypt/archive/pycm1k
cert = /etc/letsencrypt/live/pycm1k/cert.pem
privkey = /etc/letsencrypt/live/pycm1k/privkey.pem
chain = /etc/letsencrypt/live/pycm1k/chain.pem
fullchain = /etc/letsencrypt/live/pycm1k/fullchain.pem
# Options used in the renewal process
[renewalparams]
account = 2c313b0969bb23349f5928f59bcc3ba9
pref_challs = http-01,
authenticator = standalone
server = https://acme-v02.api.letsencrypt.org/directory
key_type = ecdsa

34
ssl/rgk/CA/rootCA_RGK.crt Normal file
View File

@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----

54
ssl/rgk/CA/rootCA_RGK.key Normal file
View File

@ -0,0 +1,54 @@
-----BEGIN ENCRYPTED PRIVATE KEY-----
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
nKR/NYTdKYoB2FxXA/8JUQ==
-----END ENCRYPTED PRIVATE KEY-----

34
ssl/rgk/CA/rootCA_RGK.pem Normal file
View File

@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
MIIF7TCCA9WgAwIBAgIUCjNSLVOex9BtvXUdPZdHAUKLSRswDQYJKoZIhvcNAQEL
BQAwgYUxCzAJBgNVBAYTAlJVMQswCQYDVQQIDAJVUjEQMA4GA1UEBwwHSXpoZXZz
azETMBEGA1UECgwKUkdLIEZhbWlseTEMMAoGA1UECwwDUkdLMRMwEQYDVQQDDApS
R0sgRmFtaWx5MR8wHQYJKoZIhvcNAQkBFhBweWNtMWtAeWFuZGV4LnJ1MB4XDTIz
MDYwNzA5NTAzMVoXDTI2MDMyNzA5NTAzMVowgYUxCzAJBgNVBAYTAlJVMQswCQYD
VQQIDAJVUjEQMA4GA1UEBwwHSXpoZXZzazETMBEGA1UECgwKUkdLIEZhbWlseTEM
MAoGA1UECwwDUkdLMRMwEQYDVQQDDApSR0sgRmFtaWx5MR8wHQYJKoZIhvcNAQkB
FhBweWNtMWtAeWFuZGV4LnJ1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
AgEAtNW9c+4e9mWworB1AnGouAkJAkadv15VG9DYUylw5hxIxCh/mGItAdCIFV/y
yZCPyeLbvkXTkukCxuGdL2vyB2c1+bvBgYWNnYGg8dvrCLkK10pQwq8lgucVDlBG
+uS9mUAwQ/VUibqOolknWGiUby4dxNaF3O7Oqkn/WC5CJ2tTO8TBBB42nQg1jwO/
qqvDk3e1f2wXMi1WCHYcO6Hq9ne8FsuBNnZo3FJyFCDN+AsJRHUmkuMmiDWOXW27
/oh0T3gg5HH4jGuwRelLCq7UU4ea9vG/ryFcfL/2fNYRKnOwK6q8KF08UMtKSEk/
xpb7FivjtNyj1bdFOBc2M9fMziCFH5/zBdX9v81HHRaRrzHi9jHAIIBY8KOvHf/E
wcie6bvUiZTGwxvHNrIuYE4RADGyj9mFmEXqhHhNuhT6V9xhsYHNh5UFg0X824vn
dOiJ+VYiGLIBVXSQmNdwF8tGvUHmWImeRhnF/nScYvGkh0Eae6u/bwe8pfJNeJoV
Veh89nPO8t9mh9hZUmYdtIK+KF9HEn25LRQuZo98/xe433NtCM/LRFrMsnJqOzS+
9jOp+mYdXZ0mCciw/0VmVF+z7oevRjUNEqMZHJRua/VOh0MVzG8pqpGjYHBtQ0EU
vafnmjoX91ACi9WMvY9SfHXhklqvqcMClDbck4jwWTUZ13ECAwEAAaNTMFEwHQYD
VR0OBBYEFDh4jTUwkuX3p+yn0a5zSh+WWNhdMB8GA1UdIwQYMBaAFDh4jTUwkuX3
p+yn0a5zSh+WWNhdMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIB
ADPBPN09RcmBL25SLcQq+6v9BaiZtVd1grRnHI24AHt8aJEB/eGPbIO0AbO5l7PI
JVblPzAXxkZCU3nLOuej3pwHImNPafE06d/m8oiBrqT1Xqt2wQU5FsPnjCP9wrwO
NS/EIXfY/RMATU7rtM/Clz2UNHNsmxpHfNEdVMBvSdX6NyGS9YNm9NpQ9W/Sqqfg
3cQy2gG+s87+2vs++fu/3u9GPWe25W3CtEm/3MxPfhyUzQdTe1TqXxh/e+BUZxLb
mJdQfr50ensphfF0nFpzl9rkJ3ovTxVekvAZc/Y3n/crxA6hrGinjbCUjhP+75zw
4rYAgJ+B2dhGNEHpF6L0BNyB0bb8cWDs9yBRECzLHH6dmcL5kGwAQkYwdLOhFhoE
hEEnYxecO6FtPq9cssctBln2p0p/hUZHS2pKDjiR7zr2ciYq8gLgvRwsp9VpQf6B
uxI7l8E3udkFt88AVeUNU+mXrAXfngd9GhS3UZio9wSg5gEVTb5FnLrO2CBh33eO
mOlXxK5osNQ49XLNrrOBWXoDtWZzk1q4GFwXctkfRiGt+Z7YzLES9sqWzHnUDTj+
9hccheCqg28cE04FLB1pTJvYP+iuRe27wcv+kA4l+a/WqBPyHnam5+1OzGX1fEDh
mFQXWT0MFK/I8uhdTkOMfhtmNQvGt8Rj4/6cDfne0rsO
-----END CERTIFICATE-----

View File

@ -0,0 +1 @@
4DA2C22C62C6D83BD542B3389B12387A6728D4D8

9
ssl/rgk/ext Normal file
View File

@ -0,0 +1,9 @@
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.rgk.fm
IP.2 = 192.168.30.22
IP.3 = 11.200.0.0/24

29
ssl/rgk/rgk.crt Normal file
View File

@ -0,0 +1,29 @@
-----BEGIN CERTIFICATE-----
MIIE8zCCAtugAwIBAgIUTaLCLGLG2DvVQrM4mxI4emco1NgwDQYJKoZIhvcNAQEL
BQAwgYUxCzAJBgNVBAYTAlJVMQswCQYDVQQIDAJVUjEQMA4GA1UEBwwHSXpoZXZz
azETMBEGA1UECgwKUkdLIEZhbWlseTEMMAoGA1UECwwDUkdLMRMwEQYDVQQDDApS
R0sgRmFtaWx5MR8wHQYJKoZIhvcNAQkBFhBweWNtMWtAeWFuZGV4LnJ1MB4XDTIz
MDYyMjEwMTgyNVoXDTI2MDMxODEwMTgyNVowgYIxCzAJBgNVBAYTAlJVMQswCQYD
VQQIDAJVUjEQMA4GA1UEBwwHSXpoZXZzazETMBEGA1UECgwKUkdLIEZhbWlseTEM
MAoGA1UECwwDUkdLMRMwEQYDVQQDDAp3d3cucmdrLmZtMRwwGgYJKoZIhvcNAQkB
Fg1weWNtMWtAcmdrLmZtMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
vCrVm2YssptJ+ptaWX2VbfgbItrYPjFVmflzrwrsV4UzSTfM8fy91gM7DAhqwLyS
TsM0hIcxqCCE+VIgpUzeL5kJCsMpLmEClXqWESfoSBrJX0/fsogsmLup/bkPn7V3
v2VrOTmDlpw1zsoiTpQUeHlXLxfXTJRnqrFaOYX9Rkfi4UntfdWly6VMCdqj87Bs
4JdveoHenZbBte7BvotI/ah3HDgRSDmJOnfqpU/g6aDotOK130UDWN/XawAY3QTa
UoD/0DzhXdjme0onjUhp/NkgcmWBxmA+KX3b66NfgZYc8HbOxcKOYuhNBHDLqbZ2
NVC9as++Cf0ZdaiZb18ShwIDAQABo1wwWjAfBgNVHSMEGDAWgBQ4eI01MJLl96fs
p9Guc0oflljYXTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE8DAfBgNVHREEGDAWgggq
LnJnay5mbYcEwKgeFocEC8gAADANBgkqhkiG9w0BAQsFAAOCAgEAGa6ShLGam7oj
trHR5UZbJG2rYIvbVRjheI+c5JKkVHgjXEl12pG5HJarIq+KtS1PBRgGJd0ArB4Q
7TbCnPfBwlOIkpkHUa3pjPwuTfDfrAM2s6coZ1Lga+YspOo8CrA7QPqN5ba0lAMR
7MOd/EPaBgSE2SVRhNIepQQfyz3CK6+y30AwuGly0I7RryKsWTJofsQxTZtDRGCT
Ro6sb3ygLNLHwxag7nVnVE0G3XbHWwEPRY6ShB3IDmZ9FNJZKORTxJI81ilT/2oL
OmvzsjML1EJXj1i41CLQPBobCMjRdJ7wAvP4kf7lMlO0LYT+2pnsnQpOLi+gzGax
ymgCXSH9nIC1n8Jb/aD6YkSYNUeIwCQyZ6qGmm0nyA5DwT1tT4eN62N4d1s6OASJ
eA2QM9bYoXrvAeMzvc2krykQqr2ehqXyTJn1V7r0fTr2yTbmEla5lUZnvZXRqjiF
VCX3d2NkxHt9h+wBZtL9BtftZ/419rNVceOAOoUxSkz5PWLBgIiGFWYmRVzwKNDi
9cZfgefg+fAltHVGTe4Ct37vfOp/EubeKXyhGsBmUF4c3W0i9d/yiW4GhNi65669
keXa4LUCUsLZFIxU798snvtpkOa/EisH/rn+eGxH6AWvQUodL5BwvhU38Kx7VZKT
dF0r0FUDpwD0ppZjyiaIPFsifm469eA=
-----END CERTIFICATE-----

17
ssl/rgk/rgk.csr Normal file
View File

@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICyDCCAbACAQAwgYIxCzAJBgNVBAYTAlJVMQswCQYDVQQIDAJVUjEQMA4GA1UE
BwwHSXpoZXZzazETMBEGA1UECgwKUkdLIEZhbWlseTEMMAoGA1UECwwDUkdLMRMw
EQYDVQQDDAp3d3cucmdrLmZtMRwwGgYJKoZIhvcNAQkBFg1weWNtMWtAcmdrLmZt
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvCrVm2YssptJ+ptaWX2V
bfgbItrYPjFVmflzrwrsV4UzSTfM8fy91gM7DAhqwLySTsM0hIcxqCCE+VIgpUze
L5kJCsMpLmEClXqWESfoSBrJX0/fsogsmLup/bkPn7V3v2VrOTmDlpw1zsoiTpQU
eHlXLxfXTJRnqrFaOYX9Rkfi4UntfdWly6VMCdqj87Bs4JdveoHenZbBte7BvotI
/ah3HDgRSDmJOnfqpU/g6aDotOK130UDWN/XawAY3QTaUoD/0DzhXdjme0onjUhp
/NkgcmWBxmA+KX3b66NfgZYc8HbOxcKOYuhNBHDLqbZ2NVC9as++Cf0ZdaiZb18S
hwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAHAJ+TlYouCG6zdk4AzRCz/5bJNh
0E8OyWcXoRXIzRNRkEo9/fQ79a6lQRig+pgH4clziUyCEGzEO9+zkMxxriOahGlj
DMxNaTS7A6xFxuABDxY5KK6jVDrq3xWTDyEGESpu/Txt4ZKOXwn+oaVEaO5xpcb9
3Yair2O/qlhheDRHbZdC+VvBx3FfZbWDrIdgMwyeii/z99fjUqjaeDuzdnCjV8rc
LE6l8S/cLe0lzfbqgUnBNiMHCqqoSXe58vs2D42jWi+0mJoGu/lWmLNFiIbHaHGS
IXv18GK90V27RHBDq6SRuHzMq/SZpvA2T8zOcc6PODU6EJihysAcSgognmM=
-----END CERTIFICATE REQUEST-----

27
ssl/rgk/rgk.key Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAvCrVm2YssptJ+ptaWX2VbfgbItrYPjFVmflzrwrsV4UzSTfM
8fy91gM7DAhqwLySTsM0hIcxqCCE+VIgpUzeL5kJCsMpLmEClXqWESfoSBrJX0/f
sogsmLup/bkPn7V3v2VrOTmDlpw1zsoiTpQUeHlXLxfXTJRnqrFaOYX9Rkfi4Unt
fdWly6VMCdqj87Bs4JdveoHenZbBte7BvotI/ah3HDgRSDmJOnfqpU/g6aDotOK1
30UDWN/XawAY3QTaUoD/0DzhXdjme0onjUhp/NkgcmWBxmA+KX3b66NfgZYc8HbO
xcKOYuhNBHDLqbZ2NVC9as++Cf0ZdaiZb18ShwIDAQABAoIBAA0jcIbJO5W9Ag1d
i5F0E1r6V+q3HSI6j5+Qq2MtgBMcWdhi7Qx4eUjYMOdGLy4F/LFDMAeQ6Qa0PpSq
B12DYIAyT09RES8L1wJY7OGFx9JBDI57JUNx/qsrb1Mn+M9N/G6AxlvYiDeb8KXf
t0WFUWiYEF5Za88NDa/9ci9SC708aQCnJUmG6r3AADWOYCSQsrJXD1iiBUZzM5bT
hDVeMRoZv/5N8JGZqDzUMx9GsbyqdS6xCgreZsSHZOvD5FG6jxV/vDB732ibkiHT
P3OzXFR0b2m9OQMvPRiiGAFuw6xbmSzbLfdhx5YI0PkUDSp6EQ8ote4G83DuiDIg
m+7SkwECgYEA675cBoH8keIb10iK1R9fibyP7ruPlhtKbOT87QUgLSN+hZUnUyzq
ZwzF8HFu2lz/AR5OnD2yn1+j2aDFzwf6gGYwUczLRldDFkGYNlmFJ7/146bjv95/
OA189QNDyAlsktXSeSdlYO+2uu9xZ4eLxUDNALUuX0b3IPepMt5bt1sCgYEAzFXx
Jn+kBx6kbGNnqCziYhNfIPyh10B7NdJWXEiAOreK8fjb/pR4py+vS3Z2c5Bs/XQ3
amtkpgwiZlcpRtUaau1GvTfNzrDvnj7DxdkzJShB5veOIo3oK0Nu9tKDHDfBZdOv
XYgAJPT2GggvYKKoQXIthbss7KR6uAH7CJy7pUUCgYEAx0lzLiUwyHpmosW2Z5hQ
AXYgDucL6Q9FCW1Cy3Or0bzRtkdyqQOtXFQV+L9LwNkg0Wc3eSlHGSeWseERl4Td
JTI94sjHhr05/1SQQlHHGOVUDpEEsyx6S35LhiyuXippWG/dr4G4WAwNY1YLfkO9
ypCPPOvtOaoaPAphRJlo20UCgYEAnTMlAjxCgeO2FVjoXz6gr1k930/cZpBJ+d8m
53ozhHi+IWgWP6YTqHOMBZ9Og5vB7b+h/nI+jWxabqdxrve1ijufJ2UuJWyD/BdH
YAe4TEbLZJhhNf48dkQ7sxHDIktWszMHAAroKYZ3axGO+WZJ0Ye4s+CLMEddzgBg
E4EY740CgYEAz3uhP4+i6ZKwsQvxXE5ltGnDHGCYlxCuDP+x0CJBpjikpZ5EiXRp
M/DL9dHEvN1LN/OzaZq4vL3Zj27hpRz3+nD4FSaf4pvq1Uu3sV+/VjAYdhBQDB7b
Cwqaxgfh8qaDkNnzox+MaCuAgEs93Fs33S3zsT8QE2A0G+uBXgeE4FA=
-----END RSA PRIVATE KEY-----

63
ssl/rgk/rgk_bundle.crt Normal file
View File

@ -0,0 +1,63 @@
-----BEGIN CERTIFICATE-----
MIIE8zCCAtugAwIBAgIUTaLCLGLG2DvVQrM4mxI4emco1NgwDQYJKoZIhvcNAQEL
BQAwgYUxCzAJBgNVBAYTAlJVMQswCQYDVQQIDAJVUjEQMA4GA1UEBwwHSXpoZXZz
azETMBEGA1UECgwKUkdLIEZhbWlseTEMMAoGA1UECwwDUkdLMRMwEQYDVQQDDApS
R0sgRmFtaWx5MR8wHQYJKoZIhvcNAQkBFhBweWNtMWtAeWFuZGV4LnJ1MB4XDTIz
MDYyMjEwMTgyNVoXDTI2MDMxODEwMTgyNVowgYIxCzAJBgNVBAYTAlJVMQswCQYD
VQQIDAJVUjEQMA4GA1UEBwwHSXpoZXZzazETMBEGA1UECgwKUkdLIEZhbWlseTEM
MAoGA1UECwwDUkdLMRMwEQYDVQQDDAp3d3cucmdrLmZtMRwwGgYJKoZIhvcNAQkB
Fg1weWNtMWtAcmdrLmZtMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
vCrVm2YssptJ+ptaWX2VbfgbItrYPjFVmflzrwrsV4UzSTfM8fy91gM7DAhqwLyS
TsM0hIcxqCCE+VIgpUzeL5kJCsMpLmEClXqWESfoSBrJX0/fsogsmLup/bkPn7V3
v2VrOTmDlpw1zsoiTpQUeHlXLxfXTJRnqrFaOYX9Rkfi4UntfdWly6VMCdqj87Bs
4JdveoHenZbBte7BvotI/ah3HDgRSDmJOnfqpU/g6aDotOK130UDWN/XawAY3QTa
UoD/0DzhXdjme0onjUhp/NkgcmWBxmA+KX3b66NfgZYc8HbOxcKOYuhNBHDLqbZ2
NVC9as++Cf0ZdaiZb18ShwIDAQABo1wwWjAfBgNVHSMEGDAWgBQ4eI01MJLl96fs
p9Guc0oflljYXTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE8DAfBgNVHREEGDAWgggq
LnJnay5mbYcEwKgeFocEC8gAADANBgkqhkiG9w0BAQsFAAOCAgEAGa6ShLGam7oj
trHR5UZbJG2rYIvbVRjheI+c5JKkVHgjXEl12pG5HJarIq+KtS1PBRgGJd0ArB4Q
7TbCnPfBwlOIkpkHUa3pjPwuTfDfrAM2s6coZ1Lga+YspOo8CrA7QPqN5ba0lAMR
7MOd/EPaBgSE2SVRhNIepQQfyz3CK6+y30AwuGly0I7RryKsWTJofsQxTZtDRGCT
Ro6sb3ygLNLHwxag7nVnVE0G3XbHWwEPRY6ShB3IDmZ9FNJZKORTxJI81ilT/2oL
OmvzsjML1EJXj1i41CLQPBobCMjRdJ7wAvP4kf7lMlO0LYT+2pnsnQpOLi+gzGax
ymgCXSH9nIC1n8Jb/aD6YkSYNUeIwCQyZ6qGmm0nyA5DwT1tT4eN62N4d1s6OASJ
eA2QM9bYoXrvAeMzvc2krykQqr2ehqXyTJn1V7r0fTr2yTbmEla5lUZnvZXRqjiF
VCX3d2NkxHt9h+wBZtL9BtftZ/419rNVceOAOoUxSkz5PWLBgIiGFWYmRVzwKNDi
9cZfgefg+fAltHVGTe4Ct37vfOp/EubeKXyhGsBmUF4c3W0i9d/yiW4GhNi65669
keXa4LUCUsLZFIxU798snvtpkOa/EisH/rn+eGxH6AWvQUodL5BwvhU38Kx7VZKT
dF0r0FUDpwD0ppZjyiaIPFsifm469eA=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----

58
ssl/server.crt Normal file
View File

@ -0,0 +1,58 @@
-----BEGIN CERTIFICATE-----
MIIE9DCCA9ygAwIBAgISBLS19bDcVBNvFEQkL4kWAAODMA0GCSqGSIb3DQEBCwUA
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
EwNSMTAwHhcNMjQwODEyMjIwMTM0WhcNMjQxMTEwMjIwMTMzWjAdMRswGQYDVQQD
ExJ0b3Jtb2IuZHVja2Rucy5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQDJYpXDXOcqJlW8xJbKZLjgp9Q8wJwivEZdSrh3tDH8YF8J6QOkzNcOspGE
3FK0WMSZDhdZJs9p8lVjJFb3bvJQgrhIkYBw6pAWlBZQdF+kIsF184CE0v8Dt+95
aCqrExEPWPeWzxC17KZDNTScw2Ls35c5aJG3MAv+E7CDnsM95lNq0REUXbbf1/WH
Wfy8quD1CDI0VwURn4eXLg+am2eiXSI8iIFlrSPCct5JKbG8Icu6uMtabm+/bxQB
TRFvOd9xZ+z5pzv52g9/KbX+jKFpmPF0TE5l0HIhIailZzhX/QixFhS3oHjuUQwx
veKpOnJuQmuhJImSl/fgk3jvqg1lAgMBAAGjggIWMIICEjAOBgNVHQ8BAf8EBAMC
BaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAw
HQYDVR0OBBYEFBqTPE4yXQF/VkBBH/VvroLmBNBYMB8GA1UdIwQYMBaAFLu8w0el
5LypxsOkcgwQjaI14cjoMFcGCCsGAQUFBwEBBEswSTAiBggrBgEFBQcwAYYWaHR0
cDovL3IxMC5vLmxlbmNyLm9yZzAjBggrBgEFBQcwAoYXaHR0cDovL3IxMC5pLmxl
bmNyLm9yZy8wHQYDVR0RBBYwFIISdG9ybW9iLmR1Y2tkbnMub3JnMBMGA1UdIAQM
MAowCAYGZ4EMAQIBMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHYASLDja9qmRzQP
5WoC+p0w6xxSActW3SyB2bu/qznYhHMAAAGRSNH2BQAABAMARzBFAiB7ZOCxx74k
DuL1uETEX3tfdflx7rv2I/vMJFSoiRs0DQIhANmKguPy8MipCg75wd0HhVDTerYe
flVDAlXDniUOh31lAHYA3+FW66oFr7WcD4ZxjajAMk6uVtlup/WlagHRwTu+UlwA
AAGRSNH2wAAABAMARzBFAiEA1NcVmhGKU+v5x8L2tjCRdXTf38h+GfFyesabFkAh
SSYCIBNdMj7mboqI5a4FfL93Z6D7QYKWJX5yUpcoHbNsyhQsMA0GCSqGSIb3DQEB
CwUAA4IBAQA9p4i9c5KfNIt8/Csms7NxgWPF04Np+fekkGQ1zZFSYgJqi5oVLaEs
3GlT/EJlBh7KUM5Z9fMsz2wlta0Jyr4sqzZpTUqKsVVn316tGXH36x/RO+fGcEFf
GkEfbMRSUY2NFUoNfxU1skQ/DweMdVZklnJ6OsAYiXQj/ZwPq9Bsw0WJdt1SZN2b
nj3Edf+M5k1gM6nZ5CYeYb/SVA4WGW3JEEUFHsCODHw+Vdd0AIeKu+EX+RM2tVcW
kw349TFAufEAZveE/9oysg6a/yAbHUO0qrzrKYo4KK8i+3GTGL91u+5FTsGx8Fd5
bpQzm/yVTF3x4Zw4Q6CWorTzgNknHAFR
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFBTCCAu2gAwIBAgIQS6hSk/eaL6JzBkuoBI110DANBgkqhkiG9w0BAQsFADBP
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
bmNyeXB0MQwwCgYDVQQDEwNSMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQDPV+XmxFQS7bRH/sknWHZGUCiMHT6I3wWd1bUYKb3dtVq/+vbOo76vACFL
YlpaPAEvxVgD9on/jhFD68G14BQHlo9vH9fnuoE5CXVlt8KvGFs3Jijno/QHK20a
/6tYvJWuQP/py1fEtVt/eA0YYbwX51TGu0mRzW4Y0YCF7qZlNrx06rxQTOr8IfM4
FpOUurDTazgGzRYSespSdcitdrLCnF2YRVxvYXvGLe48E1KGAdlX5jgc3421H5KR
mudKHMxFqHJV8LDmowfs/acbZp4/SItxhHFYyTr6717yW0QrPHTnj7JHwQdqzZq3
DZb3EoEmUVQK7GH29/Xi8orIlQ2NAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
AgEAMB0GA1UdDgQWBBS7vMNHpeS8qcbDpHIMEI2iNeHI6DAfBgNVHSMEGDAWgBR5
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
AQsFAAOCAgEAkrHnQTfreZ2B5s3iJeE6IOmQRJWjgVzPw139vaBw1bGWKCIL0vIo
zwzn1OZDjCQiHcFCktEJr59L9MhwTyAWsVrdAfYf+B9haxQnsHKNY67u4s5Lzzfd
u6PUzeetUK29v+PsPmI2cJkxp+iN3epi4hKu9ZzUPSwMqtCceb7qPVxEbpYxY1p9
1n5PJKBLBX9eb9LU6l8zSxPWV7bK3lG4XaMJgnT9x3ies7msFtpKK5bDtotij/l0
GaKeA97pb5uwD9KgWvaFXMIEt8jVTjLEvwRdvCn294GPDF08U8lAkIv7tghluaQh
1QnlE4SEN4LOECj8dsIGJXpGUk3aU3KkJz9icKy+aUgA+2cP21uh6NcDIS3XyfaZ
QjmDQ993ChII8SXWupQZVBiIpcWO4RqZk3lr7Bz5MUCwzDIA359e57SSq5CCkY0N
4B6Vulk7LktfwrdGNVI5BsC9qqxSwSKgRJeZ9wygIaehbHFHFhcBaMDKpiZlBHyz
rsnnlFXCb5s8HKn5LsUgGvB24L7sGNZP2CX7dhHov+YhD+jozLW2p9W4959Bz2Ei
RmqDtmiXLnzqTpXbI+suyCsohKRg6Un0RC47+cpiVwHiXZAW+cn8eiNIjqbVgXLx
KPpdzvvtTnOPlC7SQZSYmdunr3Bf9b77AiC/ZidstK36dRILKz7OA54=
-----END CERTIFICATE-----

View File

@ -0,0 +1 @@
{"creation_dt": "2024-10-01T04:44:37Z", "creation_host": "certbot"}

View File

@ -0,0 +1 @@
{"n": "xo99UPo724cbVaaXcG5-WYu5Djw82Gf2Nu7l2rjY7M0v3OhjGe-blgqBZSCl8Q3uM3gp8Jz_PsQjAkEHRfDrfzQwS_xuoVOQsjMaVpeTzuU1tDxnl9OnhTPyPsNbIqM87rR9tEoPpz_32BZxuXRNL3LUqTbeH4f7Zodnj4P9tQu0Ift7m3VmBIZmuZvqjpLIYtMu0iV25ypr84j_BiKGREn9Z9_xOtGJMbkWgbQ0kw2NZy0in_hiB9SNnOY1-zdJo6dmJ0Fz3mk41JyKWblZ47mbYwH4anRnw7aPoPmfRXn5ZUBQm_CjMLX2V_w21lsTmfiSeA0xvKWNXk0g3x2uVQ", "e": "AQAB", "d": "BDhukHcRKKRhh1uIIoKmut6Ga3AKVws2p4pCZnjBW58s4kQqPxXht7m3cF_WRx5lrsBiG9QqdLoUiGq7bdgmGUkRsbvG2jT9gVwmtip4oNAsaQ1Tol2EVQd6oazjVgQkOmqptVhRpttsODKZ7jgzn8uQC5y38fGg_Vfpcpp6nQt-Ci6lyUDFl3G5Cjc0f5e8OUY059iwtPP2avULEhe2-UD1GvkkqamZ8mcI0mgS4GZmR68wreRrbWgSsHPUrXrJOU6lLJIFCtWUZZYC7TlsNhM4yH-zpH2NLXiybnSyDMH4wXukDxc4NzZPjkfGp195GgpfkXhd6CuSWUmDJiKRwQ", "p": "7n-GTPxOZPIoKUxA0LrDenYuZI0_yJMAyN_qtBgk9E_iF5yjY4bgkuGCJsdmfwTkCISObnD80HIh0N66ov0T70EXjnhmifUcvuAWqZ-8KNANq73WdJ9SDuL-vxq08qMEXtWhrP1ExNeM-2NAF_SRRlayAM0xuSlMp28FrwhITfE", "q": "1SGwLhawITFeVbJpHtOVQ9Chcvc79DqttC67ggmYqjgMT6lgReHWM-CqfYWUOieQfhHyn2bVGctz3kb83wTaQ8Nvl9-FKVdEKftuca626MLqFBWNQfdjdwNKfFO03lrIZHKCmwgbjE4JadkbgzJCRYqtXyhjZV06qd2pgD0QkqU", "dp": "358QxNR5iOsJPxexWkUTjpqLC1rpaF51iONzBKPy2mSgYHVNOb-4h-AMEeI7N3PVgCsSBXnJgoTRMi_0nWhgLaBBvyMjOc1qw4oHlcohOb9CYjqgfz73SOAL7hHTggHZ0jXK3xGmTk6xcPBxo0R8hpA5XMkJC00vA3r0wFYqvXE", "dq": "IHtV4nBKv4RKoDzkkHImmYM-V8seNAaNWpyUryjPP4HzPmDN71iP0LA4y5CEGqjU-KG7nFeLurarHgEroMGYkiNC6p6CKN7H4K4VEvZRof-ytQTj1l3hps21mGUZd5nWWJirFv2RVTy_aoZQDxqlxvtvmMULAPPIcQL7RjQIRpE", "qi": "P-MBoj2qp1m9lLItej56OYOpunHboejGpqH3YWvA2YkkB90K5BNtP8QB9aasHSe-t0wVBt4MklbEAhkXzlDTvvoyLXmjv_Z7XNBkHKguZo6Qlv2eXYMriiOU7yYFwn-FLBWGNoMzNTWapo-b_IHOCKASPJ1HLXY5Ip3wYsE9_TI", "kty": "RSA"}

View File

@ -0,0 +1 @@
{"body": {}, "uri": "https://acme-v02.api.letsencrypt.org/acme/acct/1976177457"}

View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID1DCCA1qgAwIBAgISBJoRh3EANUFVTP+8x1kRmP36MAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NTAeFw0yNDEwMDIwMzM1NDdaFw0yNDEyMzEwMzM1NDZaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE5pj2/0
OJS/mtx5lmpgULDSoxH6WwCbiFWEnQVxZSexROjq2qqmHFZwf4RlJYeQTR6gw8iQ
6MBZqBgR9eLQYTOjggJjMIICXzAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFI3bXCIU
7VwkJUVGKYHR1gOOcLdsMB8GA1UdIwQYMBaAFJ8rX888IU+dBLftKyzExnCL0tcN
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U1Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTUuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEEBgorBgEEAdZ5AgQCBIH1BIHy
APAAdQBIsONr2qZHNA/lagL6nTDrHFIBy1bdLIHZu7+rOdiEcwAAAZJLgeo7AAAE
AwBGMEQCIGDsBpyzFKJ0nlp4cv0X/MoidovS3ZSIR54uSFZVtgSsAiBHalHuKJLo
5t10hSpUKHGUngvmXzmewbeDxJptNhDl3wB3AKLjCuRF772tm3447Udnd1PXgluE
lNcrXhssxLlQpEfnAAABkkuB6m0AAAQDAEgwRgIhANuVCBYBT4mIz7naLKYFDGy+
i2O6uXCNgzAkQBtHHBIaAiEA6TrKM5yEShKhkc9nIAW+YHL2P/u+ZotZkG0KCGOj
Gt4wCgYIKoZIzj0EAwMDaAAwZQIxANiwsQoiWOhSerdi376OqLZEZnruI19b5ick
8D0xvgQ8zpbXlg07CdgbLt6bN+xPPwIwMJ0ZJ7T0zfqmjrTAZdQeZChzg1tssd3l
m1PLZSzmrFtxqK7HS3XoDyoGF8gUXDNR
-----END CERTIFICATE-----

View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID1TCCA1ugAwIBAgISBJWYDGw6FfIu3hgm1nwkvmUPMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNDExMDEwNTIxNDBaFw0yNTAxMzAwNTIxMzlaMB0xGzAZBgNVBAMTEnRv
cm1vYi5kdWNrZG5zLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIVznb1w
2qiAlqmvC0N9Oide2sBTykZSgLiIrE/jCys2Ofe45VBBKOV8vAbo2s9M8x/Yxgb8
69TTBui+8x3esEGjggJkMIICYDAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFHmv1l9f
bpMTvWJzQjZzuobd378LMB8GA1UdIwQYMBaAFJMnRpgDqVFojpjWxEJI2yO/WJTS
MFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U2Lm8ubGVuY3Iu
b3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTYuaS5sZW5jci5vcmcvMGwGA1UdEQRl
MGOCFGNsb3VkcmdrLmR1Y2tkbnMub3JnghFtb2Ftby5kdWNrZG5zLm9yZ4ISdG9y
YmtwLmR1Y2tkbnMub3JnghJ0b3Jtb2IuZHVja2Rucy5vcmeCEHRzaGsuZHVja2Ru
cy5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEFBgorBgEEAdZ5AgQCBIH2BIHz
APEAdwDPEVbu1S58r/OHW9lpLpvpGnFnSrAX7KwB0lt3zsw7CAAAAZLmYaIyAAAE
AwBIMEYCIQCHL4HZ4Uwd2ozgsSX/lXG5RbtnQPxVjb07O4TdGKdZqgIhAN6DRwCV
gawn+fXWPGv4D13mPRKpocL+ucTXRQCWzvXJAHYAfVkeEuF4KnscYWd8Xv340Idc
FKBOlZ65Ay/ZDowuebgAAAGS5mGh/gAABAMARzBFAiB7kthEzj/7XIgoWP92cRNq
HFkyhCDCmp5w6vZb7TEMywIhAIe3A7f23ai2d2iVU/D4yvtz+cgrMiMIUHYelXZ0
LA/rMAoGCCqGSM49BAMDA2gAMGUCMQD367vrTiOhqNKeCFUPa1ANgkGEafJjAdgJ
6sFI9ZXLrItvwCP0kglx+APjXu2ow/wCMDvF4R4DicYLYllR6BHNH4r7WOicYOM6
4cAMLtGu1xlvjIQLZqnsvZx5eqaoU2io2g==
-----END CERTIFICATE-----

Some files were not shown because too many files have changed in this diff Show More