Open bmvandoren opened 7 months ago
I'm still having this issue and would very much appreciate guidance, as I still cannot upload updates to my package.
@bmvandoren I think we're missing some key details about your set up here - specifically some versions of anaconda, twine, requests, urllib3, certifi, ca-certificates.
We can see that you're able to connect via the openssl
tool, so there might be something else amiss in the Python environment.
Thanks for getting back to me, @miketheman. Happy to provide whatever details would be helpful.
conda version : 23.10.0 conda-build version : 3.22.0 python version : 3.8.18.final.0
ca-certificates 2023.08.22 hecd8cb5_0
twine==4.0.2 requests==2.31.0 requests-oauthlib==1.3.1 requests-toolbelt==1.0.0 urllib3==2.1.0 certifi==2023.11.17
Many thanks.
Also worth highlighting that the package is large (81.3 mb), but below the 100 mb limit (and I was able to upload earlier versions of virtually the same size).
Thanks. I've also noticed that some of the openssl debug commands are referring to pypi.org, not test.pypi.org where you're seeing the issue - can you please update/run those as well and provide the output?
Happily! I think I found the relevant commands, but let me know if there are any others to run. Thanks @miketheman.
echo -n | openssl s_client -4 -connect test.pypi.org:443
CONNECTED(00000003)
depth=2 OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign Atlas R3 DV TLS CA 2023 Q2
verify return:1
depth=0 CN = pypi.org
verify return:1
---
Certificate chain
0 s:CN = pypi.org
i:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Atlas R3 DV TLS CA 2023 Q2
a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
v:NotBefore: Apr 29 19:53:38 2023 GMT; NotAfter: May 30 19:53:37 2024 GMT
1 s:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Atlas R3 DV TLS CA 2023 Q2
i:OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign
a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
v:NotBefore: Jan 18 03:36:52 2023 GMT; NotAfter: Jan 18 00:00:00 2025 GMT
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGfzCCBWegAwIBAgIQATphpUBWfreAY2OTrbDywTANBgkqhkiG9w0BAQsFADBY
MQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEuMCwGA1UE
AxMlR2xvYmFsU2lnbiBBdGxhcyBSMyBEViBUTFMgQ0EgMjAyMyBRMjAeFw0yMzA0
MjkxOTUzMzhaFw0yNDA1MzAxOTUzMzdaMBMxETAPBgNVBAMMCHB5cGkub3JnMIIB
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsVzK0dZ2ALTL74lfSb8xvcqO
eEP1opP9RNEQXhsEAs5sI8hYBP/j8IJO4cBZN/585CTJ8SAMxXon7IC0FvXnhefc
bE0kyHQf1cchLuqi2cArNUCZd7kIwYCpIpDvYLTlcJP1ClwwlUdDfobcMMLlot14
NBY11KT1iuNdujm83xF4LvHZu1dNTNMkU0Qnzl26tVKzewC29nEELWwz0Navusc/
5RVUI8bWrY2ZEJyeJvbs6aHcNbPdhfb8JP8pzheLNDL0VjWnxJnIDWttprck5FJM
lueKFjrx4vGB8kWfFpLkOSoq4/VW75FvR78Zx2Bj8BroMnbUiQ/NLhlBFHCscQID
AQABo4IDiDCCA4QwPgYDVR0RBDcwNYIIcHlwaS5vcmeCCioucHlwaS5vcmeCDHd3
dy5weXBpLm9yZ4IPZG9uYXRlLnB5cGkub3JnMA4GA1UdDwEB/wQEAwIFoDAdBgNV
HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYEFH5KpEjjaz1tMuya
qyjnyKenhRycMFcGA1UdIARQME4wCAYGZ4EMAQIBMEIGCisGAQQBoDIKAQMwNDAy
BggrBgEFBQcCARYmaHR0cHM6Ly93d3cuZ2xvYmFsc2lnbi5jb20vcmVwb3NpdG9y
eS8wDAYDVR0TAQH/BAIwADCBngYIKwYBBQUHAQEEgZEwgY4wQAYIKwYBBQUHMAGG
NGh0dHA6Ly9vY3NwLmdsb2JhbHNpZ24uY29tL2NhL2dzYXRsYXNyM2R2dGxzY2Ey
MDIzcTIwSgYIKwYBBQUHMAKGPmh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20v
Y2FjZXJ0L2dzYXRsYXNyM2R2dGxzY2EyMDIzcTIuY3J0MB8GA1UdIwQYMBaAFMai
YRNFFcyQj7rBrLzMOw0O0N4GMEgGA1UdHwRBMD8wPaA7oDmGN2h0dHA6Ly9jcmwu
Z2xvYmFsc2lnbi5jb20vY2EvZ3NhdGxhc3IzZHZ0bHNjYTIwMjNxMi5jcmwwggF/
BgorBgEEAdZ5AgQCBIIBbwSCAWsBaQB2AHb/iD8KtvuVUcJhzPWHujS0pM27Kdxo
Qgqf5mdMWjp0AAABh86UAM4AAAQDAEcwRQIhAMEeNv9F3vkrUFb8UDUnBgcJ2ed2
u0Y2h4qXuv4SyBcCAiAdoR3AfpZboQtcbZ4F5kfLAIaEZ48avbJTJGrTg0Z0dwB2
ADtTd3U+LbmAToswWwb+QDtn2E/D9Me9AA0tcm/h+tQXAAABh86UAXkAAAQDAEcw
RQIhAL+PCGdwFgr/6mjPltxIkO2pSZ6eDY2sv8n+cW5hXCmzAiAL3XKCZqwJGJXE
kvt1ZJkMoqLzAy5CM2ANzSIXQni6wgB3AHPZnokbTJZ4oCB9R53mssYc0FFecRkq
jGuAEHrBd3K1AAABh86UAcgAAAQDAEgwRgIhALbbX2nIHt3iNRL+nMyqN0CUwxDz
BaSjdQhfBDPciwKbAiEAov0IJaslITt1Mxtyh4Ped9ZOkST5A0K0/Fdbk64zI+sw
DQYJKoZIhvcNAQELBQADggEBAGodVH7XXcayedVPuAMF5agiOBVJp7evMWz2R8xK
ON0jovv1oItNrXvt3tVWvPUl4Dm/AIbCrAHw/d1cz1loot8Nv2tRI8vRpBZ6bnnQ
wWKVlJmz3BRr42wV5HMiLjk0cUFgL+BDcoqpcEKUXsuNgTaevvLkx38Oo8b4Y9PT
CBkcuiqBfqViBAHB9mUcJCtpXW5waX+DwvbkkTULNTdYq5CZLENSPa2H22r/V0SI
gu08iGpOOdMJaaFBQp35ECW+UTdYSa+9tMx+B3GzpgxXVcW/P/ZCKcThequGVDbr
7hy8HRcXVP/+ejef0co8/E9MR5/EYrICq5M7JWJunSDgFP8=
-----END CERTIFICATE-----
subject=CN = pypi.org
issuer=C = BE, O = GlobalSign nv-sa, CN = GlobalSign Atlas R3 DV TLS CA 2023 Q2
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 3387 bytes and written 379 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_128_GCM_SHA256
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
Protocol : TLSv1.3
Cipher : TLS_AES_128_GCM_SHA256
Session-ID: F5FFE6F6AD33D7B691B545CB1A8F1BECC175A10843A0BBC47D0B63A4F0B82273
Session-ID-ctx:
Resumption PSK: F2325E2E190483CB0C6C2E85F87F0679552E47D0CECF83155C9BA23E73FAA38E
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 3600 (seconds)
TLS session ticket:
0000 - fe c4 d8 e8 7f fa 85 df-ce e0 cd 82 cf e0 2a be ..............*.
0010 - 06 5a 8c d3 0b 30 2c cb-cb 53 bb be d8 a4 f5 02 .Z...0,..S......
0020 - 64 10 c1 f7 cc 78 bf fb-3d 8e 67 2a a3 1e 3a 5c d....x..=.g*..:\
0030 - 53 76 fa 3c 13 01 8f b4-b2 60 b5 fc 55 0c 72 91 Sv.<.....`..U.r.
0040 - 95 c4 bf 82 36 51 52 df-d9 64 f1 df be fc 97 48 ....6QR..d.....H
0050 - cf ee 93 93 d6 33 07 c4-1d 26 9c 22 57 d1 27 fb .....3...&."W.'.
0060 - f4 7e 00 85 ce 14 19 0f-8c 03 ec 07 db 8c 4c f4 .~............L.
0070 - 03 b9 b1 86 86 31 d1 69-ce 13 82 64 df 6f 9f 30 .....1.i...d.o.0
0080 - dd 48 ad 17 e5 2c 51 ed-b0 40 10 0d 1f a3 ed 58 .H...,Q..@.....X
0090 - b7 77 33 1e 15 2f 34 13-7b fe 3f 5c d9 14 a3 8a .w3../4.{.?\....
Start Time: 1702930239
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Extended master secret: no
Max Early Data: 0
---
read R BLOCK
DONE
echo -n | openssl s_client -6 -connect test.pypi.org:443
CONNECTED(00000005)
depth=2 OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign Atlas R3 DV TLS CA 2023 Q2
verify return:1
depth=0 CN = pypi.org
verify return:1
---
Certificate chain
0 s:CN = pypi.org
i:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Atlas R3 DV TLS CA 2023 Q2
a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
v:NotBefore: Apr 29 19:53:38 2023 GMT; NotAfter: May 30 19:53:37 2024 GMT
1 s:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Atlas R3 DV TLS CA 2023 Q2
i:OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign
a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
v:NotBefore: Jan 18 03:36:52 2023 GMT; NotAfter: Jan 18 00:00:00 2025 GMT
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGfzCCBWegAwIBAgIQATphpUBWfreAY2OTrbDywTANBgkqhkiG9w0BAQsFADBY
MQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEuMCwGA1UE
AxMlR2xvYmFsU2lnbiBBdGxhcyBSMyBEViBUTFMgQ0EgMjAyMyBRMjAeFw0yMzA0
MjkxOTUzMzhaFw0yNDA1MzAxOTUzMzdaMBMxETAPBgNVBAMMCHB5cGkub3JnMIIB
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsVzK0dZ2ALTL74lfSb8xvcqO
eEP1opP9RNEQXhsEAs5sI8hYBP/j8IJO4cBZN/585CTJ8SAMxXon7IC0FvXnhefc
bE0kyHQf1cchLuqi2cArNUCZd7kIwYCpIpDvYLTlcJP1ClwwlUdDfobcMMLlot14
NBY11KT1iuNdujm83xF4LvHZu1dNTNMkU0Qnzl26tVKzewC29nEELWwz0Navusc/
5RVUI8bWrY2ZEJyeJvbs6aHcNbPdhfb8JP8pzheLNDL0VjWnxJnIDWttprck5FJM
lueKFjrx4vGB8kWfFpLkOSoq4/VW75FvR78Zx2Bj8BroMnbUiQ/NLhlBFHCscQID
AQABo4IDiDCCA4QwPgYDVR0RBDcwNYIIcHlwaS5vcmeCCioucHlwaS5vcmeCDHd3
dy5weXBpLm9yZ4IPZG9uYXRlLnB5cGkub3JnMA4GA1UdDwEB/wQEAwIFoDAdBgNV
HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYEFH5KpEjjaz1tMuya
qyjnyKenhRycMFcGA1UdIARQME4wCAYGZ4EMAQIBMEIGCisGAQQBoDIKAQMwNDAy
BggrBgEFBQcCARYmaHR0cHM6Ly93d3cuZ2xvYmFsc2lnbi5jb20vcmVwb3NpdG9y
eS8wDAYDVR0TAQH/BAIwADCBngYIKwYBBQUHAQEEgZEwgY4wQAYIKwYBBQUHMAGG
NGh0dHA6Ly9vY3NwLmdsb2JhbHNpZ24uY29tL2NhL2dzYXRsYXNyM2R2dGxzY2Ey
MDIzcTIwSgYIKwYBBQUHMAKGPmh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20v
Y2FjZXJ0L2dzYXRsYXNyM2R2dGxzY2EyMDIzcTIuY3J0MB8GA1UdIwQYMBaAFMai
YRNFFcyQj7rBrLzMOw0O0N4GMEgGA1UdHwRBMD8wPaA7oDmGN2h0dHA6Ly9jcmwu
Z2xvYmFsc2lnbi5jb20vY2EvZ3NhdGxhc3IzZHZ0bHNjYTIwMjNxMi5jcmwwggF/
BgorBgEEAdZ5AgQCBIIBbwSCAWsBaQB2AHb/iD8KtvuVUcJhzPWHujS0pM27Kdxo
Qgqf5mdMWjp0AAABh86UAM4AAAQDAEcwRQIhAMEeNv9F3vkrUFb8UDUnBgcJ2ed2
u0Y2h4qXuv4SyBcCAiAdoR3AfpZboQtcbZ4F5kfLAIaEZ48avbJTJGrTg0Z0dwB2
ADtTd3U+LbmAToswWwb+QDtn2E/D9Me9AA0tcm/h+tQXAAABh86UAXkAAAQDAEcw
RQIhAL+PCGdwFgr/6mjPltxIkO2pSZ6eDY2sv8n+cW5hXCmzAiAL3XKCZqwJGJXE
kvt1ZJkMoqLzAy5CM2ANzSIXQni6wgB3AHPZnokbTJZ4oCB9R53mssYc0FFecRkq
jGuAEHrBd3K1AAABh86UAcgAAAQDAEgwRgIhALbbX2nIHt3iNRL+nMyqN0CUwxDz
BaSjdQhfBDPciwKbAiEAov0IJaslITt1Mxtyh4Ped9ZOkST5A0K0/Fdbk64zI+sw
DQYJKoZIhvcNAQELBQADggEBAGodVH7XXcayedVPuAMF5agiOBVJp7evMWz2R8xK
ON0jovv1oItNrXvt3tVWvPUl4Dm/AIbCrAHw/d1cz1loot8Nv2tRI8vRpBZ6bnnQ
wWKVlJmz3BRr42wV5HMiLjk0cUFgL+BDcoqpcEKUXsuNgTaevvLkx38Oo8b4Y9PT
CBkcuiqBfqViBAHB9mUcJCtpXW5waX+DwvbkkTULNTdYq5CZLENSPa2H22r/V0SI
gu08iGpOOdMJaaFBQp35ECW+UTdYSa+9tMx+B3GzpgxXVcW/P/ZCKcThequGVDbr
7hy8HRcXVP/+ejef0co8/E9MR5/EYrICq5M7JWJunSDgFP8=
-----END CERTIFICATE-----
subject=CN = pypi.org
issuer=C = BE, O = GlobalSign nv-sa, CN = GlobalSign Atlas R3 DV TLS CA 2023 Q2
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 3337 bytes and written 395 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
DONE
I will point out that something doesn't look right - since you've said you're using Python 3.8, but the first traceback is showing an anaconda Python 3.10 in the logged paths - are you certain you're using the same python env?
Hmm. It looks like I have 3.8 installed in the (base) conda environment, but the development environment for this package has Python 3.10, as intended. I created the development environment using this command:
conda create -n nighthawk-dev2 python=3.10
If I run python
in this environment, it shows me that I am indeed using 3.10:
python
Python 3.10.13 (main, Sep 11 2023, 08:39:02) [Clang 14.0.6 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
The output above was from the conda info
command:
conda info
active environment : nighthawk-dev2
active env location : /Users/benjamin/opt/anaconda3/envs/nighthawk-dev2
shell level : 2
user config file : /Users/benjamin/.condarc
populated config files : /Users/benjamin/.condarc
conda version : 23.10.0
conda-build version : 3.22.0
python version : 3.8.18.final.0
...
This clearly indicates a python version of 3.8, but I am not sure if this would be expected to show 3.10 in this case.
I hope this helps.
I believe this means that anaconda is installed in a base python version of 3.8, but this is different from the python version of the development environment, which is 3.10. However, I could definitely be wrong.
And to answer your question, yes, all of the commands I have run here have been run in the nighthawk-dev2
development environment.
@bmvandoren The only other things I can currently think of is that your TestPyPI account isn't currently set up for 2FA (which is already required on TestPyPI, and coming to PyPI), which would then also need an API Token instead of username/password for twine.
I'd have expected a different error message than the one we saw though.
Does the exact same error persist as when you originally reported the issue, or has the traceback changed?
You could also add --verbose
to the twine upload
step to get a bit more context in the output.
I do not have 2FA set up - I will try that now and let you know.
Unfortunately that doesn't appear to have fixed the issue. I set up 2FA on my test.pypi account, and twine appears to be able to authenticate using this method. But I still get the same warning and eventual error.
I should also note that a colleague of mine who is also on this project gets the same error when he tries to upload the package using his test PyPI account on his computer.
Here's the twine output after enabling 2FA:
$ python -m twine upload --repository nighthawk dist/* --verbose
INFO Using configuration from /Users/benjamin/.pypirc
Uploading distributions to https://test.pypi.org/legacy/
INFO dist/nighthawk-0.3.0-py3-none-any.whl (77.5 MB)
INFO dist/nighthawk-0.3.0.tar.gz (77.5 MB)
INFO username set from config file
INFO password set from config file
INFO username: __token__
INFO password: <hidden>
Uploading nighthawk-0.3.0-py3-none-any.whl
WARNING Retrying (Retry(total=9, connect=5, read=None, redirect=None, status=None)) after connection broken by 'SSLEOFError(8,
'EOF occurred in violation of protocol (_ssl.c:2426)')': /legacy/
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.3/81.3 MB • 01:04 • 1.4 MB/s
Traceback (most recent call last):
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/urllib3/connectionpool.py", line 790, in urlopen
response = self._make_request(
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/urllib3/connectionpool.py", line 536, in _make_request
response = conn.getresponse()
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/urllib3/connection.py", line 461, in getresponse
httplib_response = super().getresponse()
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/http/client.py", line 1375, in getresponse
response.begin()
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/http/client.py", line 318, in begin
version, status, reason = self._read_status()
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/http/client.py", line 287, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/requests/adapters.py", line 486, in send
resp = conn.urlopen(
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/urllib3/connectionpool.py", line 874, in urlopen
return self.urlopen(
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/urllib3/connectionpool.py", line 844, in urlopen
retries = retries.increment(
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/urllib3/util/retry.py", line 470, in increment
raise reraise(type(error), error, _stacktrace)
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/urllib3/util/util.py", line 38, in reraise
raise value.with_traceback(tb)
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/urllib3/connectionpool.py", line 790, in urlopen
response = self._make_request(
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/urllib3/connectionpool.py", line 536, in _make_request
response = conn.getresponse()
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/urllib3/connection.py", line 461, in getresponse
httplib_response = super().getresponse()
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/http/client.py", line 1375, in getresponse
response.begin()
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/http/client.py", line 318, in begin
version, status, reason = self._read_status()
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/http/client.py", line 287, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/runpy.py", line 86, in _run_code
exec(code, run_globals)
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/twine/__main__.py", line 51, in <module>
sys.exit(main())
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/twine/__main__.py", line 33, in main
error = cli.dispatch(sys.argv[1:])
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/twine/cli.py", line 123, in dispatch
return main(args.args)
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/twine/commands/upload.py", line 198, in main
return upload(upload_settings, parsed_args.dists)
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/twine/commands/upload.py", line 142, in upload
resp = repository.upload(package)
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/twine/repository.py", line 186, in upload
resp = self._upload(package)
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/twine/repository.py", line 172, in _upload
resp = self.session.post(
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/requests/sessions.py", line 637, in post
return self.request("POST", url, data=data, json=json, **kwargs)
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/requests/sessions.py", line 589, in request
resp = self.send(prep, **send_kwargs)
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/requests/sessions.py", line 703, in send
r = adapter.send(request, **kwargs)
File "/Users/benjamin/opt/anaconda3/envs/nighthawk-dev2/lib/python3.10/site-packages/requests/adapters.py", line 501, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
@bmvandoren Thanks for stepping through that, it's super helpful to see the timings. And you'll need to do the 2FA setup anyhow 👼
I think what we're seeing is that the client (twine) taking too long to upload and complete all the steps, possibly due to network congestion, or some other bottleneck. We can see from the output that attempts appear to cut off around the 1 minute mark (Production PyPI has different limits in place).
A couple of ideas you might want to try:
Thanks @miketheman. According to speedtest.net my download speed is 200 Mbps and upload is 10 Mbps. I'm in a city right now and my cell phone is getting faster upload speeds, so I tried tethering. It cut the upload time in half. However, it's still failing, but in a different way. It's bizarre because the upload finishes and then it gives the error.
$ python -m twine upload --repository nighthawk-test dist/* --verbose
INFO Using configuration from /Users/benjamin/.pypirc
Uploading distributions to https://test.pypi.org/legacy/
INFO dist/nighthawk-0.3.0-py3-none-any.whl (77.5 MB)
INFO dist/nighthawk-0.3.0.tar.gz (77.5 MB)
INFO username set from config file
INFO password set from config file
INFO username: __token__
INFO password: <hidden>
Uploading nighthawk-0.3.0-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.3/81.3 MB • 00:22 • 3.3 MB/s
WARNING Received "503: Service Unavailable"
Package upload appears to have failed. Retry 1 of 5.
Uploading nighthawk-0.3.0-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.3/81.3 MB • 00:21 • 3.7 MB/s
WARNING Received "503: Service Unavailable"
Package upload appears to have failed. Retry 2 of 5.
Uploading nighthawk-0.3.0-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.3/81.3 MB • 00:25 • 4.3 MB/s
WARNING Received "503: Service Unavailable"
Package upload appears to have failed. Retry 3 of 5.
Uploading nighthawk-0.3.0-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.3/81.3 MB • 00:26 • 4.0 MB/s
WARNING Received "503: Service Unavailable"
Package upload appears to have failed. Retry 4 of 5.
Uploading nighthawk-0.3.0-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.3/81.3 MB • 00:24 • 3.9 MB/s
WARNING Received "503: Service Unavailable"
Package upload appears to have failed. Retry 5 of 5.
INFO Response from https://test.pypi.org/legacy/:
503 Service Unavailable
INFO <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="defaultLanguage" content="en">
<meta name="availableLanguages" content="en">
<title>Service Unavailable (503)</title>
<meta name="description" content="The Python Package Index (PyPI) is a repository of software for the Python
programming language.">
<!-- Fonts -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400italic,600,600italic,700,700italic|Source+Code+Pro:50
0">
<style>
html,
body {
box-sizing: border-box;
font-family: 'Source Sans Pro', 'Helvetica', Arial, sans-serif;
font-size: 17px;
line-height: 1.4;
font-weight: 300;
color: #fff;
-webkit-text-size-adjust: 100%;
font-size: 100%;
padding: 0;
margin: 0;
}
h1, strong {
font-weight: 600;
}
ul {
list-style-type: none;
padding-left: 0;
}
hr {
margin: 50px auto;
width: 300px;
max-width: 100%;
border: 0;
height: 2px;
background: rgba(255, 255, 255, 0.5);
}
.viewport-section {
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background-color: #006dad;
color: #fff;
}
.viewport-section a {
color: #fff;
}
.viewport-section__content {
text-align: center;
padding: 30px;
min-width: 0;
}
.viewport-section__heading {
font-size: 2.4em;
padding: 20px 15px 0;
margin: 0;
}
@media screen and (max-width: 600px) {
.viewport-section__content {
padding: 15px;
}
.viewport-section__heading {
font-size: 1.5em;
}
}
</style>
</head>
<body>
<div class="viewport-section">
<div class="viewport-section__content">
<img alt="PyPI logo"
src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NS44MTIiIGhlaWdodD0iNTgiIHZ
pZXdCb3g9IjAgMCA2NS44MTIwMzUgNTguMDAwMDAxIj48ZyBmaWxsPSIjYTI5ZDg2IiBzdHJva2U9IiNjY2MiIHN0cm9rZS13aWR0aD0iLjIxNCIgc3Ryb2tlL
WxpbmVqb2luPSJiZXZlbCI+PHBhdGggZD0iTTE4LjkzIDE4LjgyNmw5LjMyMyAzLjM5NHYxMC45NTdsLTkuMzIzLTMuMzk0eiIgc3R5bGU9Imlzb2xhdGlvbjp
hdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjZTllOWZmIi8+PHBhdGggZD0iTTkuNDcgM
jIuMjd2MTAuOTU3bDkuNDYtMy40NDRWMTguODI2eiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY29sb3I9IiMwMDAiIG9
2ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggZD0iTTkuNDcgMzMuMjI3bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTR6I
iBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNhZmFmZGU
iLz48cGF0aCBkPSJNOS40NyAyMi4yN2w5LjMyMiAzLjM5MyA5LjQ2LTMuNDQzLTkuMzIyLTMuMzk0eiIgZmlsbD0iI2Y3ZjdmNCIvPjxwYXRoIGQ9Ik0xOC43O
TIgMjUuNjYzVjM2LjYybDkuNDYtMy40NDNWMjIuMjJ6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTkuNDcgMjIuMjdsOS4zMjIgMy4zOTNWMzYuNjJMOS40NyA
zMy4yMjd6IiBmaWxsPSIjZWZlZWVhIi8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTI4LjI5MyAxMS4xN
jZsOS4zMjMgMy4zOTN2MTAuOTU3bC05LjMyMy0zLjM5M3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2U5ZTlmZiIvPjxwYXRoIHN
0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik0xOC44MzMgMTQuNjA5djEwLjk1N2w5LjQ2LTMuNDQzVjExLjE2NnoiIGNvb
G9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iIzM1MzU2NCIvPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3J
tYWwiIGQ9Ik0xOC44MzMgMjUuNTY2bDkuMzIyIDMuMzkzIDkuNDYxLTMuNDQzLTkuMzIzLTMuMzkzeiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlI
iBmaWxsPSIjYWZhZmRlIi8+PHBhdGggZD0iTTE4LjgzMyAxNC42MDlsOS4zMjIgMy4zOTMgOS40NjEtMy40NDMtOS4zMjMtMy4zOTN6IiBmaWxsPSIjZjdmN2Y
0Ii8+PHBhdGggZD0iTTI4LjE1NSAxOC4wMDJWMjguOTZsOS40NjEtMy40NDNWMTQuNTU5eiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik0xOC44MzMgMTQuNjA5b
DkuMzIyIDMuMzkzVjI4Ljk2bC05LjMyMi0zLjM5M3oiIGZpbGw9IiNlZmVlZWEiLz48cGF0aCBkPSJNOS41NjcgMzMuMjk3bDkuMzIyIDMuMzkzdjEwLjk1N2w
tOS4zMjItMy4zOTN6IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiI
GZpbGw9IiNlOWU5ZmYiLz48cGF0aCBkPSJNLjEwNiAzNi43NHYxMC45NTdsOS40Ni0zLjQ0M1YzMy4yOTd6IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJ
sZW5kLW1vZGU6bm9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiMzNTM1NjQiLz48cGF0aCBkPSJNLjEwNiA0Ny42OTdMOS40M
yA1MS4wOWw5LjQ2LTMuNDQzLTkuMzIyLTMuMzkzeiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY29sb3I9IiMwMDAiIG9
2ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjYWZhZmRlIi8+PHBhdGggZD0iTS4xMDYgMzYuNzRsOS4zMjMgMy4zOTMgOS40Ni0zLjQ0My05LjMyMi0zLjM5M3oiI
GZpbGw9IiNmN2Y3ZjQiLz48cGF0aCBkPSJNOS40MjkgNDAuMTMzVjUxLjA5bDkuNDYtMy40NDNWMzYuNjl6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTS4xMDY
gMzYuNzRsOS4zMjMgMy4zOTNWNTEuMDlMLjEwNiA0Ny42OTd6IiBmaWxsPSIjZWZlZWVhIi8+PC9nPjxnIGZpbGw9IiNhMjlkODYiIHN0cm9rZT0iI2NjYyIgc
3Ryb2tlLXdpZHRoPSIuMjE0IiBzdHJva2UtbGluZWpvaW49ImJldmVsIj48cGF0aCBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWF
sIiBkPSJNMTguOTMgMzYuNzAybDkuMzIzIDMuMzkzdjEwLjk1N2wtOS4zMjMtMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9I
iNlOWU5ZmYiLz48cGF0aCBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBkPSJNOS40NyA0MC4xNDV2MTAuOTU3bDkuNDYtMy4
0NDNWMzYuNzAyeiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21pe
C1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTkuNDcgNTEuMTAybDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3ZlcmZ
sb3c9InZpc2libGUiIGZpbGw9IiNhZmFmZGUiLz48cGF0aCBkPSJNOS40NyA0MC4xNDVsOS4zMjIgMy4zOTMgOS40Ni0zLjQ0My05LjMyMi0zLjM5M3oiIGZpb
Gw9IiNmN2Y3ZjQiLz48cGF0aCBkPSJNMTguNzkyIDQzLjUzOHYxMC45NTdsOS40Ni0zLjQ0M1Y0MC4wOTV6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTkuNDc
gNDAuMTQ1bDkuMzIyIDMuMzkzdjEwLjk1N0w5LjQ3IDUxLjEwMnoiIGZpbGw9IiNlZmVlZWEiLz48L2c+PGcgZmlsbD0iI2EyOWQ4NiIgc3Ryb2tlPSIjY2NjI
iBzdHJva2Utd2lkdGg9Ii4yMTQiIHN0cm9rZS1saW5lam9pbj0iYmV2ZWwiPjxwYXRoIGQ9Ik0xOC45MyAyNS42MzZsOS4zMjMgMy4zOTN2MTAuOTU3bC05LjM
yMy0zLjM5M3oiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsb
D0iI2U5ZTlmZiIvPjxwYXRoIGQ9Ik05LjQ3IDI5LjA4djEwLjk1Nmw5LjQ2LTMuNDQzVjI1LjYzNnoiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQ
tbW9kZTpub3JtYWwiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iIzM1MzU2NCIvPjxwYXRoIGQ9Ik05LjQ3IDQwLjAzNmw5LjMyMiAzL
jM5NCA5LjQ2LTMuNDQ0LTkuMzIyLTMuMzkzeiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY29sb3I9IiMwMDAiIG92ZXJ
mbG93PSJ2aXNpYmxlIiBmaWxsPSIjYWZhZmRlIi8+PHBhdGggZD0iTTkuNDcgMjkuMDhsOS4zMjIgMy4zOTMgOS40Ni0zLjQ0NC05LjMyMi0zLjM5M3oiIGZpb
Gw9IiNmN2Y3ZjQiLz48cGF0aCBkPSJNMTguNzkyIDMyLjQ3M1Y0My40M2w5LjQ2LTMuNDQ0VjI5LjAzeiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik05LjQ3IDI
5LjA4bDkuMzIyIDMuMzkzVjQzLjQzTDkuNDcgNDAuMDM2eiIgZmlsbD0iI2VmZWVlYSIvPjwvZz48ZyBmaWxsPSIjYTI5ZDg2IiBzdHJva2U9IiNjY2MiIHN0c
m9rZS13aWR0aD0iLjIxNCIgc3Ryb2tlLWxpbmVqb2luPSJiZXZlbCI+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCI
gZD0iTTU2LjM4MyAyOS44OTJsOS4zMjMgMy4zOTN2MTAuOTU3bC05LjMyMy0zLjM5M3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI
2U5ZTlmZiIvPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik00Ni45MjMgMzMuMzM1djEwLjk1N2w5LjQ2LTM
uNDQzVjI5Ljg5MnoiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iIzM1MzU2NCIvPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bztta
XgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik00Ni45MjMgNDQuMjkybDkuMzIyIDMuMzk0IDkuNDYtMy40NDQtOS4zMjItMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3Z
lcmZsb3c9InZpc2libGUiIGZpbGw9IiNhZmFmZGUiLz48cGF0aCBkPSJNNDYuOTIzIDMzLjMzNWw5LjMyMiAzLjM5NCA5LjQ2LTMuNDQ0LTkuMzIyLTMuMzkze
iIgZmlsbD0iI2Y3ZjdmNCIvPjxwYXRoIGQ9Ik01Ni4yNDUgMzYuNzI5djEwLjk1N2w5LjQ2LTMuNDQ0VjMzLjI4NXoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJ
NNDYuOTIzIDMzLjMzNWw5LjMyMiAzLjM5NHYxMC45NTdsLTkuMzIyLTMuMzk0eiIgZmlsbD0iI2VmZWVlYSIvPjwvZz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0Z
SgtMTY4My42NiAtNTEzLjI3NSkgc2NhbGUoLjY1MTc3KSI+PGcgZmlsbD0iI2EyOWQ4NiIgc3Ryb2tlPSIjY2NjIiBzdHJva2Utd2lkdGg9Ii4zMjgiIHN0cm9
rZS1saW5lam9pbj0iYmV2ZWwiPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik0yNjU1LjM0OSA4MzguNTk0b
DE0LjMwMyA1LjIwNnYxNi44MTFsLTE0LjMwMy01LjIwNnoiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2U5ZTlmZiIvPjxwYXRoIHN
0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik0yNjQwLjgzNCA4NDMuODc3djE2LjgxMWwxNC41MTUtNS4yODN2LTE2Ljgxe
iIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2R
lOm5vcm1hbCIgZD0iTTI2NDAuODM0IDg2MC42ODhsMTQuMzAzIDUuMjA2IDE0LjUxNS01LjI4My0xNC4zMDMtNS4yMDZ6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb
3c9InZpc2libGUiIGZpbGw9IiNhZmFmZGUiLz48cGF0aCBkPSJNMjY0MC44MzQgODQzLjg3N2wxNC4zMDMgNS4yMDYgMTQuNTE1LTUuMjgzLTE0LjMwMy01LjI
wNnoiIGZpbGw9IiNmN2Y3ZjQiLz48cGF0aCBkPSJNMjY1NS4xMzcgODQ5LjA4M3YxNi44MTFsMTQuNTE1LTUuMjgzdi0xNi44MXoiIGZpbGw9IiNmZmQyNDIiL
z48cGF0aCBkPSJNMjY0MC44MzQgODQzLjg3N2wxNC4zMDMgNS4yMDZ2MTYuODExbC0xNC4zMDMtNS4yMDZ6IiBmaWxsPSIjZWZlZWVhIi8+PC9nPjxjaXJjbGU
gdHJhbnNmb3JtPSJza2V3WSgtMjApIHNjYWxlKC45Mzk3IDEpIiBjeT0iMTgyMy44OTkiIGN4PSIyODM1LjIxOCIgcj0iMi45NjciIGZpbGw9IiNmZmYiLz48L
2c+PGcgZmlsbD0iI2EyOWQ4NiIgc3Ryb2tlPSIjY2NjIiBzdHJva2Utd2lkdGg9Ii4yMTQiIHN0cm9rZS1saW5lam9pbj0iYmV2ZWwiPjxwYXRoIGQ9Ik0zNy4
2NTcgMzYuNzAybDkuMzIyIDMuMzkzdjEwLjk1N2wtOS4zMjItMy4zOTN6IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBjb
2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNlOWU5ZmYiLz48cGF0aCBkPSJNMjguMTk2IDQwLjE0NXYxMC45NTdsOS40Ni0zLjQ0M1YzNi4
3MDJ6IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiMzN
TM1NjQiLz48cGF0aCBkPSJNMjguMTk2IDUxLjEwMmw5LjMyMyAzLjM5MyA5LjQ2LTMuNDQzLTkuMzIyLTMuMzkzeiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21
peC1ibGVuZC1tb2RlOm5vcm1hbCIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjYWZhZmRlIi8+PHBhdGggZD0iTTI4LjE5NiA0MC4xN
DVsOS4zMjMgMy4zOTMgOS40Ni0zLjQ0My05LjMyMi0zLjM5M3oiIGZpbGw9IiNmN2Y3ZjQiLz48cGF0aCBkPSJNMzcuNTE5IDQzLjUzOHYxMC45NTdsOS40Ni0
zLjQ0M1Y0MC4wOTV6IiBmaWxsPSIjZmZkMjQyIi8+PHBhdGggZD0iTTI4LjE5NiA0MC4xNDVsOS4zMjMgMy4zOTN2MTAuOTU3bC05LjMyMy0zLjM5M3oiIGZpb
Gw9IiNlZmVlZWEiLz48L2c+PGcgZmlsbD0iI2EyOWQ4NiIgc3Ryb2tlPSIjY2NjIiBzdHJva2Utd2lkdGg9Ii4yMTQiIHN0cm9rZS1saW5lam9pbj0iYmV2ZWw
iPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik0yOC4yOTMgNDAuMTA3bDkuMzIzIDMuMzkzdjEwLjk1N2wtO
S4zMjMtMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNlOWU5ZmYiLz48cGF0aCBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl
4LWJsZW5kLW1vZGU6bm9ybWFsIiBkPSJNMTguODMzIDQzLjU1djEwLjk1N2w5LjQ2LTMuNDQzVjQwLjEwN3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlza
WJsZSIgZmlsbD0iIzM1MzU2NCIvPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik0xOC44MzMgNTQuNTA3bDk
uMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNhZmFmZGUiLz48cGF0aCBkP
SJNMTguODMzIDQzLjU1bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTN6IiBmaWxsPSIjZjdmN2Y0Ii8+PHBhdGggZD0iTTI4LjE1NSA0Ni45NDN
WNTcuOWw5LjQ2LTMuNDQzVjQzLjV6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTE4LjgzMyA0My41NWw5LjMyMiAzLjM5M1Y1Ny45bC05LjMyMi0zLjM5M3oiI
GZpbGw9IiNlZmVlZWEiLz48L2c+PGcgZmlsbD0iI2EyOWQ4NiIgc3Ryb2tlPSIjY2NjIiBzdHJva2Utd2lkdGg9Ii4yMTQiIHN0cm9rZS1saW5lam9pbj0iYmV
2ZWwiPjxwYXRoIGQ9Ik01Ni4zODMgMTguODI2bDkuMzIzIDMuMzk0djEwLjk1N2wtOS4zMjMtMy4zOTR6IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZ
W5kLW1vZGU6bm9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNlOWU5ZmYiLz48cGF0aCBkPSJNNDYuOTIzIDIyLjI3djEwLjk
1N2w5LjQ2LTMuNDQ0VjE4LjgyNnoiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0id
mlzaWJsZSIgZmlsbD0iIzM1MzU2NCIvPjxwYXRoIGQ9Ik00Ni45MjMgMzMuMjI3bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTR6IiBzdHlsZT0
iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNhZmFmZGUiLz48cGF0a
CBkPSJNNDYuOTIzIDIyLjI3bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTR6IiBmaWxsPSIjZjdmN2Y0Ii8+PHBhdGggZD0iTTU2LjI0NSAyNS4
2NjNWMzYuNjJsOS40Ni0zLjQ0M1YyMi4yMnoiIGZpbGw9IiNmZmQyNDIiLz48cGF0aCBkPSJNNDYuOTIzIDIyLjI3bDkuMzIyIDMuMzkzVjM2LjYybC05LjMyM
i0zLjM5M3oiIGZpbGw9IiNlZmVlZWEiLz48L2c+PGcgZmlsbD0iI2EyOWQ4NiIgc3Ryb2tlPSIjY2NjIiBzdHJva2Utd2lkdGg9Ii4yMTQiIHN0cm9rZS1saW5
lam9pbj0iYmV2ZWwiPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik01Ni4zODMgNy43Nmw5LjMyMyAzLjM5N
FYyMi4xMWwtOS4zMjMtMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNlOWU5ZmYiLz48cGF0aCBzdHlsZT0iaXNvbGF0aW9
uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBkPSJNNDYuOTIzIDExLjIwNHYxMC45NTdsOS40Ni0zLjQ0M1Y3Ljc2eiIgY29sb3I9IiMwMDAiIG92ZXJmb
G93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTQ2LjkyMyA
yMi4xNjFsOS4zMjIgMy4zOTMgOS40Ni0zLjQ0My05LjMyMi0zLjM5M3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2FmYWZkZSIvP
jxwYXRoIGQ9Ik00Ni45MjMgMTEuMjA0bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTN6IiBmaWxsPSIjZmZjOTFkIi8+PHBhdGggZD0iTTU2LjI
0NSAxNC41OTd2MTAuOTU3bDkuNDYtMy40NDNWMTEuMTU0eiIgZmlsbD0iI2ZmZDI0MiIvPjxwYXRoIGQ9Ik00Ni45MjMgMTEuMjA0bDkuMzIyIDMuMzkzdjEwL
jk1N2wtOS4zMjItMy4zOTN6IiBmaWxsPSIjZWZlZWVhIi8+PC9nPjxnIGZpbGw9IiNhMjlkODYiIHN0cm9rZT0iI2NjYyIgc3Ryb2tlLXdpZHRoPSIuMjE0IiB
zdHJva2UtbGluZWpvaW49ImJldmVsIj48cGF0aCBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBkPSJNNDcuMDIgMjIuMjMxb
DkuMzIyIDMuMzkzdjEwLjk1N2wtOS4zMjItMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNlOWU5ZmYiLz48cGF0aCBzdHl
sZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBkPSJNMzcuNTYgMjUuNjc1djEwLjk1N2w5LjQ2LTMuNDQ0VjIyLjIzMXoiIGNvbG9yP
SIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iIzM1MzU2NCIvPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw
iIGQ9Ik0zNy41NiAzNi42MzJsOS4zMjIgMy4zOTMgOS40Ni0zLjQ0NC05LjMyMi0zLjM5M3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsb
D0iI2FmYWZkZSIvPjxwYXRoIGQ9Ik0zNy41NiAyNS42NzVsOS4zMjIgMy4zOTMgOS40Ni0zLjQ0NC05LjMyMi0zLjM5M3oiIGZpbGw9IiNmN2Y3ZjQiLz48cGF
0aCBkPSJNNDYuODgyIDI5LjA2OHYxMC45NTdsOS40Ni0zLjQ0NFYyNS42MjR6IiBmaWxsPSIjZmZkMjQyIi8+PHBhdGggZD0iTTM3LjU2IDI1LjY3NWw5LjMyM
iAzLjM5M3YxMC45NTdsLTkuMzIzLTMuMzkzeiIgZmlsbD0iI2VmZWVlYSIvPjwvZz48ZyBmaWxsPSIjYTI5ZDg2IiBzdHJva2U9IiNjY2MiIHN0cm9rZS13aWR
0aD0iLjIxNCIgc3Ryb2tlLWxpbmVqb2luPSJiZXZlbCI+PHBhdGggZD0iTTQ3LjAyIDExLjE2Nmw5LjMyMiAzLjM5M3YxMC45NTdsLTkuMzIyLTMuMzkzeiIgc
3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjZTllOWZmIi8
+PHBhdGggZD0iTTM3LjU2IDE0LjYwOXYxMC45NTdsOS40Ni0zLjQ0M1YxMS4xNjZ6IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9yb
WFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiMzNTM1NjQiLz48cGF0aCBkPSJNMzcuNTYgMjUuNTY2bDkuMzIyIDMuMzkzIDkuNDY
tMy40NDMtOS4zMjItMy4zOTN6IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc
2libGUiIGZpbGw9IiNhZmFmZGUiLz48cGF0aCBkPSJNMzcuNTYgMTQuNjA5bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTN6IiBmaWxsPSIjZjd
mN2Y0Ii8+PHBhdGggZD0iTTQ2Ljg4MiAxOC4wMDJWMjguOTZsOS40Ni0zLjQ0M1YxNC41NTl6IiBmaWxsPSIjMzc3NWE5Ii8+PHBhdGggZD0iTTM3LjU2IDE0L
jYwOWw5LjMyMiAzLjM5M1YyOC45NmwtOS4zMjMtMy4zOTN6IiBmaWxsPSIjZWZlZWVhIi8+PC9nPjxnIGZpbGw9IiNhMjlkODYiIHN0cm9rZT0iI2NjYyIgc3R
yb2tlLXdpZHRoPSIuMjE0IiBzdHJva2UtbGluZWpvaW49ImJldmVsIj48cGF0aCBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsI
iBkPSJNNDcuMDIuMWw5LjMyMiAzLjM5M1YxNC40NWwtOS4zMjItMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNlOWU5ZmY
iLz48cGF0aCBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBkPSJNMzcuNTYgMy41NDNWMTQuNWw5LjQ2LTMuNDQzVi4xeiIgY
29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5
vcm1hbCIgZD0iTTM3LjU2IDE0LjVsOS4zMjIgMy4zOTMgOS40Ni0zLjQ0My05LjMyMi0zLjM5M3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZ
mlsbD0iI2FmYWZkZSIvPjxwYXRoIGQ9Ik0zNy41NiAzLjU0M2w5LjMyMiAzLjM5MyA5LjQ2LTMuNDQzTDQ3LjAyLjF6IiBmaWxsPSIjMmY2NDkxIi8+PHBhdGg
gZD0iTTQ2Ljg4MiA2LjkzNnYxMC45NTdsOS40Ni0zLjQ0M1YzLjQ5M3oiIGZpbGw9IiMzNzc1YTkiLz48cGF0aCBkPSJNMzcuNTYgMy41NDNsOS4zMjIgMy4zO
TN2MTAuOTU3TDM3LjU1OSAxNC41eiIgZmlsbD0iI2VmZWVlYSIvPjwvZz48ZyBmaWxsPSIjYTI5ZDg2IiBzdHJva2U9IiNjY2MiIHN0cm9rZS13aWR0aD0iLjI
xNCIgc3Ryb2tlLWxpbmVqb2luPSJiZXZlbCI+PHBhdGggZD0iTTM3LjY1NyAyNS42MzZsOS4zMjIgMy4zOTN2MTAuOTU3bC05LjMyMi0zLjM5M3oiIHN0eWxlP
SJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2U5ZTlmZiIvPjxwYXR
oIGQ9Ik0yOC4xOTYgMjkuMDh2MTAuOTU2bDkuNDYtMy40NDNWMjUuNjM2eiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY
29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggZD0iTTI4LjE5NiA0MC4wMzZsOS4zMjMgMy4zOTQgOS40Ni0zLjQ
0NC05LjMyMi0zLjM5M3oiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZ
SIgZmlsbD0iI2FmYWZkZSIvPjxwYXRoIGQ9Ik0yOC4xOTYgMjkuMDhsOS4zMjMgMy4zOTMgOS40Ni0zLjQ0NC05LjMyMi0zLjM5M3oiIGZpbGw9IiNmN2Y3ZjQ
iLz48cGF0aCBkPSJNMzcuNTE5IDMyLjQ3M1Y0My40M2w5LjQ2LTMuNDQ0VjI5LjAzeiIgZmlsbD0iI2ZmZDI0MiIvPjxwYXRoIGQ9Ik0yOC4xOTYgMjkuMDhsO
S4zMjMgMy4zOTNWNDMuNDNsLTkuMzIzLTMuMzk0eiIgZmlsbD0iI2VmZWVlYSIvPjwvZz48ZyBmaWxsPSIjYTI5ZDg2IiBzdHJva2U9IiNjY2MiIHN0cm9rZS1
3aWR0aD0iLjIxNCIgc3Ryb2tlLWxpbmVqb2luPSJiZXZlbCI+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iT
TM3LjY1NyAxNC41N2w5LjMyMiAzLjM5NFYyOC45MmwtOS4zMjItMy4zOTR6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNlOWU5ZmY
iLz48cGF0aCBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBkPSJNMjguMTk2IDE4LjAxNFYyOC45N2w5LjQ2LTMuNDQ0VjE0L
jU3eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1
tb2RlOm5vcm1hbCIgZD0iTTI4LjE5NiAyOC45N2w5LjMyMyAzLjM5NCA5LjQ2LTMuNDQzLTkuMzIyLTMuMzk0eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2a
XNpYmxlIiBmaWxsPSIjYWZhZmRlIi8+PHBhdGggZD0iTTI4LjE5NiAxOC4wMTRsOS4zMjMgMy4zOTMgOS40Ni0zLjQ0My05LjMyMi0zLjM5NHoiIGZpbGw9IiN
mN2Y3ZjQiLz48cGF0aCBkPSJNMzcuNTE5IDIxLjQwN3YxMC45NTdsOS40Ni0zLjQ0M1YxNy45NjR6IiBmaWxsPSIjMzc3NWE5Ii8+PHBhdGggZD0iTTI4LjE5N
iAxOC4wMTRsOS4zMjMgMy4zOTN2MTAuOTU3bC05LjMyMy0zLjM5M3oiIGZpbGw9IiNlZmVlZWEiLz48L2c+PGcgZmlsbD0iI2EyOWQ4NiIgc3Ryb2tlPSIjY2N
jIiBzdHJva2Utd2lkdGg9Ii4yMTQiIHN0cm9rZS1saW5lam9pbj0iYmV2ZWwiPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub
3JtYWwiIGQ9Ik0yOC4yOTMgMjkuMDRsOS4zMjMgMy4zOTR2MTAuOTU3bC05LjMyMy0zLjM5M3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZml
sbD0iI2U5ZTlmZiIvPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik0xOC44MzMgMzIuNDg0djEwLjk1N2w5L
jQ2LTMuNDQzVjI5LjA0eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXR
vO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTE4LjgzMyA0My40NDFsOS4zMjIgMy4zOTMgOS40Ni0zLjQ0My05LjMyMi0zLjM5M3oiIGNvbG9yPSIjMDAwI
iBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2FmYWZkZSIvPjxwYXRoIGQ9Ik0xOC44MzMgMzIuNDg0bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4
zOTN6IiBmaWxsPSIjZjdmN2Y0Ii8+PHBhdGggZD0iTTI4LjE1NSAzNS44Nzd2MTAuOTU3bDkuNDYtMy40NDNWMzIuNDM0eiIgZmlsbD0iIzM3NzVhOSIvPjxwY
XRoIGQ9Ik0xOC44MzMgMzIuNDg0bDkuMzIyIDMuMzkzdjEwLjk1N2wtOS4zMjItMy4zOTN6IiBmaWxsPSIjMmY2NDkxIi8+PC9nPjxnIGZpbGw9IiNhMjlkODY
iIHN0cm9rZT0iI2NjYyIgc3Ryb2tlLXdpZHRoPSIuMjE0IiBzdHJva2UtbGluZWpvaW49ImJldmVsIj48cGF0aCBkPSJNMjguMjkzIDE3Ljk3NWw5LjMyMyAzL
jM5M3YxMC45NTdsLTkuMzIzLTMuMzkzeiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY29sb3I9IiMwMDAiIG92ZXJmbG9
3PSJ2aXNpYmxlIiBmaWxsPSIjZTllOWZmIi8+PHBhdGggZD0iTTE4LjgzMyAyMS40MTl2MTAuOTU3bDkuNDYtMy40NDRWMTcuOTc1eiIgc3R5bGU9Imlzb2xhd
GlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggZD0iTTE
4LjgzMyAzMi4zNzZsOS4zMjIgMy4zOTMgOS40Ni0zLjQ0NC05LjMyMi0zLjM5M3oiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtY
WwiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2FmYWZkZSIvPjxwYXRoIGQ9Ik0xOC44MzMgMjEuNDE5bDkuMzIyIDMuMzkzIDkuNDY
tMy40NDQtOS4zMjItMy4zOTN6IiBmaWxsPSIjMmY2NDkxIi8+PHBhdGggZD0iTTI4LjE1NSAyNC44MTJ2MTAuOTU3bDkuNDYtMy40NDRWMjEuMzY4eiIgZmlsb
D0iIzM3NzVhOSIvPjxwYXRoIGQ9Ik0xOC44MzMgMjEuNDE5bDkuMzIyIDMuMzkzdjEwLjk1N2wtOS4zMjItMy4zOTN6IiBmaWxsPSIjMmY2NDkxIi8+PC9nPjx
nIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xNjgzLjY2IC01MTMuMjc1KSBzY2FsZSguNjUxNzcpIj48ZyBmaWxsPSIjYTI5ZDg2IiBzdHJva2U9IiNjY2MiIHN0c
m9rZS13aWR0aD0iLjMyOCIgc3Ryb2tlLWxpbmVqb2luPSJiZXZlbCI+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCI
gZD0iTTI2NDAuOTgzIDc5Mi44ODVsMTQuMzA0IDUuMjA2djE2LjgxMWwtMTQuMzA0LTUuMjA2eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBma
WxsPSIjZTllOWZmIi8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTI2MjYuNDY4IDc5OC4xNjh2MTYuODE
xbDE0LjUxNS01LjI4M3YtMTYuODExeiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggc3R5bGU9Imlzb2xhd
GlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTI2MjYuNDY4IDgxNC45NzlsMTQuMzA0IDUuMjA2IDE0LjUxNS01LjI4My0xNC4zMDQtNS4yMDZ
6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNhZmFmZGUiLz48cGF0aCBkPSJNMjYyNi40NjggNzk4LjE2OGwxNC4zMDQgNS4yMDYgM
TQuNTE1LTUuMjgzLTE0LjMwNC01LjIwNnoiIGZpbGw9IiMyZjY0OTEiLz48cGF0aCBkPSJNMjY0MC43NzIgODAzLjM3NHYxNi44MTFsMTQuNTE1LTUuMjgzdi0
xNi44MTF6IiBmaWxsPSIjMzc3NWE5Ii8+PHBhdGggZD0iTTI2MjYuNDY4IDc5OC4xNjhsMTQuMzA0IDUuMjA2djE2LjgxMWwtMTQuMzA0LTUuMjA2eiIgZmlsb
D0iIzJmNjQ5MSIvPjwvZz48Y2lyY2xlIHRyYW5zZm9ybT0ic2tld1koLTIwKSBzY2FsZSguOTM5NyAxKSIgY3k9IjE3NzIuOTIyIiBjeD0iMjgxNi4wMTciIHI
9IjIuOTY3IiBmaWxsPSIjZmZmIi8+PC9nPjwvc3ZnPg==">
<h1 class="viewport-section__heading">Sorry, something went wrong</h1>
<div class="viewport-section__text">
<p>PyPI is down for maintenance or is having an outage.</p>
<p>
This is affecting several of our services, including our web interface.</br>
If you are trying to install a package, you should be able to <strong>pip install</strong> packages without
problem.
</p>
<ul class="unstyled">
<li><a href="https://status.python.org/">Check our status page</a>, or</li>
<li><a href="https://twitter.com/PythonStatus">View Python Status on Twitter</a></li>
</ul>
<hr>
<p>
<strong>
Rely on PyPI to get your job done?</br>
Consider <a href="https://github.com/pypa/warehouse">contributing</a> or <a
href="https://psfmember.org/civicrm/contribute/transact?reset=1&id=13">donating</a> to help us build a more stable and
secure platform.
</strong>
</p>
</div>
</div>
</div>
</body>
</html>
ERROR HTTPError: 503 Service Unavailable from https://test.pypi.org/legacy/
Service Unavailable
Hi @miketheman - writing with an update. Most of the bulk of the package is from a few model files. When I exclude the model files and try uploading the package, it works. Is it possible to try increasing the file size limit on this package?
Here is the output from the upload when I remove the (necessary) model files. The package is then only 430 kB:
$ python -m twine upload --repository nighthawk-test dist/* --verbose
INFO Using configuration from /Users/benjamin/.pypirc
Uploading distributions to https://test.pypi.org/legacy/
INFO dist/nighthawk-0.3.0.post1-py3-none-any.whl (430.3 KB)
INFO dist/nighthawk-0.3.0.post1.tar.gz (428.0 KB)
INFO username set from config file
INFO password set from config file
INFO username: __token__
INFO password: <hidden>
Uploading nighthawk-0.3.0.post1-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 471.7/471.7 kB • 00:00 • 1.9 MB/s
INFO Response from https://test.pypi.org/legacy/:
200 OK
Uploading nighthawk-0.3.0.post1.tar.gz
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 469.4/469.4 kB • 00:00 • 150.6 MB/s
INFO Response from https://test.pypi.org/legacy/:
200 OK
View at:
https://test.pypi.org/project/nighthawk/0.3.0.post1/
@bmvandoren Glad to hear there was some successful uploads - that confirms all the authentication and upload stack. The current (and default) limit is 100MB per file, and you're under that limit already.
The "503: Service Unavailable" is coming from our caching tier, in response to a 5xx response from the backend, but I haven't been able to find any specific logged exceptions that would show this issue.
If you can run the test again with the faster network and provide UTC timestamps so we can narrow down when this is happening.
@miketheman - I ran these uploads again and printed UTC timestamps. The timestamps are in HH:MM:SS format and correspond to the UTC date of 2023-12-21. I first tried uploading the ~80 mb package, which again failed as before. Then I removed the model files and uploaded the rest of the package, which again worked. Many thanks for your continued help.
$ (python -m twine upload --repository nighthawk-test dist/* --verbose) | TZ=UTC ts '<%H:%M:%S %z>'
<02:25:46 +0000> INFO Using configuration from /Users/benjamin/.pypirc
<02:25:46 +0000> Uploading distributions to https://test.pypi.org/legacy/
<02:25:46 +0000> INFO dist/nighthawk-0.3.0.post2-py3-none-any.whl (77.5 MB)
<02:25:47 +0000> INFO dist/nighthawk-0.3.0.post2.tar.gz (77.5 MB)
<02:25:47 +0000> INFO username set from config file
<02:25:47 +0000> INFO password set from config file
<02:25:47 +0000> INFO username: __token__
<02:25:47 +0000> INFO password: <hidden>
<02:25:47 +0000> Uploading nighthawk-0.3.0.post2-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.3/81.3 MB • 00:15 • 5.3 MB/s
<02:26:06 +0000> WARNING Received "503: Service Unavailable"
<02:26:06 +0000> Package upload appears to have failed. Retry 1 of 5.
<02:26:06 +0000> Uploading nighthawk-0.3.0.post2-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.3/81.3 MB • 00:21 • 3.9 MB/s
<02:26:28 +0000> WARNING Received "503: Service Unavailable"
<02:26:28 +0000> Package upload appears to have failed. Retry 2 of 5.
<02:26:28 +0000> Uploading nighthawk-0.3.0.post2-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.3/81.3 MB • 00:21 • 3.7 MB/s
<02:26:51 +0000> WARNING Received "503: Service Unavailable"
<02:26:51 +0000> Package upload appears to have failed. Retry 3 of 5.
<02:26:51 +0000> Uploading nighthawk-0.3.0.post2-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.3/81.3 MB • 00:21 • 3.9 MB/s
<02:27:13 +0000> WARNING Received "503: Service Unavailable"
<02:27:13 +0000> Package upload appears to have failed. Retry 4 of 5.
<02:27:13 +0000> Uploading nighthawk-0.3.0.post2-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.3/81.3 MB • 00:20 • 5.0 MB/s
<02:27:34 +0000> WARNING Received "503: Service Unavailable"
<02:27:34 +0000> Package upload appears to have failed. Retry 5 of 5.
<02:27:34 +0000> INFO Response from https://test.pypi.org/legacy/:
<02:27:34 +0000> 503 Service Unavailable
<02:27:34 +0000> INFO <!DOCTYPE html>
<02:27:34 +0000> <html lang="en">
<02:27:34 +0000> <head>
<02:27:34 +0000> <meta charset="utf-8">
<02:27:34 +0000> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<02:27:34 +0000> <meta name="viewport" content="width=device-width, initial-scale=1">
<02:27:34 +0000>
<02:27:34 +0000> <meta name="defaultLanguage" content="en">
<02:27:34 +0000> <meta name="availableLanguages" content="en">
<02:27:34 +0000>
<02:27:34 +0000> <title>Service Unavailable (503)</title>
<02:27:34 +0000>
<02:27:34 +0000> <meta name="description" content="The Python Package Index (PyPI) is a repository of software for the Python programming language.">
<02:27:34 +0000>
<02:27:34 +0000> <!-- Fonts -->
<02:27:34 +0000> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400italic,600,600italic,700,700italic|Source+Code+Pro:500">
<02:27:34 +0000>
<02:27:34 +0000> <style>
<02:27:34 +0000> html,
<02:27:34 +0000> body {
<02:27:34 +0000> box-sizing: border-box;
<02:27:34 +0000> font-family: 'Source Sans Pro', 'Helvetica', Arial, sans-serif;
<02:27:34 +0000> font-size: 17px;
<02:27:34 +0000> line-height: 1.4;
<02:27:34 +0000> font-weight: 300;
<02:27:34 +0000> color: #fff;
<02:27:34 +0000> -webkit-text-size-adjust: 100%;
<02:27:34 +0000> font-size: 100%;
<02:27:34 +0000> padding: 0;
<02:27:34 +0000> margin: 0;
<02:27:34 +0000> }
<02:27:34 +0000>
<02:27:34 +0000> h1, strong {
<02:27:34 +0000> font-weight: 600;
<02:27:34 +0000> }
<02:27:34 +0000>
<02:27:34 +0000> ul {
<02:27:34 +0000> list-style-type: none;
<02:27:34 +0000> padding-left: 0;
<02:27:34 +0000> }
<02:27:34 +0000>
<02:27:34 +0000> hr {
<02:27:34 +0000> margin: 50px auto;
<02:27:34 +0000> width: 300px;
<02:27:34 +0000> max-width: 100%;
<02:27:34 +0000> border: 0;
<02:27:34 +0000> height: 2px;
<02:27:34 +0000> background: rgba(255, 255, 255, 0.5);
<02:27:34 +0000> }
<02:27:34 +0000>
<02:27:34 +0000> .viewport-section {
<02:27:34 +0000> height: 100vh;
<02:27:34 +0000> display: flex;
<02:27:34 +0000> align-items: center;
<02:27:34 +0000> justify-content: center;
<02:27:34 +0000> background-color: #006dad;
<02:27:34 +0000> color: #fff;
<02:27:34 +0000> }
<02:27:34 +0000>
<02:27:34 +0000> .viewport-section a {
<02:27:34 +0000> color: #fff;
<02:27:34 +0000> }
<02:27:34 +0000>
<02:27:34 +0000> .viewport-section__content {
<02:27:34 +0000> text-align: center;
<02:27:34 +0000> padding: 30px;
<02:27:34 +0000> min-width: 0;
<02:27:34 +0000> }
<02:27:34 +0000>
<02:27:34 +0000> .viewport-section__heading {
<02:27:34 +0000> font-size: 2.4em;
<02:27:34 +0000> padding: 20px 15px 0;
<02:27:34 +0000> margin: 0;
<02:27:34 +0000> }
<02:27:34 +0000>
<02:27:34 +0000> @media screen and (max-width: 600px) {
<02:27:34 +0000> .viewport-section__content {
<02:27:34 +0000> padding: 15px;
<02:27:34 +0000> }
<02:27:34 +0000>
<02:27:34 +0000> .viewport-section__heading {
<02:27:34 +0000> font-size: 1.5em;
<02:27:34 +0000> }
<02:27:34 +0000> }
<02:27:34 +0000> </style>
<02:27:34 +0000>
<02:27:34 +0000> </head>
<02:27:34 +0000>
<02:27:34 +0000> <body>
<02:27:34 +0000> <div class="viewport-section">
<02:27:34 +0000> <div class="viewport-section__content">
<02:27:34 +0000> <img alt="PyPI logo"
<02:27:34 +0000> src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NS44MTIiIGhlaWdodD0iNTgiIHZpZXdCb3g9IjAgMCA2NS44MTIwMzUgNTguMDAwMDAxIj48ZyBmaWxsPSIjYTI5ZDg2IiBzdHJva2U9IiNjY2MiIHN0c
<02:27:34 +0000> m9rZS13aWR0aD0iLjIxNCIgc3Ryb2tlLWxpbmVqb2luPSJiZXZlbCI+PHBhdGggZD0iTTE4LjkzIDE4LjgyNmw5LjMyMyAzLjM5NHYxMC45NTdsLTkuMzIzLTMuMzk0eiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY29sb3I9IiMwMDAiIG92Z
<02:27:34 +0000> XJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjZTllOWZmIi8+PHBhdGggZD0iTTkuNDcgMjIuMjd2MTAuOTU3bDkuNDYtMy40NDRWMTguODI2eiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBma
<02:27:34 +0000> WxsPSIjMzUzNTY0Ii8+PHBhdGggZD0iTTkuNDcgMzMuMjI3bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTR6IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNhZ
<02:27:34 +0000> mFmZGUiLz48cGF0aCBkPSJNOS40NyAyMi4yN2w5LjMyMiAzLjM5MyA5LjQ2LTMuNDQzLTkuMzIyLTMuMzk0eiIgZmlsbD0iI2Y3ZjdmNCIvPjxwYXRoIGQ9Ik0xOC43OTIgMjUuNjYzVjM2LjYybDkuNDYtMy40NDNWMjIuMjJ6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTkuNDcgM
<02:27:34 +0000> jIuMjdsOS4zMjIgMy4zOTNWMzYuNjJMOS40NyAzMy4yMjd6IiBmaWxsPSIjZWZlZWVhIi8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTI4LjI5MyAxMS4xNjZsOS4zMjMgMy4zOTN2MTAuOTU3bC05LjMyMy0zLjM5M3oiIGNvb
<02:27:34 +0000> G9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2U5ZTlmZiIvPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik0xOC44MzMgMTQuNjA5djEwLjk1N2w5LjQ2LTMuNDQzVjExLjE2NnoiIGNvbG9yPSIjMDAwIiBvdmVyZ
<02:27:34 +0000> mxvdz0idmlzaWJsZSIgZmlsbD0iIzM1MzU2NCIvPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik0xOC44MzMgMjUuNTY2bDkuMzIyIDMuMzkzIDkuNDYxLTMuNDQzLTkuMzIzLTMuMzkzeiIgY29sb3I9IiMwMDAiIG92ZXJmbG93P
<02:27:34 +0000> SJ2aXNpYmxlIiBmaWxsPSIjYWZhZmRlIi8+PHBhdGggZD0iTTE4LjgzMyAxNC42MDlsOS4zMjIgMy4zOTMgOS40NjEtMy40NDMtOS4zMjMtMy4zOTN6IiBmaWxsPSIjZjdmN2Y0Ii8+PHBhdGggZD0iTTI4LjE1NSAxOC4wMDJWMjguOTZsOS40NjEtMy40NDNWMTQuNTU5eiIgZmlsb
<02:27:34 +0000> D0iI2ZmZiIvPjxwYXRoIGQ9Ik0xOC44MzMgMTQuNjA5bDkuMzIyIDMuMzkzVjI4Ljk2bC05LjMyMi0zLjM5M3oiIGZpbGw9IiNlZmVlZWEiLz48cGF0aCBkPSJNOS41NjcgMzMuMjk3bDkuMzIyIDMuMzkzdjEwLjk1N2wtOS4zMjItMy4zOTN6IiBzdHlsZT0iaXNvbGF0aW9uOmF1d
<02:27:34 +0000> G87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNlOWU5ZmYiLz48cGF0aCBkPSJNLjEwNiAzNi43NHYxMC45NTdsOS40Ni0zLjQ0M1YzMy4yOTd6IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6b
<02:27:34 +0000> m9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiMzNTM1NjQiLz48cGF0aCBkPSJNLjEwNiA0Ny42OTdMOS40MyA1MS4wOWw5LjQ2LTMuNDQzLTkuMzIyLTMuMzkzeiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY
<02:27:34 +0000> 29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjYWZhZmRlIi8+PHBhdGggZD0iTS4xMDYgMzYuNzRsOS4zMjMgMy4zOTMgOS40Ni0zLjQ0My05LjMyMi0zLjM5M3oiIGZpbGw9IiNmN2Y3ZjQiLz48cGF0aCBkPSJNOS40MjkgNDAuMTMzVjUxLjA5bDkuNDYtMy40N
<02:27:34 +0000> DNWMzYuNjl6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTS4xMDYgMzYuNzRsOS4zMjMgMy4zOTNWNTEuMDlMLjEwNiA0Ny42OTd6IiBmaWxsPSIjZWZlZWVhIi8+PC9nPjxnIGZpbGw9IiNhMjlkODYiIHN0cm9rZT0iI2NjYyIgc3Ryb2tlLXdpZHRoPSIuMjE0IiBzdHJva2UtbGluZ
<02:27:34 +0000> WpvaW49ImJldmVsIj48cGF0aCBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBkPSJNMTguOTMgMzYuNzAybDkuMzIzIDMuMzkzdjEwLjk1N2wtOS4zMjMtMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNlOWU5Z
<02:27:34 +0000> mYiLz48cGF0aCBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBkPSJNOS40NyA0MC4xNDV2MTAuOTU3bDkuNDYtMy40NDNWMzYuNzAyeiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggc3R5bGU9I
<02:27:34 +0000> mlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTkuNDcgNTEuMTAybDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNhZmFmZGUiLz48cGF0aCBkPSJNOS40NyA0MC4xN
<02:27:34 +0000> DVsOS4zMjIgMy4zOTMgOS40Ni0zLjQ0My05LjMyMi0zLjM5M3oiIGZpbGw9IiNmN2Y3ZjQiLz48cGF0aCBkPSJNMTguNzkyIDQzLjUzOHYxMC45NTdsOS40Ni0zLjQ0M1Y0MC4wOTV6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTkuNDcgNDAuMTQ1bDkuMzIyIDMuMzkzdjEwLjk1N
<02:27:34 +0000> 0w5LjQ3IDUxLjEwMnoiIGZpbGw9IiNlZmVlZWEiLz48L2c+PGcgZmlsbD0iI2EyOWQ4NiIgc3Ryb2tlPSIjY2NjIiBzdHJva2Utd2lkdGg9Ii4yMTQiIHN0cm9rZS1saW5lam9pbj0iYmV2ZWwiPjxwYXRoIGQ9Ik0xOC45MyAyNS42MzZsOS4zMjMgMy4zOTN2MTAuOTU3bC05LjMyM
<02:27:34 +0000> y0zLjM5M3oiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2U5ZTlmZiIvPjxwYXRoIGQ9Ik05LjQ3IDI5LjA4djEwLjk1Nmw5LjQ2LTMuNDQzVjI1LjYzNnoiIHN0eWxlPSJpc
<02:27:34 +0000> 29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iIzM1MzU2NCIvPjxwYXRoIGQ9Ik05LjQ3IDQwLjAzNmw5LjMyMiAzLjM5NCA5LjQ2LTMuNDQ0LTkuMzIyLTMuMzkzeiIgc3R5bGU9Imlzb2xhdGlvb
<02:27:34 +0000> jphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjYWZhZmRlIi8+PHBhdGggZD0iTTkuNDcgMjkuMDhsOS4zMjIgMy4zOTMgOS40Ni0zLjQ0NC05LjMyMi0zLjM5M3oiIGZpbGw9IiNmN2Y3ZjQiLz48cGF0aCBkP
<02:27:34 +0000> SJNMTguNzkyIDMyLjQ3M1Y0My40M2w5LjQ2LTMuNDQ0VjI5LjAzeiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik05LjQ3IDI5LjA4bDkuMzIyIDMuMzkzVjQzLjQzTDkuNDcgNDAuMDM2eiIgZmlsbD0iI2VmZWVlYSIvPjwvZz48ZyBmaWxsPSIjYTI5ZDg2IiBzdHJva2U9IiNjY2MiI
<02:27:34 +0000> HN0cm9rZS13aWR0aD0iLjIxNCIgc3Ryb2tlLWxpbmVqb2luPSJiZXZlbCI+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTU2LjM4MyAyOS44OTJsOS4zMjMgMy4zOTN2MTAuOTU3bC05LjMyMy0zLjM5M3oiIGNvbG9yPSIjMDAwI
<02:27:34 +0000> iBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2U5ZTlmZiIvPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik00Ni45MjMgMzMuMzM1djEwLjk1N2w5LjQ2LTMuNDQzVjI5Ljg5MnoiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlza
<02:27:34 +0000> WJsZSIgZmlsbD0iIzM1MzU2NCIvPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik00Ni45MjMgNDQuMjkybDkuMzIyIDMuMzk0IDkuNDYtMy40NDQtOS4zMjItMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiI
<02:27:34 +0000> GZpbGw9IiNhZmFmZGUiLz48cGF0aCBkPSJNNDYuOTIzIDMzLjMzNWw5LjMyMiAzLjM5NCA5LjQ2LTMuNDQ0LTkuMzIyLTMuMzkzeiIgZmlsbD0iI2Y3ZjdmNCIvPjxwYXRoIGQ9Ik01Ni4yNDUgMzYuNzI5djEwLjk1N2w5LjQ2LTMuNDQ0VjMzLjI4NXoiIGZpbGw9IiNmZmYiLz48c
<02:27:34 +0000> GF0aCBkPSJNNDYuOTIzIDMzLjMzNWw5LjMyMiAzLjM5NHYxMC45NTdsLTkuMzIyLTMuMzk0eiIgZmlsbD0iI2VmZWVlYSIvPjwvZz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTY4My42NiAtNTEzLjI3NSkgc2NhbGUoLjY1MTc3KSI+PGcgZmlsbD0iI2EyOWQ4NiIgc3Ryb2tlP
<02:27:34 +0000> SIjY2NjIiBzdHJva2Utd2lkdGg9Ii4zMjgiIHN0cm9rZS1saW5lam9pbj0iYmV2ZWwiPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik0yNjU1LjM0OSA4MzguNTk0bDE0LjMwMyA1LjIwNnYxNi44MTFsLTE0LjMwMy01LjIwNnoiI
<02:27:34 +0000> GNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2U5ZTlmZiIvPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik0yNjQwLjgzNCA4NDMuODc3djE2LjgxMWwxNC41MTUtNS4yODN2LTE2LjgxeiIgY29sb3I9IiMwM
<02:27:34 +0000> DAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTI2NDAuODM0IDg2MC42ODhsMTQuMzAzIDUuMjA2IDE0LjUxNS01LjI4My0xNC4zMDMtNS4yMDZ6IiBjb2xvcj0iI
<02:27:34 +0000> zAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNhZmFmZGUiLz48cGF0aCBkPSJNMjY0MC44MzQgODQzLjg3N2wxNC4zMDMgNS4yMDYgMTQuNTE1LTUuMjgzLTE0LjMwMy01LjIwNnoiIGZpbGw9IiNmN2Y3ZjQiLz48cGF0aCBkPSJNMjY1NS4xMzcgODQ5LjA4M3YxNi44MTFsM
<02:27:34 +0000> TQuNTE1LTUuMjgzdi0xNi44MXoiIGZpbGw9IiNmZmQyNDIiLz48cGF0aCBkPSJNMjY0MC44MzQgODQzLjg3N2wxNC4zMDMgNS4yMDZ2MTYuODExbC0xNC4zMDMtNS4yMDZ6IiBmaWxsPSIjZWZlZWVhIi8+PC9nPjxjaXJjbGUgdHJhbnNmb3JtPSJza2V3WSgtMjApIHNjYWxlKC45M
<02:27:34 +0000> zk3IDEpIiBjeT0iMTgyMy44OTkiIGN4PSIyODM1LjIxOCIgcj0iMi45NjciIGZpbGw9IiNmZmYiLz48L2c+PGcgZmlsbD0iI2EyOWQ4NiIgc3Ryb2tlPSIjY2NjIiBzdHJva2Utd2lkdGg9Ii4yMTQiIHN0cm9rZS1saW5lam9pbj0iYmV2ZWwiPjxwYXRoIGQ9Ik0zNy42NTcgMzYuN
<02:27:34 +0000> zAybDkuMzIyIDMuMzkzdjEwLjk1N2wtOS4zMjItMy4zOTN6IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNlOWU5ZmYiLz48cGF0aCBkPSJNMjguMTk2IDQwLjE0NXYxMC45N
<02:27:34 +0000> TdsOS40Ni0zLjQ0M1YzNi43MDJ6IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiMzNTM1NjQiLz48cGF0aCBkPSJNMjguMTk2IDUxLjEwMmw5LjMyMyAzLjM5MyA5LjQ2LTMuN
<02:27:34 +0000> DQzLTkuMzIyLTMuMzkzeiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjYWZhZmRlIi8+PHBhdGggZD0iTTI4LjE5NiA0MC4xNDVsOS4zMjMgMy4zOTMgOS40Ni0zLjQ0My05L
<02:27:34 +0000> jMyMi0zLjM5M3oiIGZpbGw9IiNmN2Y3ZjQiLz48cGF0aCBkPSJNMzcuNTE5IDQzLjUzOHYxMC45NTdsOS40Ni0zLjQ0M1Y0MC4wOTV6IiBmaWxsPSIjZmZkMjQyIi8+PHBhdGggZD0iTTI4LjE5NiA0MC4xNDVsOS4zMjMgMy4zOTN2MTAuOTU3bC05LjMyMy0zLjM5M3oiIGZpbGw9I
<02:27:34 +0000> iNlZmVlZWEiLz48L2c+PGcgZmlsbD0iI2EyOWQ4NiIgc3Ryb2tlPSIjY2NjIiBzdHJva2Utd2lkdGg9Ii4yMTQiIHN0cm9rZS1saW5lam9pbj0iYmV2ZWwiPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik0yOC4yOTMgNDAuMTA3b
<02:27:34 +0000> DkuMzIzIDMuMzkzdjEwLjk1N2wtOS4zMjMtMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNlOWU5ZmYiLz48cGF0aCBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBkPSJNMTguODMzIDQzLjU1djEwLjk1N2w5L
<02:27:34 +0000> jQ2LTMuNDQzVjQwLjEwN3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iIzM1MzU2NCIvPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik0xOC44MzMgNTQuNTA3bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtO
<02:27:34 +0000> S4zMjItMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNhZmFmZGUiLz48cGF0aCBkPSJNMTguODMzIDQzLjU1bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTN6IiBmaWxsPSIjZjdmN2Y0Ii8+PHBhdGggZD0iTTI4LjE1NSA0Ni45N
<02:27:34 +0000> DNWNTcuOWw5LjQ2LTMuNDQzVjQzLjV6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTE4LjgzMyA0My41NWw5LjMyMiAzLjM5M1Y1Ny45bC05LjMyMi0zLjM5M3oiIGZpbGw9IiNlZmVlZWEiLz48L2c+PGcgZmlsbD0iI2EyOWQ4NiIgc3Ryb2tlPSIjY2NjIiBzdHJva2Utd2lkdGg9I
<02:27:34 +0000> i4yMTQiIHN0cm9rZS1saW5lam9pbj0iYmV2ZWwiPjxwYXRoIGQ9Ik01Ni4zODMgMTguODI2bDkuMzIzIDMuMzk0djEwLjk1N2wtOS4zMjMtMy4zOTR6IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc
<02:27:34 +0000> 2libGUiIGZpbGw9IiNlOWU5ZmYiLz48cGF0aCBkPSJNNDYuOTIzIDIyLjI3djEwLjk1N2w5LjQ2LTMuNDQ0VjE4LjgyNnoiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iIzM1M
<02:27:34 +0000> zU2NCIvPjxwYXRoIGQ9Ik00Ni45MjMgMzMuMjI3bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTR6IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNhZmFmZGUiL
<02:27:34 +0000> z48cGF0aCBkPSJNNDYuOTIzIDIyLjI3bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTR6IiBmaWxsPSIjZjdmN2Y0Ii8+PHBhdGggZD0iTTU2LjI0NSAyNS42NjNWMzYuNjJsOS40Ni0zLjQ0M1YyMi4yMnoiIGZpbGw9IiNmZmQyNDIiLz48cGF0aCBkPSJNNDYuOTIzI
<02:27:34 +0000> DIyLjI3bDkuMzIyIDMuMzkzVjM2LjYybC05LjMyMi0zLjM5M3oiIGZpbGw9IiNlZmVlZWEiLz48L2c+PGcgZmlsbD0iI2EyOWQ4NiIgc3Ryb2tlPSIjY2NjIiBzdHJva2Utd2lkdGg9Ii4yMTQiIHN0cm9rZS1saW5lam9pbj0iYmV2ZWwiPjxwYXRoIHN0eWxlPSJpc29sYXRpb246Y
<02:27:34 +0000> XV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik01Ni4zODMgNy43Nmw5LjMyMyAzLjM5NFYyMi4xMWwtOS4zMjMtMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNlOWU5ZmYiLz48cGF0aCBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZ
<02:27:34 +0000> W5kLW1vZGU6bm9ybWFsIiBkPSJNNDYuOTIzIDExLjIwNHYxMC45NTdsOS40Ni0zLjQ0M1Y3Ljc2eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZ
<02:27:34 +0000> D0iTTQ2LjkyMyAyMi4xNjFsOS4zMjIgMy4zOTMgOS40Ni0zLjQ0My05LjMyMi0zLjM5M3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2FmYWZkZSIvPjxwYXRoIGQ9Ik00Ni45MjMgMTEuMjA0bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zO
<02:27:34 +0000> TN6IiBmaWxsPSIjZmZjOTFkIi8+PHBhdGggZD0iTTU2LjI0NSAxNC41OTd2MTAuOTU3bDkuNDYtMy40NDNWMTEuMTU0eiIgZmlsbD0iI2ZmZDI0MiIvPjxwYXRoIGQ9Ik00Ni45MjMgMTEuMjA0bDkuMzIyIDMuMzkzdjEwLjk1N2wtOS4zMjItMy4zOTN6IiBmaWxsPSIjZWZlZWVhI
<02:27:34 +0000> i8+PC9nPjxnIGZpbGw9IiNhMjlkODYiIHN0cm9rZT0iI2NjYyIgc3Ryb2tlLXdpZHRoPSIuMjE0IiBzdHJva2UtbGluZWpvaW49ImJldmVsIj48cGF0aCBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBkPSJNNDcuMDIgMjIuMjMxbDkuMzIyIDMuM
<02:27:34 +0000> zkzdjEwLjk1N2wtOS4zMjItMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNlOWU5ZmYiLz48cGF0aCBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBkPSJNMzcuNTYgMjUuNjc1djEwLjk1N2w5LjQ2LTMuNDQ0V
<02:27:34 +0000> jIyLjIzMXoiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iIzM1MzU2NCIvPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik0zNy41NiAzNi42MzJsOS4zMjIgMy4zOTMgOS40Ni0zLjQ0NC05LjMyMi0zLjM5M
<02:27:34 +0000> 3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2FmYWZkZSIvPjxwYXRoIGQ9Ik0zNy41NiAyNS42NzVsOS4zMjIgMy4zOTMgOS40Ni0zLjQ0NC05LjMyMi0zLjM5M3oiIGZpbGw9IiNmN2Y3ZjQiLz48cGF0aCBkPSJNNDYuODgyIDI5LjA2OHYxMC45NTdsO
<02:27:34 +0000> S40Ni0zLjQ0NFYyNS42MjR6IiBmaWxsPSIjZmZkMjQyIi8+PHBhdGggZD0iTTM3LjU2IDI1LjY3NWw5LjMyMiAzLjM5M3YxMC45NTdsLTkuMzIzLTMuMzkzeiIgZmlsbD0iI2VmZWVlYSIvPjwvZz48ZyBmaWxsPSIjYTI5ZDg2IiBzdHJva2U9IiNjY2MiIHN0cm9rZS13aWR0aD0iL
<02:27:34 +0000> jIxNCIgc3Ryb2tlLWxpbmVqb2luPSJiZXZlbCI+PHBhdGggZD0iTTQ3LjAyIDExLjE2Nmw5LjMyMiAzLjM5M3YxMC45NTdsLTkuMzIyLTMuMzkzeiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpY
<02:27:34 +0000> mxlIiBmaWxsPSIjZTllOWZmIi8+PHBhdGggZD0iTTM3LjU2IDE0LjYwOXYxMC45NTdsOS40Ni0zLjQ0M1YxMS4xNjZ6IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiMzNTM1N
<02:27:34 +0000> jQiLz48cGF0aCBkPSJNMzcuNTYgMjUuNTY2bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTN6IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNhZmFmZGUiLz48c
<02:27:34 +0000> GF0aCBkPSJNMzcuNTYgMTQuNjA5bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTN6IiBmaWxsPSIjZjdmN2Y0Ii8+PHBhdGggZD0iTTQ2Ljg4MiAxOC4wMDJWMjguOTZsOS40Ni0zLjQ0M1YxNC41NTl6IiBmaWxsPSIjMzc3NWE5Ii8+PHBhdGggZD0iTTM3LjU2IDE0L
<02:27:34 +0000> jYwOWw5LjMyMiAzLjM5M1YyOC45NmwtOS4zMjMtMy4zOTN6IiBmaWxsPSIjZWZlZWVhIi8+PC9nPjxnIGZpbGw9IiNhMjlkODYiIHN0cm9rZT0iI2NjYyIgc3Ryb2tlLXdpZHRoPSIuMjE0IiBzdHJva2UtbGluZWpvaW49ImJldmVsIj48cGF0aCBzdHlsZT0iaXNvbGF0aW9uOmF1d
<02:27:34 +0000> G87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBkPSJNNDcuMDIuMWw5LjMyMiAzLjM5M1YxNC40NWwtOS4zMjItMy4zOTN6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNlOWU5ZmYiLz48cGF0aCBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZ
<02:27:34 +0000> GU6bm9ybWFsIiBkPSJNMzcuNTYgMy41NDNWMTQuNWw5LjQ2LTMuNDQzVi4xeiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTM3LjU2IDE0L
<02:27:34 +0000> jVsOS4zMjIgMy4zOTMgOS40Ni0zLjQ0My05LjMyMi0zLjM5M3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2FmYWZkZSIvPjxwYXRoIGQ9Ik0zNy41NiAzLjU0M2w5LjMyMiAzLjM5MyA5LjQ2LTMuNDQzTDQ3LjAyLjF6IiBmaWxsPSIjMmY2NDkxIi8+P
<02:27:34 +0000> HBhdGggZD0iTTQ2Ljg4MiA2LjkzNnYxMC45NTdsOS40Ni0zLjQ0M1YzLjQ5M3oiIGZpbGw9IiMzNzc1YTkiLz48cGF0aCBkPSJNMzcuNTYgMy41NDNsOS4zMjIgMy4zOTN2MTAuOTU3TDM3LjU1OSAxNC41eiIgZmlsbD0iI2VmZWVlYSIvPjwvZz48ZyBmaWxsPSIjYTI5ZDg2IiBzd
<02:27:34 +0000> HJva2U9IiNjY2MiIHN0cm9rZS13aWR0aD0iLjIxNCIgc3Ryb2tlLWxpbmVqb2luPSJiZXZlbCI+PHBhdGggZD0iTTM3LjY1NyAyNS42MzZsOS4zMjIgMy4zOTN2MTAuOTU3bC05LjMyMi0zLjM5M3oiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiI
<02:27:34 +0000> GNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2U5ZTlmZiIvPjxwYXRoIGQ9Ik0yOC4xOTYgMjkuMDh2MTAuOTU2bDkuNDYtMy40NDNWMjUuNjM2eiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY29sb3I9IiMwMDAiIG92Z
<02:27:34 +0000> XJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggZD0iTTI4LjE5NiA0MC4wMzZsOS4zMjMgMy4zOTQgOS40Ni0zLjQ0NC05LjMyMi0zLjM5M3oiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGNvbG9yPSIjMDAwIiBvdmVyZmxvd
<02:27:34 +0000> z0idmlzaWJsZSIgZmlsbD0iI2FmYWZkZSIvPjxwYXRoIGQ9Ik0yOC4xOTYgMjkuMDhsOS4zMjMgMy4zOTMgOS40Ni0zLjQ0NC05LjMyMi0zLjM5M3oiIGZpbGw9IiNmN2Y3ZjQiLz48cGF0aCBkPSJNMzcuNTE5IDMyLjQ3M1Y0My40M2w5LjQ2LTMuNDQ0VjI5LjAzeiIgZmlsbD0iI
<02:27:34 +0000> 2ZmZDI0MiIvPjxwYXRoIGQ9Ik0yOC4xOTYgMjkuMDhsOS4zMjMgMy4zOTNWNDMuNDNsLTkuMzIzLTMuMzk0eiIgZmlsbD0iI2VmZWVlYSIvPjwvZz48ZyBmaWxsPSIjYTI5ZDg2IiBzdHJva2U9IiNjY2MiIHN0cm9rZS13aWR0aD0iLjIxNCIgc3Ryb2tlLWxpbmVqb2luPSJiZXZlb
<02:27:34 +0000> CI+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTM3LjY1NyAxNC41N2w5LjMyMiAzLjM5NFYyOC45MmwtOS4zMjItMy4zOTR6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNlOWU5ZmYiLz48cGF0aCBzd
<02:27:34 +0000> HlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsIiBkPSJNMjguMTk2IDE4LjAxNFYyOC45N2w5LjQ2LTMuNDQ0VjE0LjU3eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphd
<02:27:34 +0000> XRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTI4LjE5NiAyOC45N2w5LjMyMyAzLjM5NCA5LjQ2LTMuNDQzLTkuMzIyLTMuMzk0eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjYWZhZmRlIi8+PHBhdGggZD0iTTI4LjE5NiAxOC4wMTRsOS4zMjMgM
<02:27:34 +0000> y4zOTMgOS40Ni0zLjQ0My05LjMyMi0zLjM5NHoiIGZpbGw9IiNmN2Y3ZjQiLz48cGF0aCBkPSJNMzcuNTE5IDIxLjQwN3YxMC45NTdsOS40Ni0zLjQ0M1YxNy45NjR6IiBmaWxsPSIjMzc3NWE5Ii8+PHBhdGggZD0iTTI4LjE5NiAxOC4wMTRsOS4zMjMgMy4zOTN2MTAuOTU3bC05L
<02:27:34 +0000> jMyMy0zLjM5M3oiIGZpbGw9IiNlZmVlZWEiLz48L2c+PGcgZmlsbD0iI2EyOWQ4NiIgc3Ryb2tlPSIjY2NjIiBzdHJva2Utd2lkdGg9Ii4yMTQiIHN0cm9rZS1saW5lam9pbj0iYmV2ZWwiPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiI
<02:27:34 +0000> GQ9Ik0yOC4yOTMgMjkuMDRsOS4zMjMgMy4zOTR2MTAuOTU3bC05LjMyMy0zLjM5M3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2U5ZTlmZiIvPjxwYXRoIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik0xOC44M
<02:27:34 +0000> zMgMzIuNDg0djEwLjk1N2w5LjQ2LTMuNDQzVjI5LjA0eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTE4LjgzMyA0My40NDFsOS4zMjIgM
<02:27:34 +0000> y4zOTMgOS40Ni0zLjQ0My05LjMyMi0zLjM5M3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2FmYWZkZSIvPjxwYXRoIGQ9Ik0xOC44MzMgMzIuNDg0bDkuMzIyIDMuMzkzIDkuNDYtMy40NDMtOS4zMjItMy4zOTN6IiBmaWxsPSIjZjdmN2Y0Ii8+PHBhd
<02:27:34 +0000> GggZD0iTTI4LjE1NSAzNS44Nzd2MTAuOTU3bDkuNDYtMy40NDNWMzIuNDM0eiIgZmlsbD0iIzM3NzVhOSIvPjxwYXRoIGQ9Ik0xOC44MzMgMzIuNDg0bDkuMzIyIDMuMzkzdjEwLjk1N2wtOS4zMjItMy4zOTN6IiBmaWxsPSIjMmY2NDkxIi8+PC9nPjxnIGZpbGw9IiNhMjlkODYiI
<02:27:34 +0000> HN0cm9rZT0iI2NjYyIgc3Ryb2tlLXdpZHRoPSIuMjE0IiBzdHJva2UtbGluZWpvaW49ImJldmVsIj48cGF0aCBkPSJNMjguMjkzIDE3Ljk3NWw5LjMyMyAzLjM5M3YxMC45NTdsLTkuMzIzLTMuMzkzeiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hb
<02:27:34 +0000> CIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjZTllOWZmIi8+PHBhdGggZD0iTTE4LjgzMyAyMS40MTl2MTAuOTU3bDkuNDYtMy40NDRWMTcuOTc1eiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgY29sb3I9IiMwMDAiI
<02:27:34 +0000> G92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggZD0iTTE4LjgzMyAzMi4zNzZsOS4zMjIgMy4zOTMgOS40Ni0zLjQ0NC05LjMyMi0zLjM5M3oiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGNvbG9yPSIjMDAwIiBvdmVyZ
<02:27:34 +0000> mxvdz0idmlzaWJsZSIgZmlsbD0iI2FmYWZkZSIvPjxwYXRoIGQ9Ik0xOC44MzMgMjEuNDE5bDkuMzIyIDMuMzkzIDkuNDYtMy40NDQtOS4zMjItMy4zOTN6IiBmaWxsPSIjMmY2NDkxIi8+PHBhdGggZD0iTTI4LjE1NSAyNC44MTJ2MTAuOTU3bDkuNDYtMy40NDRWMjEuMzY4eiIgZ
<02:27:34 +0000> mlsbD0iIzM3NzVhOSIvPjxwYXRoIGQ9Ik0xOC44MzMgMjEuNDE5bDkuMzIyIDMuMzkzdjEwLjk1N2wtOS4zMjItMy4zOTN6IiBmaWxsPSIjMmY2NDkxIi8+PC9nPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xNjgzLjY2IC01MTMuMjc1KSBzY2FsZSguNjUxNzcpIj48ZyBmaWxsP
<02:27:34 +0000> SIjYTI5ZDg2IiBzdHJva2U9IiNjY2MiIHN0cm9rZS13aWR0aD0iLjMyOCIgc3Ryb2tlLWxpbmVqb2luPSJiZXZlbCI+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTI2NDAuOTgzIDc5Mi44ODVsMTQuMzA0IDUuMjA2djE2LjgxM
<02:27:34 +0000> WwtMTQuMzA0LTUuMjA2eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjZTllOWZmIi8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTI2MjYuNDY4IDc5OC4xNjh2MTYuODExbDE0LjUxNS01LjI4M3YtM
<02:27:34 +0000> TYuODExeiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMzUzNTY0Ii8+PHBhdGggc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbCIgZD0iTTI2MjYuNDY4IDgxNC45NzlsMTQuMzA0IDUuMjA2IDE0LjUxNS01LjI4My0xNC4zM
<02:27:34 +0000> DQtNS4yMDZ6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNhZmFmZGUiLz48cGF0aCBkPSJNMjYyNi40NjggNzk4LjE2OGwxNC4zMDQgNS4yMDYgMTQuNTE1LTUuMjgzLTE0LjMwNC01LjIwNnoiIGZpbGw9IiMyZjY0OTEiLz48cGF0aCBkPSJNMjY0MC43N
<02:27:34 +0000> zIgODAzLjM3NHYxNi44MTFsMTQuNTE1LTUuMjgzdi0xNi44MTF6IiBmaWxsPSIjMzc3NWE5Ii8+PHBhdGggZD0iTTI2MjYuNDY4IDc5OC4xNjhsMTQuMzA0IDUuMjA2djE2LjgxMWwtMTQuMzA0LTUuMjA2eiIgZmlsbD0iIzJmNjQ5MSIvPjwvZz48Y2lyY2xlIHRyYW5zZm9ybT0ic
<02:27:34 +0000> 2tld1koLTIwKSBzY2FsZSguOTM5NyAxKSIgY3k9IjE3NzIuOTIyIiBjeD0iMjgxNi4wMTciIHI9IjIuOTY3IiBmaWxsPSIjZmZmIi8+PC9nPjwvc3ZnPg==">
<02:27:34 +0000> <h1 class="viewport-section__heading">Sorry, something went wrong</h1>
<02:27:34 +0000>
<02:27:34 +0000> <div class="viewport-section__text">
<02:27:34 +0000> <p>PyPI is down for maintenance or is having an outage.</p>
<02:27:34 +0000> <p>
<02:27:34 +0000> This is affecting several of our services, including our web interface.</br>
<02:27:34 +0000> If you are trying to install a package, you should be able to <strong>pip install</strong> packages without problem.
<02:27:34 +0000> </p>
<02:27:34 +0000>
<02:27:34 +0000> <ul class="unstyled">
<02:27:34 +0000> <li><a href="https://status.python.org/">Check our status page</a>, or</li>
<02:27:34 +0000> <li><a href="https://twitter.com/PythonStatus">View Python Status on Twitter</a></li>
<02:27:34 +0000> </ul>
<02:27:34 +0000>
<02:27:34 +0000> <hr>
<02:27:34 +0000>
<02:27:34 +0000> <p>
<02:27:34 +0000> <strong>
<02:27:34 +0000> Rely on PyPI to get your job done?</br>
<02:27:34 +0000> Consider <a href="https://github.com/pypa/warehouse">contributing</a> or <a href="https://psfmember.org/civicrm/contribute/transact?reset=1&id=13">donating</a> to help us build a more stable and
<02:27:34 +0000> secure platform.
<02:27:34 +0000> </strong>
<02:27:34 +0000> </p>
<02:27:34 +0000> </div>
<02:27:34 +0000> </div>
<02:27:34 +0000> </div>
<02:27:34 +0000> </body>
<02:27:34 +0000> </html>
<02:27:34 +0000>
<02:27:34 +0000> ERROR HTTPError: 503 Service Unavailable from https://test.pypi.org/legacy/
<02:27:34 +0000> Service Unavailable
$ (python -m twine upload --repository nighthawk-test dist/* --verbose) | TZ=UTC ts '<%H:%M:%S %z>'
<02:29:01 +0000> INFO Using configuration from /Users/benjamin/.pypirc
<02:29:01 +0000> Uploading distributions to https://test.pypi.org/legacy/
<02:29:01 +0000> INFO dist/nighthawk-0.3.0.post3-py3-none-any.whl (430.3 KB)
<02:29:01 +0000> INFO dist/nighthawk-0.3.0.post3.tar.gz (428.0 KB)
<02:29:01 +0000> INFO username set from config file
<02:29:01 +0000> INFO password set from config file
<02:29:01 +0000> INFO username: __token__
<02:29:01 +0000> INFO password: <hidden>
<02:29:01 +0000> Uploading nighthawk-0.3.0.post3-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 471.7/471.7 kB • 00:00 • 2.0 MB/s
<02:29:03 +0000> INFO Response from https://test.pypi.org/legacy/:
<02:29:03 +0000> 200 OK
<02:29:03 +0000> Uploading nighthawk-0.3.0.post3.tar.gz
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 469.3/469.3 kB • 00:00 • 165.2 MB/s
<02:29:05 +0000> INFO Response from https://test.pypi.org/legacy/:
<02:29:05 +0000> 200 OK
<02:29:05 +0000>
<02:29:05 +0000> View at:
<02:29:05 +0000> https://test.pypi.org/project/nighthawk/0.3.0.post3/
Thanks @bmvandoren !
The good news - I was able to reproduce the error on testpypi.
The bad news - I played with limits, no dice there. The issue is happening between our edge cache and the backend application, and the request isn't showing up on the backend oddly.
Considering that TestPyPI is generally not used for production-grade packages, would it make more sense to use production PyPI, and thus sidestep the problem completely?
Ah, I see. I thought that best practice was to first upload to TestPyPI before deploying to PyPI. But that assumed the two would be essentially identical.
I able to push this release to PyPI, so that's good! But it would be nice to be able to use TestPyPI for testing.
I able to push this release to PyPI, so that's good!
Glad to hear it!
But it would be nice to be able to use TestPyPI for testing.
Indeed. Leaving this issue open for now, since there's definitely something different about how we are proxying the uploads for testpypi that is causing this issue.
fwiw we are seeing the same sort of problems but when uploading from github actions to public pypi: https://github.com/getsentry/publish/actions/runs/8437326194/job/23106871689#step:11:814
happy to provide whatever additional information that would help debug this -- it's running in a docker image (latest stable debian) with the current latest twine
TestPyPI is being used for testing a redis upgrade and should be back soon. No SLA on that service.
@ewdurbin my message is about public pypi but the same failure modes
Then please open an issue that isn't related to test.pypi.org, @asottile-sentry!
I was hoping to not lose the context that's already present in this thread since it is the same error message and same symptoms (large uploads)
My Platform
Terminal (zsh) on MacOS 13.6. Spectrum service provider, no firewalls or proxies.
Fastly Debug
DNS Resolution
Traceroutes / IPv4
Traceroutes / IPv6 (If available)
HTTPS Requests / IPv4
HTTPS Requests / IPv6 (If available)
TLS Debug / IPv4
TLS Debug / IPv6 (If available)
Code of Conduct