From 2ad2f64c8627a524e21133078e470a8828f5ad19 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Thu, 27 Aug 2026 16:34:13 +0100 Subject: [PATCH 01/30] Cleanup certs + added dockerignore. --- .dockerignore | 21 ++++++ .gitignore | 30 ++++---- security/.DS_Store | Bin 12292 -> 8196 bytes security/certificates/.DS_Store | Bin 8196 -> 0 bytes security/certificates/README.md | 20 ++++++ security/certificates/elastic/.DS_Store | Bin 6148 -> 0 bytes .../elasticsearch/elastic-stack-ca.crt.pem | 27 ------- .../elasticsearch/elastic-stack-ca.key.pem | 32 --------- .../elasticsearch/elastic-stack-ca.p12 | Bin 2688 -> 0 bytes .../elasticsearch/elasticsearch-ssl-http.zip | Bin 31007 -> 0 bytes .../elasticsearch-1-dev/README.txt | 51 ------------- .../elasticsearch-1-dev.crt | 22 ------ .../elasticsearch-1-dev.key | 27 ------- .../elasticsearch-1-dev.p12 | Bin 3778 -> 0 bytes .../http-elasticsearch-1-dev.csr | 20 ------ .../http-elasticsearch-1-dev.key | 30 -------- .../sample-elasticsearch.yml | 30 -------- .../elasticsearch/elasticsearch-1/README.txt | 51 ------------- .../elasticsearch-1/elasticsearch-1.crt | 22 ------ .../elasticsearch-1/elasticsearch-1.key | 27 ------- .../elasticsearch-1/elasticsearch-1.p12 | Bin 3754 -> 0 bytes .../elasticsearch-1/http-elasticsearch-1.csr | 20 ------ .../elasticsearch-1/http-elasticsearch-1.key | 30 -------- .../elasticsearch-1/sample-elasticsearch.yml | 30 -------- .../elasticsearch-2-dev/README.txt | 51 ------------- .../elasticsearch-2-dev.crt | 22 ------ .../elasticsearch-2-dev.key | 27 ------- .../elasticsearch-2-dev.p12 | Bin 3778 -> 0 bytes .../http-elasticsearch-2-dev.csr | 20 ------ .../http-elasticsearch-2-dev.key | 30 -------- .../sample-elasticsearch.yml | 30 -------- .../elasticsearch/elasticsearch-2/README.txt | 51 ------------- .../elasticsearch-2/elasticsearch-2.crt | 21 ------ .../elasticsearch-2/elasticsearch-2.key | 27 ------- .../elasticsearch-2/elasticsearch-2.p12 | Bin 3738 -> 0 bytes .../elasticsearch-2/http-elasticsearch-2.csr | 20 ------ .../elasticsearch-2/http-elasticsearch-2.key | 30 -------- .../elasticsearch-2/sample-elasticsearch.yml | 30 -------- .../elasticsearch-3-dev/README.txt | 51 ------------- .../elasticsearch-3-dev.crt | 22 ------ .../elasticsearch-3-dev.key | 27 ------- .../elasticsearch-3-dev.p12 | Bin 3778 -> 0 bytes .../http-elasticsearch-3-dev.csr | 20 ------ .../http-elasticsearch-3-dev.key | 30 -------- .../sample-elasticsearch.yml | 30 -------- .../elasticsearch/elasticsearch-3/README.txt | 51 ------------- .../elasticsearch-3/elasticsearch-3.crt | 21 ------ .../elasticsearch-3/elasticsearch-3.key | 27 ------- .../elasticsearch-3/elasticsearch-3.p12 | Bin 3738 -> 0 bytes .../elasticsearch-3/http-elasticsearch-3.csr | 20 ------ .../elasticsearch-3/http-elasticsearch-3.key | 30 -------- .../elasticsearch-3/sample-elasticsearch.yml | 30 -------- .../elasticsearch/es_native_certs_bundle.zip | Bin 23908 -> 0 bytes .../es_native_certs_bundle_pem.zip | Bin 18878 -> 0 bytes .../elastic/elasticsearch/instances.yml | 67 ------------------ .../elastic/elasticsearch/kibana/README.txt | 38 ---------- .../elasticsearch/kibana/sample-kibana.yml | 25 ------- .../certificates/elastic/opensearch/.DS_Store | Bin 6148 -> 0 bytes .../elastic/opensearch/admin-key-temp.pem | 52 -------------- .../certificates/elastic/opensearch/admin.crt | 32 --------- .../certificates/elastic/opensearch/admin.csr | 27 ------- .../elastic/opensearch/admin.key.pem | 52 -------------- .../opensearch/elastic-stack-ca.crt.pem | 33 --------- .../opensearch/elastic-stack-ca.key.pem | 52 -------------- .../elastic/opensearch/elastic-stack-ca.p12 | Bin 4450 -> 0 bytes .../opensearch/elasticsearch/.DS_Store | Bin 6148 -> 0 bytes .../elasticsearch/elasticsearch-1/.DS_Store | Bin 6148 -> 0 bytes .../elasticsearch-1-keystore.jks | Bin 6586 -> 0 bytes .../elasticsearch-1-truststore.key | Bin 2374 -> 0 bytes .../elasticsearch-1/elasticsearch-1.crt | 44 ------------ .../elasticsearch-1/elasticsearch-1.csr | 31 -------- .../elasticsearch-1/elasticsearch-1.key | 52 -------------- .../elasticsearch-1/elasticsearch-1.p12 | Bin 4994 -> 0 bytes .../elasticsearch/elasticsearch-2/.DS_Store | Bin 6148 -> 0 bytes .../elasticsearch-2-keystore.jks | Bin 6586 -> 0 bytes .../elasticsearch-2-truststore.key | Bin 2374 -> 0 bytes .../elasticsearch-2/elasticsearch-2.crt | 44 ------------ .../elasticsearch-2/elasticsearch-2.csr | 31 -------- .../elasticsearch-2/elasticsearch-2.key | 52 -------------- .../elasticsearch-2/elasticsearch-2.p12 | Bin 4994 -> 0 bytes .../elasticsearch/elasticsearch-3/.DS_Store | Bin 6148 -> 0 bytes .../elasticsearch-3-keystore.jks | Bin 6586 -> 0 bytes .../elasticsearch-3-truststore.key | Bin 2374 -> 0 bytes .../elasticsearch-3/elasticsearch-3.crt | 44 ------------ .../elasticsearch-3/elasticsearch-3.csr | 31 -------- .../elasticsearch-3/elasticsearch-3.key | 52 -------------- .../elasticsearch-3/elasticsearch-3.p12 | Bin 4994 -> 0 bytes .../elastic/opensearch/es_kibana_client.csr | 27 ------- .../elastic/opensearch/es_kibana_client.key | 52 -------------- .../elastic/opensearch/es_kibana_client.p12 | 52 -------------- .../elastic/opensearch/es_kibana_client.pem | 44 ------------ .../elastic/opensearch/root-ca.key | 52 -------------- .../elastic/opensearch/root-ca.p12 | Bin 4500 -> 0 bytes .../elastic/opensearch/root-ca.pem | 34 --------- security/certificates/nifi/nifi-keystore.jks | Bin 5012 -> 0 bytes .../certificates/nifi/nifi-truststore.jks | Bin 2390 -> 0 bytes security/certificates/nifi/nifi.crt | Bin 2025 -> 0 bytes security/certificates/nifi/nifi.csr | 27 ------- security/certificates/nifi/nifi.key | 52 -------------- security/certificates/nifi/nifi.p12 | Bin 4988 -> 0 bytes security/certificates/nifi/nifi.pem | 45 ------------ security/certificates/root/.DS_Store | Bin 6148 -> 0 bytes .../certificates/root/root-ca-keystore.jks | Bin 8072 -> 0 bytes .../certificates/root/root-ca-truststore.jks | Bin 1942 -> 0 bytes security/certificates/root/root-ca.crt | Bin 1561 -> 0 bytes security/certificates/root/root-ca.csr | 27 ------- security/certificates/root/root-ca.key | 52 -------------- security/certificates/root/root-ca.p12 | Bin 4546 -> 0 bytes security/certificates/root/root-ca.pem | 35 --------- security/certificates/root/root-ca.srl | 1 - security/env/README.md | 14 ++++ security/scripts/create_nifi_certs.sh | 46 +++++++----- security/scripts/create_root_ca_cert.sh | 32 ++++----- 113 files changed, 113 insertions(+), 2446 deletions(-) create mode 100644 .dockerignore delete mode 100644 security/certificates/.DS_Store create mode 100644 security/certificates/README.md delete mode 100644 security/certificates/elastic/.DS_Store delete mode 100644 security/certificates/elastic/elasticsearch/elastic-stack-ca.crt.pem delete mode 100644 security/certificates/elastic/elasticsearch/elastic-stack-ca.key.pem delete mode 100644 security/certificates/elastic/elasticsearch/elastic-stack-ca.p12 delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch-ssl-http.zip delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/README.txt delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.crt delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.key delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.p12 delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/http-elasticsearch-1-dev.csr delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/http-elasticsearch-1-dev.key delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/sample-elasticsearch.yml delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/README.txt delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.key delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.p12 delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/http-elasticsearch-1.csr delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/http-elasticsearch-1.key delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/sample-elasticsearch.yml delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/README.txt delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.crt delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.key delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.p12 delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/http-elasticsearch-2-dev.csr delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/http-elasticsearch-2-dev.key delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/sample-elasticsearch.yml delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/README.txt delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/elasticsearch-2.crt delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/elasticsearch-2.key delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/elasticsearch-2.p12 delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/http-elasticsearch-2.csr delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/http-elasticsearch-2.key delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/sample-elasticsearch.yml delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/README.txt delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/elasticsearch-3-dev.crt delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/elasticsearch-3-dev.key delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/elasticsearch-3-dev.p12 delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/http-elasticsearch-3-dev.csr delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/http-elasticsearch-3-dev.key delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/sample-elasticsearch.yml delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/README.txt delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.crt delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.key delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.p12 delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/http-elasticsearch-3.csr delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/http-elasticsearch-3.key delete mode 100644 security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/sample-elasticsearch.yml delete mode 100644 security/certificates/elastic/elasticsearch/es_native_certs_bundle.zip delete mode 100644 security/certificates/elastic/elasticsearch/es_native_certs_bundle_pem.zip delete mode 100644 security/certificates/elastic/elasticsearch/instances.yml delete mode 100644 security/certificates/elastic/elasticsearch/kibana/README.txt delete mode 100644 security/certificates/elastic/elasticsearch/kibana/sample-kibana.yml delete mode 100644 security/certificates/elastic/opensearch/.DS_Store delete mode 100644 security/certificates/elastic/opensearch/admin-key-temp.pem delete mode 100644 security/certificates/elastic/opensearch/admin.crt delete mode 100644 security/certificates/elastic/opensearch/admin.csr delete mode 100644 security/certificates/elastic/opensearch/admin.key.pem delete mode 100644 security/certificates/elastic/opensearch/elastic-stack-ca.crt.pem delete mode 100644 security/certificates/elastic/opensearch/elastic-stack-ca.key.pem delete mode 100644 security/certificates/elastic/opensearch/elastic-stack-ca.p12 delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/.DS_Store delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/.DS_Store delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1-keystore.jks delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1-truststore.key delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.csr delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.key delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.p12 delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/.DS_Store delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2-keystore.jks delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2-truststore.key delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.crt delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.csr delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.key delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.p12 delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/.DS_Store delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3-keystore.jks delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3-truststore.key delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.crt delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.csr delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.key delete mode 100644 security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.p12 delete mode 100644 security/certificates/elastic/opensearch/es_kibana_client.csr delete mode 100644 security/certificates/elastic/opensearch/es_kibana_client.key delete mode 100644 security/certificates/elastic/opensearch/es_kibana_client.p12 delete mode 100644 security/certificates/elastic/opensearch/es_kibana_client.pem delete mode 100644 security/certificates/elastic/opensearch/root-ca.key delete mode 100644 security/certificates/elastic/opensearch/root-ca.p12 delete mode 100644 security/certificates/elastic/opensearch/root-ca.pem delete mode 100644 security/certificates/nifi/nifi-keystore.jks delete mode 100644 security/certificates/nifi/nifi-truststore.jks delete mode 100644 security/certificates/nifi/nifi.crt delete mode 100644 security/certificates/nifi/nifi.csr delete mode 100644 security/certificates/nifi/nifi.key delete mode 100644 security/certificates/nifi/nifi.p12 delete mode 100644 security/certificates/nifi/nifi.pem delete mode 100644 security/certificates/root/.DS_Store delete mode 100644 security/certificates/root/root-ca-keystore.jks delete mode 100644 security/certificates/root/root-ca-truststore.jks delete mode 100644 security/certificates/root/root-ca.crt delete mode 100644 security/certificates/root/root-ca.csr delete mode 100644 security/certificates/root/root-ca.key delete mode 100644 security/certificates/root/root-ca.p12 delete mode 100644 security/certificates/root/root-ca.pem delete mode 100644 security/certificates/root/root-ca.srl create mode 100644 security/env/README.md diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..95deddc00 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,21 @@ +# The NiFi image only copies pyproject.toml and the nifi source tree. +# Keep the build context small and prevent unrelated repository content, +# credentials, and local development state from entering image layers. +** +!pyproject.toml +!nifi/ +!nifi/** + +# Local NiFi runtime state. These files may contain environment-specific +# endpoints, identifiers, or other data and are not reproducible inputs. +nifi/conf/flow.json.gz +nifi/conf/archive/ + +# Development and operating-system artefacts within the included source tree. +nifi/**/__pycache__/ +nifi/**/*.py[cod] +nifi/**/.DS_Store +nifi/**/.pytest_cache/ +nifi/**/.ruff_cache/ +nifi/**/.mypy_cache/ +nifi/**/*.egg-info/ diff --git a/.gitignore b/.gitignore index bae75c1c9..456c295d8 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,7 @@ build *.egg-info **/*.egg-info/ -# keys and certificates +# Private keys and generated certificates *.pem *.key *.jks @@ -31,23 +31,21 @@ build *es_native_certs_bundle_pem.zip *es_native_certs_bundle.zip -# env files with passwords or local paths +# Environment files may contain passwords or local paths. Track templates only. *.env -security/certificates/ -security/certificates/** -security/env/ -security/env/** +!*.env.template +!**/*.env.template + +# These files remain version-controlled public development defaults because +# the standalone Compose stack and legacy charts consume them directly. +!security/env/ +!security/env/*.env + +# Certificate contents are generated locally. Keep only their documentation. +security/certificates/* +!security/certificates/README.md + security/scripts/nifi_toolkit/ -security/scripts/nifi_toolkit/** -security/templates/ -security/templates/** # docs docs/build/* - -# Ignore all .env files at any level -.env -*.env -**/*.env -!*.env.template -!**/*.env.template diff --git a/security/.DS_Store b/security/.DS_Store index 19dc7b274f8bb4be8d42ac9314daa069740db785..4541ca1cc06a9b3ab88146fa1774741685b0bd53 100644 GIT binary patch delta 207 zcmZokXmOBWU|?W$DortDU;r^WfEYvza8E20o2Vx_*+7Ry63Ay@0b)j=I0Hi_LmCh# zGbA#UY-W_=V%yj-lW{XU2MY%y%jEY8GLr?=xfyp&mJ=@2l&Y>aG%z;PQ7|zzs?|}b zHZ(S}&{43kFt4rU of?Ts%kmEb^WPTmb$^JYX96*PF9Lg{`o@eUje=6@8fx09Z0cZ3rSpWb4 literal 12292 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 diff --git a/security/certificates/README.md b/security/certificates/README.md new file mode 100644 index 000000000..92f67d935 --- /dev/null +++ b/security/certificates/README.md @@ -0,0 +1,20 @@ +# Generated certificates + +Everything in this directory, apart from this file, is generated locally and +must not be committed. Generated bundles include private keys and are specific +to a development or deployment environment. + +From `security/scripts`, generate the shared root CA first and then the +certificates needed by the service being tested. For example: + +```bash +./create_root_ca_cert.sh +./create_nifi_certs.sh +``` + +For OpenSearch, run the root CA generator followed by the node and client/admin +certificate generators described in the security documentation. + +Any private keys that were previously committed to Git must be considered +public. Do not reuse them outside local development, and rotate any deployment +credentials or certificates derived from them. diff --git a/security/certificates/elastic/.DS_Store b/security/certificates/elastic/.DS_Store deleted file mode 100644 index 3a46b44287cf8a093a2c7c8fd2b8d941b08c13e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%}xR_5S{|cA~E5h3CAX0Nkmc9c-bJnfNS)i26u(X#&t_ra1VrJ&-y|>iO=Iq zTZ{xfcriw1lIhpZ&o=$K>9hbKTI22xKm`CCRKi>dn=gd?qzjU>7DA!Fkw6c87{VR& z7oyql7a5?vTLT3H+_@M&?O%{4gCJ4?`d@=V6egp3{Y~WZg_YH!Q*_GCjn`MHH}Xg0 zq~#BPG#dn#UnqAdqbTNc6%6deHq4GmA2G4?j}0dGY+TZlsc8_ zWU}8psL5vIa9Wd-quqK1dZW&b62sH0dDp%=jHUv#>7|p=U?C)ZrjpgWNI$ z%)mSYc{8j~{XhNw{Xd_?BW8dZ_*V>wLfdP%a7nhdE-a2}twg;=C84;?;71B}bScJI eD#cY)Eohh2L3Ax<2GN4T7XeKJH_X7VGVl)fXidui diff --git a/security/certificates/elastic/elasticsearch/elastic-stack-ca.crt.pem b/security/certificates/elastic/elasticsearch/elastic-stack-ca.crt.pem deleted file mode 100644 index f6275723e..000000000 --- a/security/certificates/elastic/elasticsearch/elastic-stack-ca.crt.pem +++ /dev/null @@ -1,27 +0,0 @@ -Bag Attributes - friendlyName: ca - localKeyID: 54 69 6D 65 20 31 37 35 38 37 31 35 30 37 34 39 31 31 -subject=CN = Elastic Certificate Tool Autogenerated CA - -issuer=CN = Elastic Certificate Tool Autogenerated CA - ------BEGIN CERTIFICATE----- -MIIDWTCCAkGgAwIBAgIUBwNbzESvB9MUM5IiB4H+cFaJYg8wDQYJKoZIhvcNAQEL -BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l -cmF0ZWQgQ0EwHhcNMjUwOTI0MTE1NzU0WhcNMjkwOTIzMTE1NzU0WjA0MTIwMAYD -VQQDEylFbGFzdGljIENlcnRpZmljYXRlIFRvb2wgQXV0b2dlbmVyYXRlZCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFNNqnG9zeDPIvFK9/K2l6M -N1PsAwm3l+NbG4FPM/B+PfOz1/z1wtNPZcLfUDXmUt2bVfCabAbP3CmFuraZ6pB1 -bxewAiYhODSDLASDJkswm9fPXYLOxZBYCxGKuPHuNW/Mhasq8sORlEP/juQnjvsn -aPUVYfCh94wg06LQUiL96WqJtaI11Lk8F3hBzlGVIX7A4ICUmi3A88CWpXFhOBDy -NdWweuktSkIM3uXn1oT69UelFQqsZPIixI5Jr76K4gGKyMcabhCerDXuDTjq0eZe -hhwClKbqwx3jfscb4E1M+aJ2UclqfdMytUExmDVKKxt4xaFZAIvcNPcBbae2AxkC -AwEAAaNjMGEwHQYDVR0OBBYEFMijg1R0jWPwCpMuUNI2YWUKY6spMB8GA1UdIwQY -MBaAFMijg1R0jWPwCpMuUNI2YWUKY6spMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P -AQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IBAQCYOaT9R97DBFln2kO98WOmGLFW -2vcN1b6C/rDA/x52D27Ky0F7xq4OvRIEMSU7+NKiiO//DSy6GMfjIDhteD2FoTFZ -Pg77iL0YK251NEMHvF67ESmfMZw8URMr2hLlYo/GBUzrQExRsZbc/wBd/LP13GN2 -5FRYn4Aoh8xyQJytZAflkQ1nXi6KCu5dpTozIzVjbOttRy/NYOXpmUllb4dKWG18 -fVuJLJgBE3jjHg6vlgd1hhijguunNkK9Gjb/vK8Ax/E4Oj3223tziYwbgr7UQ1Mg -10sdF9TfoK7iVizNY7MWhyWb0aEqEli8KOA7ZLV36hQJdiMzSL6UNOqOrWp0 ------END CERTIFICATE----- diff --git a/security/certificates/elastic/elasticsearch/elastic-stack-ca.key.pem b/security/certificates/elastic/elasticsearch/elastic-stack-ca.key.pem deleted file mode 100644 index eda63051e..000000000 --- a/security/certificates/elastic/elasticsearch/elastic-stack-ca.key.pem +++ /dev/null @@ -1,32 +0,0 @@ -Bag Attributes - friendlyName: ca - localKeyID: 54 69 6D 65 20 31 37 35 38 37 31 35 30 37 34 39 31 31 -Key Attributes: ------BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDBTTapxvc3gzyL -xSvfytpejDdT7AMJt5fjWxuBTzPwfj3zs9f89cLTT2XC31A15lLdm1XwmmwGz9wp -hbq2meqQdW8XsAImITg0gywEgyZLMJvXz12CzsWQWAsRirjx7jVvzIWrKvLDkZRD -/47kJ477J2j1FWHwofeMINOi0FIi/elqibWiNdS5PBd4Qc5RlSF+wOCAlJotwPPA -lqVxYTgQ8jXVsHrpLUpCDN7l59aE+vVHpRUKrGTyIsSOSa++iuIBisjHGm4Qnqw1 -7g046tHmXoYcApSm6sMd437HG+BNTPmidlHJan3TMrVBMZg1SisbeMWhWQCL3DT3 -AW2ntgMZAgMBAAECggEAG5MtOhj1CUlCaNnuwVUJw7US63jekhNLqpZDnTW0Phl0 -MwCzzhUs/sHzzVHX+mhp580R/Gm7AVnDmXTHRuc8C/GEsIdeNxxEDVGtBNPEsbM0 -eBvPxipDCq1UnuMAMRr/KnytkNZmnTl2QiEBvFBcWD2t/lBXkWE5lBbWugInxW/d -fvwAs0BU5ZndzSAdxxnwq0EQoJfuKDvK53FYancH4VDLcWLmj8ohFgnQeI5+F958 -qeEiu5JWnNNvUcBlCcYKbStgnIXedR2GI1ofloUcRrv3N4h+9cuODInp//C9JAdu -1VJJsCSkuQkrXuE+eUGxI+dI73W8wAn1bKoDktjltQKBgQDIoghXgjW/xiOwm9lj -PdeNUkOM8xt/5Wz3Np4eLBHma27LrhF9Ip/RMPOGUszMj+Hn2IrO35gO7xlD1Blt -7v1+iatBy1DtDQnFGntrDZELa2ZUgizqZoHXJsSt/N1QNGgWU4I12Q87smrQNQpc -Km5NYzM9n8O0LjJymwBLwwe1iwKBgQD2pUARnG0PgJZ11uf/Gf3THv9JmD8c9id8 -aMa5KsOMdHPeMoKKzfRTTTThAxL4ejdZtj+Ganfd4T7lG1mOSSgDPXGsnCdmQvkP -uBGzYBkMZHRSCSAa10YfaifdTs+NM3eGivkQrD8x3x7LxaBPjXElLA+ejI8Top7Z -JuzH1e+mawKBgAqvJkaSto4J3Siwg/kW9/2cneBJqfM7onvfurfcnO9qVTIfiOrj -ByO6uZ0zl5hlKSCRlYLCwXQ6I1xLVTdXfMRaTHZqf1rAUP7gFCZ1SH4VMBPcAsxQ -vSVZ+StSxe5ZfBmERPDdKESDkdCYon6Z+9m/KKFleqSDuUgFHRTrw+NVAoGAQYC/ -lC3D9RMEYoVRlblUZMZdrDDnygxBjlPROwn1Zw7iWsd1TeHGmnztpziGyEDFBGlX -U55g+SdB6dyqmxQosTuXPe02tXzh4l/TK51A6b6f+c18nkQ/1kX+ElNE4c4iVzP/ -U4M7QUZtSlbQ7W+19dZOy5+uu9s7bpZc2fGiNMMCgYAJdOkX8k8eVZlEFe1qIuKF -Bqc4W7r+TGMdUY8nLi07y2MGEFxFLMNIrQeEI+3lqGPnChD6iPBWpLL1X4ZZvCkG -HiV7hSDFludIe1iyr5665MheFSZA638dDR5YNx6m+oGqPt6Nxfx9g+IO77jlXHO1 -r8f+c7VkO0KtQmqUg68TUg== ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elastic-stack-ca.p12 b/security/certificates/elastic/elasticsearch/elastic-stack-ca.p12 deleted file mode 100644 index c4a4f224696a903a974fc122e29d7dfba01ad677..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2688 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 Iu{=HcKlRa4#Q*>R diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/README.txt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/README.txt deleted file mode 100644 index bc47ef1bd..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/README.txt +++ /dev/null @@ -1,51 +0,0 @@ -There are four files in this directory: - -1. This README file -2. http-elasticsearch-1-dev.csr -3. http-elasticsearch-1-dev.key -4. sample-elasticsearch.yml - -## http-elasticsearch-1-dev.csr - -The "http-elasticsearch-1-dev.csr" file is a Certificate Signing Request. -You should provide a copy this file to a Certificate Authority ("CA"), and they will provide you with a signed Certificate. - -In many large organisations there is a central security team that operates an internal Certificate Authority that can generate your -certificate for you. Alternatively, it may be possible to have a your certificate generated by a commercial Certificate Authority. - -In either case, you need to provide the http-elasticsearch-1-dev.csr file to the certificate authority, and they will provide you with your signed certificate. -For the purposes of this document, we assume that when they send you your certificate, you will save it as a file named "http-elasticsearch-1-dev.crt". - -The certificate authority might also provide you with a copy of their signing certificate. If they do, you should keep a copy of that -certificate, as you may need it when configuring clients such as Kibana. - -## http-elasticsearch-1-dev.key - -The "http-elasticsearch-1-dev.key" file is your private key. -You should keep this file secure, and should not provide it to anyone else (not even the CA). - -Once you have a copy of your certificate (from the CA), you will configure your Elasticsearch nodes to use the certificate -and this private key. -You will need to copy both of those files to your elasticsearch configuration directory. - -Your private key is protected by a passphrase. -Your password has not been stored anywhere - it is your responsibility to keep it safe. - -When you configure elasticsearch to enable SSL (but not before then), you will need to provide the key's password as a secure -configuration setting in Elasticsearch so that it can decrypt your private key. - -The command for this is: - - elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" - - -## sample-elasticsearch.yml - -This is a sample configuration for Elasticsearch to enable SSL on the http interface. -You can use this sample to update the "elasticsearch.yml" configuration file in your config directory. -The location of this directory can vary depending on how you installed Elasticsearch, but based on your system it appears that your config -directory is /usr/share/elasticsearch/config - -You will not be able to configure Elasticsearch until the Certificate Authority processes your CSR and provides you with a copy of your -certificate. When you have a copy of the certificate you should copy it and the private key ("http-elasticsearch-1-dev.key") to the config directory. -The sample config assumes that the certificate is named "http-elasticsearch-1-dev.crt". diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.crt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.crt deleted file mode 100644 index e7d8385a0..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.crt +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDmzCCAoOgAwIBAgIVAMC3VXpHDgifVXukffiuEjF1oohuMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI1MDkyNDExNTc1N1oXDTI5MDkyMzExNTc1N1owHjEcMBoG -A1UEAxMTZWxhc3RpY3NlYXJjaC0xLWRldjCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBALq69dt/RZB1zIqAZrGodOkbDrQdFJYOgaIy7ZwRNjFe9N4Umgn4 -0JzP5LA4OnmljV1vE8Hq87+G8Juj7EpcK3ToyXiBo4FFdvDWUHj40vqyVvpC1qkO -wRpMgv7z/inSXg8TgTFL3iAYISXMmOUxkxiG2IvGd/AVPWPXTwTxldhZF6+ffzJ0 -pmkaEwVa4VKC9v6WXk4C7WEz5hHKCwaEQtEw4yqh2rwOhVfP/eJrkOeDNLgIasUc -4HSF2qFWOvI1Erw9f0MSN8KUYTeXdGYgdjuxPSFn9Ni/Y4xr41dgX4RCmL8d2nSm -cgad5rgIGQDUfvZ1LGD0G2wSy8EX5lp393sCAwEAAaOBuTCBtjAdBgNVHQ4EFgQU -4GKqC169d/BOQXgSZ/zMjT0K/RIwHwYDVR0jBBgwFoAUyKODVHSNY/AKky5Q0jZh -ZQpjqykwaQYDVR0RBGIwYIITZWxhc3RpY3NlYXJjaC0xLWRldoIbbG9jYWxob3N0 -IC0gZWxhc3RpY3NlYXJjaC0xhwR/AAABggRlczAygg9lbGFzdGljc2VhcmNoLTKC -D2VsYXN0aWNzZWFyY2gtMzAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCR -L/A/NT89SVIOfqggO6S5n/lhUL5Fo9RGyjqsvcEIZElqxb4GG9Y5lRcoFwFuKb+r -pF4lm7NpPZkFcgX73zuYCqSNGOFNnnskO5wzo+6ofNzqHlbL16Ti+Wpbm+KmlGna -t0REhHogeUjMsVAjy1hKRyQPeHvMnkAMaLcB6lxFGxmrEe2SnhhJPQl+AunjwX1g -hZXHVcxDb+9bIhHeFPTE/jrA5aXih6XIXafMQRP9spj/WZSPqMbFN1Ob1Yr+SKmx -XLcuU7psVIGIrFnT2G5wIADpC/JN1VdSCcnpviY0Jj+4ZluaUPPnVWh0DXt4b5U9 -+Y/SXRKef2JGVKsUVucm ------END CERTIFICATE----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.key deleted file mode 100644 index 8f55c8491..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAurr1239FkHXMioBmsah06RsOtB0Ulg6BojLtnBE2MV703hSa -CfjQnM/ksDg6eaWNXW8Twerzv4bwm6PsSlwrdOjJeIGjgUV28NZQePjS+rJW+kLW -qQ7BGkyC/vP+KdJeDxOBMUveIBghJcyY5TGTGIbYi8Z38BU9Y9dPBPGV2FkXr59/ -MnSmaRoTBVrhUoL2/pZeTgLtYTPmEcoLBoRC0TDjKqHavA6FV8/94muQ54M0uAhq -xRzgdIXaoVY68jUSvD1/QxI3wpRhN5d0ZiB2O7E9IWf02L9jjGvjV2BfhEKYvx3a -dKZyBp3muAgZANR+9nUsYPQbbBLLwRfmWnf3ewIDAQABAoIBAA1Pp5gVQLXAGAEl -jxc0uC99LMqn1LWvugurJWdojgbt9cxhBpbAZHVRQpmnSyUsfovTD8L/8eP3hW5q -5zy+c6CauZtRY9ZNcoxPkslU34wHK45yi6UzNo5z4YC1jwBB4qT2JycG+VeAsNg7 -d14bRG5NVTbS7UOG7Ws7yC0aNawy6nnGhJQ+CI2ny0w9dNIEbgspyFAb0IRA82aO -t1vwUTA5pOrVVmyZACbDGpnh4CsB7jh25GLIVrh1XuDSvfMIyMfJw1Ub54obMeAP -Mx1K/sWSvTzn+GRNIUOLoLWfkgzLgrOrwMCUUf1Cjc3TrZbvUAbtknclwVKE8MlG -/83JNr0CgYEA5RYqEYNi+0GG5xdVypQ36glqS+3LZLb9HeL8UlxyE5/R+ycSOeuv -ha5yOpTBpXOtv70M0zSPLGbX4gEItMKYnQ/1N6qY25kCeFmQceab+vbPDoLVlowt -w3lMkuP5uG73HuT+NpKUAt3UTniipQR9yNUB+9cPEjzB9PrUzzFoiQ8CgYEA0Krr -vfSggbyCzJT/ir1iawBqOwXEs3K0+pqxAzcwj+EAqrT/D5tZuX1LwGGzx8SijDOb -1+neXRM8hiekvsaNs8Df0mSYoavO74eG7C/twqDsOF/WLlGsQLge1aNcJk9I0Ys6 -cJpP4nu136UUzm4jWdluzXa2g+xLXrZrXIa3MtUCgYEA0x6bBGrOFHmuBlhWAwyX -fwLQSEtMj3OoTxu5p3l01CsMi+XVATX4Gz3KHbyrvXufGz3xjM86RxQ8Thbf3B4e -IVjshzGcD3yybxEzchSxmRZNebUPe9+R6TxnWlPo9pSk/37P3KE28HFY0DySv3sl -JKlRW7M1O3xszwU+i/efu/cCgYBkzEv4hLUMNq3QeaE/ueBS4+5s+IpeTOjTreoY -LY7N0djqnWggd+DN05LGKewYcgo7Q6rij9yUhXhVLc1NQsisrlzwWxvH7SCXYJZy -fWyS+f1h9hmWYmmdEdQDS1h2QRJh9qmSP1ibhTsD/9CfL2DwRDJcGh5sd7ao1+Hg -3kqcyQKBgQDYsxmgFxK4g3oGCc/WjEEnjDdxkFfn8Im84RwsbW2EZB2Zry0FExkn -snFNBUhicns1cvDkDzNQCggcMNvabWl2k3LyaknUpptePVL4CxZOn5Nc8caPiHXX -Gem3iu6i9adJftYElcFuvwhSekZDe9RoJZO6RHmwhOVFxGdTq1GcMQ== ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.p12 b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.p12 deleted file mode 100644 index 762fef518456f35d289a961e62af7092b1530430..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3778 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�EWCT(aJZuCa=nVCD#kH1Ld(B}l#OHSO??kLBf0(j*zIztOOxnkR}P zpn1b|(FU^*zn7b<4tE4~;(8K7tRfd!a~B8mZiQ>bRSnCvHMN89St9WQ7_V$|JD_7! zsMDiUt<2$z*ytYv_x6>E1EnunhxPX31@9;s5fGlX)68s|#JIKuXkCZKa^~H(&MsZQ z3mcvK=4ncYRd}#P;wi306hi$-Iu*^8Gx;+$VdzyKld3Xjaf$RVsu}p#1|wgVQAwm$ z#ejLog$xqF($Tp3+IKQ`a$I$Ffh?kjUluR-B5FQF?#H^4!KxdLDl;2Z?ac;?mJj)a z8x5SLf)Z_KNfOs&(lX`lmd74qyNU2slce*xx5WKZ+Q$^%CvU+AObJc>fYU74)OgTX z1o@D|g#csy?vAIe!0vWrkNzDo}gv6nJAEs^C22L_DR?X{EM1Mkpi>!Wkwjyl|z zZ0GP(CLzq0t5w0q{X)1@O1?uD9Ju(y#*}uALF$rBWosHX{!)9Ib0T2r#ND1?%^vP! zc2Wksb=>03Puj)&dZ6r#U#D4BE0#n4O|IT%N1p*uli@HXAEIFE4!+zxxXt0o74cYI z5D|x;+QutQ-Vn6B;6|6U_=R^C!x;iCU7x#DjExOC@~3y$9`8omKIrx27jj^-vS_6m zb)ws&{65?CE6LO?vUsRI_R}KC^!3W9grrycuL9Mg82k27=9u=q)ry^n(Vhqnqa6OI z32r1BGO@Ut&2cTvJ})U0e<4ec1pgW0$(ZanZ}Rcp9>aof&;JZJ>XxlrbO| z9SIN&0C8f-Ki9mcJ0!`iOkJ)b9PAoX`GO86RJ2uYZ9m(tN#g}E%JaK_k-mA$1X{LL Ru=HGe)`x%GqLM diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/http-elasticsearch-1-dev.csr b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/http-elasticsearch-1-dev.csr deleted file mode 100644 index 2ee42caa7..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/http-elasticsearch-1-dev.csr +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIDRTCCAi0CAQAwHjEcMBoGA1UEAxMTZWxhc3RpY3NlYXJjaC0xLWRldjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPhNwARXdrapW2a9rVeHNsbc9Ft5 -TjqSibmNVB11fOki7Evh9ByCjU0c7SQukPjc390FrrsY+EFr/fchU0ZaqG+BH0m4 -A157XUhDOPc0XuATMGFfhfGUWNE0HjMsK0r+rB56fGvy5I6gFXnkBGb6/NQPYToI -SQ13IXL3FkvuKpibC+cnTDV7mIynZDHt2TnRJ3stLg/PMP5iemPmUJNwIU2uXI5Q -kz/h8ScOZ13rfDJUF8996MeQ88mZ5QD813QcAs4kWYF1YCGL9D/Ekbv6Oi5h7A0E -2m4Mjsk/GmYh/6L0r1PZ95CQBcAhA/V949PSTrx3tkdEf7tOo2P1vIGU7yUCAwEA -AaCB4TCB3gYJKoZIhvcNAQkOMYHQMIHNMIGlBgNVHREEgZ0wgZqCE2VsYXN0aWNz -ZWFyY2gtMi1kZXaHBAAAAACCCWNvZ3N0YWNrKoIEZXMwMYITZWxhc3RpY3NlYXJj -aC0xLWRldoIEZXMwMoIPZWxhc3RpY3NlYXJjaC0ygg9lbGFzdGljc2VhcmNoLTOC -CWxvY2FsaG9zdIIPZWxhc3RpY3NlYXJjaC0xghNlbGFzdGljc2VhcmNoLTMtZGV2 -MA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0B -AQsFAAOCAQEArPutlQAOi4uPPrzuPGVcSCL75VXOrqF1EUBD4g/7h4plFWegi4Y8 -bNMcfPjftHCfHpRxs3gEZllQjm7c+t9TjBcPk0lEO3385CvNj/BWqcRQSPb2F75n -rcmkPd+DDeh97ZxfHSTgw/7/Nj32Ks2HrP+czgFItTrsdNAdFwnMt+Hz8Anp6x2M -QoDwsT3QFgFV1c8cFILC7JEHNtnrUAYcwnpSxQ4psXBlZJWQA0fyUHK6UmD4+Ib4 -ninWXWnP3TzhzsJSZjSvfOQzbjZAFNTaXekEQm5CiKJfU42ZNIcXtwQG++xHjth3 -kWakZS3DGAVpIumNyXbG+4trw5KUW7+KpQ== ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/http-elasticsearch-1-dev.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/http-elasticsearch-1-dev.key deleted file mode 100644 index 9ea142f15..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/http-elasticsearch-1-dev.key +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,25DF81CA0FF52AA969412DB6D6BF8112 - -zHkiqsLbGbdyVIOko9DRRnsaivcA0WQqQmIg3QW8yehrQ/NTXmIYbPpSkqKXFpSV -pvggwur/bYO48PayCHomeqVzrElTpH8NdTlydINTvGHAaq4FTMlBcZLzsWDomq3Z -MiSkON4hVTMIqFqu/GIuHLE9a+fFNst+ZuMFlMepAA5eGKf9RihJWK7mDVYhdrpc -7lwyQVG0AG9pAzWL1imOObuGgAZAKE0sdscnIyuJ5AGTWryxWPsZymeDYwg48qUA -cHo6wIQqA/Xjh7Srw1LiyIIEY8IqrIIjFEO+ogeb7UCUaH1gl+yj9ZGiZ1/Pk7zg -Z58NnZBySPF2SB8DutrZrlnFxy6eGyTTCjvpWcewgYx0fF54Sgtut3OGFW9mgJ7f -XAa1W35iB0iYTbcq5gkaCYJJ5O7Hu0rOnewUtq9i7cKHvnnRMlsfAxlrFiCpQKQg -KY0oNXJ0gKUj0LPh1ZvBPDOyfes2v92vAsY5Uz2gQ2/nbxicXaYLYSIONRO8YXI2 -rZlUwVdgXkaVNUAJJjr0qCt24NCdU2XHV48QJLehZ0PQuP56bZiKHihHkjt2qciU -j6/xFkpqLlaNyf7t6+8UjfJfJ1bPzbNu5jyvLBNxcYauwe8IV3/Y6GUQ9h+wMvUH -OjdohpKWTjWFpEWFRfZi3uEILHeVHqvUNt0DZxSnJ6AyXPLPOuFoZtbsYQRid1Dt -iFiEdfcMTb8sCVIYKu+kjxuG3+oi2OiWJ71UPLeb00dsBbBITaLPCAtwtL5iL/w/ -s8YvL3L+L93iO0wW/KU7OXnu7I+NjC/67qdxeabKgywOeLmxg/i47IUrx5n5tif+ -yzRT12Qyivr/eXtTGhAeR4R7RITEwJK3r1DkcLwH22czTgk/mex1lEEuGderiCU7 -68tbzWsp4bhNam9RXjDhX3NNdrVksyg4xD6AwS2XhWe40i0GeOmfmmY5EKx6Xuf2 -DuCun+1LHRj65tepNrQEHvrifUsvo0Ol9PlQf03CVuGocKwFDbPgTCenOf02q8Qn -NcQxiLVdsW8q1cHEzwD5dIB50I3MG0Ju6EiqTw2hRjlWzUKMIS3W+fzVY3jUSTpl -rAHTvuztg9IoqdYh0cw6ws4Sxm1vAadW8HviOo1gE3oshqeipmpREfO9E6vQLivZ -3cIfplw2Wm1UTVDmXaUvT6kEKBg8wjRNFjdEk9yGmHj3NJeYMqu974iBpYy1ZLK7 -HK3KWpl/UmbxhmoFinS+aHRqt23W2Pp3VyQSAOM+Qt8RQgQ+z+OsV2eXs6RKdt1s -swP9Zw+l0Cn796KOfzsc3AUd6RBFcBfewhN5hkaDMAw5k/9CrwNZ6sNnvkldDSb+ -5F+6+4kQeU+hwLXQWl8XswqcclQxKGfYOtrpblRbwdUsmdSIXoVT+mSeAxLPCoNl -BRUHsD+zze7TdpkmZ/UyuaVPNUBXbiqs521dUGgCUZqY14qPMsaqIpiSHmIESyMS -zH08wDX/ItiHn/NnxskJZEM/Y+PD6uSBde/xuvuU0NTZMYllDswx0Pt22VzNiut7 -ody3cpPqtlaxEneFqpvWWzEQNE/5C7GbfXp5vXTAtPiRUsHSgkcLX1Fb5hBGS0OF ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/sample-elasticsearch.yml b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/sample-elasticsearch.yml deleted file mode 100644 index cd59f0c70..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/sample-elasticsearch.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# SAMPLE ELASTICSEARCH CONFIGURATION FOR ENABLING SSL ON THE HTTP INTERFACE -# -# This is a sample configuration snippet for Elasticsearch that enables and configures SSL for the HTTP (Rest) interface -# -# This was automatically generated at: 2025-09-24 11:57:59Z -# This configuration was intended for Elasticsearch version 8.18.2 -# -# You should review these settings, and then update the main configuration file at -# /usr/share/elasticsearch/config/elasticsearch.yml -# - -# This turns on SSL for the HTTP (Rest) interface -xpack.security.http.ssl.enabled: true - -# This configures the certificate to use. -# This certificate will be generated by your Certificate Authority, based on the CSR that you sent to them. -xpack.security.http.ssl.certificate: "http-elasticsearch-1-dev.crt" - -# This configures the private key for your certificate. -# Because your private key is encrypted, you will also need to add the passphrase to the Elasticsearch keystore -# elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" -xpack.security.http.ssl.key: "http-elasticsearch-1-dev.key" - -# If your Certificate Authorities provides you with a copy of their certificate you can configure it here. -# This is not strictly necessary, but can make it easier when running other elasticsearch utilities such as the "setup-passwords" tool. -# -#xpack.security.http.ssl.certificate_authorities: [ "ca.crt" ] -# - diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/README.txt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/README.txt deleted file mode 100644 index 21aed2d9c..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/README.txt +++ /dev/null @@ -1,51 +0,0 @@ -There are four files in this directory: - -1. This README file -2. http-elasticsearch-1.csr -3. http-elasticsearch-1.key -4. sample-elasticsearch.yml - -## http-elasticsearch-1.csr - -The "http-elasticsearch-1.csr" file is a Certificate Signing Request. -You should provide a copy this file to a Certificate Authority ("CA"), and they will provide you with a signed Certificate. - -In many large organisations there is a central security team that operates an internal Certificate Authority that can generate your -certificate for you. Alternatively, it may be possible to have a your certificate generated by a commercial Certificate Authority. - -In either case, you need to provide the http-elasticsearch-1.csr file to the certificate authority, and they will provide you with your signed certificate. -For the purposes of this document, we assume that when they send you your certificate, you will save it as a file named "http-elasticsearch-1.crt". - -The certificate authority might also provide you with a copy of their signing certificate. If they do, you should keep a copy of that -certificate, as you may need it when configuring clients such as Kibana. - -## http-elasticsearch-1.key - -The "http-elasticsearch-1.key" file is your private key. -You should keep this file secure, and should not provide it to anyone else (not even the CA). - -Once you have a copy of your certificate (from the CA), you will configure your Elasticsearch nodes to use the certificate -and this private key. -You will need to copy both of those files to your elasticsearch configuration directory. - -Your private key is protected by a passphrase. -Your password has not been stored anywhere - it is your responsibility to keep it safe. - -When you configure elasticsearch to enable SSL (but not before then), you will need to provide the key's password as a secure -configuration setting in Elasticsearch so that it can decrypt your private key. - -The command for this is: - - elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" - - -## sample-elasticsearch.yml - -This is a sample configuration for Elasticsearch to enable SSL on the http interface. -You can use this sample to update the "elasticsearch.yml" configuration file in your config directory. -The location of this directory can vary depending on how you installed Elasticsearch, but based on your system it appears that your config -directory is /usr/share/elasticsearch/config - -You will not be able to configure Elasticsearch until the Certificate Authority processes your CSR and provides you with a copy of your -certificate. When you have a copy of the certificate you should copy it and the private key ("http-elasticsearch-1.key") to the config directory. -The sample config assumes that the certificate is named "http-elasticsearch-1.crt". diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt deleted file mode 100644 index 0978bfba8..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDkzCCAnugAwIBAgIVAJi8jKK97pi2IqgFGLEtvDoL/OEzMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI1MDkyNDExNTc1N1oXDTI5MDkyMzExNTc1N1owGjEYMBYG -A1UEAxMPZWxhc3RpY3NlYXJjaC0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEA8k1qK3uDHfWEPsmgXaMIsrJNcmMX+8QWSV0tC2ppy6N3DJfZc1ecgULS -B5wtLW0AoLjda6ZzZpy+s1KgTESiJr+OlaVQwWGUox77/5O6H33WWIJMPlMN2dui -++05RWCgm+txK9ZgaxvwzJFHh1cnBMwpvGHULQNJPY0Z/yznPcHbvKJb76Twp31Q -TQs++C6rU7aiBWC0CHjUKM87lVxmBqBHIToSA8UUAwUT53+sHW8R7DoyydJDq0xS -Htq2IaAKXcpAkRbxCBu9TKPSsVUviViUBLRR2BvuDEYcthzWi8wvA0LV4PojAqTE -aXzDN8Bpl34ziTeaX0e9efMNw2zgjQIDAQABo4G1MIGyMB0GA1UdDgQWBBQRU1Q3 -q+jz3gggtbuhfhI91XUamTAfBgNVHSMEGDAWgBTIo4NUdI1j8AqTLlDSNmFlCmOr -KTBlBgNVHREEXjBcggRlczAxghtsb2NhbGhvc3QgLSBlbGFzdGljc2VhcmNoLTGH -BH8AAAGCD2VsYXN0aWNzZWFyY2gtMoIPZWxhc3RpY3NlYXJjaC0zgg9lbGFzdGlj -c2VhcmNoLTEwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAdctVB+q+c3GZ -T0I9xwSDcE1gNTheQJWi1Wz6s1O2p8VzD46xGqZkZXdCfJ7ogh+EUQkaK1lNK/Zw -nk9mAUcWKfd63e6kGO2iSg90Fd2QBDBvk+xNmBVrIS7QXnr000xeWmD2lqXB4hLV -SjKdeV+INctj+ZNpJquGTzF3VDQJONDuYagAk/V30sHW9JUpI/yHd2t1qZo/dybX -+9ZpOgHD5kESTXszepD/uxg/n2cndZl584J1jJYIyf+apdqBHF5PLRGOhznpSSLl -EbyB+xGFbPosfaOEh7tW8bWaNLYz8JspI090Dw3fthos6x2o0bF3DkbbRv+DpUZb -OudEnht59g== ------END CERTIFICATE----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.key deleted file mode 100644 index 6f93176e3..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEA8k1qK3uDHfWEPsmgXaMIsrJNcmMX+8QWSV0tC2ppy6N3DJfZ -c1ecgULSB5wtLW0AoLjda6ZzZpy+s1KgTESiJr+OlaVQwWGUox77/5O6H33WWIJM -PlMN2dui++05RWCgm+txK9ZgaxvwzJFHh1cnBMwpvGHULQNJPY0Z/yznPcHbvKJb -76Twp31QTQs++C6rU7aiBWC0CHjUKM87lVxmBqBHIToSA8UUAwUT53+sHW8R7Doy -ydJDq0xSHtq2IaAKXcpAkRbxCBu9TKPSsVUviViUBLRR2BvuDEYcthzWi8wvA0LV -4PojAqTEaXzDN8Bpl34ziTeaX0e9efMNw2zgjQIDAQABAoIBAAjTPwG0bvMhZR6w -U1H1xTRVADMhXtdBrhof9asLxiyvmH9x7G6iC0Y9+85hJtgXt0UjVpU8K8nZ/awk -X0hH26wToArdSZKxjitezojhhY7uE2eH32UJu2Bq+oW4fzSCr3beXXHeTga4rs2U -oQlR6E7pbL+6xHKbQwil4gOETCvYmJYQUGocSCqUlbJAB5nW1a+ghOaUh0n9hRjs -Q+0YsauKdFnqQHbH0T1/SDNs+JkH9axzNjadAnvxKMZnzXzYnax40BMG8jh7Y44s -KXrPHVO4awYpN1xA4OeTUxsAqDhmwMA+Gq4PnVkvEE4AofdEwt9Xov02C/Ozf+OT -LI6OC0ECgYEA9M0e2Mj1xpoD8En1smGDyQkfaiFT06zr5gIFKE6uF+WAf+eBXQ3p -op3TrAhLqtW/MUDZyOJZOsQKMZBFpS2vWhrgVbyEpjEDLtEG2SKDmCDagtXUn7pP -j/Pyqg77Ic/y3u5Y69bJUQUbOxUiUHd4ZbYLiwWDF6eQMioEi841sb0CgYEA/WMH -soJOZbJylrndC7DlffchS+960bdf+/BgPPTkRpjMkM+yOzsb5YK8wLRJIVjJbyhV -FOAn8fUhqVglU2B2sTeZvqlZNcYV3xKl6ecggtWXMMJQP/RgB9G7gyJHARZ52Ju9 -TrpCeOOlecWBmNWnIO8Dg6M7aRzNkus4LDBaDxECgYAkurX7HsPJhYg7wE0N85Wb -TzQYb2Gta8+FFh6B+rQiP7v09N4zAQhh7r44nJIF0sY59Jn4iwWKTKme4B+i9eTO -ZyPrmTpp2Qa6OoCFiakm5R8D7GNXh9OyLI7nNxI084dkLWzIDdTsxBBe3//jBNna -oOLAfBY8MVbwP9+ovkrOHQKBgGjT1HZkdFycY825nRpeF8NyPyM0MyKZ86q+OoJd -aidOxarPUlQw0wyzdrVeoLacDdHf5LsbNUtjd4agwehpixEsCH4Zf5/AkIHWLC/F -f+zAwqjYauzag/QYL7RDtQ5dJxGW9M2iPyfWPjpPnJsHIPp+B30pRcXptZ6nk3is -lEWRAoGBAJRa9IsUhNlmzOSfa/KYZjDlIfq+kS4PvvrwwxxITwe0azdwWRBOHjzm -HdQkjTIRG3fLgo0aRp2JuBCQPXRBmR9/qdlXmOWR+V0hIqYQGq6ciVukcODUzXjw -ZCC3O3czGF869gKm3WZU+EsUObDPDyReis3a81/OXYDJUHW1NBWp ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.p12 b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.p12 deleted file mode 100644 index a2162ef3497e39847e0ec90aba962e79f4dffb7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3754 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 vD~W7PP+NXocVAPvU%H{U846_m?jC0%{mEp_{#u diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/http-elasticsearch-1.csr b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/http-elasticsearch-1.csr deleted file mode 100644 index 03a4e3b1c..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/http-elasticsearch-1.csr +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIDQTCCAikCAQAwGjEYMBYGA1UEAxMPZWxhc3RpY3NlYXJjaC0xMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsOSpG4SQYVMXysS+QEUg5kFUhk9QwiQR -OVB+++YFptFkUu6CTV6I2j2FY1eSfrDuj08rpTKcqzz9Ex+VWZBOquLYSR8eAgHV -B/HCh1yAs1HSu4tDmWwvCk1SCAnhrXdkeIhTrI2VSiLxxmUlySTue1wwm8h2Z0zb -7VLTwXJf6e/UflRctAcLnc6MsJF7W3+Lzcn6eBY+1uRNRhD1Ma5+XubNIFFrQbBl -BI8DNzdfzRRUtYuGrYfmaZviSoSlNZAv3LfVRPnTPOz0RD++NkExMuEkOO8kxuek -S0R5ijHVcAxibJfV4ywB3J/fmmMwhQPjpOR6oFicLda+h+y9a10PTwIDAQABoIHh -MIHeBgkqhkiG9w0BCQ4xgdAwgc0wgaUGA1UdEQSBnTCBmoITZWxhc3RpY3NlYXJj -aC0yLWRldocEAAAAAIIJY29nc3RhY2sqggRlczAxghNlbGFzdGljc2VhcmNoLTEt -ZGV2ggRlczAygg9lbGFzdGljc2VhcmNoLTKCD2VsYXN0aWNzZWFyY2gtM4IJbG9j -YWxob3N0gg9lbGFzdGljc2VhcmNoLTGCE2VsYXN0aWNzZWFyY2gtMy1kZXYwDgYD -VR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUA -A4IBAQCHo+qEwasARgMKk3tY+30OmcqVzCrnO0BxODT3Z05e9rDE8qzXnkuzK0Lt -fnIfxkrsBi+Z4xczDKY+eGCrZkFTqjjO/N4QVAxOsqkkqTE7Jc3FJFTKjHx5ZB2v -XdB0glFRxU28pJfOFrcEHfiZMbxdTg1mViJP3PuDPNJLBVPBKjPWyKRnhyiPHMXj -BsELzRq7p+Ie3k1NwdV9Yh4S79v/NLglf3CuWwUHsfvljArVwmSsg6QcIHMZZ5/1 -NQS8t1FHPsDjfNA/Zh/DOsBdvvIfkejsjC7viBvud6qzchFjHp0vtbVWUxCPYp4L -75227VC4xr5cybSJeBZxX64JSTC/ ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/http-elasticsearch-1.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/http-elasticsearch-1.key deleted file mode 100644 index db7294bc8..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/http-elasticsearch-1.key +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,AF7CD7BB51A55579C43BDF44CBA5BFC5 - -wJjKKJK8k5/WxAc4czqZP5MAD6d84CsDN1zdcnWEEHLV1QlJycqMonZz3FNvt9d1 -XxkZ4CiIORtsNrL8dKlEnvwqvrQDdRkFTYfy3h/O2wqUaNIbziCKGhx7H97zfj+M -fA9HciHzhozmTJbfMJP+5htCAH7igPT00uLvbjNqJ4fh+n0Pzw+Zge94o6QBjqEn -u1+ySM4J+MCiHVU3sZGh20JooPIQSe5MzGySq0qE/BygLGido7nADcqKD42nd8bp -NOyqUo70vbk1ZsM/P+yjICRuhT3FAotX2g2g8CnyJPBSvMU8ZMamG61J5qDuE0og -XMFcaWvFHeRhExRVWkZYjhIvuECjLb7ZX1Mp9Do6OAdBjdEKcpL0WzeYria5XZw6 -vt4IaKJyTEP8R76yuv6IY2BY/ejzuK8/pfu4l/0oeU/FYJ1Ss/VTSczwtDhNp1Y8 -5y2VTLoJ7veRu4tviT/DwotO6vvctuDuj9sfVJ+fvnEgZjhC2PJ/s13mD2QGEB0W -WenjNRWoBbrqBozvVlTC1hSR6A5rUd5OCZw8lC56smFLpbjE4UBpkMsMjV+YltdI -+tSUQEePS5KEkbMr64c+J2sew4bu9ErJimwPa6knME3Ni2QNeY5xFmPwaJgCiPdV -zQ+jPEolcTVkjOrb4b56P8ExNGIYitlsHymvpaIzKwcBsuyGcP007LajreAlORhh -MhpF253aegaCUjg2vWDlFVY+chAJSSpHjC0GV8FCz8BUSqNHI8qHTjQewHpSnNn4 -vmfwK0s7o0uGnvoM7iaiqIx+ll0K6r3/884MpYbWGfMuVRBfA3E7q2edSoDV+w0l -AAnPAEV9gr8mV9EZqcjzOv2liE2zwaEmImX1YKDgZmR5fWuPbdM2nhmh4EQY273I -D54MZF1Ubos8pBm5WYW/IyBq8KkIPXd5lyKJvQJYeo5UvQ7QiI1XkOWC9zu5OurW -5sdKC4tgLZkgw8Bk9wIl0FVjjSaTxlJjNReNJiYj7WZQ4VDSDX+qzQF6OJX06gt7 -jZWBDRMqIQT9KVIUro+76BKDI5eL/PNi38JmBoyfpqp5+utqj4ooYCdJ6QMbvgY3 -9ck/4hPPOWkWpghxYOqpBGX02TmmO26xIKeDRwJA/PRBTnbyDAhDrJhto2SJUCiF -nlcOVIe9cFeshFRu0ELvlw99HXSULYM71GYWKH7U4fMxv4bTjpSOcOnq3GUBhe5H -gDKLx6E/avoDQO9SH0UvYvUP4PT80wCzrtC1zRXn551t5nwtWXGhIiN/6TPdYEJy -WnbVzr5tDIv4hH38jF7BAocd9EbvwHUA+dUJJw4oSLM2eeb7DmZuSqaVayNK0hDV -tUIRCavJac6o6AqRzQQDLdHOrS+5BamBOF3ptOB7pnbM/oU8bXVM5EcQLoRZW/VJ -vchAuj8xKyqfr573IpHRp+hIMDk4kyHEcBKVHEdVyw7re7qpQnuaTDM5azYxYcth -0LJWvA7EZUMFtx3labIrR16c8L358YOg6PLZ3Fdpn8rQV+kD9VCbcIWrE+0/y7Jp -Nx8KQs0bqzFEXnOM4MvLSG2KmHlgcs64BOPVdzhZrWYtMjIM2zA5Pz8D3kOFnzKL ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/sample-elasticsearch.yml b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/sample-elasticsearch.yml deleted file mode 100644 index 604199a1e..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/sample-elasticsearch.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# SAMPLE ELASTICSEARCH CONFIGURATION FOR ENABLING SSL ON THE HTTP INTERFACE -# -# This is a sample configuration snippet for Elasticsearch that enables and configures SSL for the HTTP (Rest) interface -# -# This was automatically generated at: 2025-09-24 11:57:58Z -# This configuration was intended for Elasticsearch version 8.18.2 -# -# You should review these settings, and then update the main configuration file at -# /usr/share/elasticsearch/config/elasticsearch.yml -# - -# This turns on SSL for the HTTP (Rest) interface -xpack.security.http.ssl.enabled: true - -# This configures the certificate to use. -# This certificate will be generated by your Certificate Authority, based on the CSR that you sent to them. -xpack.security.http.ssl.certificate: "http-elasticsearch-1.crt" - -# This configures the private key for your certificate. -# Because your private key is encrypted, you will also need to add the passphrase to the Elasticsearch keystore -# elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" -xpack.security.http.ssl.key: "http-elasticsearch-1.key" - -# If your Certificate Authorities provides you with a copy of their certificate you can configure it here. -# This is not strictly necessary, but can make it easier when running other elasticsearch utilities such as the "setup-passwords" tool. -# -#xpack.security.http.ssl.certificate_authorities: [ "ca.crt" ] -# - diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/README.txt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/README.txt deleted file mode 100644 index 6c2c31689..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/README.txt +++ /dev/null @@ -1,51 +0,0 @@ -There are four files in this directory: - -1. This README file -2. http-elasticsearch-2-dev.csr -3. http-elasticsearch-2-dev.key -4. sample-elasticsearch.yml - -## http-elasticsearch-2-dev.csr - -The "http-elasticsearch-2-dev.csr" file is a Certificate Signing Request. -You should provide a copy this file to a Certificate Authority ("CA"), and they will provide you with a signed Certificate. - -In many large organisations there is a central security team that operates an internal Certificate Authority that can generate your -certificate for you. Alternatively, it may be possible to have a your certificate generated by a commercial Certificate Authority. - -In either case, you need to provide the http-elasticsearch-2-dev.csr file to the certificate authority, and they will provide you with your signed certificate. -For the purposes of this document, we assume that when they send you your certificate, you will save it as a file named "http-elasticsearch-2-dev.crt". - -The certificate authority might also provide you with a copy of their signing certificate. If they do, you should keep a copy of that -certificate, as you may need it when configuring clients such as Kibana. - -## http-elasticsearch-2-dev.key - -The "http-elasticsearch-2-dev.key" file is your private key. -You should keep this file secure, and should not provide it to anyone else (not even the CA). - -Once you have a copy of your certificate (from the CA), you will configure your Elasticsearch nodes to use the certificate -and this private key. -You will need to copy both of those files to your elasticsearch configuration directory. - -Your private key is protected by a passphrase. -Your password has not been stored anywhere - it is your responsibility to keep it safe. - -When you configure elasticsearch to enable SSL (but not before then), you will need to provide the key's password as a secure -configuration setting in Elasticsearch so that it can decrypt your private key. - -The command for this is: - - elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" - - -## sample-elasticsearch.yml - -This is a sample configuration for Elasticsearch to enable SSL on the http interface. -You can use this sample to update the "elasticsearch.yml" configuration file in your config directory. -The location of this directory can vary depending on how you installed Elasticsearch, but based on your system it appears that your config -directory is /usr/share/elasticsearch/config - -You will not be able to configure Elasticsearch until the Certificate Authority processes your CSR and provides you with a copy of your -certificate. When you have a copy of the certificate you should copy it and the private key ("http-elasticsearch-2-dev.key") to the config directory. -The sample config assumes that the certificate is named "http-elasticsearch-2-dev.crt". diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.crt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.crt deleted file mode 100644 index 3e7d34ee8..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.crt +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDmjCCAoKgAwIBAgIUZWcpzexOP9notnWBEXOLgNPc3OowDQYJKoZIhvcNAQEL -BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l -cmF0ZWQgQ0EwHhcNMjUwOTI0MTE1NzU4WhcNMjkwOTIzMTE1NzU4WjAeMRwwGgYD -VQQDExNlbGFzdGljc2VhcmNoLTItZGV2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAlzGVkG+RekCXKi9Woc+xLkZTTmg9IB00CW1MjrhXAPjniYARME77 -WDKSPQchGzVtyIQum8yciTMdSsL/armOmlcLNw4M3PkuW7/HwxYTBgHOtPtwDnLA -MbuA+86CXhJhzA25bixkapPSip2lm4wqGCn0qDD5ebRpmkg5aQK56R6rnBIrHJbD -CYnGnm4G/9MdNYgphedJI52srmALmgSf7Vy/3BttaNaLrX889CkwhwnGo0WoaNfI -c4ZtPNQcA10jiWm95wMTsLINwUi4M8+CrUwN77yTwGDpODogNguaV0bO58+q7RUP -xxcJhT/MimwRq/ilPz+U4tMm3uQQc7esJwIDAQABo4G5MIG2MB0GA1UdDgQWBBSP -3ckCkVyqiUDu1ApvD7CuQUp/7jAfBgNVHSMEGDAWgBTIo4NUdI1j8AqTLlDSNmFl -CmOrKTBpBgNVHREEYjBgghNlbGFzdGljc2VhcmNoLTItZGV2ghtsb2NhbGhvc3Qg -LSBlbGFzdGljc2VhcmNoLTGHBH8AAAGCBGVzMDKCD2VsYXN0aWNzZWFyY2gtMoIP -ZWxhc3RpY3NlYXJjaC0zMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAGNl -l9CdUzr5V1Zgden2QtpQEJvcHjrrDqOhqMDErsvr294YPdwGmM20H97/mrnZ5Xfw -DtPs9NKpW5/O0mG5nbPks55tnBtPvpo1x+nyVH+OU38/XqLgpdPT8TfPqLNiTlG3 -XGhsnnBj0GMcJkpIxWXfhfk9FxsHhTHBDOd/cQMa+sQYHaYEZhOFTAnj2pV1+aCf -1FRoDCy/8XLVPJDb+EwlFWa6HyTennc97EKafvgJhkVNH4snJ9gcFYfdWmVEGoFY -MdaBdOkRLOcbO2mXJFajBn4lpVhj7xsM3aH+0OdPquf/24b5hqMcSZevV5OMRNsA -WjAHkV0jjdi6Q0oNG2o= ------END CERTIFICATE----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.key deleted file mode 100644 index 988d8bf79..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAlzGVkG+RekCXKi9Woc+xLkZTTmg9IB00CW1MjrhXAPjniYAR -ME77WDKSPQchGzVtyIQum8yciTMdSsL/armOmlcLNw4M3PkuW7/HwxYTBgHOtPtw -DnLAMbuA+86CXhJhzA25bixkapPSip2lm4wqGCn0qDD5ebRpmkg5aQK56R6rnBIr -HJbDCYnGnm4G/9MdNYgphedJI52srmALmgSf7Vy/3BttaNaLrX889CkwhwnGo0Wo -aNfIc4ZtPNQcA10jiWm95wMTsLINwUi4M8+CrUwN77yTwGDpODogNguaV0bO58+q -7RUPxxcJhT/MimwRq/ilPz+U4tMm3uQQc7esJwIDAQABAoIBAB4bzrgLr8HTuQa6 -lJr2nEcl1BMqKPoLNsCl1ngZd6IG7zzvlvyyzdTbhUnH8KzVb/5dbFa0YXvlBPFN -ccXUG/TaXq5hCui6aqP0xhgwfitVEs/xvnfyHBoLR/1dO5L2QCl9li69gmXC+EuI -Z2FZgUx8lm8kCZpV9i22MlCaLWGh3lcqxUmzDi2D5+LedFEI8njLMwh4eEg1oU2b -sDHTiAuklgW+7KUDAfLag1YT3piB3BfBxhecFixlkq/7Hw7q/PX+wML5LvFsq89j -bCbmemWx1asMPlLYhonU7R/y9pq+apwXUD0fI63F3/3BgMRP8KrKgRFT8iqSu6Db -sAxMC2kCgYEA1WF0xt4s3CxT+hYhrcpjrUAVdwI+c/zW3R+YUdN6mjlug3hadNf5 -D6Imzvt032dg6kjV86ID29sKS4Dw1TeejXmxev8iUqbqL9kK5E6gFKPgl8igs33v -QCrzRQEZ59QZw+FYmlbcGXZNss3+rv3lPl/nEPcXtO+fwUzq50OgmzMCgYEAtWRk -sbwfK3KjZtTKm98pa5HtGbyc1TdzjZsyZdnYlZP8Ay9Nqgv/YXLYutojvQ9AkuG0 -2m49yuMRRAK+AbCxqXselG68DixozmPpaYjS5fs2tW8oZycQXFRGdv6Rkjs08O1H -zhAGxThVuv8slmcbN0gpbyxDMHX6cw3RhSUaiz0CgYEAm4vlcqq3DPELbnz/pA6r -Rro2a4CpQigIAT1s7gk5kH9ZPmFXn2Fo36qWm7/WXJyhm2fo/ycVpQkxogSmiud2 -ny8c38ponNOsV6DiPbfLHgCwUjUgYHfnFmG44I6C8eo9tfrpeejjnXQOA9ACXlIa -8LM8X7OgBne/f0uw2VEFHN0CgYAWKWDgEjLgtQ3ft2nVp2tBGEAWn+OtbSvyBh8f -MIF0rPLiVLoxZ2vZNRXjplktdRqXl3noIgXsrtdiLs+WF0dthHxU+D6DoMthQ/W1 -jiDuNkYV3rHaAHzQOv+s9CdG7XLnaKYYN/8Lw3k98oU5DvnVRDzDt22yEwf5XJvX -n5PhpQKBgQCQmuvRkbtedHOCuu+k4HDbxsLwKzeXORQxqc269tFX/g0kxsEs/fVN -dfi2rHwu+/ifHgeTHbkQonyyDyp825/UbrF1iCB8sBQmeVCFfXbBPSH+FbURYzu3 -3Vam0PPTZlPATRsXeH3hEZiflVhVDXGBJ9NqUZE3yrMniXnIZsfpeQ== ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.p12 b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.p12 deleted file mode 100644 index 6e34f11cffccdca5cc9e5516bc8ab6759bb0d848..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3778 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 Omp^X0?g#%ha{LE*L+=>? diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/http-elasticsearch-3-dev.csr b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/http-elasticsearch-3-dev.csr deleted file mode 100644 index 4eb99a199..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/http-elasticsearch-3-dev.csr +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIDRTCCAi0CAQAwHjEcMBoGA1UEAxMTZWxhc3RpY3NlYXJjaC0zLWRldjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANUC/cJPBNn3uYCBwy+mTkDNxqtC -pTMia1UHB8SSd51ySuh8+ZxKc2v1AmPuofhhwKNCvMMGdjv4/k5UiHaaNTz2WGkm -FBEtsL++0BgA0ClBQ+nryfl9ZxMsmWkOf/O59y7t+yu4f3nTeLPZpvWC237t/jfw -JJxflpdkzlVxash+Rk1bklaLlApz3p2FQLyXMrsaQBNPc0dYt+rrah1xokpYTmXW -EWwji4E9sq8zFe0AkrHSu1Bf3ZmWXbxxoAvuY7ZQkxzh21kxZ7n/ATSHTT1yWcZo -Pi8xCFkYgwLV9RQIEvM8ndTwXoz8Dk1pGXCLYDXRnjsuOn+JhMzyVQHs4k0CAwEA -AaCB4TCB3gYJKoZIhvcNAQkOMYHQMIHNMIGlBgNVHREEgZ0wgZqCE2VsYXN0aWNz -ZWFyY2gtMi1kZXaHBAAAAACCCWNvZ3N0YWNrKoIEZXMwMYITZWxhc3RpY3NlYXJj -aC0xLWRldoIEZXMwMoIPZWxhc3RpY3NlYXJjaC0ygg9lbGFzdGljc2VhcmNoLTOC -CWxvY2FsaG9zdIIPZWxhc3RpY3NlYXJjaC0xghNlbGFzdGljc2VhcmNoLTMtZGV2 -MA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0B -AQsFAAOCAQEAJbEZMp/6uo8m5Sz39gFZxgrUGjJw2XC2ctXzDb5YLYeSiYmhVBlu -i8RKk3HqQ03m5orunJd1y3IpnuLEjQVvgCLngn74DRnQD7RPZavBiOz4XKIVh0eO -AFduzwyoz/B3tw/3PQDZg9YsAnNyYF6JaaZYIQ/c1noDjv61/eogO0Mr5CyKbi9S -xb6kQ/UtYi8zhO2Utl+DziHfAE4XHHQWKOhcj9lK3GrwfI7rJ9VnHnZXOBr/4fVB -sne1EI1Vvk/pYM26r/xmx4aazXhU9tCgP+M3KPrtIfQshS9wzHgoCP1fhg7P3lOD -P1Afse9aXiBwBMVNV+fyCdtnctDpR2zl8w== ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/http-elasticsearch-3-dev.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/http-elasticsearch-3-dev.key deleted file mode 100644 index 8770d1514..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/http-elasticsearch-3-dev.key +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,8AF0D8CC92780C448F406A79AAD7CE6D - -IEezQkMslDxVI5ctPtVe/UwiogdTof8kLQM1RbiNAEOu/qgCi+Sdt3el9vwA1f39 -m07LJJSwPaYWs1KnRliOoDc5F3vL7KWUJKx5ZCqQYkuw/6rnVsjLo7TjE3iZZ5// -ankSxf7x+0xanc8Yj6AmuOJcGOzvx30pt7XmiHfSDHEQrZZx5U0AxandEsE4lfzj -Gma8+l3iaYcNwe4cbSJJhYMTnJw2V+jzyxtigSrF29RyxGv57TXLltT3ONQ0mixS -fHETk6JgvlOa7UP5V9iJ43xuIxZIwUxon0MjdGCOe/NL9gGrtLMLdKsr98DV/8vO -zwXGorocKdA8QjWHSoY3DABaEumnVdEfwdONB1lv6VlnmF8ZDZ/LMYMPG3KZjp8S -qwYXScpT7vHMLr72rJwuB7xkpi+IMYuFx0Za+iN54E38TnspmpI9bhlG0yBqtPaM -UbC9SdxCv2GkhnLLAiZ35y7AH2c+kYx9qLZsHtWERBhYlnJVfjzMj3rEG+sptxCk -+6V0q0EGRcgf5KY1rk5jMUONSIkg8mYRu5Wcc9IkXOSgxGKGO8e4uvezoQrqU2Ln -jyCMiDhtioMMLUZ47ehePnjt1azSujrUHAzXj69y6M88npFpG8HK89AlBHO0gy0r -dIV/HcYzRRq+clYvid2+LxDt4TAHp1VMYdSG7mwWMrMvOXp02yXGI08KEsBoDYuZ -3o4NHa4oY41qHW/zCh2xRTS3kR43O2FHbgqNBNKMS7JevMiji9kAfplRUEwss49X -VjbmT6WAVClSWarYDuoPcrrblIyUJL6pwUPe818Ftv95/8WOwvYUM0vjba4gHISu -jFksLERy9ELBnRaMf0ci5n6usWJ1HpN5uSJNJZ3P8drONv6rC7sFVonLCWOOyIol -WMkx5VylAvTE2PkKt441SNkT6oh0HRWTecovmN/jEA2hFvVVIJWNdX46YHnVuBF5 -NTQ+WbcIPmt9sOKb/LvFO4WEX4RK0uH5ARZkghoQCKsRhukqYQPzJvccFewETRY0 -R5HDY7MYouJuJoNJ1aEQdsCV3YrFd4Qh8eh/8DodvYSu+bQwkKS4yUX/WOuY2OQ1 -NfQmcPZ5j8JK3b1MzUhGr0UnSdXj+ZCFwTIeteaq/cSLHdgDX1d/+HZr7/7IUYtA -G8c0JQ8/6rZ2TsxqOdrnFodE0W1KQaaNVNWD8tN+rdwKaXKEbGCUmK7QdrM0j/hI -0MTuaU5juOVfofZhsMx6nXRA+dziX4rQBmy3Vy5FYL8eXQ5qLud7CHNpUGTfwll6 -G6Z6P3EK1s3IWiGAf1IMSKIk+NYqEdOrOqSATYPvoby0FuT3zLgNEu5tBFdIMzHW -+izGxwFG/Z6nIpjtzFpf13wA+kY5udrbyWsVWqSgT/4ivZ97FiBrE+q4+JZc//QF -M4QH9mVqPQrHNkRTbKY/MLlojYtI2tzQ+TNOFW4gepLUqTOJBoQdki4YK7Q1Iter -8po4firN41m/A0GGGlXaDX1L6zNIo6MjWr28T+dSogzKpnMMbXujzdA2hAHRo9he -psNYNmTNHziGX+KdtTLykCLB6sop2bGPzydCwZwHz+8CKxa4nU0ociSTKGsomkWy ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/sample-elasticsearch.yml b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/sample-elasticsearch.yml deleted file mode 100644 index f7964596f..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/sample-elasticsearch.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# SAMPLE ELASTICSEARCH CONFIGURATION FOR ENABLING SSL ON THE HTTP INTERFACE -# -# This is a sample configuration snippet for Elasticsearch that enables and configures SSL for the HTTP (Rest) interface -# -# This was automatically generated at: 2025-09-24 11:57:59Z -# This configuration was intended for Elasticsearch version 8.18.2 -# -# You should review these settings, and then update the main configuration file at -# /usr/share/elasticsearch/config/elasticsearch.yml -# - -# This turns on SSL for the HTTP (Rest) interface -xpack.security.http.ssl.enabled: true - -# This configures the certificate to use. -# This certificate will be generated by your Certificate Authority, based on the CSR that you sent to them. -xpack.security.http.ssl.certificate: "http-elasticsearch-3-dev.crt" - -# This configures the private key for your certificate. -# Because your private key is encrypted, you will also need to add the passphrase to the Elasticsearch keystore -# elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" -xpack.security.http.ssl.key: "http-elasticsearch-3-dev.key" - -# If your Certificate Authorities provides you with a copy of their certificate you can configure it here. -# This is not strictly necessary, but can make it easier when running other elasticsearch utilities such as the "setup-passwords" tool. -# -#xpack.security.http.ssl.certificate_authorities: [ "ca.crt" ] -# - diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/README.txt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/README.txt deleted file mode 100644 index 73749443c..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/README.txt +++ /dev/null @@ -1,51 +0,0 @@ -There are four files in this directory: - -1. This README file -2. http-elasticsearch-3.csr -3. http-elasticsearch-3.key -4. sample-elasticsearch.yml - -## http-elasticsearch-3.csr - -The "http-elasticsearch-3.csr" file is a Certificate Signing Request. -You should provide a copy this file to a Certificate Authority ("CA"), and they will provide you with a signed Certificate. - -In many large organisations there is a central security team that operates an internal Certificate Authority that can generate your -certificate for you. Alternatively, it may be possible to have a your certificate generated by a commercial Certificate Authority. - -In either case, you need to provide the http-elasticsearch-3.csr file to the certificate authority, and they will provide you with your signed certificate. -For the purposes of this document, we assume that when they send you your certificate, you will save it as a file named "http-elasticsearch-3.crt". - -The certificate authority might also provide you with a copy of their signing certificate. If they do, you should keep a copy of that -certificate, as you may need it when configuring clients such as Kibana. - -## http-elasticsearch-3.key - -The "http-elasticsearch-3.key" file is your private key. -You should keep this file secure, and should not provide it to anyone else (not even the CA). - -Once you have a copy of your certificate (from the CA), you will configure your Elasticsearch nodes to use the certificate -and this private key. -You will need to copy both of those files to your elasticsearch configuration directory. - -Your private key is protected by a passphrase. -Your password has not been stored anywhere - it is your responsibility to keep it safe. - -When you configure elasticsearch to enable SSL (but not before then), you will need to provide the key's password as a secure -configuration setting in Elasticsearch so that it can decrypt your private key. - -The command for this is: - - elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" - - -## sample-elasticsearch.yml - -This is a sample configuration for Elasticsearch to enable SSL on the http interface. -You can use this sample to update the "elasticsearch.yml" configuration file in your config directory. -The location of this directory can vary depending on how you installed Elasticsearch, but based on your system it appears that your config -directory is /usr/share/elasticsearch/config - -You will not be able to configure Elasticsearch until the Certificate Authority processes your CSR and provides you with a copy of your -certificate. When you have a copy of the certificate you should copy it and the private key ("http-elasticsearch-3.key") to the config directory. -The sample config assumes that the certificate is named "http-elasticsearch-3.crt". diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.crt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.crt deleted file mode 100644 index c4f94862d..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.crt +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDgjCCAmqgAwIBAgIVAKSbaKML0SnwyzX4I7333/0hkLmtMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI1MDkyNDExNTc1N1oXDTI5MDkyMzExNTc1N1owGjEYMBYG -A1UEAxMPZWxhc3RpY3NlYXJjaC0zMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAsC45DOfeVDGy3IcT7n2Cth4cnliO9E3ahHf9YzN89jVaFX8iXf3JfB0y -QPq8e+DgzyXJLf2O7yp3uPEkBg/EYQCS8BY6anPTiUcI7wKJb84G1m2TiqVkFJPq -Q36Qzi/tJ6Z6BDSoUSsvA06raSm4rWmYmXW8DS+CAhg8lSRMdz4yLMM4gRoPW2VF -tlqQfLJ3i/EmpqpBHwQE+ndPiuHmk2SsTXFj4XuUWJcCDzUm6mn/icCdI+jK3e2X -34Mulns7QV3BnQChfM6wvEadqj56WzfTeTkdcQRDK8AOQoWenvaMqHNydOfOD3n8 -un+gQ6yzwj9O+jIFI8XnZw+2sd36+QIDAQABo4GkMIGhMB0GA1UdDgQWBBT1wexl -RLvFj/gGwcQwdywyYoSs6jAfBgNVHSMEGDAWgBTIo4NUdI1j8AqTLlDSNmFlCmOr -KTBUBgNVHREETTBLghtsb2NhbGhvc3QgLSBlbGFzdGljc2VhcmNoLTGHBH8AAAGC -BGVzMDKCD2VsYXN0aWNzZWFyY2gtM4IPZWxhc3RpY3NlYXJjaC0yMAkGA1UdEwQC -MAAwDQYJKoZIhvcNAQELBQADggEBABJx5uyYyLHXT4OUvD4xBGk4LRko/snwJ97z -8pyyzddpobzKjhG4upUJQtl0DmvJEnzJu90oO7sDah5YiqiHq4mSPwOdh92bnILS -1K40Ybkt4pRoriF/PKYQ2oXi73LXtNbhyAM91WGcyD563DVscRjtgeKJBKTHJn9H -z1WOJsMxfkavQnNib204O57TyOM19t3kXENTT/k/nZ2Gj8XNQfIDA0i6nDWKyQWB -H9ozrprVIgIAhnMOIkGorUC9LCtZSQ6g1OTCbaB8a/mP8Jl4YmInbq806q3lSiWO -1yh7f2XHdNhV7YSlkVDytWtf8l2EodDiChGlabYyX3RBSOOkUe4= ------END CERTIFICATE----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.key deleted file mode 100644 index d1845c9e3..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAsC45DOfeVDGy3IcT7n2Cth4cnliO9E3ahHf9YzN89jVaFX8i -Xf3JfB0yQPq8e+DgzyXJLf2O7yp3uPEkBg/EYQCS8BY6anPTiUcI7wKJb84G1m2T -iqVkFJPqQ36Qzi/tJ6Z6BDSoUSsvA06raSm4rWmYmXW8DS+CAhg8lSRMdz4yLMM4 -gRoPW2VFtlqQfLJ3i/EmpqpBHwQE+ndPiuHmk2SsTXFj4XuUWJcCDzUm6mn/icCd -I+jK3e2X34Mulns7QV3BnQChfM6wvEadqj56WzfTeTkdcQRDK8AOQoWenvaMqHNy -dOfOD3n8un+gQ6yzwj9O+jIFI8XnZw+2sd36+QIDAQABAoIBAAOAob330JfSJp0D -evIVcO8rrVQ5DLt+3jqes40Asann4N73SHC/qj0jS/PWgD+CtplrpgKZ7TjkOl3U -/ms37kai5yjqejYSUCjlHoB455BPU1u5MTMTC2is0Z4OorSUp5VvlfKmNNfrQLuj -OV1leNBKvn/Dg03sTTx7LJ4m6vW+YGxUaq3lGIOoVR1B5qbCg65X7ORNLL5h0qq0 -eSUaBhp/H4LWyWqTNntg3KtD63YVZNCWgVzpU3QcNErg7uiuSK+eALM1L7f4kcpv -0UhIZtUnCuD3mJ9EgzVePPgOo5sNQq3CMLPEW+IeYlMshBA3kYO5P7OvlkXlj1Ix -CWi8N3ECgYEA7THCfP6QctFyRxUwTc3LYjqfXHICkV3PdtbsCtE/2HepCXxap3m6 -Pety8eFYUB/Ax0HucJyA7Fbg45fpy4DezO4hZR4Gkv2WE57u5DO4L1UZeJy1k6Sy -aH57FPZIDIR0X4xrQsx4LIIde6RdZOeSKnblDnPeGhr6O+1TzQosu9ECgYEAviYX -AfBepb+lLk858sduYJN9nBWlWCikt0w21Rrcl8stYHXPe7bKu7kKaYHeXc2cvPzS -gL2ZdcM3wRvcVUiDSDOD0iBwYbphmpVmhCuaCsLxrBU68VmLQhPrrV7ivIg5erG1 -Uyg3HG+EKCn8XHixAEKIUZU6jfnFwcbVqFF7nqkCgYEApdzZ55YLZH7ZrqM+d+mk -gzgDIB4JdaVn4e5AeQAB6VkjtyJiMiKI/aubYVD29HB/2dZc6hpGfP3znLMqJcgk -BKGwcIkih78UJvxIiQMxlMepXBIZVvkgWLm5T9s4XqhwyC/lAX0Bu/3wp/kz5c+Z -AmDJo+WaNh8PRMCcjRDEX0ECgYEAl2yB2ftvhBMwGcbh4OLMlYAfAZODTsdfFNFO -wTpY/VDB3BU1m9GfdQsQraDMUmsRLLcxc3CJquxBlDj5p7jNQ0wy570JgeoJHC9p -qkuGqpdAGcf2XojuizqN7kynx3e8PmcSfRyDdtOfrNRysbkzS3+wSzfJn5KO15fe -QeJRzbECgYBOOcbLnfQCaQzfqJ9PwbEGQ/IfZSSR9goJ1PJUxK1dyGGbfOXtdweU -pg1x5AW+dmAsKuxCicoLhaTPhzIWKGl/4t40SbwaCfJ4az/ZTBZZRAKJgBnnSj80 -Qb6HrCkhR3K9uEr0xLQJxpDOof3pxTlDdD1laavexlWHg8bUmS9qUg== ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.p12 b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.p12 deleted file mode 100644 index bb883a40676ea2e7243f371c1c1fe3b85767b4d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3738 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 diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/http-elasticsearch-3.csr b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/http-elasticsearch-3.csr deleted file mode 100644 index b90c30c81..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/http-elasticsearch-3.csr +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIDQTCCAikCAQAwGjEYMBYGA1UEAxMPZWxhc3RpY3NlYXJjaC0zMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5pVjoYcdbT2tZSApiu0lYcrNSdcnjDLk -NTHQYEAnYlWAdJfO5PFay4DqAyYG9QyKrFUYWMtpb+kkXTYLZFXP57N5ZIAx9IqI -LWf6bcKrqz0tg1C+37WeWbdveP6Tt2Mojy3bEC2KDVeFPCZBeWFmmV2SBgdqk0pR -HQD0EqgKAoySWNbfkR4RigLB4zu5On/AGHjZORHr9bH6eqsNk7eoHEOkfsV6Fdcw -BhmJwRWNPxY3i1AlrgnbHMbPitx9RCnyzPlmEOeKq5JfUNSG0XDG+vM1CtXCbWks -Rt0tm7LMSAPlB7vl1yN0ALYvGWCKM4GAuFn/yywePIdH4XhlBkYrFwIDAQABoIHh -MIHeBgkqhkiG9w0BCQ4xgdAwgc0wgaUGA1UdEQSBnTCBmoITZWxhc3RpY3NlYXJj -aC0yLWRldocEAAAAAIIJY29nc3RhY2sqggRlczAxghNlbGFzdGljc2VhcmNoLTEt -ZGV2ggRlczAygg9lbGFzdGljc2VhcmNoLTKCD2VsYXN0aWNzZWFyY2gtM4IJbG9j -YWxob3N0gg9lbGFzdGljc2VhcmNoLTGCE2VsYXN0aWNzZWFyY2gtMy1kZXYwDgYD -VR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUA -A4IBAQDWJ84YrAupXVvtivI3YXj0YYrMhG9jvtxnzEp347SSV4864d8HQTejc7T5 -qdjwhaJGA4ZB1paRaeyxjSktFYc/FOigDdDiw2qX/NdN2aQQ/EMUz8azgJg09e9c -JMq5ahU2PPDtm2QYeRdIj+KF0C9DbzlO3CGBBSRTbsAht2b0csBGflb3Dz4zQS28 -10YNC8rs5C+0r2eQ/GhXh5Ay4j5XeVVRNVRQUUB5zv6WPa9K/I53Z/uoIw3H6m3a -jWgdJpql4X7zXjOCsahviFjprBaXpyrUfhK5/fUsRmjSh82VoIN9Oi4UDk/Put1T -V6HgW+Jee9ZQkVrB1RoHkWkQnzkf ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/http-elasticsearch-3.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/http-elasticsearch-3.key deleted file mode 100644 index eed79d41e..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/http-elasticsearch-3.key +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,C25A50B02DD2FB61D1CC407D45661D64 - -UJNlLvWQhASth2eTYO9vh4cDX3hKhEobVa0FVG+WuIbkmtvwV7fDoZALfRBn07AQ -mDF3Y3Hk2AuUUBWIEALQU/OiYkW/cW+aX8PpF/pTYTsW0pvtYuQHKmkAfDs6ZVWm -k0J9iTKDVS4mQc54CxbCVcdtOUPr+egfNfethULX7QT18NeM8Cl6AJOgdEmPPfmo -2sBEnOMsLJElsAz/sbZUZaNuIJ7B/O0ptvX57ny1WsJf44PAAyuT4oZi8NWLuMMn -EcGHkJdGpgQPOTipA5XfuiLlmmMVWlOyJDrsD8MHOMtcW5sopULqpU5mBrca5UPa -h0bwg6PaNaOflTMlE/Xvz53iVgbdjYWIQZMOuwOO8s5IkSK+h4kzLQRsnXGz6voS -3GgyEn1bsmBX0v5+avtGdHHuDmc4YPfebKoFE3ARGhtshIcpfGwNIOP0fFmfqCJp -KCFzcKisVWfAoVSpfI3N/m8Mbl06wPshmLGj0WZ8VGDshQpjmCapzliCFKm3YXDb -PPS0IAq02xsJSrt68VG1BGxobXxfx9hV8B8kb0D2wgugbNgydcflBEgdk7XXhK3q -l1gqnuuAf//lcg1gf1QXQGGbLg6pRpgkGyadFtPYsIEk1/ICxznlYNdYIZUjtnvP -LoUk3LDzwsLZZeNPhGcojNpKpBqojaRZFdJAah9FUKlZFKRhSreY3gOe3mHTxFhU -El0aC5diRpuVL3ybls5rJD0kx5HvD7jQ6CIQgTKXLBT7BFI603QiJLkqx83fjAH7 -SIuuYLuO8XJHO6Vz1ewcnt4pHdtyoYdl5dhbUbgwiYwdgtmhFdGOib1wgG3NqeQg -kCZ8wXSI48LyfJ+vNU4ioB21QiuR2tQS1y2pyCEW7QAq/i3ZKqRcGlcfOG1a6Yp1 -ePlAIUptRrC53EhDY1OIokNq7tR+vgRuR/31U/mmfO3ntVN+mQ3ZYDAzmrmdOgzG -hv9Y5VZBdLxemGW4vamGLMGTxD0WMkvl3WxcsSEZDmt7hgOIdyCf6EOeJTJk8NRJ -nnemn5wtyvqWJYB8FTE5ML2eHmbcGscca/NP/ytdCfBC0rOCFSFp6oMrCrShYry+ -YPIZaA1tEAy/AOSUDvaJ0r7AnmMQHcz5Frqe3q7StUynpL3Jiq26tnFBmBGzk3Qd -oVp6P790YvbKbINBObGdVNDWSQUZyaulkQKkG4WnDOEWUY63Ov4/SjWaLJkGiUCu -SMN0cyvPmADIFweyF0jKCwUHPVtSfk7jrvEj/AC9CiG9fb3zK4E42j2ZxqAbvutx -ugfoLNmywG5jXMuc6jIrnjco06oWXXfqFHuRc3cJgQCFtfEJgLEK8ytPvHZwIvef -z/0rTyhfF0iIsTHN0+doj8cs+Ne2dTJTs527TGwY1PewXmdEzIpIoGXxUTo5tYOc -kq/ST2PamWQY0KxB6jsNwh/Y1SjEWcO7F0jXHu2HKmCY4Kfpn2fY45JS7WLj1IaN -E8+/IgdMzAem67f3Q9Flm7mlnGzneFECEjb0IcCOyfjRtWpW5kMmErgY2Qvh5Cpr -m1GoWAxhTFpSGDQ8xRuF2wSILoEH1zj+w9nmX6ycSJzInOe4E8N/hL6Brflg9JDl ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/sample-elasticsearch.yml b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/sample-elasticsearch.yml deleted file mode 100644 index d0bdd61f7..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/sample-elasticsearch.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# SAMPLE ELASTICSEARCH CONFIGURATION FOR ENABLING SSL ON THE HTTP INTERFACE -# -# This is a sample configuration snippet for Elasticsearch that enables and configures SSL for the HTTP (Rest) interface -# -# This was automatically generated at: 2025-09-24 11:57:58Z -# This configuration was intended for Elasticsearch version 8.18.2 -# -# You should review these settings, and then update the main configuration file at -# /usr/share/elasticsearch/config/elasticsearch.yml -# - -# This turns on SSL for the HTTP (Rest) interface -xpack.security.http.ssl.enabled: true - -# This configures the certificate to use. -# This certificate will be generated by your Certificate Authority, based on the CSR that you sent to them. -xpack.security.http.ssl.certificate: "http-elasticsearch-3.crt" - -# This configures the private key for your certificate. -# Because your private key is encrypted, you will also need to add the passphrase to the Elasticsearch keystore -# elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" -xpack.security.http.ssl.key: "http-elasticsearch-3.key" - -# If your Certificate Authorities provides you with a copy of their certificate you can configure it here. -# This is not strictly necessary, but can make it easier when running other elasticsearch utilities such as the "setup-passwords" tool. -# -#xpack.security.http.ssl.certificate_authorities: [ "ca.crt" ] -# - diff --git a/security/certificates/elastic/elasticsearch/es_native_certs_bundle.zip b/security/certificates/elastic/elasticsearch/es_native_certs_bundle.zip deleted file mode 100644 index 9e667639cd551fe99e17fae0a70a577f00cec7f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23908 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 diff --git a/security/certificates/elastic/elasticsearch/es_native_certs_bundle_pem.zip b/security/certificates/elastic/elasticsearch/es_native_certs_bundle_pem.zip deleted file mode 100644 index 03366e4e129d68ab881d415aacca340326332afb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18878 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

PXR;{kd`IIpaY?IJPATAcVLT?r?zXcT27jYe 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 diff --git a/security/certificates/elastic/elasticsearch/instances.yml b/security/certificates/elastic/elasticsearch/instances.yml deleted file mode 100644 index 008db5cbb..000000000 --- a/security/certificates/elastic/elasticsearch/instances.yml +++ /dev/null @@ -1,67 +0,0 @@ -instances: - - name: elasticsearch-1 - dns: - - elasticsearch-1 - - es01 - - localhost - - elasticsearch-1 - - elasticsearch-2 - - elasticsearch-3 - - ip: - - 127.0.0.1 - - name: elasticsearch-2 - dns: - - elasticsearch-2 - - es02 - - localhost - - elasticsearch-1 - - elasticsearch-2 - - elasticsearch-3 - - ip: - - 127.0.0.1 - - name: elasticsearch-3 - dns: - - elasticsearch-3 - - es02 - - localhost - - elasticsearch-1 - - elasticsearch-2 - - elasticsearch-3 - - ip: - - 127.0.0.1 - - name: elasticsearch-1-dev - dns: - - elasticsearch-1-dev - - es02 - - localhost - - elasticsearch-1 - - elasticsearch-2 - - elasticsearch-3 - - ip: - - 127.0.0.1 - - name: elasticsearch-2-dev - dns: - - elasticsearch-2-dev - - es02 - - localhost - - elasticsearch-1 - - elasticsearch-2 - - elasticsearch-3 - - ip: - - 127.0.0.1 - - name: elasticsearch-3-dev - dns: - - elasticsearch-3-dev - - es02 - - localhost - - elasticsearch-1 - - elasticsearch-2 - - elasticsearch-3 - - ip: - - 127.0.0.1 diff --git a/security/certificates/elastic/elasticsearch/kibana/README.txt b/security/certificates/elastic/elasticsearch/kibana/README.txt deleted file mode 100644 index 1dff60ee7..000000000 --- a/security/certificates/elastic/elasticsearch/kibana/README.txt +++ /dev/null @@ -1,38 +0,0 @@ -There are two files in this directory: - -1. This README file -2. sample-kibana.yml - -Because your Elasticsearch certificates are being generated by an external CA (via a Certificate Signing Request), this directory does not -contain a copy of the CA's issuing certificate (we don't know where you will send your CSRs and who will sign them). - -If you are using a public (commercial) CA then it is likely that Kibana will already be configured to trust this CA and you will not need -to do any special configuration. - -However, if you are using a CA that is specific to your organisation, then you will need to configure Kibana to trust that CA. -When your CA issues your certificate, you should ask them for a copy of their certificate chain in PEM format. - -The "sample-kibana.yml" file, and the instructions below, explain what to do this with this file. - -## sample-kibana.yml - -This is a sample configuration for Kibana to enable SSL for connections to Elasticsearch. -You can use this sample to update the "kibana.yml" configuration file in your Kibana config directory. - -------------------------------------------------------------------------------------------------- -NOTE: - You also need to update the URLs in your "elasticsearch.hosts" setting to use the "https" URL. - e.g. If your kibana.yml file currently has - - elasticsearch.hosts: [ "http://localhost:9200" ] - - then you should change this to: - - elasticsearch.hosts: [ "https://localhost:9200" ] - -------------------------------------------------------------------------------------------------- - -The sample configuration assumes that you have a file named "elasticsearch-ca.pem" which contains your CA's certificate -chain, and have copied that file into the Kibana config directory. - - diff --git a/security/certificates/elastic/elasticsearch/kibana/sample-kibana.yml b/security/certificates/elastic/elasticsearch/kibana/sample-kibana.yml deleted file mode 100644 index 63ba154ba..000000000 --- a/security/certificates/elastic/elasticsearch/kibana/sample-kibana.yml +++ /dev/null @@ -1,25 +0,0 @@ -# -# SAMPLE KIBANA CONFIGURATION FOR ENABLING SSL TO ELASTICSEARCH -# -# This is a sample configuration snippet for Kibana that configures SSL for connections to Elasticsearch -# -# This was automatically generated at: 2025-09-24 11:57:59Z -# This configuration was intended for version 8.18.2 -# -# You should review these settings, and then update the main kibana.yml configuration file. -# -#------------------------------------------------------------------------------------------------- -# You also need to update the URLs in your "elasticsearch.hosts" setting to use the "https" URL. -# e.g. If your kibana.yml file currently has -# -# elasticsearch.hosts: [ "http://localhost:9200" ] -# -# then you should change this to: -# -# elasticsearch.hosts: [ "https://localhost:9200" ] -# -#------------------------------------------------------------------------------------------------- - -# This configures Kibana to trust a specific Certificate Authority for connections to Elasticsearch -elasticsearch.ssl.certificateAuthorities: [ "config/elasticsearch-ca.pem" ] - diff --git a/security/certificates/elastic/opensearch/.DS_Store b/security/certificates/elastic/opensearch/.DS_Store deleted file mode 100644 index 58f271c97de7c2b307e5e5622ca002bcaaf7cf75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKQA@)x5Kgw~I>w+63VRIrI&eCjiZ5l(KVU^4RAy_3E7oSToqZUCKI&q|>WZsjLI7n5jt0%0Q zRU6pN>2$w)&=TFw;jAU5N4xEo*z0s>vzoQJwS9axc!(Zj`K)Q>@C7Pq7@WfkbbiS2 z$xY%&#`oYgUtu0eNDL4I#K5XDV9q+~@M{L}d=Q|Bj=@5sIy#`i-$$IU zAfiAY-x7$zpkuJm2s0pDhXU$QZk`xihl5=hKgVF9QHL|Gc7}D#&fL6ExY`};Lb)^U zXrz`HAO;p0DC?n(_y6hl@BhUh8W97;z)CT|D}A@$gOtqOx|AH=wF2}O6b1bXjUOS< jQCBhe;#J%PRRVT_9YDump%E+~^dq2XpoSRuQwH7vp*B!D diff --git a/security/certificates/elastic/opensearch/admin-key-temp.pem b/security/certificates/elastic/opensearch/admin-key-temp.pem deleted file mode 100644 index 4700062e4..000000000 --- a/security/certificates/elastic/opensearch/admin-key-temp.pem +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDKutbJq7iskLEC -a22iNWAlovDi+C+DMuk7lo9dqjAGOGEMareVIkl8lzeDyZpLKgyUWSS0AjXKmVeR -w4wgK7lvkzlbpyCTacoR0FINlFboTVyqCaIUTRs2qNScdRUHlI2tVAm9sw3NJAdV -7UL78+gNOTrFDPKhcxyNq83xetKZJEGL5RYJD9k7d1sG5zMhkEPyyj2AlMzIB2oe -zHFs4JG3WoRQhiC1FJT493exHWRRQgMtI+w7ifuBd5LWxSjHtG58W+0bdtvpdreG -zdaNRt3JIT65XFsF6vyD8zKuFF86DSazpljwXn1y/fs0FYMJZVfaqDFR2ktmgCwY -nyvcsqAB9THuULfwDk3lWX13nwic7FPKnLOeEAEeoxeEMmwcs3Onxzwrk1w/SeJ0 -i2mAKV2HUW9iUPNPFVzxr18y0qqq/jEBV0O+e/nYJrO58MRnV/LhjquvhCS0Xg1O -/9B+GS/b8fY4LpIfB+Pek0m5snL2FhVxeZh9vdpPHgm1zVN3Dwuw4rfIMIvXAT2T -72ovWBuuFom0yOexQEA6WG6E1ohXWv4CyYrBuH+NPmw7B9vm72tk2vCKIiNMJ35x -EBcjNt9fQnv18TYudDIhZQ0Kt9j2N0nVdT7Dqs34AidvEaxlj5aO7bbRiGvyMwiq -S5Vm4HlDvZjGclnTGaTxAOLRRSmBvQIDAQABAoICABM9ba6Il1d7SO1RnD9JgQU5 -ZFKqGrpBHez7kkIhqXqhpaY7x44GCcLjCBAAFV5eUIDQwAC8d/XxHSQ2kokoFSp/ -ZrFp2FfdMaIEqxDiW+gilXGGxgTWt4c1uS3bF8KXKOYDBISmJmBqc67GPHX0dTiy -Dn+OhcVoSxSv8jThgvSpQfZAqNl10VhJMNCkJxBfpG85neIi3Rd7yqi/HuGmI3Yr -B0UsIZUF7ch+FfQvdaqXkP0a/Gu/Ieks27j5z6+6UkUHpWZWnrLWwz6uMNdKGzjg -KJeHahUS8uGj9lKamNoFzv88QZMYaJ/99jYAd6Xv4glcroeV59ODxQuWKZ/BrRkv -Hys3KP6NMpwLvtrxCRdSF07yFYtuQCPhELPUTXx9Svi9mUU+bUb66yeGa6bJSE42 -RL9I1nUSw8+jpRyy25q34lTpCJcLDXJXEKskAZHXMKqFtkzveTTRKiJ4dIR5SJPq -7LQSrWX2IqA+FMu2l//cmLF1cK5CKvG9Op7q6D56Mg28ULtAO7oOLWzk1Brq/++i -TcpddtJsquprcmOUbxHb+Gj0KEBkGz/JGYsgD8chcvPJ50dCxpuU/sXXzrZgvA1R -vB4X6G7aaJFPQorRrWbmvDY4ws2M2gNE4zcWEXSGSbeAzGLURM9U1Tdmfvl9XbbU -98+3WvGUDG53fZk8kW7JAoIBAQD0OFqTi8fK4PJK2aY5tFNTZp+0179U7fby2+3C -jnRMJ7MtaXktq12vkVWoL4dqw3EhebR3pL6+tFp33p9RpukC1elsdwHMNcFMMsfK -I18H+B5Ay1iSYbCaE8wIaRByXb4GqmDKui3A9FqYGVfbTNlwhcMoQTjAfTeRtxuW -8IT7WuuMggGk1NdjkYp/mBvlRDHV35biGlHGwUCjrteGQznBrQqs6ccUyFxjALFq -cqdhHAp6KYqE+JN62eiQpk7abjlVlzgcq69nF2zpbO+bUB4YHoTLfyyjff807DDm -jYzilS584lyAuH6DQQBSyC3T+xpk/9LxBYnTt34iKtm7/tZlAoIBAQDUgikNEG2G -xAWi4P5Qt6l7BNpsXG4jTB0x1FgXQfYJ8v+uGpE8QMcWlM8uAWZtH5t9GqCqA+o7 -Ow9HsCRgFcrp9CcEk2Dn7ZpOJoK5yP58ObUJiet3Zl+7FhSv2Wau7/Ly5TtHLWTC -FzVWh63VzW0JeRUOUVL4MJeoyj8F55NcnPH6tEaSq/IWuNhAWpICRFszwQExXV9+ -37TNB77lVQreqzQeg4HP7NNkCNa7jc9wbMrsbYL4qK9JLVpiyqmEPEwpJziBFE6i -R2J4UXUrR/F1u48vXuoskbVdzcVNlE+bCiw9bTbc7kuPkiW6mDsfpN+3DUz6fC65 -zPPwLX989Lx5AoIBADUb/DaR80TfXlGAu3FZEbXVX23IbUde6JEv2qiwqgHVsFVz -1nJkDd+cT3BfxacmEXgiK2jJXuHB/tqKg0MSdSG0uypnRvDNz9duQ5xlzMjC4HFe -x0guDmWzYG+DyZvVXvm8G4h6rHCFsx3YhQ6fy7l4nVQnutvBX1BE7a8JZyHyR78q -lojt8Fkq0V+mCIr3JY9JLFrHNnlulUwDPcNo4yqHIwcvX6fZWp39DJgFjvjDTFP8 -rK72D7xrnvO19vfxeG5wkDdL7r0QjxLEKecwqRq9qEtIwMBdKh6sLoY0yiqMHqvx -3gPwGzMX86YM+kpbFQZZy9m2Rp7QDJIJl4gWhzECggEAXAYxeLLQezePqUT9XD7s -aZVkcOBl4WsoiVeG/itWPGC6T865bfovPJwcS7PXgxHY54gMYxNm71dX+pdQaTuG -r2FHNDgOEuFVnNoYahOcAHeM6iCLkx0F/6JEOxJN4RuPfZe+38fMhjA+rMX8hUV8 -HkoM0DJvV4LTagiK2ie6LLTaJNLEbOeA4k4Rd2zBJbIsPHEr7xCcNfjx9oeQJwd4 -uYwx+bTBFiVcNUmOk5GJbwntpgyWVs/VeD7nkThpyBXEdV3CnkMI+kUnYysDLkbt -TSp3iu/zQHGotIJTGpFLF7yEA+WziGC43+dN50vc7osbRc3AtAfqxBL4390UBCyH -IQKCAQEA8c50XY6ETMxvXdDHEwumISRARYPwPPh8BJ9sGJnWQY7L+16QpqMi3P/G -v33G46AEMw5FfWgwPRnEm0ip3Pp2aRFOhjm/sA7kLtYWOGLLovY2PNhvX0ROoDWy -0Wv2+Kf6yN5sZJGlvrdUTEZ4GvMFmvaFoVHbpD0Y00OpkoTe9NdDmw5V9HauqVLt -E0L8P68GYhkpIIXXW+twNPS7hxEXpciGGBflYkwiOmNtNLQ6fwxm0vYnDw5WsnV7 -kFeZ1e8vAkqNnxWSj6kQQqcB77wFDuvp9gAcLIzcs4U9J+OVLhBcqnYlskBUUA7I -5QChlh08KyqWyU0ZPTTNHHPtVF/2bg== ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/admin.crt b/security/certificates/elastic/opensearch/admin.crt deleted file mode 100644 index 7aa7a8dc2..000000000 --- a/security/certificates/elastic/opensearch/admin.crt +++ /dev/null @@ -1,32 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFlTCCA32gAwIBAgIUL8Q8IkSbyOkamFbESVZaIDKbbWYwDQYJKoZIhvcNAQEL -BQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkGA1UEBwwCVUsx -ETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazERMA8GA1UEAwwI -Y29nc3RhY2swHhcNMjUwOTIyMDc0MzA0WhcNMjkwOTIxMDc0MzA0WjBhMQswCQYD -VQQGEwJVSzEPMA0GA1UECAwGTG9uZG9uMQswCQYDVQQHDAJVSzERMA8GA1UECgwI -Y29nc3RhY2sxETAPBgNVBAsMCGNvZ3N0YWNrMQ4wDAYDVQQDDAVhZG1pbjCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMq61smruKyQsQJrbaI1YCWi8OL4 -L4My6TuWj12qMAY4YQxqt5UiSXyXN4PJmksqDJRZJLQCNcqZV5HDjCAruW+TOVun -IJNpyhHQUg2UVuhNXKoJohRNGzao1Jx1FQeUja1UCb2zDc0kB1XtQvvz6A05OsUM -8qFzHI2rzfF60pkkQYvlFgkP2Tt3WwbnMyGQQ/LKPYCUzMgHah7McWzgkbdahFCG -ILUUlPj3d7EdZFFCAy0j7DuJ+4F3ktbFKMe0bnxb7Rt22+l2t4bN1o1G3ckhPrlc -WwXq/IPzMq4UXzoNJrOmWPBefXL9+zQVgwllV9qoMVHaS2aALBifK9yyoAH1Me5Q -t/AOTeVZfXefCJzsU8qcs54QAR6jF4QybByzc6fHPCuTXD9J4nSLaYApXYdRb2JQ -808VXPGvXzLSqqr+MQFXQ757+dgms7nwxGdX8uGOq6+EJLReDU7/0H4ZL9vx9jgu -kh8H496TSbmycvYWFXF5mH292k8eCbXNU3cPC7Dit8gwi9cBPZPvai9YG64WibTI -57FAQDpYboTWiFda/gLJisG4f40+bDsH2+bva2Ta8IoiI0wnfnEQFyM2319Ce/Xx -Ni50MiFlDQq32PY3SdV1PsOqzfgCJ28RrGWPlo7tttGIa/IzCKpLlWbgeUO9mMZy -WdMZpPEA4tFFKYG9AgMBAAGjQjBAMB0GA1UdDgQWBBSwyWm3NyPnAapXf5ch398R -BgQ7QTAfBgNVHSMEGDAWgBSm1V7PKxv7a9va6cHaZEVs51lmUzANBgkqhkiG9w0B -AQsFAAOCAgEAUo+FYh2J9rP1UQexOa9EyYcTQMnErdKEDwdjhHwlQztOXkQrY3/n -8aFHKzhrusuJZxVzNMLFDP+lZ3LWhKGasKIwEPhvFwNpB/S3BF9QKXfSNkM/qd42 -vpkIZFEsY0wfspwcZjLcb7kbgCMhH26h/zIHJV8bxpgGq36LX3k8+QXY9ArZ+f+N -FKCJCEiJP5vOBbtRRCwZBADRfNgadBxLgRmTvH7fZCSMNA9UK7zbMTXMR1vNI8Fs -eXjcJS8O69uTW5rZhFFFIdUQDIVaj8PoUepepSkiYSMF9w+IY+NWZIIeDSbhTO3Q -gLa6AKiMLGaFGNE+G1Ts4l6jYvRA60C1eE8+j15jKwqzNXR19j9FepA+rq9AtB5+ -huIA9780VX8ormzn9dVIq05ripEMloycYcLQGu9B/QkGqHC5A9rWPsWG7dm5Sy5K -PACGiFn3Hxnn3gWwLUO+C0ZHgjGwGj7Osm7EATL4z3nUqFPhgDKiE3v+ePGHzTnd -oUhyORLEQZku/7xhpojscZ9v2waJafaN4pgNZVsp6HoM/arqsFCVXEWPUNL9OACK -A8w/mtVd2MmJUK2oc09cKMi0RG5ut/4YohAMc1ayJaO7VD9wuSoEDAXJUO9CVWQX -zIJZKU/k6wGLCXiaaqkXKoeZTqxmFAIVeGQzrNsV8UH8WfDnpwkboUE= ------END CERTIFICATE----- diff --git a/security/certificates/elastic/opensearch/admin.csr b/security/certificates/elastic/opensearch/admin.csr deleted file mode 100644 index 4a0d3a09a..000000000 --- a/security/certificates/elastic/opensearch/admin.csr +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIEpjCCAo4CAQAwYTELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkG -A1UEBwwCVUsxETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazEO -MAwGA1UEAwwFYWRtaW4wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDK -utbJq7iskLECa22iNWAlovDi+C+DMuk7lo9dqjAGOGEMareVIkl8lzeDyZpLKgyU -WSS0AjXKmVeRw4wgK7lvkzlbpyCTacoR0FINlFboTVyqCaIUTRs2qNScdRUHlI2t -VAm9sw3NJAdV7UL78+gNOTrFDPKhcxyNq83xetKZJEGL5RYJD9k7d1sG5zMhkEPy -yj2AlMzIB2oezHFs4JG3WoRQhiC1FJT493exHWRRQgMtI+w7ifuBd5LWxSjHtG58 -W+0bdtvpdreGzdaNRt3JIT65XFsF6vyD8zKuFF86DSazpljwXn1y/fs0FYMJZVfa -qDFR2ktmgCwYnyvcsqAB9THuULfwDk3lWX13nwic7FPKnLOeEAEeoxeEMmwcs3On -xzwrk1w/SeJ0i2mAKV2HUW9iUPNPFVzxr18y0qqq/jEBV0O+e/nYJrO58MRnV/Lh -jquvhCS0Xg1O/9B+GS/b8fY4LpIfB+Pek0m5snL2FhVxeZh9vdpPHgm1zVN3Dwuw -4rfIMIvXAT2T72ovWBuuFom0yOexQEA6WG6E1ohXWv4CyYrBuH+NPmw7B9vm72tk -2vCKIiNMJ35xEBcjNt9fQnv18TYudDIhZQ0Kt9j2N0nVdT7Dqs34AidvEaxlj5aO -7bbRiGvyMwiqS5Vm4HlDvZjGclnTGaTxAOLRRSmBvQIDAQABoAAwDQYJKoZIhvcN -AQELBQADggIBAIAvOpNY92zrmH5uqAvJIaW5bE9UcB/o0+4HI+UuQ0PiAY/s2HUy -cc8Ln0P548LYnUu05DcU5qjUKF665ATzST5G9YGKDCauP0bsgJ9ZTMebXPz5SkMB -jPKcZJPo/ZrGWlviQ7eP2ZP+VUJGCdEx4oEQwh2LwNGz9AuI/mEByKTUAFFy7VXJ -cXhtTWOqmaSU84fhoZh3jbp3V/PrIxIL5n+V1nbZRMjnkA84CwTKFP/ELIDSuWOq -xk3KEJOSJfwSJPnXWVohNXWlS1HvjmsQjcc7POHQpGu2RyL01JQWp+cJgKGK3smu -cVfgZj8GxwEaLOjbL732sptTJ8Jg4XEolmj30ANBTbrZyRtP4qeLzx+qo2rkx9lv -piwTufAC9eN5fFV31PkuWN0YySBhwuF2H4yR7MS1OK8ECvQnwymcDyaRLOnboi6x -armdKw4tX8JlEYWPGIEpMfgr0gZOYUgAdVy1489e0KBnfOtdLnoDANdbqRo6YCBV -6b2eBFDOfffbVDhG+xC8gx/0gZ2DnFivCHdgJWm5ysWDP51jqees8lDGc2mKudkd -OnM1d1Elu22eeayhQRctX1S1B2TihNlAnuVviEuU9QkhbhF5pcii0d8KbS0rzP7L -UGaOLlaTQm2jOuqBYxua7J0/t5szV1gaMni4EKG2+cfnCTtBzlWTVh0V ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/opensearch/admin.key.pem b/security/certificates/elastic/opensearch/admin.key.pem deleted file mode 100644 index 4700062e4..000000000 --- a/security/certificates/elastic/opensearch/admin.key.pem +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -5QChlh08KyqWyU0ZPTTNHHPtVF/2bg== ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/elastic-stack-ca.crt.pem b/security/certificates/elastic/opensearch/elastic-stack-ca.crt.pem deleted file mode 100644 index aeaf6af9b..000000000 --- a/security/certificates/elastic/opensearch/elastic-stack-ca.crt.pem +++ /dev/null @@ -1,33 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFuTCCA6GgAwIBAgIUYbxTkjoK4rzdwalen0zql4EhsJUwDQYJKoZIhvcNAQEL -BQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkGA1UEBwwCVUsx -ETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazERMA8GA1UEAwwI -Y29nc3RhY2swHhcNMjUwOTIyMDc0MjM5WhcNMjkwOTIxMDc0MjM5WjBkMQswCQYD -VQQGEwJVSzEPMA0GA1UECAwGTG9uZG9uMQswCQYDVQQHDAJVSzERMA8GA1UECgwI -Y29nc3RhY2sxETAPBgNVBAsMCGNvZ3N0YWNrMREwDwYDVQQDDAhjb2dzdGFjazCC -AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXi6TyN3VF8VAFyvPa1OTwy -i7lx5OiL8rg6E64F2ariVmYcTVtW7cxEaFVqgen9SxMp96pUYr2CtMTDKU0IavpQ -eU1MUo6r3CcKdAcu6SUvxEhAGO357TCb3YK6FnghE/48Fn+zq4/xPCxQWp2qgatg -Gn8TSQ2n2h86rV1K6NqTVtgJVq3fg/DE+QPEDeXL/jtaqFMxZtC+Gm6A0LqDC/Dx -Bs6BQZ6W0uMaS7Xp+P1i9W7v+ALKjPr2DocMBkMPgATCfIkIqO1oAs2RkeECCI6L -mwPKQ19qIIdvI/FzJPpDaRiT0BqwOId441NFgQ3TJZxmz2RKpg7+a8EoHn1Baarf -SrKgxKYLDsv4wyl7wlR5GZwg+CWpH2djFhMoZ8BCeXagNb74TaEB/g3wqXOKu1Uf -wCRUoJnEPR7xG3L0Ocrcq1l0z878qVpM41Wxgat7EpulapI0jBUs6ndQi896s2cI -AwYstawVph72n9X49jV7kb2bWn9biQ0wjm2fs2NjlBuZHA1ydJ1uVzX5hp3RnuKY -JfLplTLPgscq9iWhFUfl8FFbe6GpDerbtsy1gg84wDmQEAIEXiDD8aUWkEj+20J1 -tZNjdm8BFbQuaTKrZF0gjhTOZ6rc+kH80Lu7bIuDse3s24TTaAewxSb8SXVbh8XV -blJcQB2nLIQTvtG+IuLtAgMBAAGjYzBhMB0GA1UdDgQWBBSm1V7PKxv7a9va6cHa -ZEVs51lmUzAfBgNVHSMEGDAWgBSm1V7PKxv7a9va6cHaZEVs51lmUzAPBgNVHRMB -Af8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU8i8 -Nvvq0Y+jh4+Ob70HRGe9SSuz+utz36aFD4J7YpwsmvjA2CM3YGTexjLJn6EI/N9h -7gf3rCLTHp3Ffb8QYu6lpQPbLv3BAJtseC7jxaK2QLaRmtVVTUwntEk6Sd/jzsvV -r+QiSg+7x79Au5spBKFJTIGOe3BPGF1Mrz5eH8gAGEqoLcCxb89/+qFZHwRgBWxN -kNyFOaSQyTsuYjd5j591SPDMbqvUa28sz+2cxDAu7o3l72hjGqw6HUv0V8myqjUG -zmoBEmkyNnWaBeoVVN6HHM8ezwAeh863sq1IgeF2m9hFzxtSMpEVFheZ+tKhdiyA -WlHZOjrq7/O5KwvgM52AB12rfx8EpG3DhcdCFtM5kg6udZDuR1Cb0V2FrpwdhsXt -7YHxqo7X6NdMK7npw5FZMqyTEZjhzfwd4Y2KYBWMpP8VhrGjcE/rhVfnzKr8rQN8 -1XHgmLENUMHggzBQfJoZeCv75+7+BCh3K4Y7jCmqJYH4L3a5ALRgIBRMAiLYaRbs -/PtF439g0T8KysqxHP5bS1flgdzSRMfP1NXckOKGH4PaAC45StXMjdkSxKoFNENV -chEgitDUop3YtAqhj5AYr5BniguGi3N48BzL9iL1EZF9k5FcVhLXWIcqRmIAAF82 -8ZTQf53OBAMvjhkIyFw5v5V0QpjkEHaphpt0cso= ------END CERTIFICATE----- diff --git a/security/certificates/elastic/opensearch/elastic-stack-ca.key.pem b/security/certificates/elastic/opensearch/elastic-stack-ca.key.pem deleted file mode 100644 index efbe3227f..000000000 --- a/security/certificates/elastic/opensearch/elastic-stack-ca.key.pem +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -dMdIHxLxLUPZLqYL3J5r2XWFouz3zw== ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/elastic-stack-ca.p12 b/security/certificates/elastic/opensearch/elastic-stack-ca.p12 deleted file mode 100644 index 41339280dd65cfaa4f70e02126bbea38efa91fa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4450 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 Xt=xea6Ocdz|CaZnvsM0|OYr{yYWPX4 diff --git a/security/certificates/elastic/opensearch/elasticsearch/.DS_Store b/security/certificates/elastic/opensearch/elasticsearch/.DS_Store deleted file mode 100644 index 6e242136ebe4aa2aba9b307c145a00b3799cdb1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%}&EG40c9=jtQ{?NIOR2I>gvu3~{N-cmayw0BE#qf{M~iYsU@~QqS;0JPFT( zon#U)e#C*FK`c3+lh|qVsZMGDU~a#?22cb585&;kCf7(IgfmE> z1OAw|888eO27Vg@l)DR=W-o47}7&`-$uKj;OaUL==o{KR5_GgH~~IN5rWg#+{xF2-_WWIX(>Iwivjg zAGZ@3>!}GlZ|7UZ(r~y@ZTIzKllb!H zoecwqfiGo%&IgW4=xEFo%A*4tSppzhI4lKiswF6fYjiYb3ULO7sZc}}%5;grR5*@v z?dNFB6smAwy7*xF$xK%$OgmDCS2%(qJ0H Iz_&8+2ol=aUjP6A diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/.DS_Store b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/.DS_Store deleted file mode 100644 index ded5b09f9ca93faa01f3bc1a32a409500cdbe9da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 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 Udd_<0*?@CQjwM&~|9A5K7v4Zm3IG5A diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1-truststore.key b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1-truststore.key deleted file mode 100644 index 99aab0b1adc4845943fd85ca385fb4b2548395b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2374 zcmV-M3Ay$#f(b$b0Ru3C2&LNQU+thDZTr0|Wso1P}?C(l%&|hqqY*woWIyQ-FYi2tXqZ1j+HAr~+Cgwx$iRdJJ|2 zzNG_{%zAX&iup-}a&<+ru#9Hq`<#b;`zOf0R`XCoMZUUF`g&@JWn{SzRq2Dh6ALMA zq`r}!cyU7W%|eEsduTf}(%pi7JrsdEAWOnm0;zeHSRX)9*F~F*75C55+I{{-8wL?1 zm0~2M3yc;rwfrX43vBN~)SOWugSGqymqpD1*8L9SwREFuEa@D&p+42%HCGS@4MCgl zAt~0znmAPx_Gjysk)bAgzafFhNstnfdTu7PdnydCv)429NH?;Xq@#pRdWbAYk=gR! zx?_`V@bWV45)aBKiJ!c9^4j*(U<-Cj4z#VDPHZ}JnPvH)GCNAw2*6WLBB_laXoij_ zG2kylchApesZPb40y2!pu8AuptxBwsF)O&znh@pKfDv}KNvLtQ7Uar|p>&f_VpmR zktTDf!zo4LO&rNBb8%8^?KwCbJ^)68^jU)}=&!U9q0#>5wtFv}WF!V>m z7wL4U7hoJ8TW%tj;7^l9W4di{Yo76B2Ut7b*V303UAI8#EB{>8;K9#uVzvBkzj`*} z-?Gyf^C<4jKF7QYROfB4>%pbm$GnU)shwBKl|$IR=NqN~)@7W4xeu;nJX!#TgbRe)z%-4?&ZpvNO#R}l=PRyb2}uCNUpl1 za8y#O-RyGD^_cs--afeN5yjnJ+e!62tz~LS$rPOSBlJ?@J|g1f7Rr~LSYWwrU_t@1 zmoLY^qu66jjo`U_;mtL++Ceo7URR(3J)S;XDETVXlz;W#Y|WoRR-<(NIg{DJ*LGjXWRo*_s)}F^#<|EB zx7Z&hmZUIN|84&aJ-imovH)XD>=^w@SAXkn<>J{_q*%;*luh^N&mA_{kv#H*Ae8JZ z2@6Z;Qd`$}D%j{}m1KcO9F3}5jn%gUC@MmIaqU}0A5C{5a1NeEDz~k4#9gf0hS#?gf~h_l4#NxC{)P@|iaEuSVYc>6GRH z^I1|Usd}>QhdboH4;aaROpb`gM>zyokj1PhbgK8j5pSubng76sgR(eyeT$Zv`%M7elSaJ(-8mezFFHU5XddE4D5V8Yuytm z=j_1zWR>>iIWEdVoui^9u`Gh@()XC0CZF{5UiY*9-;=z`MS~41G7dTAu=H}vjM{xuU8!F+dAF54 zOle53-`wb!LRz!zEJ0#?A>>w!iP)ex*TfD<8=?CuJj#nTvgiv`Vp51bIqFzjN;Lro zpK`yAJhT`htK63_I!Ts5V;H5e~R?ljFYrIN#7sI5a$Q>DPYa@!~?5u)WZd=(p|? zFB&aw<#N%$)3OZh+q+d`-Q+Mt#EXc8q;D5_&JQn$%RyxeBXJ6dae+P$?1rSWp!jUv zchkLC(HVsp`A>^wmpw2|FflL<1_@w>NC9O71OfpC00baP6qudyHd$$0j(Zl6#H^RZ ssJ4UXb%lwI5_6EdJXiJv6z^xc97=iWcgAh+DjkLYJXYMj=mG*K5dHptRR910 diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt deleted file mode 100644 index 11bad3560..000000000 --- a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt +++ /dev/null @@ -1,44 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIHuDCCBaCgAwIBAgIUL8Q8IkSbyOkamFbESVZaIDKbbWIwDQYJKoZIhvcNAQEL -BQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkGA1UEBwwCVUsx -ETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazERMA8GA1UEAwwI -Y29nc3RhY2swHhcNMjUwOTIyMDc0MjUyWhcNMjkwOTIxMDc0MjUyWjBrMQswCQYD -VQQGEwJVSzEPMA0GA1UECAwGTG9uZG9uMQswCQYDVQQHDAJVSzERMA8GA1UECgwI -Y29nc3RhY2sxETAPBgNVBAsMCGNvZ3N0YWNrMRgwFgYDVQQDDA9lbGFzdGljc2Vh -cmNoLTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC77VBMs4jxTGf6 -Bjn6I9aAFxKdUAkgM6sFnI4QOipOmP7i4pCdrXB3NQnyasVvOkkFubd0noQnsA6C -nh141NDP1ZCkR6Q6EUmmvFCGOOY321fg3X6AtKNwv7hAq1CZPHSVTE7hsvqSHK6Z -cVg5ViAl6OFBKrxW7tE7lxRjWDYQDCGvxdYH5CzwGBFaeTBVy7FTVasvPO2P59Ca -LeD0QHxeXQb47MqXQ/LSVqLBs29MeqL5R19bbJU8tjT2DLEoq0qFe55tjmecGf5I -0obwPvV1uEtRMkivMpHqpKcXHMgyB8ZFjhN6cPuekhTrrAPnyV298aoz1sTL6/DK -Ye0vmHo9BvZJf3eeuY/7yzcDE3ugE0VBMqtTzjbUKk8/OtuwvVnrcyz5tD/t76uZ -lpOlf99Iuhp8mOuzKlOI27QjHgeA7OxXeaedAAK7RSHIPLYza13z8VonEW8zVlzQ -5mYbXJtytERXm7wNRv7Pv0V0aIQQ6PebfDwE4dxy1lSZWLu0GLdiKyyZWJLLE3bi -CFeX6gXuBsiVlU7KsAWwKuTlDYyScVkcj6l3pr+TS8N7vO6CjtSHrnxdl6wMGmPG -wg8/nf1I/OCjaSbPn9TFFEvcD3Wl8eXuJCL5Dkh79Q1KKY3PukpheSzCUQXZ2L4/ -B3rUtZoM4x06h9EWRdAy6sDDEPkqWwIDAQABo4ICWTCCAlUwDAYDVR0TAQH/BAIw -ADAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC -MB0GA1UdDgQWBBTRlqavQU6H/73QDvtAh+mnC4tASzAfBgNVHSMEGDAWgBSm1V7P -Kxv7a9va6cHaZEVs51lmUzCCAdQGA1UdEQSCAcswggHHggRuaWZpghJuaWZpLXJl -Z2lzdHJ5LWZsb3eCCm5pZmktbmdpbniCD2VsYXN0aWNzZWFyY2gtMYIPZWxhc3Rp -Y3NlYXJjaC0ygg9lbGFzdGljc2VhcmNoLTOCC29jci1zZXJ2aWNlghVvY3Itc2Vy -dmljZS10ZXh0LW9ubHmCFG1lZGNhdC10cmFpbmVyLW5naW54ghFtZWRjYXQtdHJh -aW5lci11aYIdbmxwLW1lZGNhdC1zZXJ2aWNlLXByb2R1Y3Rpb26CIm5scC1tZWRj -YXQtc2VydmljZS1wcm9kdWN0aW9uLWRlaWSCD2NvZ3N0YWNrLWtpYmFuYYIPY29n -c3RhY2stY29ob3J0ghhjb2dzdGFjay1lbGFzdGljc2VhcmNoLTGCGGNvZ3N0YWNr -LWVsYXN0aWNzZWFyY2gtMoIYY29nc3RhY2stZWxhc3RpY3NlYXJjaC0zgg1jb2dz -dGFjay1uaWZpghNjb2dzdGFjay1uaWZpLW5naW54ghtjb2dzdGFjay1uaWZpLXJl -Z2lzdHJ5LWZsb3eCFWNvZ3N0YWNrLWF1dGgtc2VydmljZYIIY29nc3RhY2uCCiou -Y29nc3RhY2swDQYJKoZIhvcNAQELBQADggIBAFJzmjUp+0I5XMOJ47U+JB3q8zkX -b4yNWIY/ZAM80jDPTapbYicgQdbqbKV4j1QI9a9rtiwWbGnYwrYFtvzBEa9BaN7f -AP5J7zcODoPC7Pe2406K/7nNMPZvZrol9np0wi1o3yAIRfHPgHOc1jkZ1qRIK+ub -TiADg0uIOMrM/yaoqMkjABsS8hzd6x5HRCkD1sAJsPsrRh6WUs7cWeqv91U1gGWM -vNXRbL3rypRWR8OjudanSJfgNMUEqGmXQv9K0P3AI/q7dRkPza6s6KlednkMy8D6 -7aRluZbNgOYQ5DM8yZFpwzLWt2gsiu3bavReD4M+KpyI7F3+L4Gqjlk5AN7ACjY7 -LcUenqSHQuAUmIu7DSX+SvIPHaeq6Wp2ncZKQ1R2TJXoz2Gh9X48danDzRQNhRDD -/VPCIUli06a8Y/sVjfAj7l7FQWLsmU0bSVfqkSj/aPNOp/i3UqaaSntznZB1Ji7C -pa0gQIie9ATiDd2CIhI1t7+3Anfu6UU5kXyuDsKPLFmU1J3PNcBjNV5xg2EiRui/ -vD6BSbAHudENl57VqdaEsrdq0wVR7TvJbHe/lHMQiGWsmCMSpxQxHQyiNBOtUWSM -bI8SNFRb0esy3zcNzmWKDBjST1Jo5elWeLjkQXBNGns8Ij5XP1FlL7k9Z8T5WZdO -BKVV27jOnOo0k/W/ ------END CERTIFICATE----- diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.csr b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.csr deleted file mode 100644 index 70e50ff99..000000000 --- a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.csr +++ /dev/null @@ -1,31 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIFZTCCA00CAQAwazELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkG -A1UEBwwCVUsxETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazEY -MBYGA1UEAwwPZWxhc3RpY3NlYXJjaC0xMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAu+1QTLOI8Uxn+gY5+iPWgBcSnVAJIDOrBZyOEDoqTpj+4uKQna1w -dzUJ8mrFbzpJBbm3dJ6EJ7AOgp4deNTQz9WQpEekOhFJprxQhjjmN9tX4N1+gLSj -cL+4QKtQmTx0lUxO4bL6khyumXFYOVYgJejhQSq8Vu7RO5cUY1g2EAwhr8XWB+Qs -8BgRWnkwVcuxU1WrLzztj+fQmi3g9EB8Xl0G+OzKl0Py0laiwbNvTHqi+UdfW2yV -PLY09gyxKKtKhXuebY5nnBn+SNKG8D71dbhLUTJIrzKR6qSnFxzIMgfGRY4TenD7 -npIU66wD58ldvfGqM9bEy+vwymHtL5h6PQb2SX93nrmP+8s3AxN7oBNFQTKrU842 -1CpPPzrbsL1Z63Ms+bQ/7e+rmZaTpX/fSLoafJjrsypTiNu0Ix4HgOzsV3mnnQAC -u0UhyDy2M2td8/FaJxFvM1Zc0OZmG1ybcrREV5u8DUb+z79FdGiEEOj3m3w8BOHc -ctZUmVi7tBi3YissmViSyxN24ghXl+oF7gbIlZVOyrAFsCrk5Q2MknFZHI+pd6a/ -k0vDe7zugo7Uh658XZesDBpjxsIPP539SPzgo2kmz5/UxRRL3A91pfHl7iQi+Q5I -e/UNSimNz7pKYXkswlEF2di+Pwd61LWaDOMdOofRFkXQMurAwxD5KlsCAwEAAaCB -tDCBsQYJKoZIhvcNAQkOMYGjMIGgMIGdBgNVHREEgZUwgZKCD2VsYXN0aWNzZWFy -Y2gtMYIGa2liYW5hggxtZXRyaWNiZWF0LTGCDG1ldHJpY2JlYXQtMoIMbWV0cmlj -YmVhdC0zgg9lbGFzdGljc2VhcmNoLTGCD2VsYXN0aWNzZWFyY2gtMoIPZWxhc3Rp -Y3NlYXJjaC0zggRuaWZpgghjb2dzdGFja4IKKi5jb2dzdGFjazANBgkqhkiG9w0B -AQsFAAOCAgEAh4ZvejS4m3RFQip5ikXEGVyzE1HHgFwB4OXlzFAESKP7SarmZN5Z -06QA2jV5QGyH5FePAEjpok2eMrC4gU+wyXA/3+aVaiGqHMpqSg+jx+JrnVsmGYTA -Hkl2xPX7REns7gGZsrvH6jfQ7OHuEPa8e66Cdm7Q+eCio3Y072tIFGjh8rfIb5lV -xA9fQE0YmGd+I7Pe13SC//NJgDI8JboLMqtpoXr5pKVcp5VQXeDlFlb+utHldYdC -GPLPi/u0A06exaZST+YzLmgR/iWSXF17R1D1eh54wlRBRsR5UHFfheIz+D3fjXrE -ED8dt/khaFYEiCg/paviEciUfFykRqC/zhoPYgUeLxKs6cTHVKHmZMpFkx5n0KCo -bYS27FJnoZPt2OPCtebo2uZVSaYOUJDwfGniDeB71eIT2HXla5QSnYYds3L51cO9 -XBZ5FPOcg0+ksPgKzA7R0PyVgDg1XsX4OkJ2QUEn/G5pMJV3SzR9jWorYnV21xig -Qia9NIi7V7p5tqczz9PF2x1djZiR8Jaj5hWWqkf68CF5zZbgX72+fmo5bFFKuBz9 -uoQCbDu1Ny07Q8MJXp5A+Fm0AizmwCG0kuH3k3WFzdwara2MgLV4kuOYcr7pud24 -dDDtn3RTBKJ1bpXr3rA6VEV4f56TFjh6yytnW0GyV8Aclm5XGOyxPfQ= ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.key b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.key deleted file mode 100644 index 20ff2c4aa..000000000 --- a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -oxwC3+V1ZuQXi2jhCBlAAdvrWM7R7A== ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.p12 b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.p12 deleted file mode 100644 index 5e3737b5256baddb55a859882e74f28d10dafff2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4994 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 diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/.DS_Store b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/.DS_Store deleted file mode 100644 index 5f234ace0b98dc8003df7369d5c6d45e8618f0aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-veG47N*$ASBeWfVP)wHKz~FKi4s8>*zToRS$Qo!pRFoY=m0_p zRkq~&9N*c=eJ7n`BI5bWdP+1Rq6{iHIK}XV$h>Gz2Id(8Ipw&Z4OMhU&$R8WcE^8Y zK+bMVCC+P0Ep^ZDfmS%j4Nmh3R*AVwn$ROWuhso@v1;nJv!QS2sGFi#R?QMQviGZ- z+1vTY>?hw+H|t-?)0VwGb++fGGvEw314qRGYPLvrrs$(H;0!neI|k%_2vEV?Fe;|2 z14C*7fbtue1h(`N5)%w_!>EWE2x}-%L)lsk)^PZPt;-FgqJ|S&^TGCJwho2U+mSz{ z<;1z7kIsNIu+PAWK8~dRUmx!O_k;Y&8E^)UiUA%Li(-x~S#9lYPHJs{-a#zbZS diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2-keystore.jks b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2-keystore.jks deleted file mode 100644 index e76489416f7053e4c7d33749914a79cc72e16f02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6586 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 Ol;MFyefYml-v0r&mTevY diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2-truststore.key b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2-truststore.key deleted file mode 100644 index e4b8e706d8a8b05cb95e46b667a92db029333062..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2374 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 diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3-keystore.jks b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3-keystore.jks deleted file mode 100644 index aca7fc48433aed1e9253fcbda62d1a782f61174c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6586 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 Npjin2?!Qjn{{mxLRd@gZ diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3-truststore.key b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3-truststore.key deleted file mode 100644 index 9607c33cd1299614c606e40d1ec57fdd003cc094..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2374 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 diff --git a/security/certificates/elastic/opensearch/es_kibana_client.csr b/security/certificates/elastic/opensearch/es_kibana_client.csr deleted file mode 100644 index 2d7f90d7d..000000000 --- a/security/certificates/elastic/opensearch/es_kibana_client.csr +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIEpzCCAo8CAQAwYjELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkG -A1UEBwwCVUsxETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazEP -MA0GA1UEAwwGY2xpZW50MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA -2koijlf3S8Zecom/NuoRO16NIq3ZzE6dEiGc3JKNB2bDD20+jEp2oPl9ZeNmLTRn -y0B+lidOYw+c7mgo/4cwH4X9aV8l1sIsfgY1Zr1kiNz8Zl5/ukWbrWdcyxXw5ujJ -M9jFB17rh23JJHXuqAFSGQsR5oy4R75qQs5OYObA7ASaSiK3m/F16qdHrD6Rh/DU -4rJ+g72dCoNAKS/WZDwrD9wtVwffYnCCJThVFXvGka4yUwhH4yl6NdaKSkyicOkZ -dZ5c5lZQMrGV38MR89sI3OUTjnlCXpUwE3WezQY2I+V0ckfWu1gAK3dSyfpFCEU5 -oP/SZiWGc/z7nsfDFpPbIzvET2naejPsjpwegnEhXqOL6c7z7CbKGT7aL4V8Jrlw -fSLLhj3V9ZhdrVH86gEhVB8HpjBmNdD/T5MQVOffItduk0aQYkVoXHE3vmSI8JW2 -T3837067ymEab7dsD2WMRN1KSgTvIi52nzMdYMq9eyR9Ax/kcJt5YbI03KR5AIh1 -/e3CSJn8xUYw23Jo8it5lIFydSxa0FSk7D5kUB4EKQO1BUzKz5tD7/CP1CBQ2nkt -/A/QG7J1Z9cRMFryrowNUxX2zFsvjy/fP5KJDChC3MOPWJvYS6q/8W9W8qG7bP9W -LoPbWXG6kSTxE0jTDsW0AzKD2uQOGqaXozZ6SHcvN4cCAwEAAaAAMA0GCSqGSIb3 -DQEBCwUAA4ICAQChN9MgLakypJbRCD5D2zXslBwYLo5qIAakiNFM0bO87SXgRoeU -f9ZHnFRwbE/PZaPV8ac0uaK8BPa2R6HGTIttnJPlBqVl6gMUAwvMPZaTsamyxcrd -JN4/nALH9pV6LLOi+w0VEGBC5yyYSKhlndQ5kAy40pYFEU1OBH6M0OACOS5mg7ht -hnuH0v04s5AHDXSCQAoyFbFla9s5dSvuAIVCiwrkGg+Grbsg+p4Cuh9fzV3b1KuB -dDM7jIYaa57IPi7AjNSV5I6A4K4lO1jFgP8QfeKTeyWjNViUE0S3C88FSUeHPqmv -8VFZveLfgZR8ngjtAqf9a+iwZIFWOAKTL4rIbwl+cbNNa0mqi5LCoLWJVOlwM13z -jRfjc93/RjhzKFYXtq06Qnl7s/k7/YvEdCcODD6HXCmB0N+Ai7oG3PRps8xlXjZo -NmCAdFEDcK9KFAdIyqtyPxr7NRSynVh7JEL0DDllpLmTsaWtOntg/Ayz4zzmJtuI -lESGq9ZR6iIan2LGxeXl4Sv0HiJR7DGliIqVAXSSen7El8j2YbqE4TkVyQvJVEsE -EZ3WPfL2s5Ntw3iElgPnVUQAaupMD+PrNNDKLjhE6lFGelfz7ySr6fqkZr0dmJuk -6E9CxxY7QLLx/GSYgZKEteeY0qlYCivT93AbvzX1RtV1eP7y3CAdsB+aUg== ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/opensearch/es_kibana_client.key b/security/certificates/elastic/opensearch/es_kibana_client.key deleted file mode 100644 index 45ef74ab9..000000000 --- a/security/certificates/elastic/opensearch/es_kibana_client.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -oTmq8HVmXzW/M9OYd0o1aPivyV8LHqo= ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/es_kibana_client.p12 b/security/certificates/elastic/opensearch/es_kibana_client.p12 deleted file mode 100644 index 45ef74ab9..000000000 --- a/security/certificates/elastic/opensearch/es_kibana_client.p12 +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -oTmq8HVmXzW/M9OYd0o1aPivyV8LHqo= ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/es_kibana_client.pem b/security/certificates/elastic/opensearch/es_kibana_client.pem deleted file mode 100644 index 07dd555bc..000000000 --- a/security/certificates/elastic/opensearch/es_kibana_client.pem +++ /dev/null @@ -1,44 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIHrzCCBZegAwIBAgIUL8Q8IkSbyOkamFbESVZaIDKbbWUwDQYJKoZIhvcNAQEL -BQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkGA1UEBwwCVUsx -ETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazERMA8GA1UEAwwI -Y29nc3RhY2swHhcNMjUwOTIyMDc0MzA0WhcNMjkwOTIxMDc0MzA0WjBiMQswCQYD -VQQGEwJVSzEPMA0GA1UECAwGTG9uZG9uMQswCQYDVQQHDAJVSzERMA8GA1UECgwI -Y29nc3RhY2sxETAPBgNVBAsMCGNvZ3N0YWNrMQ8wDQYDVQQDDAZjbGllbnQwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDaSiKOV/dLxl5yib826hE7Xo0i -rdnMTp0SIZzcko0HZsMPbT6MSnag+X1l42YtNGfLQH6WJ05jD5zuaCj/hzAfhf1p -XyXWwix+BjVmvWSI3PxmXn+6RZutZ1zLFfDm6Mkz2MUHXuuHbckkde6oAVIZCxHm -jLhHvmpCzk5g5sDsBJpKIreb8XXqp0esPpGH8NTisn6DvZ0Kg0ApL9ZkPCsP3C1X -B99icIIlOFUVe8aRrjJTCEfjKXo11opKTKJw6Rl1nlzmVlAysZXfwxHz2wjc5ROO -eUJelTATdZ7NBjYj5XRyR9a7WAArd1LJ+kUIRTmg/9JmJYZz/Puex8MWk9sjO8RP -adp6M+yOnB6CcSFeo4vpzvPsJsoZPtovhXwmuXB9IsuGPdX1mF2tUfzqASFUHwem -MGY10P9PkxBU598i126TRpBiRWhccTe+ZIjwlbZPfzfvTrvKYRpvt2wPZYxE3UpK -BO8iLnafMx1gyr17JH0DH+Rwm3lhsjTcpHkAiHX97cJImfzFRjDbcmjyK3mUgXJ1 -LFrQVKTsPmRQHgQpA7UFTMrPm0Pv8I/UIFDaeS38D9AbsnVn1xEwWvKujA1TFfbM -Wy+PL98/kokMKELcw49Ym9hLqr/xb1byobts/1Yug9tZcbqRJPETSNMOxbQDMoPa -5A4appejNnpIdy83hwIDAQABo4ICWTCCAlUwDAYDVR0TAQH/BAIwADAOBgNVHQ8B -Af8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQW -BBTPQjhg/9XkgyyvL/aH46TvRdBajDAfBgNVHSMEGDAWgBSm1V7PKxv7a9va6cHa -ZEVs51lmUzCCAdQGA1UdEQSCAcswggHHggRuaWZpghJuaWZpLXJlZ2lzdHJ5LWZs -b3eCCm5pZmktbmdpbniCD2VsYXN0aWNzZWFyY2gtMYIPZWxhc3RpY3NlYXJjaC0y -gg9lbGFzdGljc2VhcmNoLTOCC29jci1zZXJ2aWNlghVvY3Itc2VydmljZS10ZXh0 -LW9ubHmCFG1lZGNhdC10cmFpbmVyLW5naW54ghFtZWRjYXQtdHJhaW5lci11aYId -bmxwLW1lZGNhdC1zZXJ2aWNlLXByb2R1Y3Rpb26CIm5scC1tZWRjYXQtc2Vydmlj -ZS1wcm9kdWN0aW9uLWRlaWSCD2NvZ3N0YWNrLWtpYmFuYYIPY29nc3RhY2stY29o -b3J0ghhjb2dzdGFjay1lbGFzdGljc2VhcmNoLTGCGGNvZ3N0YWNrLWVsYXN0aWNz -ZWFyY2gtMoIYY29nc3RhY2stZWxhc3RpY3NlYXJjaC0zgg1jb2dzdGFjay1uaWZp -ghNjb2dzdGFjay1uaWZpLW5naW54ghtjb2dzdGFjay1uaWZpLXJlZ2lzdHJ5LWZs -b3eCFWNvZ3N0YWNrLWF1dGgtc2VydmljZYIIY29nc3RhY2uCCiouY29nc3RhY2sw -DQYJKoZIhvcNAQELBQADggIBADhNB4E0uA8h+xEC5niqNucwcvDa1qWwx5yTpLO7 -B6UnX9XYqSQkycIVs1b+5yXAepTPSl3l4tGA4qrzOeDQ9Ay8O671jdK4EmmWH3Ut -Z0QRaoGF4oPfmY/jPteZJovSCkxbRv1LgcUI0s2Vzvr4wBEwN4S3U0+Qo2gZ4bYf -EAem63wZf8h602zGYLGzmO1/fafiUHZljjDVzgjLkj7MxuCAiP9nxHgTz3ml03Ug -cRYhx+BeoOtXvtUFlIU2uqsI2qke40IXHF4LeVPOr8soVVz7Q7B7xTtS2IOHzCEK -fsoTVGpPngTo3Jp6sppxGjiyRoqd32wFZLHwfph0+sxD2+oEbQSUq6Kkv6IPgbPe -gXVWyN/cIcI0ur9G0fDJvh+qrgRPhw/Fe2x2lDUMgNAwx6Dg12PJurR1sc0+FQYD -u5DempSDAKwTeFKIil/Ml6WeWJz/I7oPv+wd6Pe/dV1NgbspqBm0kJX2Dc/zmckr -PI8EYsZHCP6YB72NjgPNPHwq93FP7d1DKh+dlCcRVtIdrvb7QiqkjcYPmOnyeE4P -7bKYEK5UCc/WRi60hrYksld1jm+hqUlUr2hlOn4CvGXZOT6myeiBDJuU7Kekdzv9 -em2A9ninXwto86/4Q4bNVSq6J+f9nmC5PxeEXY8aibMBwuRfm6/JV6sjJt6UAbZC -KGPg ------END CERTIFICATE----- diff --git a/security/certificates/elastic/opensearch/root-ca.key b/security/certificates/elastic/opensearch/root-ca.key deleted file mode 100644 index 3cfab61f3..000000000 --- a/security/certificates/elastic/opensearch/root-ca.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -Z6gbkBgcdD3r5onaZFgwG+bzQG1EANU= ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/root-ca.p12 b/security/certificates/elastic/opensearch/root-ca.p12 deleted file mode 100644 index 02bdb2ff510ac7238003375b309d5b0363c617c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4500 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 W{iCm+2_o3^aRXyhd(i*A1^)wvvuqv! diff --git a/security/certificates/elastic/opensearch/root-ca.pem b/security/certificates/elastic/opensearch/root-ca.pem deleted file mode 100644 index ca87d21ad..000000000 --- a/security/certificates/elastic/opensearch/root-ca.pem +++ /dev/null @@ -1,34 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIF8TCCA9mgAwIBAgIUKjOOs3bZuwrXfvr/et7D3qA28U4wDQYJKoZIhvcNAQEL -BQAwYDELMAkGA1UEBhMCVUsxCzAJBgNVBAgMAlVLMQswCQYDVQQHDAJVSzERMA8G -A1UECgwIY29nc3RhY2sxETAPBgNVBAsMCGNvZ3N0YWNrMREwDwYDVQQDDAhjb2dz -dGFjazAeFw0yNTA2MDUyMTUzNTdaFw0yOTA2MDQyMTUzNTdaMGAxCzAJBgNVBAYT -AlVLMQswCQYDVQQIDAJVSzELMAkGA1UEBwwCVUsxETAPBgNVBAoMCGNvZ3N0YWNr -MREwDwYDVQQLDAhjb2dzdGFjazERMA8GA1UEAwwIY29nc3RhY2swggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCeBNNigXZbVnTqyY2DDiCRfg/avAEGFl3X -RWzzCaj5wETecom7cVtuXOZGv5qfVw4dEbZ6Zl5EMPGYDkhqkoe7X087Pxor4Ltf -VdMDoareG0/G1ItEG6p6g2OFAiuMbfF+wzjJF2LMQdHxvRukMD59tubaPQbsMti1 -eY0h2DKTIYBG3iGtWSFHUsGKXr4moW2wY3cgLfo+tfjTVfOFf5csmi34d/VLFlUB -hQeiZdpx60E9wz5YDn5Gx6sBRwjQgxOxBuSGHukzr/hIbyz5m6mkD7+BteUlNhjg -PLhGmXm+41WbvksHoCMIMqnqtrGArDmu2TPTBSWgXclDDLHPlxaqctIDHWEJulYr -RtNar0Tzd6+1NiKEbpfsvJu+GmQT0A9isCrw2sHqPINaQ07iFXZYRZvbqSbHdorc -e7rcfOlOdpG7/xYqfNLipJf/95uk5xPAaK7E85apd8JUBUGiNRhE9VxeaNoMq8ag -7A5DGs6Od0hrl9oIWbxNMgPH3Af9PLCsjcj1MlzRA5wYZV3sZJxLTdW/4Q/FQSEH -tv2VdxX2tV9zIkj2McqnILmFQ17XBEFSP0/d4SXmZHMZrk6utT0u0SzJaFmqpjfo -GyZvb/VgUkvztNsi7vXHfvFMI9zQF1BaRVQ9ZlAeZI4S0XbcmqEZUY928fFtTWyg -ZC0j2JSgCwIDAQABo4GiMIGfMB0GA1UdDgQWBBTA46ItFLAFmhe6jYOYBjTsvxVJ -TjAfBgNVHSMEGDAWgBTA46ItFLAFmhe6jYOYBjTsvxVJTjAPBgNVHRMBAf8EBTAD -AQH/MEwGA1UdEQRFMEOCBG5pZmmCD2VsYXN0aWNzZWFyY2gtMYIPZWxhc3RpY3Nl -YXJjaC0ygg9lbGFzdGljc2VhcmNoLTOCCGNvZ3N0YWNrMA0GCSqGSIb3DQEBCwUA -A4ICAQBPoP6SXL2b5gMcJgRg8klQG0V/uxYaVEe58l/MA2GXII/RQYMZvCphkc7V -FMAz+lLS6iSvXodeyIIhQXkj3YHcPpRUAIQRYzI/WZxYjwwUSf5LmX8Sk1RFfhHw -62Y00CjI5bmVROufp94Rw3wRkfXQDn1LSORwNw8zqArZLFvDAnmOpfDyRpcSPSoW -y9agmGxArNOWC+zMFKszW1IAEDaig0EfSEeLjL574HL5H7s4GnD7T46VPwf1vuVP -73sm6BwiqKbm1vAr4foSod9ySZK1s9EbNq4o8LPFXA0YRpOno9+4cOkDDHq4HEBR -XeHa2G6fy5KugotAAJX1lFTJNrHxTWELqNENCDuSO6jkZ4tdRQ32wK2XofYvFIHk -m6u04rKtey/+GkevxuXZfV/FoBVeMQq0jI6CWLTZYYov+UrXWhu4pXo4HRUg3rD7 -+xp2Xx8CB091gNMSmzvUm4Cr85BZlYulyJR/+v/NKxVSrtSfKZhXHpuzd5ySbL1S -ElB8VO+5mCRH6br/Pf7rTMxCuhyJ7NGHjSnnPvDM0tx2CKTjPyn9x37y9/54ChEV -0/Xe7Cn4wE5I60IxbzutTzE7u+7xxeTAZG6lOKo73cb1cMW7LwU2tDPc2BtISlIm -Z2akRDgwyR6mTF4jmOAluSntlMUI5B9kyOamt1GRECXo52EvIA== ------END CERTIFICATE----- diff --git a/security/certificates/nifi/nifi-keystore.jks b/security/certificates/nifi/nifi-keystore.jks deleted file mode 100644 index b059a7f4cca820f33df75452988af75cb7198ab7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5012 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 I{|9mY3&gWL00000 diff --git a/security/certificates/nifi/nifi-truststore.jks b/security/certificates/nifi/nifi-truststore.jks deleted file mode 100644 index 872308ccfd2c4555636a7bcd69dbf6fbf61d6e46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2390 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 I@B#uS5JV+)EdT%j diff --git a/security/certificates/nifi/nifi.crt b/security/certificates/nifi/nifi.crt deleted file mode 100644 index 79731aeeaa1a198ce06ae146e3b5b27d0dde83a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2025 zcmchXeN+s47{_;JU)tKu+S<01yez#)Thl6ZFDiMt8&PO4dE04s+Z}DQwL7&XDwA~8 z4N=}gh|0-JMV+f~Yl{d;uctUz>X1;;5!Th+s4nht|GfXqneXTO%ro=+<~d&oH|T(H z^6jHU5CB1zbJZ-)yv*yJmiq-&d_mv@US{Y9$e3d2uiU;!am5$V6Av5 zuIw#c9khB}d}ZGldFrxjvZ7UOXUuf|_2U4u&N0~~$FO$78ug+JQA=w~B1_z-CXT^p z#fP!#>w@d;JS;k$+MB#yHg39<bMk`URS$ z1zkc7!LK7DJHX0*<4Hg3y_ON@ikQCPny8uNx6dl-nx8(nTw?2dzoF++-Hy%2JA~ba zPxds2Lw$y%FzxBKoZbL?nBo3vae55-_qZ2Lq_?G`bBkkIKCzZrZ9XyMwt5ARogVkt z{iP~vbYteq1efRhrrP}tnd0?A$Ce0-(_!8Mbxkr|q>X4sR+Mz6qn8yqub7U{x|VP< zZdn9^(UL~4Q**Y7+R-_#Fu7;I|Fk8adMkl7;J+v6et4|;D6My5_Q0FQME?)hHfT}` zWobphNypzTNu`zp(zyvpe0P7~`s+dBO%4XF^C&iUDX+AfY^EICm%`@nQyUsAF1x)h z;LPQNW4CXn%Zgt-DNUei+JFhBw! z0yJt+F$NWh2$GLN)`QxH#D-WD>Qo9qCL0iekvmY|fI3*fB;mjSgabO9gd)KRZZde~ zDkV}xg(;)C!E%KfH~xm3=yd$uu>%Bx_l3K--Bs5O(9ZpRT5<+ zB9h={UkNTIiNd%FR3449LM37mjBzm~jGz)F_sh$e-_ZyJw?^e*+#x*FlN+W~h$BQ8 zqCj!Zf7)EJ1QFwm;iTY(AVDw+e+5JenL>%-79$nkPx~W>_rqtV;l?A~J|DR0H*#oF zt8d}Azr$?Agd;H7$We|Y9&Y5|G+crk$`vA5E>ozmBvKrK0BkXV#i0o5Ib7g`O0X}h zGK$0|u_{wMqGCOGV4tU;8WvbS6tvH_hQ<#r$|RBn#Exf~F0>n+sV?W!q90&ACS;EK zSZM6mk)=;;ePjWINqtFEl8f4pPdM2;JC~mLY|Xn5Zx1g#oxG;)Mv|^lD0uAQTfxt_ zv(WZNOs5f{K|0Bs@4vjToaAAfWm9Id{a4KO zj#FbOb1df6)BRo*O-#+9F%v~rwysn%r#+}~dds|3^h37Yb;9zG)n_Y&Vb&MCfeT#k zm4~FB%mZzCS9a%_YM#E8mQFPW$XRjrOLm%zla{;t2&yEi&a~>2SN+0k>hmADbiU?4 z>}z+Gzaj4m8td~u8I#JU*Io2G&)(>BUmi)BLEQ1%pW2o=6&q&nM7OUE>_`gHP~CTI zta|=D__pi)nEKiyp${t)dcE%HSTH#&uh_Y+uIb#}xmS|M*Noc?kg8oXY%a9i?O)Ke zhnLT=Pq*}0V77~^J=MBWy!ce;_<|!|?G?QXr~KjAk#kGBbx|FIYFciU77*jW5B_xE zsEJ+a;WhTM{Qg4cMWPZnPM%Rir_XzX$pg2DKyx)%3CG>Lx%X^Ys#LdpazRMi9OPoH O=H`kmd*h-a*ZvJUStRZN diff --git a/security/certificates/nifi/nifi.csr b/security/certificates/nifi/nifi.csr deleted file mode 100644 index d8ea60ddc..000000000 --- a/security/certificates/nifi/nifi.csr +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIEqTCCApECAQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkG -A1UEBwwCVUsxETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazER -MA8GA1UEAwwIY29nc3RhY2swggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQC12QJ+hjgkME4WmjKVFFTtZMPxultiWx6Aw/QZbI1SxmiyWdqtFftR0h4BFekZ -o7ahdOQAXHdLtHhPyhJ2tjkrhRmCPIBwFNLQZtInPxjpLuTVQe3UfLymSulrUYRQ -3xcIPuswJuF6bmhJFn43sWv7DSIbwDlGDD8EWP578qFAknfO9/ykhxYaACjvGGHl -RLLxYDqnC4PH7xQ079Yo48NVz3Xx8AVgktnrSTCraZxA+JXLA034+0HwsSJdXwnJ -bnWdGb6RIKBCn7t+cqbOJd5FDLMh09OBCxE/AnYG91bCT7DrYMIAUOWVo1UbKHql -UB2WGnWvshFNccJ4OAX26MHQ1ufevbYmL9zT8LzQjn2i5WDvCeOT1nEw9AkEcOGs -2qbxVShhDznuTJR7BYx/7NUE9roQp7V71/4UUht9pDfNd1QyFpR/4jntc58Q1JtY -gzHqSdXOmNObZF9gLNd1GKxwQ1Z3yooMY+F11mlUtumUbr1vpu4RLOjrTiKVzBha -Anll1C0u1qMSdywvf7GK8P9RrBpJCMyDFP9Rk2LccX4XDuFDhaP/89SFUfrGasKL -sWiRsmaHovNOjQjAAWdCg2mA7/daX8hiZHwqB9lEBiUni+7hfCUpmpeLFkmXdwkH -TLvNXlWtvZociX0MaLXs47qRxIs94WlxpOAqQHMzSWyoCwIDAQABoAAwDQYJKoZI -hvcNAQELBQADggIBAEAyySOSGIM9OrDZS6Tyye2bTFHRyOileiktk2Q0Irn3PxbJ -YZJc4tNKIRr70FExhLyWW3zXDzgVXsSFK/maki6xklgC586uImiq5eOwohJoSYtO -ksV/CUgm9eqj3tlQOIc9DLsHJ2hXlEzxnPv7Nl5Pr6h830Rp5i7MGKZSJEY98B5D -l/L/WWYsmPYtZhOJ9YTB3GdAzUQV7XqQJaSqOH1tb7i3rwuy6VP4Nh4XacNvbYA2 -Zt4ydZe3D1hcH2f5WdK7mBWP2mm+2NV05ywHgBBzCL1VZaD6b4NdvUJ6Ci/NbP85 -/LGW82coSZagWuwQnWXKqlr63RCyrfbA4LqF5aqKGDOkQVshdupSYhYXGk7WPU+M -ytcqLys+KZqcVSKXKCoJniJVznkJlj0zLp6/sHBReN6xUveNojpnDtAEK2mC/9Uu -WvcyPxI3rJ6nMwStZMBgtE9yEMFSSwOceAgD0T+ScPZNOtLuM0z4aHKP8XIMLnmV -I4g6rUmb06yZtP8maxXqDrwjxY8z0JjmzkTpIVGd+/YwU9TL3OfdTbUxDsks1S05 -BkGxehQGRBZVVt8XWA0M8+uEhfDAQxhufnA5NyFN1RCEENooaF7WbSRZZiapbhU9 -1IMxbGCzhHDmlOrJHJXJbP8IKuRAikvGT8UUEJSc4CxkdIxMkE1hjYGt3Jk0 ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/nifi/nifi.key b/security/certificates/nifi/nifi.key deleted file mode 100644 index 53b451058..000000000 --- a/security/certificates/nifi/nifi.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -cBzkM2wmX4CT709DvH5BivqKANtQ ------END PRIVATE KEY----- diff --git a/security/certificates/nifi/nifi.p12 b/security/certificates/nifi/nifi.p12 deleted file mode 100644 index fa18568bc717c2b5b6c7317181dcff6df24aae59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4988 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 PxL{;5&!6QxP@n$|bvcQH diff --git a/security/certificates/root/root-ca-truststore.jks b/security/certificates/root/root-ca-truststore.jks deleted file mode 100644 index 8bc587c39f637774e2f5f402d811b0e147df720f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1942 zcmV;H2Wj{)f(McU0Ru3C2RsG|Duzgg_YDCD0ic2hEd+uGDKLTuB`|^qAqEL5hDe6@ z4FLxRpn?YyFoFjT0s#Opf(Hi%2`Yw2hW8Bt2LUi<1_>&LNQUvLUT(W$S+thDZTr0|Wso1Q47j9S4|Ua7Lg{v;1sYi}iql29Q9k|6)@&&@EV$vu1{ntcT3V zMf_;r-0EZTc}2r&P9t~@Ff4dvmK{)jYCc5wkm$Hls|}wgA|088qEJP>c;&TgP6pK* zHzNrH;_Sskh7I{}i@tB?ktT9}gPYX6tL_?Pbm^-wy3R^BF)&mB>8#ruincIH9AZ#^HrLF%B8 zb@3%Rqwm`D@E+27i5=gPfk)%yIY?mg$+iKNC@_g3pFyAaqxL?f>B_2${ER^0O;uNe zBv#n|x(Wpv`5Ctwex?kQ%||4jTx?gMKzCaLqjAC#BF0p|EJK$ zX`;u>Wb>B3!v_z(6i(x#<7h`dFf^!Q@qoB_M-#BZy>y?^q=IZx@JHu-ev2!y_yV1T zWU)($WFL0GkDNqN5({IaN@0Aq2#rRkQ+QZl#d-3Iin2GyfyNL1d9tmSG(b%igoFU@NAtHN@aE6e?o9bIaGI{0G)(!m6HTzMstb*|!?L#tfIOLaOthrmN6&Z(^x0re zGs-GeE*a!f&(;mUz~tUD9p=(H*5>xuptUrUOmIE{?EX`W&*6IN(dd+odG*YgF50gn z>Aaw*t6*8o$eF$R0PDK6K>^nkzJ8}zNeX=uQ2-tO0w}QI)(8!QAo^FD3=q^0MFsLk z;Y>*_uDu`NyWR^>(zW45iHlJgxGxUvE`soMqkt07%?e(DRN+47jUu@@qG1C&aD0`X zIgA6Zs)$G?ik2yK#{*@iaI^7>C*bgif}{SCZWtKEwIiFUsJaeCUq0O$bQ!j5EK)(8 zJ16^_EEfcz)C-JrPY`J<1CNXlFGr{0nL*7-sX3UREP{6+tFLuzCghz;F!7CF~XzMC^L z)*`z0Sw7y?_2t!KXIr!#xrt_FA>rUaqi@J~A103d>}Nmk>_tnXiLx;5T=ayYNC9O71OfpC00baN(XJ!DHD&BkWjBH;ajm8a*{Xf^J=E}v9mPO=C+|xH c6v*KnRUk9#!Ym3#^|a<{0I^kp2m%5p5QiR-`v3p{ diff --git a/security/certificates/root/root-ca.crt b/security/certificates/root/root-ca.crt deleted file mode 100644 index d014e88a89a6097ac98d9ca5a9397252c0719d1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1561 zcmXqLViPrJV*a~;nTe5!Nkndz=kfr(h;;WIstMmV{&bn?mJ~@kUvQFBi@C!V6T@j$WwGUu?p@U_22J%d)-SJHC$CgJ z@p*>qrnl$!@hO~4SyPmucjvFcKaH7Qi%-f6wq7*A+&^_jlSjuZb=A{ZV4# zYI!ve@zTjZcbt)2UO0ccdjBURzOL1i7a^^KfRe{UTCVvrP z-dG%9)A1wh#Nq=gF*7nSE^gds(74+`7MRdw`B=nQM1TVNLrai!a%G6y8=)~krifS{LjK_zzn1e_&@^uAORL&?qoBF z0PzJ`0uB6|Sn@K{GMo5Qa}tY7GLwr_6N{2FbPdr3jL-#)o8Z~7iAzflmL-vsI539; zlQ<*8(q~s|W4I(M9y3n*`+WbEM>m;sZ@R3JELAb;zTLYo#iY~ldQ@ZAk4SAUVblR0WyZkurr+lzku#m@1zt+5I`tirw+^>$Zw)x)^Hc))Eo3C`k zi-3#QzH2#}E43|=`BqiSVWa}H5$V2msggT-H z`fShVI|ZkSY0WtNuE4Y=lIN31k<;xNCl<0R%&$L@%-(wJzK0c8?oQ*!7u#>u)-_(( d=iic9ol?Y`HRH}LU+(oEKYX@v-yiXy5&*O`c9Z}B diff --git a/security/certificates/root/root-ca.csr b/security/certificates/root/root-ca.csr deleted file mode 100644 index 0c78b3488..000000000 --- a/security/certificates/root/root-ca.csr +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIEqTCCApECAQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkG -A1UEBwwCVUsxETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazER -MA8GA1UEAwwIY29nc3RhY2swggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQC3j8ws2K77HT1KWJA5DKpnHLl0K2TyrHynI2kv8HsPcY+klTH6UBlEE45kjRQu -3elDBjG0oJsD1xTsalVxbsNUSAm+Y6bz8dwyRR/r/U8euio8JlHtMpNvvsJtLrr0 -kEP7Ll2JW3Fr7tgJHqAH08jYQdFYR1BPQa/uLAcYry1F5sN8MoTvZ0YnhIY1G9+G -MAV9USUsgvGoce/kXBroOSf/MEEUivncevBXMC5ybb32fusSfrSh+nScgxaCKV6l -15LjDsHhL2XpmGbsUyHHjdNLX6qaDR+uTrUO1l8CEY3D5khcFfkXR9SSdNgdq2Yg -I6hq3CaFQgU55Ax3dzYwXgwjSjikchlD0EIeJlzcBlxcCTp6OLTCLd0ltDCCf5iv -p36uHyJ7kedoHbLtz74OIMlkrHJoLtz9MP4omUqjyH1+Wt9or94xzgrUASHv3IYJ -1hag+/EYkasfJkgXdZP5uMwZp3GflznUJxEYDtMsjZra6H6w87YWJ4P+HiMLardb -709rkPi79mdihQ179jgDAmd91yckgrq9KI/fNCU+Ho2T20ZoUBHnzD2PLQRzWXmn -A6xyelGnzWP0EgOxc1A8iPhWyKPAJHfN7LDUlw7o0QH+o1pr4YRtIeSuN2hrsVwC -7lLLVDgxA00BFtj4QztSNygekZEB44B16hET8tm6BP92vwIDAQABoAAwDQYJKoZI -hvcNAQELBQADggIBABQFt0e2uyf9kaLF/IJ0GpgP6VjOdkfyiVlYa8kDP1dmbkfb -LSSv5OsM9Tfm4739FjscF1ogTB8jIdITXn/vaCw5aS4tr2zo3PVC1Mnbb2cG3Umy -QkScQf6DW5+TnHHDH0irW15jDOiO+p5Gf6khS6c88/OmzcczRkF/BerH7iP4d8vn -Y7iIRoxEMwc5eQQ6NHsu4FA2USs2PDIbEw5rajUDgcL0ktBExoyF4HEmx4hh9U1d -r4PU3achNysBpsvIq8yxVS9t8pJkDlTHbI+x/eFhiQ3OTeWTwQHmah3+IiJbWwbU -qK9OfodtYNw2F7LJh/Xz4fmAPZPQhA7sueDO/8ylfB42USW/zP2r3gO7wT7u5k13 -shNqZ2pZk2SFzM0GwZUONMBa0w5DPUu+ISISBvyqtWUh1VQYmkNTKyI8B8yaFIfX -dvyC3hajaOnuLYipcrueZXyMrfRAk752l8VMFsb+y3a9zOIrOUSPEf7QTDeMNycm -fyPmmuVE66Ji/wo+r9Td30Pc+k30unwNt2vfP1DsWG2+tLpRbof2C2HxQHxbDEy6 -0Cf43QayLh8OwW6YUenuqRXMtj3IVYdauPsD6vCf06V4LAfkFfsLkmrsgiZ1z5/h -62JOlsujvf77b6ksfDgkRXXbsT8fv4Xm0yd2mn3H2NwIGhSnl305+l2jlrIP ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/root/root-ca.key b/security/certificates/root/root-ca.key deleted file mode 100644 index 9d94edc43..000000000 --- a/security/certificates/root/root-ca.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQC3j8ws2K77HT1K -WJA5DKpnHLl0K2TyrHynI2kv8HsPcY+klTH6UBlEE45kjRQu3elDBjG0oJsD1xTs -alVxbsNUSAm+Y6bz8dwyRR/r/U8euio8JlHtMpNvvsJtLrr0kEP7Ll2JW3Fr7tgJ -HqAH08jYQdFYR1BPQa/uLAcYry1F5sN8MoTvZ0YnhIY1G9+GMAV9USUsgvGoce/k -XBroOSf/MEEUivncevBXMC5ybb32fusSfrSh+nScgxaCKV6l15LjDsHhL2XpmGbs -UyHHjdNLX6qaDR+uTrUO1l8CEY3D5khcFfkXR9SSdNgdq2YgI6hq3CaFQgU55Ax3 -dzYwXgwjSjikchlD0EIeJlzcBlxcCTp6OLTCLd0ltDCCf5ivp36uHyJ7kedoHbLt -z74OIMlkrHJoLtz9MP4omUqjyH1+Wt9or94xzgrUASHv3IYJ1hag+/EYkasfJkgX -dZP5uMwZp3GflznUJxEYDtMsjZra6H6w87YWJ4P+HiMLardb709rkPi79mdihQ17 -9jgDAmd91yckgrq9KI/fNCU+Ho2T20ZoUBHnzD2PLQRzWXmnA6xyelGnzWP0EgOx -c1A8iPhWyKPAJHfN7LDUlw7o0QH+o1pr4YRtIeSuN2hrsVwC7lLLVDgxA00BFtj4 -QztSNygekZEB44B16hET8tm6BP92vwIDAQABAoICAC6qBzE1apJa9gxS5GMkZaNt -6XVvXKvWjp/cwC5YN6iO6YHhDcIBH9MvF4lXVhSuBFEuH2+4ToAU6vRI+eyqyExC -PfvhEH2+dAhxizJuhHEeyYLeCQDAVTvYpkukUBHBJQ8TU+MJ1JUoNFJpLyyeOdZE -MSh8hJ2JaOSm26z6R4uYJQULQMEto2eDaKzSp6nQxmx7tvQQW8fDI0WN5qc3dIQK -q9jBldBnjnbTwFMFs/+Yd0EN5fSxm3h4WL4BL1cArQ4836vT5VgTjsKwRYuZ8eec -691azb19s8iQVbnMZZoyDh4e1eKFt7P9sT0lqAIunm+ABOjmhjaX01WBgEyec/4L -7Xjj6YDUjuN4H+HCQdJWx7lqBmL1JJfga6H6J+RLB33Smd5fB76GtUho4XtSVkDi -t2HZeC0gNTwBO4o77Qn1/5ZRlaYO6sZyzQrktoUFEBFWwegCjDcxMHqYiU42uedI -QCaIZ+Uwm66vQeMzMc1Z6OdXO2jZLxHgZXtsamg6e02aTsGwESVjCLV1+0H4tHEq -7a/7VY7cxVAt521wfD79i2MztnAwAWkd8DqsJB2NSUNT6NhOsiYcyAQ42qwaAScW -S/jZuRQVL8Tslt+3VFiVixRwQJHzw6vBEYiLHy4AbX+pWIqjgQQd5xpECMCnKzUa -QGR7Slhw3CD3hWPaEao5AoIBAQDvMTfKPBt8ekcWbNbvjM8dWZEdb1sHR25ULFaD -zD+eNNZU+MNtEvooFtGyXkTJF8ZsQ5RABgBhqB4314pmkyVQjOLXio/Pev4/bYRZ -988IorNsEYQppuN9PGORTHDEYHuUX520xNANM338S9+Hvnwi1W34FJCuVi2YilYE -uDPguizRKRmGH2dfvT7ybJ/XZbOGrop/uaXLfZu8qaHPPOCnbtpPVS/InHf687sJ -oYdaFKmpTnNS2exE1+J2fJPemYBrl7s8QV0Gfg4SmDzTQpWmNtx/503xtGtbad6M -g0ssP70I1Po4fwzhumInqYXsGQEd870eitbDNeOqTGaQ0M4nAoIBAQDEddpMobwV -L2WORNMr6g4HronzYI3q+wWf5iQijYgEAYbPpUR853WFIsvB43ehcLXIoj8GwY8C -LPUF2qQuZdQE3eZsZBReK3ICVzVvKGHiR5l34j3WNUTZuLk/FZ+Wgt2Z/1lcTt6G -MhffRnFmX2Z/b6Lwhn/k6LbQymlizaFylRcUvz9BfM8Y5YAs4QPqrBUb2oFlRGfC -a7NFlMY4mB6+EtbjcrI26SVnSWb7umFkBRoTQk773XoN1+OIlE6LBUL98Kx1jhUK -AK5+z+VLXdLv2k3xAZZUIIDdKGABPacxNuUZ+d/zzDsq3/f2QuhgDPuUHtn/g1fx -rKvxsyCl2AmpAoIBAQC0qzp2uRwR09KqL5/R5Uvz4VlpIFljkCLX1X2ro7VR7JsQ -J66FTtZBPas6zVWrhxfLYugxy9ax7OiWSWoyvGZtB124bOLfVwmAI1rbEgEBhtN7 -h2eKhpJCYEDc2R48VpxBoE9g4WA8+G3rCexXfhwJu6iKwA3ggRuDosoCWphk4HtF -qYOr+UB94lYPitjZO+p0ipX2j+WZZNEjmgWsoVEXZvXjAndLUlSV60+VoLq54e2d -ArK9G/oIrgBSexq+ArgrjLpScxSu+Lvsc61N7XdXywyWV8JaFWsZ60e8XteDHsnM -SAKQdfbm8X9+cd/ES8a6NwbccQZzANtsILVAIVf1AoIBAA03hIUtSFMAikuE89P7 -fhAkPOGjuEh7tMgqGno8nU7vr1se2jmw9KYNTjnwDKdOxtwFlknlEbLqxV0sdWkt -rpLZPtxB62DeeWAQ7+ZXiCZJ/Ngk31Ye5U/kbooA8WiVy0TF+gQMxkmu6w45Vf22 -I1Ylc4fM9KO4yDvJskdUYC0uPIxHxYCpXeFl5zaduL677vuduqDOdlCNIFVpCeDa -0w6kg9Jvb+/jxYFqXcRHqK+q7DMpfdjR8Jkn0gXpPFN7+iLNYzzRXzb6DsM3R0zH -th4uyJmTKsLkIOdABR1wQWQ9NjKGLfvf3Ico5CysGagEl5RCcxYOhwcaP8MV8vdV -TmkCggEAVz7HQTnD68VdAme6RMfcoFbQQxtzIdH/liB2baLm3ckmjSiKbWaYWD6i -Rm9/cCd05k/wppVmzBXpspf/TTsFRKMNwfqyACjrhq5L98SfhT0yvGBAm/lOYPOO -Y5RjqN3Swubf3LRYs7EXxpp4y+tlDdnFHHK8sHlSRYOk27RZvWu+csVjQ34PlPbJ -WjHUVHVAeU346PCtfq8H7tMbASP6sSRR9NzZcoN/YDBQLrvqSvN8q0+JkHwO+5Pq -F1lRYU/Rfhy/Q4N62XeIkMiaScCA5ZZ5KpfZrzvviTTY8ZX4cq7IPKi2mXvQ56If -TKKZAUXRqte/BatPA8QgEPzPdsFKTQ== ------END PRIVATE KEY----- diff --git a/security/certificates/root/root-ca.p12 b/security/certificates/root/root-ca.p12 deleted file mode 100644 index 8b535bb555b1c738e2d7e2d66f5aae7abe54e4b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4546 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.pem - Self-signed X.509 certificate (PEM) # ./certificates/root/.crt - DER-encoded certificate (for Java truststore etc.) # ./certificates/root/.csr - Certificate Signing Request (optional) -# ./certificates/root/.srl - Serial file (used when signing certs) # ./certificates/root/.p12 - PKCS#12 bundle (key + cert) # ./certificates/root/.jks - Java Keystore (.jks) -# ./certificates/root/-truststore.key - Java Truststore (.jks) +# ./certificates/root/-truststore.jks - Java Truststore (.jks) # ============================================================================================================================= set -euo pipefail +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +SECURITY_TEMPLATES_FOLDER="${SCRIPT_DIR}/../templates/" +SECURITY_CERTIFICATES_FOLDER="${SCRIPT_DIR}/../certificates/" +SECURITY_ENV_FOLDER="${SCRIPT_DIR}/../env/" -SECURITY_TEMPLATES_FOLDER="../templates/" -SECURITY_CERTIFICATES_FOLDER="../certificates/" -SECURITY_ENV_FOLDER="../env/" - +# The path is resolved dynamically from this script's location. +# shellcheck disable=SC1090 source "${SECURITY_ENV_FOLDER}certificates_general.env" # === Validate required env vars @@ -42,7 +43,6 @@ EXT_FILE="${SECURITY_TEMPLATES_FOLDER}ssl-extensions-x509.cnf" echo "====================================== CREATE_ROOT_CA_CERT ===============================" echo "ROOT_CERTIFICATE_NAME: $ROOT_CERTIFICATE_NAME" -echo "ROOT_CERTIFICATE_KEYSTORE_PASSWORD: $ROOT_CERTIFICATE_KEYSTORE_PASSWORD" echo "ROOT_CERTIFICATE_KEY_SIZE: $ROOT_CERTIFICATE_KEY_SIZE" echo "ROOT_CERTIFICATE_TIME_VAILIDITY_IN_DAYS: $ROOT_CERTIFICATE_TIME_VAILIDITY_IN_DAYS" echo "ROOT_CERTIFICATES_FOLDER: $ROOT_CERTIFICATES_FOLDER" @@ -50,14 +50,13 @@ echo "========================================================================== mkdir -p "${ROOT_CERTIFICATES_FOLDER}" -# remove any existing files to avoid confusion -rm -f "${ROOT_CERTIFICATES_FOLDER}*" +# Remove existing generated files to avoid mixing certificate generations. +find "$ROOT_CERTIFICATES_FOLDER" -mindepth 1 -maxdepth 1 -type f -delete KEY_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.key" CSR_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.csr" PEM_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.pem" CRT_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.crt" -SRL_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.srl" P12_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.p12" JKS_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}-keystore.jks" TRUSTSTORE_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}-truststore.jks" @@ -69,15 +68,15 @@ openssl genrsa -out "$KEY_FILE" "$ROOT_CERTIFICATE_KEY_SIZE" # === Generate CSR echo "πŸ“œ Generating self-signed certificate: $CRT_FILE" openssl req -x509 \ - -newkey rsa:${ROOT_CERTIFICATE_KEY_SIZE} \ - -keyout "$KEY_FILE" \ + -new \ + -key "$KEY_FILE" \ -sha256 \ -nodes \ - -days $ROOT_CERTIFICATE_TIME_VAILIDITY_IN_DAYS \ + -days "$ROOT_CERTIFICATE_TIME_VAILIDITY_IN_DAYS" \ -out "$CRT_FILE" \ -extensions v3_ca \ -config "$EXT_FILE" \ - -outform DER \ + -outform DER # === Convert to PEM format (text-based) openssl x509 -inform DER -in "$CRT_FILE" -out "$PEM_FILE" -outform PEM @@ -124,7 +123,8 @@ keytool -importcert \ # === Set permissions echo "πŸ” Setting permissions..." -find "$ROOT_CERTIFICATES_FOLDER" -type f -exec chmod 644 {} \; -find "$ROOT_CERTIFICATES_FOLDER" -type d -exec chmod 755 {} \; +chmod 600 "$KEY_FILE" "$P12_FILE" "$JKS_FILE" "$TRUSTSTORE_FILE" +chmod 644 "$CSR_FILE" "$PEM_FILE" "$CRT_FILE" +chmod 755 "$ROOT_CERTIFICATES_FOLDER" echo "βœ… Root CA + PKCS#12 + Keystore + Truststore created successfully." From bc7bcead19a07a340852e8efd498b64acae078e2 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Thu, 27 Aug 2026 17:40:21 +0100 Subject: [PATCH 02/30] Removed DS_Store --- security/.DS_Store | Bin 8196 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 security/.DS_Store diff --git a/security/.DS_Store b/security/.DS_Store deleted file mode 100644 index 4541ca1cc06a9b3ab88146fa1774741685b0bd53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMU2GIp6u#fK(3t_+DYnp|VOcFdVk-0pXcg3LyDfhz*xmk6kTSb7v=gQ?WoLGa zmSQzNDJ1?pDH@IXqKO#e1Bp@JP@YUQ4GGaiqc56>55~W!iJp6Bme4|ZGHP&ca_^aY z?>YC*`Sv^a?%8FGp|fB#GgikKlc;j3E~4fdh0pVPRf&Zo3P6&l z0HV+{JAfq-yAVT131bFx?ri|TWdCJ+Z%->DsWhcDxtnFq==iThMZFzoE(*?xJ$`>rG zkSe4_(u3(ycOvcUe!=V1^ZR)(M~JYky-CL~#sht(C6lg&-7TN)FaHn&VQCMKI(TiP2F?d@$-Q?gXsuyJee@DY2= zaZd(LAv_q^k~vPEx}Jx&SL_NrEUPGac(LT6tSF1MOs21YU|3ZPp4n^Kx^ETDlQcVco^juD9k1Wadn9G~%#vmGiPh^jw6@>X(X;FRnaV1)dZ|*Q3=v?C zZymPG{65{wnT}yOBYhK=;g1d!Ezio@X2#LSOt~5-ZB6o^jK;yt$^Ox+O_HKje+-d2`PM(JEL-OYM{-@xjnIH|sVm-^~lhcgHnlA78G+ zFoKoTs!DCI)+?!>l8tIPMT>|`a0h&r8j`C6CJB!kl1)LcW)8jh#Z}KX&^5J#9bhAD zoK3RF*>mi9cACAx-eDiG^Xy}Gfqlk4XJ4={*|+Qm_9Od={mlLZ15gGP8rEPf)}aZ_ zXu&4jflhQGg&yoi27TzqAP!;#qp)xU9*$!QC-5kqz_WM-ui`bli8FW$Z{t0j!-x0? z7x5Lo!zFx=U+^n_!|$=mSXHbpwlcOhc>h=_Tn1OL!o}j$boe;ypdv zckKMP!{y=<5g<3!)Gk}aqo!?J$7OB>Y%CG*N@@!(&x!!?$%_D*L&O;hqZRea%6K1< z-8?p5?5P!;){@XpD7VDb1r!cJca5?xt}didkY-lYY0H&3MGpm_8WYMJwqx+>?}fe5>T@q`1>{chFxNR zU;!4P7WHTloL!IG(2C92f_A~$6uPk;JMaK{ktXI2;1IIN!Ng&>IEuVr?+H9Y?0pPR z;v`PtDLjMIcmXfsCA^H+iOFZ@aCFyfj^h0FI9g2S9ouzANT Date: Tue, 1 Sep 2026 16:32:30 +0100 Subject: [PATCH 03/30] Deploy: added cert generation make commands. --- README.md | 1 + deploy/Makefile | 122 ++++++++++++++++++++++++++++++++ docs/deploy/main.md | 7 +- docs/security/certificates.md | 41 +++++------ security/certificates/README.md | 21 ++++-- 5 files changed, 161 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 9d7a896fc..384939827 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ This table describes repository layout. For setup and operations, use the deploy git lfs pull make -C deploy git-update-submodules make -C deploy help +make -C deploy init-security make -C deploy start-data-infra ``` diff --git a/deploy/Makefile b/deploy/Makefile index 7cbef661f..42072a19b 100644 --- a/deploy/Makefile +++ b/deploy/Makefile @@ -34,6 +34,11 @@ HELM_GITEA_VALUES_ARG = -f $(HELM_GITEA_VALUES_FILE) CNPG_OPERATOR_MINOR ?= 1.28 CNPG_OPERATOR_VERSION ?= 1.28.1 CNPG_OPERATOR_MANIFEST ?= https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-$(CNPG_OPERATOR_MINOR)/releases/cnpg-$(CNPG_OPERATOR_VERSION).yaml +SECURITY_DIR ?= ../security +SECURITY_SCRIPTS_DIR ?= $(SECURITY_DIR)/scripts +SECURITY_CERTIFICATES_DIR ?= $(SECURITY_DIR)/certificates +SECURITY_ENV_DIR ?= $(SECURITY_DIR)/env +OPENSEARCH_CERT_NAMES ?= define WITH_ENV set -a && source ./export_env_vars.sh; @@ -95,6 +100,123 @@ load-env: ## Load variables from export_env_vars.sh in a subshell show-env: ## Print sorted environment variables after loading export_env_vars.sh ${WITH_ENV} >/dev/null 2>&1; printenv | sort +init-security-root-ca: ## Generate the shared root CA only when it is missing or incomplete + @set -euo pipefail; \ + source "$(SECURITY_ENV_DIR)/certificates_general.env"; \ + root_dir="$(SECURITY_CERTIFICATES_DIR)/root"; \ + if [[ -f "$$root_dir/$${ROOT_CERTIFICATE_NAME}.key" \ + && -f "$$root_dir/$${ROOT_CERTIFICATE_NAME}.pem" \ + && -f "$$root_dir/$${ROOT_CERTIFICATE_NAME}.p12" \ + && -f "$$root_dir/$${ROOT_CERTIFICATE_NAME}-keystore.jks" \ + && -f "$$root_dir/$${ROOT_CERTIFICATE_NAME}-truststore.jks" ]]; then \ + echo "Root CA certificates already exist; leaving them unchanged."; \ + else \ + echo "Generating the shared root CA certificates..."; \ + (cd "$(SECURITY_SCRIPTS_DIR)" && ./create_root_ca_cert.sh); \ + fi + +init-security-nifi: init-security-root-ca ## Generate NiFi certificates only when they are missing or incomplete + @set -euo pipefail; \ + nifi_dir="$(SECURITY_CERTIFICATES_DIR)/nifi"; \ + if [[ -f "$$nifi_dir/nifi.key" \ + && -f "$$nifi_dir/nifi.pem" \ + && -f "$$nifi_dir/nifi.p12" \ + && -f "$$nifi_dir/nifi-keystore.jks" \ + && -f "$$nifi_dir/nifi-truststore.jks" ]]; then \ + echo "NiFi certificates already exist; leaving them unchanged."; \ + else \ + echo "Generating NiFi certificates..."; \ + (cd "$(SECURITY_SCRIPTS_DIR)" && ./create_nifi_certs.sh); \ + fi + +init-security-opensearch: init-security-root-ca ## Generate OpenSearch node, client, and admin certificates when missing + @set -euo pipefail; \ + source "$(SECURITY_ENV_DIR)/certificates_elasticsearch.env"; \ + if [[ -n "$(strip $(OPENSEARCH_CERT_NAMES))" ]]; then \ + read -r -a node_names <<< "$(strip $(OPENSEARCH_CERT_NAMES))"; \ + else \ + node_names=("$$ES_INSTANCE_NAME_1" "$$ES_INSTANCE_NAME_2" "$$ES_INSTANCE_NAME_3"); \ + fi; \ + opensearch_dir="$(SECURITY_CERTIFICATES_DIR)/elastic/opensearch"; \ + node_certificates_missing=0; \ + for node_name in "$${node_names[@]}"; do \ + node_dir="$$opensearch_dir/elasticsearch/$$node_name"; \ + for suffix in .crt .key .p12 -keystore.jks -truststore.key; do \ + if [[ ! -f "$$node_dir/$$node_name$$suffix" ]]; then \ + node_certificates_missing=1; \ + break 2; \ + fi; \ + done; \ + done; \ + if [[ ! -f "$$opensearch_dir/elastic-stack-ca.crt.pem" \ + || ! -f "$$opensearch_dir/elastic-stack-ca.p12" ]]; then \ + node_certificates_missing=1; \ + fi; \ + if (( node_certificates_missing )); then \ + echo "Generating OpenSearch node certificates for: $${node_names[*]}"; \ + (cd "$(SECURITY_SCRIPTS_DIR)" && ./create_opensearch_node_cert.sh "$${node_names[@]}"); \ + else \ + echo "OpenSearch node certificates already exist; leaving them unchanged."; \ + fi; \ + if [[ -f "$$opensearch_dir/admin.crt" \ + && -f "$$opensearch_dir/admin.key.pem" \ + && -f "$$opensearch_dir/$${ES_CLIENT_CERT_NAME}.pem" \ + && -f "$$opensearch_dir/$${ES_CLIENT_CERT_NAME}.key" ]]; then \ + echo "OpenSearch client and admin certificates already exist; leaving them unchanged."; \ + else \ + echo "Generating OpenSearch client and admin certificates..."; \ + (cd "$(SECURITY_SCRIPTS_DIR)" && ./create_opensearch_client_admin_certs.sh); \ + fi + +init-security-elasticsearch: ## Generate native Elasticsearch certificates when the output directory is absent + @set -euo pipefail; \ + source "$(SECURITY_ENV_DIR)/certificates_elasticsearch.env"; \ + elasticsearch_dir="$(SECURITY_CERTIFICATES_DIR)/elastic/elasticsearch"; \ + certificate_set_complete=1; \ + for required_file in \ + "elastic-stack-ca.crt.pem" \ + "elastic-stack-ca.p12" \ + "elasticsearch/$${ES_INSTANCE_NAME_1}/$${ES_INSTANCE_NAME_1}.crt" \ + "elasticsearch/$${ES_INSTANCE_NAME_1}/$${ES_INSTANCE_NAME_1}.key" \ + "elasticsearch/$${ES_INSTANCE_NAME_2}/$${ES_INSTANCE_NAME_2}.crt" \ + "elasticsearch/$${ES_INSTANCE_NAME_2}/$${ES_INSTANCE_NAME_2}.key" \ + "elasticsearch/$${ES_INSTANCE_NAME_3}/$${ES_INSTANCE_NAME_3}.crt" \ + "elasticsearch/$${ES_INSTANCE_NAME_3}/$${ES_INSTANCE_NAME_3}.key"; do \ + if [[ ! -f "$$elasticsearch_dir/$$required_file" ]]; then \ + certificate_set_complete=0; \ + break; \ + fi; \ + done; \ + if (( certificate_set_complete )); then \ + echo "Native Elasticsearch certificates already exist; leaving them unchanged."; \ + elif [[ -e "$$elasticsearch_dir" ]]; then \ + echo "ERROR: $$elasticsearch_dir exists but contains an incomplete certificate set." >&2; \ + echo "Move or remove that directory after preserving anything needed, then rerun this target." >&2; \ + exit 1; \ + else \ + echo "Generating native Elasticsearch certificates with Docker..."; \ + (cd "$(SECURITY_SCRIPTS_DIR)" && ./create_es_native_certs.sh); \ + fi + +init-security-search: ## Generate certificates for ELASTICSEARCH_VERSION from elasticsearch.env + @set -euo pipefail; \ + source ./elasticsearch.env; \ + case "$${ELASTICSEARCH_VERSION}" in \ + opensearch|elasticsearch) \ + $(MAKE) --no-print-directory "init-security-$${ELASTICSEARCH_VERSION}" \ + ;; \ + *) \ + echo "ERROR: unsupported ELASTICSEARCH_VERSION '$${ELASTICSEARCH_VERSION}'." >&2; \ + exit 1 \ + ;; \ + esac + +init-security: ## Generate missing NiFi and selected search-backend certificates + @$(MAKE) --no-print-directory init-security-nifi + @$(MAKE) --no-print-directory init-security-search + +.PHONY: init-security init-security-root-ca init-security-nifi init-security-opensearch init-security-elasticsearch init-security-search + helm-template-opensearch: ## Render OpenSearch chart using chart defaults plus ./helm/opensearch.values.yaml helm template $(HELM_OPENSEARCH_RELEASE) $(HELM_OPENSEARCH_CHART) $(HELM_OPENSEARCH_VALUES_ARG) diff --git a/docs/deploy/main.md b/docs/deploy/main.md index 0f64f2f78..4edbc59c5 100755 --- a/docs/deploy/main.md +++ b/docs/deploy/main.md @@ -45,9 +45,10 @@ Execute the following commands in the root directory of the repo: 2. (OPTIONAL, if you already have the software in [this section installed](#-software-requirements-linuxmacos)) `bash ./scripts/installation_utils/install_docker_and_utils.sh`, and wait for it to finish. It may take a while to get all the packages, and it will prompt for `sudo` when needed. 3. `cd deploy` 4. `make git-update-submodules` -5. check that docker works correctly : `docker pull hello-world` -6. if no errors, run: `docker run --rm hello-world`, it should run without issues -7. if there are any issues check the below warning section +5. `make init-security` +6. check that docker works correctly : `docker pull hello-world` +7. if no errors, run: `docker run --rm hello-world`, it should run without issues +8. if there are any issues check the below warning section :::{warning} IMPORTANT NOTE: Do a `git-lfs pull` so that you have everything downloaded from the repo (including bigger zipped files.). diff --git a/docs/security/certificates.md b/docs/security/certificates.md index 344cd9182..1a69bedea 100644 --- a/docs/security/certificates.md +++ b/docs/security/certificates.md @@ -153,40 +153,37 @@ CN = cogstack ### πŸ› οΈ Generation workflow -1. **Generate Root CA** +From the repository root, initialize all certificates required by NiFi and the +search backend selected by `ELASTICSEARCH_VERSION` in `deploy/elasticsearch.env`: - ```bash - cd security/scripts - bash create_root_ca_cert.sh - ``` - -2. **Generate service certificates** - - ```bash - # Elasticsearch - bash create_es_native_certs.sh - - # OpenSearch - bash create_opensearch_node_cert.sh elasticsearch-1 elasticsearch-2 elasticsearch-3 +```bash +make -C deploy init-security +``` - # Kibana / Dashboards - bash create_opensearch_client_admin_certs.sh +You can also initialize certificate sets independently: - # NiFi - bash nifi_toolkit_security.sh (not needed as of version 2.0+, use only for NiFi versions < 2.0) make sure to change $NIFI_TOOLKIT_VERSION env var in `../deploy/nifi.env`. +```bash +make -C deploy init-security-root-ca +make -C deploy init-security-nifi +make -C deploy init-security-opensearch +make -C deploy init-security-elasticsearch +``` - ``` +The initialization targets are idempotent: complete certificate sets are left +unchanged. Native Elasticsearch generation uses Docker and refuses to overwrite +an existing incomplete directory automatically. -3. **(Optional) Create custom JKS keystores** +1. **(Optional) Create custom JKS keystores** ```bash + cd security/scripts bash create_keystore.sh mycert.pem mystore.jks mypassword ``` -4. **Re-export environment variables and restart services** +2. **Re-export environment variables and restart services** ```bash - cd ../deploy + cd ../../deploy source export_env_vars.sh make start- ``` diff --git a/security/certificates/README.md b/security/certificates/README.md index 92f67d935..875e8b53c 100644 --- a/security/certificates/README.md +++ b/security/certificates/README.md @@ -4,16 +4,25 @@ Everything in this directory, apart from this file, is generated locally and must not be committed. Generated bundles include private keys and are specific to a development or deployment environment. -From `security/scripts`, generate the shared root CA first and then the -certificates needed by the service being tested. For example: +From the repository root, generate all missing certificates required by NiFi +and the search backend selected in `deploy/elasticsearch.env`: ```bash -./create_root_ca_cert.sh -./create_nifi_certs.sh +make -C deploy init-security ``` -For OpenSearch, run the root CA generator followed by the node and client/admin -certificate generators described in the security documentation. +The individual initialization targets are also available: + +```bash +make -C deploy init-security-root-ca +make -C deploy init-security-nifi +make -C deploy init-security-opensearch +make -C deploy init-security-elasticsearch +``` + +These targets leave complete existing certificate sets unchanged. They generate +only missing or incomplete service sets and do not silently rotate an existing +root CA. Any private keys that were previously committed to Git must be considered public. Do not reuse them outside local development, and rotate any deployment From f96c5d50a83cd65d67dddb6882f21106de14d5e7 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 17:05:13 +0100 Subject: [PATCH 04/30] Updated uv.lock. --- uv.lock | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 uv.lock diff --git a/uv.lock b/uv.lock new file mode 100644 index 000000000..2ac2354a1 --- /dev/null +++ b/uv.lock @@ -0,0 +1,8 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" + +[[package]] +name = "cogstack-nifi" +version = "0.0.1" +source = { editable = "." } From 398fc3f5e97dbc4489ecfebf2bd393d3367477c8 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 17:07:45 +0100 Subject: [PATCH 05/30] Updated uv.lock + requirements.txt. --- nifi/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nifi/requirements.txt b/nifi/requirements.txt index 3bcc0cb0a..a53bf7a36 100644 --- a/nifi/requirements.txt +++ b/nifi/requirements.txt @@ -20,8 +20,8 @@ nipyapi==1.5.1 py7zr==1.1.3 jsonpickle==4.1.1 xlsxwriter==3.2.9 -mysql-connector-python==9.5.0 -snowflake-connector-python==4.2.0 +mysql-connector-python==26.7.0 +snowflake-connector-python==4.7.2 pymssql==2.3.9 requests==2.33.0 PyYAML==6.0.3 From ae8bd7499f232bf23b12cad09c300c13518b4a4a Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 17:21:53 +0100 Subject: [PATCH 06/30] Deploy: updated gitea img veresion. --- deploy/gitea.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/gitea.env b/deploy/gitea.env index 3146f0e8e..6d312a6ae 100644 --- a/deploy/gitea.env +++ b/deploy/gitea.env @@ -25,7 +25,7 @@ GITEA_LOCAL_KEY_TITLE="gitea-cogstack-$(hostname)-$(date +%s)" GITEA_DEFAULT_MAIN_REMOTE_NAME="cogstack-gitea" GITEA_DOCKER_SHM_SIZE=512m -GITEA_DOCKER_IMAGE=gitea/gitea:1.25-rootless +GITEA_DOCKER_IMAGE=gitea/gitea:1.27-rootless GITEA_DOCKER_CPU_MIN=1 GITEA_DOCKER_CPU_MAX=1 GITEA_DOCKER_RAM=1g From 251f0f381d00edd2a2b99c6e07ec2ea2587c9e13 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 17:32:00 +0100 Subject: [PATCH 07/30] Added gitea cert gen + revised doc link. --- .github/workflows/doc_build.yml | 2 +- README.md | 8 +- deploy/Makefile | 23 ++- docs/deploy/configuration.md | 31 ++-- docs/deploy/deployment.md | 13 +- docs/deploy/main.md | 52 +++--- docs/deploy/services.md | 58 +++--- docs/deploy/workflows_legacy.md | 8 +- docs/index.md | 8 +- docs/nifi/main.md | 172 +++++++++--------- docs/security/certificates.md | 136 ++++---------- docs/security/elasticsearch_opensearch.md | 74 ++++---- docs/security/main.md | 41 +++-- docs/security/nifi.md | 14 +- docs/security/services.md | 60 +++--- mkdocs.yml | 18 +- security/certificates/README.md | 11 +- security/scripts/create_gitea_certs.sh | 58 ++++++ .../scripts/nifi_init_create_user_auth.sh | 36 +++- services/gitea/app.ini | 4 +- 20 files changed, 430 insertions(+), 397 deletions(-) create mode 100644 security/scripts/create_gitea_certs.sh diff --git a/.github/workflows/doc_build.yml b/.github/workflows/doc_build.yml index 45023b2fa..9ab76eb08 100644 --- a/.github/workflows/doc_build.yml +++ b/.github/workflows/doc_build.yml @@ -39,4 +39,4 @@ jobs: - name: Build docs working-directory: docs - run: uv run mkdocs build -f ../mkdocs.yml + run: uv run mkdocs build --strict -f ../mkdocs.yml diff --git a/README.md b/README.md index 384939827..5fa845e18 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ All NLP/ML/data services are expected to implement a uniform RESTful API, allowi ## ⚠️ Important Notice -This project is under active development. New features or services may impact existing deployments. Please review the [release notes](https://cogstack-nifi.readthedocs.io/en/latest/news.html) and [documentation](https://cogstack-nifi.readthedocs.io) before upgrading. +This project is under active development. New features or services may impact existing deployments. Please review the [release notes](https://cogstack-nifi.readthedocs.io/en/latest/news/) and [documentation](https://cogstack-nifi.readthedocs.io) before upgrading. --- @@ -80,15 +80,15 @@ make -C deploy stop-data-infra πŸ“– Official documentation: [cogstack-nifi.readthedocs.io](https://cogstack-nifi.readthedocs.io/en/latest/) -πŸš€ New to the project? Start with the [deployment guide](https://cogstack-nifi.readthedocs.io/en/latest/deploy/main.html) for example setups and workflows. +πŸš€ New to the project? Start with the [deployment guide](https://cogstack-nifi.readthedocs.io/en/latest/deploy/main/) for example setups and workflows. -🐞 For troubleshooting or bug reports, consult the [known issues section](https://cogstack-nifi.readthedocs.io/en/latest/deploy/troubleshooting.html) before opening a ticket. +🐞 For troubleshooting or bug reports, consult the [known issues section](https://cogstack-nifi.readthedocs.io/en/latest/deploy/troubleshooting/) before opening a ticket. --- ## πŸ›‘ Important Updates -Check the [release notes](https://cogstack-nifi.readthedocs.io/en/latest/news.html) section regularly for: +Check the [release notes](https://cogstack-nifi.readthedocs.io/en/latest/news/) section regularly for: - Major changes to project structure or configuration - Security advisories or vulnerabilities affecting deployments diff --git a/deploy/Makefile b/deploy/Makefile index 42072a19b..7f15dd42d 100644 --- a/deploy/Makefile +++ b/deploy/Makefile @@ -100,7 +100,7 @@ load-env: ## Load variables from export_env_vars.sh in a subshell show-env: ## Print sorted environment variables after loading export_env_vars.sh ${WITH_ENV} >/dev/null 2>&1; printenv | sort -init-security-root-ca: ## Generate the shared root CA only when it is missing or incomplete +init-security-root-ca: ## Generate the shared root CA only when no CA material exists @set -euo pipefail; \ source "$(SECURITY_ENV_DIR)/certificates_general.env"; \ root_dir="$(SECURITY_CERTIFICATES_DIR)/root"; \ @@ -110,6 +110,10 @@ init-security-root-ca: ## Generate the shared root CA only when it is missing or && -f "$$root_dir/$${ROOT_CERTIFICATE_NAME}-keystore.jks" \ && -f "$$root_dir/$${ROOT_CERTIFICATE_NAME}-truststore.jks" ]]; then \ echo "Root CA certificates already exist; leaving them unchanged."; \ + elif [[ -d "$$root_dir" && -n "$$(find "$$root_dir" -mindepth 1 -maxdepth 1 -print -quit)" ]]; then \ + echo "ERROR: $$root_dir contains an incomplete root CA set." >&2; \ + echo "Preserve and repair or explicitly replace that CA before rerunning this target." >&2; \ + exit 1; \ else \ echo "Generating the shared root CA certificates..."; \ (cd "$(SECURITY_SCRIPTS_DIR)" && ./create_root_ca_cert.sh); \ @@ -129,6 +133,18 @@ init-security-nifi: init-security-root-ca ## Generate NiFi certificates only whe (cd "$(SECURITY_SCRIPTS_DIR)" && ./create_nifi_certs.sh); \ fi +init-security-gitea: init-security-root-ca ## Generate a dedicated Gitea leaf certificate when it is missing + @set -euo pipefail; \ + gitea_dir="$(SECURITY_CERTIFICATES_DIR)/gitea"; \ + if [[ -f "$$gitea_dir/gitea.key" \ + && -f "$$gitea_dir/gitea.pem" \ + && -f "$$gitea_dir/gitea.crt" ]]; then \ + echo "Gitea leaf certificate already exists; leaving it unchanged."; \ + else \ + echo "Generating Gitea leaf certificate..."; \ + (cd "$(SECURITY_SCRIPTS_DIR)" && bash ./create_gitea_certs.sh); \ + fi + init-security-opensearch: init-security-root-ca ## Generate OpenSearch node, client, and admin certificates when missing @set -euo pipefail; \ source "$(SECURITY_ENV_DIR)/certificates_elasticsearch.env"; \ @@ -211,11 +227,12 @@ init-security-search: ## Generate certificates for ELASTICSEARCH_VERSION from el ;; \ esac -init-security: ## Generate missing NiFi and selected search-backend certificates +init-security: ## Generate missing NiFi, Gitea, and selected search-backend certificates @$(MAKE) --no-print-directory init-security-nifi + @$(MAKE) --no-print-directory init-security-gitea @$(MAKE) --no-print-directory init-security-search -.PHONY: init-security init-security-root-ca init-security-nifi init-security-opensearch init-security-elasticsearch init-security-search +.PHONY: init-security init-security-root-ca init-security-nifi init-security-gitea init-security-opensearch init-security-elasticsearch init-security-search helm-template-opensearch: ## Render OpenSearch chart using chart defaults plus ./helm/opensearch.values.yaml helm template $(HELM_OPENSEARCH_RELEASE) $(HELM_OPENSEARCH_CHART) $(HELM_OPENSEARCH_VALUES_ARG) diff --git a/docs/deploy/configuration.md b/docs/deploy/configuration.md index c132214f2..7f1adc10d 100644 --- a/docs/deploy/configuration.md +++ b/docs/deploy/configuration.md @@ -8,8 +8,9 @@ The variables are configurable, and are separated, into security and general env In most cases, modifying these variables should be the only thing that is needed in order to run a successful deployment. Multiple files are available, split into two categories: -- service: located in `./deploy/` are reponsible for direct service configuration -- security: located in `./security`, ceriticate related settings are always in the files starting with `certificates_` and user settings are located in the files ending with `_users` + +- Service configuration under `deploy/`. +- Certificate and local-development credential configuration under `security/env/`. The variables declared in the `./deploy` folder are used in multiple config files, as follows: - `elasticsearch.env`, variables here are used in : @@ -33,21 +34,23 @@ The variables declared in the `./deploy` folder are used in multiple config file - `general.env`, these vars are optional, declared any custom variables you want here, used in the `nifi` section -Additional variablesenv files, used only or certificate generation and user accounts, found in `./security`: -- `certificates_elasticsearch.env`, used in `create_opensearch_*`/`create_es_native*` scripts -- `certificates_general.env`, used in `create_root_ca.sh` -- `certificates_nifi.env`, used in `nifi_toolkit_security.sh` -- `database_users.env` -- `elasticsearch_users.env` -- `nginx_users.env` +Additional environment files under `security/env/` configure certificate generation and local accounts: + +- `certificates_elasticsearch.env` +- `certificates_general.env` +- `certificates_nifi.env` +- `users_database.env` +- `users_elasticsearch.env` +- `users_nginx.env` +- `users_nifi.env` ### Customization -For custom deployments, copy all the `.env` files (which are not tracked by Git) and add deployment specific configurations to these files. For example: +The tracked `.env` values are public development defaults. For a real deployment, keep deployment-specific copies outside the repository or inject the values through the platform's secret-management mechanism. Never commit production credentials. -``` -cp deploy/*.env deploy/new_deploy_folder/ -cp security/*.env deploy/new_deploy_folder/ +```bash +cp deploy/*.env /path/to/deployment-config/ +cp security/env/*.env /path/to/deployment-config/security/ ``` ### Multiple deployments on the same machine @@ -59,7 +62,7 @@ For example, when setting `COMPOSE_PROJECT_NAME=cogstack-prod`, Docker Compose w ## Important security detail -Please note that in the example service defintions, for ease of deployment and demonstration, SSL encryption is enabled among services (NiFi, ES, etc.), however, the certificates that are used are in this public repository, anyone can see them, so **please** make sure to re-generate them when you go into production. +Generated certificates and private keys are stored under `security/certificates/` and ignored by Git. Create them with `make -C deploy init-security`. Do not reuse development certificates or public development credential defaults in production. ## Services Please note that all the services are deployed using [Docker](https://docker.io) engine and requires docker deamon to be running / functioning. diff --git a/docs/deploy/deployment.md b/docs/deploy/deployment.md index 4ee894967..48b243948 100644 --- a/docs/deploy/deployment.md +++ b/docs/deploy/deployment.md @@ -160,12 +160,11 @@ service: - embedded SQLite - bundled PostgreSQL/Valkey disabled - ClusterIP services on ports `3000` and `2222` -- direct HTTPS inside the Gitea pod using the shared root CA +- direct HTTPS inside the Gitea pod using a dedicated Gitea leaf certificate -Before install, create: +For a local/reference deployment, first run `make -C deploy init-security-gitea`, then create a `gitea-tls` Secret containing `gitea.pem` and `gitea.key` from `security/certificates/gitea/`. Never mount `root-ca.key` into Gitea. Production deployments should provide a deployment-specific certificate for their public hostname through the platform certificate manager. -- `gitea-root-ca` Secret with `root-ca.pem` and `root-ca.key` from `security/certificates/root/` -- optionally `gitea-admin-credentials` with `username` and `password` if you want Helm to bootstrap an admin user +You can optionally create `gitea-admin-credentials` with `username` and `password` if you want Helm to bootstrap an admin user. ## 🧰 Makefile Command Overview @@ -240,6 +239,12 @@ make -C deploy remote-delete-service \ |------------------------|---------------------------------------------| | `make load-env` | Load all environment variables | | `make show-env` | Print environment variables (sorted) | +| `make init-security` | Generate missing NiFi, Gitea, and selected search-backend certificates | +| `make init-security-root-ca` | Generate the shared root CA if missing | +| `make init-security-nifi` | Generate the NiFi certificate set if missing | +| `make init-security-gitea` | Generate the dedicated Gitea leaf certificate if missing | +| `make init-security-opensearch` | Generate the OpenSearch certificate set if missing | +| `make init-security-elasticsearch` | Generate the native Elasticsearch certificate set if missing | | `make git-freeze-security` | Freeze all security submodules (read-only) | | `make git-unfreeze-security` | Unfreeze security submodules | | `make git-update-submodules` | Update all submodules | diff --git a/docs/deploy/main.md b/docs/deploy/main.md index 4edbc59c5..da3d73760 100755 --- a/docs/deploy/main.md +++ b/docs/deploy/main.md @@ -42,7 +42,7 @@ You can use the script located at `scripts/installation_utils/install_docker_and Execute the following commands in the root directory of the repo: 1. `git-lfs pull` -2. (OPTIONAL, if you already have the software in [this section installed](#-software-requirements-linuxmacos)) `bash ./scripts/installation_utils/install_docker_and_utils.sh`, and wait for it to finish. It may take a while to get all the packages, and it will prompt for `sudo` when needed. +2. (OPTIONAL, if you already have the software in [this section installed](#software-requirements-linuxmacos)) `bash ./scripts/installation_utils/install_docker_and_utils.sh`, and wait for it to finish. It may take a while to get all the packages, and it will prompt for `sudo` when needed. 3. `cd deploy` 4. `make git-update-submodules` 5. `make init-security` @@ -50,70 +50,64 @@ Execute the following commands in the root directory of the repo: 7. if no errors, run: `docker run --rm hello-world`, it should run without issues 8. if there are any issues check the below warning section -:::{warning} -IMPORTANT NOTE: Do a `git-lfs pull` so that you have everything downloaded from the repo (including bigger zipped files.). -::: +!!! warning -:::{warning} -Ensure all Git submodules are initialized and updated: -`make git-update-submodules` -::: + Run `git-lfs pull` to download all repository assets, including larger files. -:::{warning} -Consult the if there are issues with the docker setup. -If Docker fails to install or `docker pull hello-world` does not work: +!!! warning - - Follow the official [Docker installation steps](https://docs.docker.com/engine/install/debian/) - - Ensure your user is in the docker group - - For non-sudo users, check Docker rootless mode and required post-install steps: - - https://docs.docker.com/engine/security/rootless/ - - https://docs.docker.com/engine/install/linux-postinstall/ + Ensure all Git submodules are initialized and updated with `make git-update-submodules`. -::: +!!! warning + If Docker fails to install or `docker pull hello-world` does not work: + - Follow the official [Docker installation steps](https://docs.docker.com/engine/install/debian/). + - Ensure your user is in the Docker group. + - For non-sudo users, check [Docker rootless mode](https://docs.docker.com/engine/security/rootless/) and the [Linux post-install steps](https://docs.docker.com/engine/install/linux-postinstall/). ## ⚠️ Essential Elasticsearch Requirement -:::{warning} -**Elasticsearch may fail to start unless `vm.max_map_count` is increased.** +!!! warning -If this value is too low, Elasticsearch will exit with the error: + **Elasticsearch may fail to start unless `vm.max_map_count` is increased.** + + If this value is too low, Elasticsearch will exit with the error: ```bash bootstrap checks failed max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] ``` -If you did **not** run the installation script, set it manually: + If you did **not** run the installation script, set it manually. + + **Temporary (until reboot):** -**Temporary (until reboot):** ```bash sudo sysctl -w vm.max_map_count=262144 ``` -**Permanent (persists across reboots):** -Add the line below to `/etc/sysctl.conf`: + **Permanent (persists across reboots):** + + Add the line below to `/etc/sysctl.conf`: ```bash vm.max_map_count=262144 ``` -Or a one-liner: + Or use this one-liner: ```bash sudo sh -c "echo 'vm.max_map_count=262144' >> /etc/sysctl.conf" ``` -Then apply: + Then apply it: ```bash sudo sysctl -p ``` -> The `install_docker_and_utils.sh` script automatically configures this. -> You only need to set it manually if the script was skipped. -::: + The `install_docker_and_utils.sh` script configures this automatically; set it manually only if the script was skipped. ## πŸ… Deploying services diff --git a/docs/deploy/services.md b/docs/deploy/services.md index 7eb314886..8a869f880 100644 --- a/docs/deploy/services.md +++ b/docs/deploy/services.md @@ -199,7 +199,7 @@ Demo dataset with: ### Credentials -- user - `test`, password - `test` +Local development credentials are defined in `security/env/users_database.env`. Override them for non-local deployments. --- @@ -218,8 +218,7 @@ Where `` can be: `mssql`,`pgsql`. ### Credentials -- PgSQL: user - `admin` password - `admin` -- MsSQL: user - `admin` password - `admin!COGSTACK2022` +PostgreSQL and MSSQL development credentials are defined in `security/env/users_database.env`. Production credentials must be injected through deployment-local configuration or a secret manager. ### Access @@ -236,7 +235,7 @@ Where `` can be: `mssql`,`pgsql`. - docker compose file: `services.yml` - dir: `services/cogstack-db/` - env: - - `security/users/users_database.env` - controlers DB user credentials + - `security/env/users_database.env` - database development credentials - `deploy/database.env` - general DB configs ### Ports @@ -256,7 +255,7 @@ This service is complex and is completely described in [this section](../nifi/ma ### Credentials -- Default user: user - `admin` password - `cogstackNiFi` +Single-user development credentials are defined in `security/env/users_nifi.env`. Do not reuse them in production. ### Access @@ -271,9 +270,9 @@ This service is complex and is completely described in [this section](../nifi/ma - docker compose file: `services.yml` - dir: `nifi/` - env: - - `/deploy/nifi.env` - general NiFi settings, JVM memory, etc. - - `/security/nifi_users.env` - controlers DB user credentials - - `/security/certificates_nifi.env` + - `deploy/nifi.env` - general NiFi settings, JVM memory, etc. + - `security/env/users_nifi.env` - NiFi development credentials + - `security/env/certificates_nifi.env` - NiFi keystore and truststore settings ### Ports @@ -300,8 +299,7 @@ Switch between modes via environment variables in `deploy/elasticsearch.env`. #### Credentials -- OpenSearch: user - `admin`, password - `admin` -- ElasticSearch: user - `elastic`, password - `kibanaserver` +Development credentials for both backends are defined in `security/env/users_elasticsearch.env`. Use externally managed secrets for production deployments. #### Access @@ -332,21 +330,21 @@ Switch between modes via environment variables in `deploy/elasticsearch.env`. - docker compose: `deploy/services.yml` - config: `services/elasticsearch/config/` - env: - - `/deploy/elasticsearch.env` - - `/security/certificates_elasticsearch.env` - - `/security/elasticsearch_users.env` + - `deploy/elasticsearch.env` + - `security/env/certificates_elasticsearch.env` + - `security/env/users_elasticsearch.env` #### SSL & Certificates Certificates stored in: -```bash -/security/certificates/elastic// +```text +security/certificates/elastic// ``` Settings in: -- `certificates_elasticsearch.env` +- `security/env/certificates_elasticsearch.env` ### πŸ“Š Metricbeat & Filebeat @@ -381,8 +379,8 @@ Filebeat: - `services/metricbeat/metricbeat.yml` - `services/filebeat/filebeat.yml` - env: - - `/deploy/elasticsearch.env` - - `/security/elasticsearch_users.env` + - `deploy/elasticsearch.env` + - `security/env/users_elasticsearch.env` #### **Ports** @@ -393,7 +391,7 @@ All communication occurs internally within the `cogstack-net` Docker network. - Elasticsearch must be running before Metricbeat or Filebeat start. - Only Elastic-native Beats are available; OpenSearch-native Beats do not exist. -- Authentication/credentials come from `elasticsearch_users.env`. +- Authentication credentials come from `security/env/users_elasticsearch.env`. ### πŸ“‰ Kibana / OpenSearch Dashboards @@ -412,8 +410,7 @@ Web UI for exploring indexed data, visualising documents, managing index templat #### Credentials -- **OpenSearch Dashboards:** `admin` / `admin` -- **Elasticsearch Native:** `elastic` / `kibanaserver` +Dashboard development credentials are defined in `security/env/users_elasticsearch.env`. Never use the public development values for an exposed deployment. #### First login setup (OpenSearch Dashboards) @@ -438,9 +435,9 @@ After signing in to OpenSearch Dashboards: - `services/kibana/config/elasticsearch.yml` (Elasticsearch) - `services/kibana/config/opensearch.yml` (OpenSearch Dashboards) - env: - - `/deploy/elasticsearch.env` - - `/security/certificates_elasticsearch.env` - - `/security/elasticsearch_users.env` + - `deploy/elasticsearch.env` + - `security/env/certificates_elasticsearch.env` + - `security/env/users_elasticsearch.env` Image selection controlled by: @@ -536,7 +533,7 @@ Lightweight GitHub/GitLab-style service used for hosting repositories inside sec ### Access -- URL: **http://localhost:3000** *(default Gitea port)* +- URL: **https://localhost:3000** *(default local Gitea port)* ### Containers @@ -546,8 +543,7 @@ Lightweight GitHub/GitLab-style service used for hosting repositories inside sec - docker compose file: `deploy/services.yml` - config file: `services/gitea/app.ini` -- env files: - - `/security/certificates_general.env` +- certificate directory: `security/certificates/gitea/` Persistent repository data is stored in the volume defined in `services.yml`. @@ -561,7 +557,7 @@ Persistent repository data is stored in the volume defined in `services.yml`. - Supports repository migration from external Git servers - Mirroring available when external access is allowed -- Can use CogStack certificates for HTTPS if configured +- Uses a dedicated CogStack-signed Gitea leaf certificate for local HTTPS --- @@ -613,9 +609,9 @@ Routing rules are defined in the NGINX configuration files. - `services/nginx/config/medcat-trainer.conf` - additional templates under `services/nginx/config/` - env / certificates: - - `/security/certificates_general.env` - - `/security/certificates_nifi.env` -- Uses shared CogStack Root CA & NiFi certs (`root-ca.p12`, `root-ca.key`, `nifi.key`, `nifi.pem`) + - `security/env/certificates_general.env` + - `security/env/certificates_nifi.env` +- Uses the NiFi leaf certificate for server TLS and `root-ca.pem` as a trust anchor. The root CA private key is not mounted as a service key. ### Port diff --git a/docs/deploy/workflows_legacy.md b/docs/deploy/workflows_legacy.md index 6145a2ce5..9df0d2794 100644 --- a/docs/deploy/workflows_legacy.md +++ b/docs/deploy/workflows_legacy.md @@ -20,9 +20,9 @@ Template locations: ## Legacy workflow examples (reference) -:::{warning} -These examples are maintained as historical reference material. Validate processor configuration and controller-service properties against your currently deployed NiFi version. -::: +!!! warning + + These examples are maintained as historical reference material. Validate processor configuration and controller-service properties against your currently deployed NiFi version. Our custom Apache NiFi image comes with 4 basic example template workflows bundled that available in [user templates](https://github.com/CogStack/CogStack-NiFi/tree/main/nifi/user_templates) in `./nifi` directory. These are: @@ -166,7 +166,7 @@ Restart all nifi-processes and the ingestion should work. ## Indexing records by Elasticsearch The records are finally stored in Elasticsearch data store under index `medical_reports_text` and using url endpoint `http://elasticsearch-1:9200`. This operation is implemented by NiFi component `PutElasticsearchRecord` with its configuration presented on the picture below. -The Elasticsearch user credentials need to be provided which in this example would be the built-in user `admin` with password `admin`. +Provide the appropriate Elasticsearch/OpenSearch credentials from your deployment configuration. Local development values are defined in `security/env/users_elasticsearch.env`; do not copy them into a production flow. When indexing the records as documents the record's primary key field `/docid` will be used as the document identifier in Elasticsearch. Optionally, the default Date / Time / Timestamp Format can be overridden for corresponding fields being ingested. In this example case, the Timestamp Format was overridden as `yyyy-MM-dd'T'HH:mm:ss.SSS`. diff --git a/docs/index.md b/docs/index.md index e596b37fa..70cecc4a6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -16,7 +16,7 @@ All NLP/ML/data services are expected to implement a uniform RESTful API, allowi ## ⚠️ Important Notice -This project is under active development. New features or services may impact existing deployments. Please review the [release notes](https://cogstack-nifi.readthedocs.io/en/latest/news.html) and [documentation](https://cogstack-nifi.readthedocs.io) before upgrading. +This project is under active development. New features or services may impact existing deployments. Please review the [release notes](news.md) and this documentation before upgrading. --- @@ -79,15 +79,15 @@ make -C deploy stop-data-infra πŸ“– Official documentation: [cogstack-nifi.readthedocs.io](https://cogstack-nifi.readthedocs.io/en/latest/) -πŸš€ New to the project? Start with the [deployment guide](https://cogstack-nifi.readthedocs.io/en/latest/deploy/main.html) for example setups and workflows. +πŸš€ New to the project? Start with the [deployment guide](deploy/main.md) for example setups and workflows. -🐞 For troubleshooting or bug reports, consult the [known issues section](https://cogstack-nifi.readthedocs.io/en/latest/deploy/troubleshooting.html) before opening a ticket. +🐞 For troubleshooting or bug reports, consult the [known issues section](deploy/troubleshooting.md) before opening a ticket. --- ## πŸ›‘ Important Updates -Check the [release notes](https://cogstack-nifi.readthedocs.io/en/latest/news.html) section regularly for: +Check the [release notes](news.md) section regularly for: - Major changes to project structure or configuration - Security advisories or vulnerabilities affecting deployments diff --git a/docs/nifi/main.md b/docs/nifi/main.md index e25306184..223fc500a 100644 --- a/docs/nifi/main.md +++ b/docs/nifi/main.md @@ -21,17 +21,17 @@ Avro Schema:[official documentation](https://avro.apache.org/docs/1.11.1/) ## `NiFi directory layout : /nifi` - ``` - β”œβ”€β”€ Dockerfile - contains the base definition of the NiFi image along with all the packages/addons installed - β”œβ”€β”€ conf - NiFi configuration files, this folder is mounted on the NiFi service container at runtime, it needs to have read & write permissions by the user - β”œβ”€β”€ devel - custom folder that is mounted on the NiFi container where you may place your own scripts, again, read & write permissions required - β”œβ”€β”€ drivers - drivers used for DB connections, currently PostgreSQL and MSSQL - β”œβ”€β”€ nifi-app.log - log file mounted directly from the container for easy log checking - β”œβ”€β”€ user_schemas - Avro schemas used within workflows, it can also contain other schemas used in specific custom processors - β”œβ”€β”€ user_scripts - custom scripts used in workflows, you can put them here - β”œβ”€β”€ user_python_extensions - Python FlowFileTransform processors exposed to NiFi's extension framework - └── user_templates - here we store the fully exported templates of the workflows within NiFi - ``` +```text +β”œβ”€β”€ Dockerfile - contains the base definition of the NiFi image along with all the packages/addons installed +β”œβ”€β”€ conf - NiFi configuration files, this folder is mounted on the NiFi service container at runtime, it needs to have read & write permissions by the user +β”œβ”€β”€ devel - custom folder that is mounted on the NiFi container where you may place your own scripts, again, read & write permissions required +β”œβ”€β”€ drivers - drivers used for DB connections, currently PostgreSQL and MSSQL +β”œβ”€β”€ nifi-app.log - log file mounted directly from the container for easy log checking +β”œβ”€β”€ user_schemas - Avro schemas used within workflows, it can also contain other schemas used in specific custom processors +β”œβ”€β”€ user_scripts - custom scripts used in workflows, you can put them here +β”œβ”€β”€ user_python_extensions - Python FlowFileTransform processors exposed to NiFi's extension framework +└── user_templates - here we store the fully exported templates of the workflows within NiFi +``` For user script organization and usage guidelines, see [user scripts](user_scripts.md). For Python extension processors, see [Python extensions](user_python_extensions.md). @@ -60,7 +60,7 @@ This section provides only a brief description of the most useful properties tha ## Critical `deploy/nifi.env` settings -Before tuning `nifi/conf/*`, review the runtime env vars in [`deploy/nifi.env`](../../deploy/nifi.env). These are loaded into the NiFi container through `env_file` in `deploy/services.yml`. +Before tuning `nifi/conf/*`, review the runtime env vars in [`deploy/nifi.env`](https://github.com/CogStack/CogStack-NiFi/blob/main/deploy/nifi.env). These are loaded into the NiFi container through `env_file` in `deploy/services.yml`. Most important variables: @@ -103,33 +103,34 @@ The corresponding properties have been commented out in the file. Important properties to look for: - ``` - nifi.flow.configuration.archive.enabled=true - nifi.flow.configuration.archive.max.time=1 days - nifi.flow.configuration.archive.max.storage=32 GB - ``` +```properties +nifi.flow.configuration.archive.enabled=true +nifi.flow.configuration.archive.max.time=1 days +nifi.flow.configuration.archive.max.storage=32 GB +``` + The above lines are used to specify if backups of the current flow-files should be kept, keep in mind that the archive size can get quite big depending on the number of files you attempt to put through a workflow. This can easily get over 32GB so it is recommended you modify depending on the workflows and of the filesizes of the flow-files, this setting is directly affected by `nifi.queue.backpressure.count` and `nifi.queue.backpressure.size` - ``` - nifi.queue.backpressure.count=10000 - nifi.queue.backpressure.size=1 GB - ``` +```properties +nifi.queue.backpressure.count=10000 +nifi.queue.backpressure.size=1 GB +``` These settings specify how large can a queue's size be (any que between two processes), it is recommended to keep this as 1GB, the count is the ma number of flow-files a que can have, again 10000 is a reasonable number. These values should be modified only if you are really certain flow-files are not being held in the queue for long as the queued flow-files are stored in RAM memory as well as on the disk. A much more safer way of doing things if you wish to change the above settings is to change the settings only for the queues you would need, this can be done during runtime, without the need to touch the `nifi.properties` file. - ``` - nifi.bored.yield.duration=100 millis - ``` +```properties +nifi.bored.yield.duration=100 millis +``` A timer that specifies how long should NiFi waits before checking for work, CPU dependent, the lower the time the higher the CPU usage, as it would do more frequent checks. The default is 10ms but it seems too excessive for most use cases, it would also result in significant CPU usage if a large number of workflows are running in parallel, so it has been set to 100ms instead. - ``` - nifi.content.repository.archive.enabled=false - nifi.content.repository.archive.max.retention.period=1 mins - nifi.content.repository.archive.cleanup.frequency=30 secs - nifi.content.repository.archive.max.usage.percentage=15% - nifi.content.repository.archive.backpressure.percentage=50% - ``` +```properties +nifi.content.repository.archive.enabled=false +nifi.content.repository.archive.max.retention.period=1 mins +nifi.content.repository.archive.cleanup.frequency=30 secs +nifi.content.repository.archive.max.usage.percentage=15% +nifi.content.repository.archive.backpressure.percentage=50% +``` For production we currently disable content claim archiving (`nifi.content.repository.archive.enabled=false`) to avoid uncontrolled growth in `content_repository`. The tradeoff is that old content claims are not retained for replay/forensics once they are no longer referenced. @@ -137,74 +138,73 @@ The tradeoff is that old content claims are not retained for replay/forensics on If you enable content archive, keep retention short and monitor disk usage closely. Content repository size can remain high even when queue size is low, because claims may still be active or waiting for archive cleanup.

-#### IMPORTANT NOTE about nifi properties +#### IMPORTANT NOTE about NiFi properties + +!!! warning "IMPORTANT NOTE about `nifi.properties`" -:::{admonition} IMPORTANT NOTE about `nifi.properties` -:class: warning -For Linux users : This is a file that will get modified on runtime as when the container is up some of the properties within the file will get changed ( `nifi.cluster.node.address` for example). Some permission error's might pop out as the UID and GID of the folder permissions are different from that of the user within the container, which is using UID=1000 and GID=1000, declared in the `Dockerfile` and in `deploy/services.yml` under the `nifi` service section. To avoid permission issues, on the host container you will need to create a group with the GID 1000, assign the user that is running the docker command to the created group, and everything should work. -::: + On Linux, this file is modified at runtime because NiFi updates properties such as `nifi.cluster.node.address`. Permission errors can occur when the host directory UID/GID differs from the container user, which defaults to UID 1000 and GID 1000 in the `Dockerfile` and `deploy/services.yml`. To avoid these errors, create a host group with GID 1000 and add the user running Docker to it. Recommendation: If the account/group creation is not possible, you will need to build your own docker image on NiFi, but before you do this, you need to get hold of your group id and user id of the account you are logged in with. To find out your GID and UID, you must do the following commands in terminal: - ```bash - echo "user id (UID):"$(id -u $USER) - echo "group id (GID):"$(id -g $USER) - ``` +```bash +echo "user id (UID):"$(id -u $USER) +echo "group id (GID):"$(id -g $USER) +``` You'd need to export your ENV vars: - ```bash - export NIFI_UID=$(id -u $USER) - export NIFI_GID=$(id -g $USER) - ``` +```bash +export NIFI_UID=$(id -u $USER) +export NIFI_GID=$(id -g $USER) +``` A better way is to also manually edit the `./deploy/nifi.env` file and change the default NIFI_UID and NIFI_GID variables there, after which you must execute the `export_env_vars.sh` script. - ```bash - cd ./deploy/ - source export_env_vars.sh - cd ../ - ``` +```bash +cd ./deploy/ +source export_env_vars.sh +cd ../ +``` You should check if the env vars have been set after running the script: - ```bash - echo $NIFI_UID - echo $NIFI_GID - ``` +```bash +echo $NIFI_UID +echo $NIFI_GID +``` If the above command prints some numbers then it means that the `export_env_vars.sh` script worked. Otherwise, if you don't see anything, or just blank lines, then you need to execute the following: - ```bash - set -o allexport - source nifi.env - set +o allexport - ``` +```bash +set -o allexport +source nifi.env +set +o allexport +``` or, on Windows, via `git bash` terminal: - ```bash - set -a - source nifi.env - set +a - ``` +```bash +set -a +source nifi.env +set +a +``` Make sure to execute the above commands in the order they are mentioned. Delete the older docker image from the nifi repo: - ```bash - docker image rm cogstacksystems/cogstack-nifi:latest -f - ``` +```bash +docker image rm cogstacksystems/cogstack-nifi:latest -f +``` Then execute the `recreate_nifi_docker_image.sh` script located in the `./nifi` folder. - ```bash - cd ./nifi - bash recreate_nifi_docker_image.sh - ``` +```bash +cd ./nifi +bash recreate_nifi_docker_image.sh +``` Remember that the above export script and/or command are only visible in the current shell, so every time you restart your shell terminal you must `source ./deploy/export_env_vars.sh` so the variables are visible to Docker at runtime. If you're using the `deploy/Makefile` targets, it handles this for you. @@ -213,10 +213,10 @@ Remember that the above export script and/or command are only visible in the cur
This file allows users to configure settings for how NiFi should be started, it deals with location of configuration folder, files, JVM heap and Java System Properties. - ```text - java.arg.2=-Xms8g - java.arg.3=-Xmx16g - ``` +```text +java.arg.2=-Xms8g +java.arg.3=-Xmx16g +``` These properties specify the maximum memory that can be allocated to the JVM `-Xmx16g` and the initial memory allocation `-Xms8g`, values of 8g and 16g are used by default, however you may need to change these to fully utilise the memory of the machines you are spinning the service on.

@@ -236,27 +236,27 @@ Possible log level settings: `OFF`(inside `logback.xml`) or `NONE` (inside the N The most useful log sections are: - ``` - - ``` +```xml + +``` - This refers to the overall NiFi log, useful for finding out what may cause startup issues. - ``` - - ``` +```xml + +``` - Security level logging, this controls certificate or authorisation issues here. - ``` - - ``` +```xml + +``` - This handles issues related to the startup parameters. - ``` - - ``` +```xml + +``` - This is controls that is logged into the `./nifi/nifi-app.log` diff --git a/docs/security/certificates.md b/docs/security/certificates.md index 1a69bedea..d2981741b 100644 --- a/docs/security/certificates.md +++ b/docs/security/certificates.md @@ -2,9 +2,9 @@ This section describes the full structure of the `security/certificates/` directory and explains how certificates are generated, organized, and used across CogStack-NiFi services. -All certificates originate from the **Root Certificate Authority (CA)**, generated via `create_root_ca_cert.sh`. +The supported entry point is `make -C deploy init-security`. It generates the shared **Root Certificate Authority (CA)** and the required service certificates locally. Generated certificate material is ignored by Git. -This Root CA signs all service certificates (NiFi, OpenSearch, Kibana, JupyterHub, Gitea, etc.), ensuring consistent trust across the stack, with the exception of ElasticSearch (Native), we use Elastic's built-in cert generation scripts for it instead. +The shared root CA signs the locally generated NiFi, OpenSearch, and Gitea certificates. Native Elasticsearch is the exception: it uses Elastic's certificate tooling to generate a backend-specific CA and certificate set. --- @@ -30,7 +30,7 @@ security/ β”‚ β”‚ └── README.txt β”‚ β”‚ β”‚ └── opensearch/ # OpenSearch and OpenSearch Dashboard certs - β”‚ β”œβ”€β”€ admin.*, es_kibana_client.*, root-ca.* # Admin + dashboard + CA certs + β”‚ β”œβ”€β”€ admin.*, es_kibana_client.* # Admin + dashboard certificates β”‚ β”œβ”€β”€ elasticsearch/ # Node certs for OpenSearch nodes β”‚ β”‚ β”œβ”€β”€ elasticsearch-{1,2,3}/ # Per-node certs, keystore/truststore β”‚ β”‚ β”‚ β”œβ”€β”€ *.crt, *.key, *.p12, *.csr @@ -39,16 +39,19 @@ security/ β”‚ β”‚ β”‚ └── http-elasticsearch-*.csr/key # HTTP layer certs β”‚ β”œβ”€β”€ es_kibana_client.{pem,key,p12,csr} # Kibana client certs β”‚ β”œβ”€β”€ elastic-stack-ca.* # OpenSearch cluster CA - β”‚ └── root-ca.* # Root CA reference for OpenSearch + β”‚ └── elastic-stack-ca.* # Shared CA copied for OpenSearch consumers β”‚ β”œβ”€β”€ nifi/ # NiFi HTTPS and toolkit certificates β”‚ β”œβ”€β”€ nifi.{crt,key,p12,pem,csr} # Primary NiFi node certificates β”‚ β”œβ”€β”€ nifi-keystore.jks # Java keystore for NiFi server β”‚ β”œβ”€β”€ nifi-truststore.jks # Truststore for verifying other services - β”‚ + β”‚ + β”œβ”€β”€ gitea/ # Dedicated Gitea leaf certificate + β”‚ └── gitea.{crt,key,pem,csr} + β”‚ └── root/ # Root Certificate Authority (CA) β”œβ”€β”€ root-ca.key, root-ca.pem # Private key and public cert - β”œβ”€β”€ root-ca.p12, root-ca.keystore.jks # PKCS#12 and Java Keystore formats + β”œβ”€β”€ root-ca.p12, root-ca-keystore.jks # PKCS#12 and Java Keystore formats β”œβ”€β”€ root-ca-truststore.jks # Truststore for client-side verification └── root-ca.csr, root-ca.srl # Certificate signing request and serial ``` @@ -64,97 +67,20 @@ All certificate-generation scripts source variables from `.env` files under `sec | `certificates_general.env` | Global Root CA options (CN, expiry, key size). | | `certificates_elasticsearch.env` | Node names, SAN hostnames, version control for ES/OS. | | `certificates_nifi.env` | NiFi keystore/truststore names and passwords. | -| `users_*.env` | Default credentials used by generation scripts. | - -### πŸ“œ openssl-x509.conf - -Set up a reusable certificate config to define SANs and subject. This is used globally for all services except ES native. -Feel free to add custom DNS -Note that the settings here impact services that rely on Distinguished Names (DN) attributes for authentication. - -```ini -# ========================================================================================= -# πŸ“œ OpenSSL X.509 v3 Extensions Configuration -# For: Root CA and Node/Client Certificates -# ========================================================================================= - -[v3_ca] -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid:always,issuer -basicConstraints = critical, CA:TRUE -keyUsage = critical, keyCertSign, cRLSign -subjectAltName=DNS:nifi,DNS:elasticsearch-1,DNS:elasticsearch-2,DNS:elasticsearch-3,DNS:cogstack,DNS:*.cogstack - -[v3_leaf] -basicConstraints = critical, CA:FALSE -keyUsage = critical, digitalSignature, keyEncipherment -extendedKeyUsage = serverAuth, clientAuth -subjectAltName = @alt_names -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid,issuer - -[alt_names] -DNS.1 = nifi -DNS.2 = nifi-nginx -DNS.3 = elasticsearch-1 -DNS.4 = elasticsearch-2 -DNS.5 = elasticsearch-3 -DNS.6 = ocr-service -DNS.7 = ocr-service-text-only -DNS.8 = medcat-trainer-nginx -DNS.9 = medcat-trainer-ui -DNS.10 = nlp-medcat-service-production -DNS.11 = nlp-medcat-service-production-deid -DNS.12 = cogstack-kibana -DNS.13 = cogstack-cohort -DNS.14 = cogstack-elasticsearch-1 -DNS.15 = cogstack-elasticsearch-2 -DNS.16 = cogstack-elasticsearch-3 -DNS.17 = cogstack-nifi -DNS.18 = cogstack-nifi-nginx -DNS.19 = cogstack-auth-service -DNS.20 = cogstack -DNS.21 = *.cogstack -DNS.22 = localhost -IP.1 = 127.0.0.1 -email.1 = admin@cogstack.net - -[req] -default_bits = 4096 -string_mask = utf8only -prompt = no -distinguished_name = req_distinguished_name -x509_extensions = v3_leaf -default_md = sha256 - -[req_distinguished_name] -CN = cogstack -C = UK -ST = London -L = UK -O = cogstack -OU = cogstack -CN = cogstack -``` +| `users_*.env` | Public local-development credentials consumed by services and setup scripts. Override them for every real deployment. | + +### OpenSSL extension configuration -> πŸ’‘ **Tip:** -> Always reload environment variables before running any script: -> ```bash -> cd ../deploy -> source export_env_vars.sh -> cd ../security -> ``` -> or manually if you just want to test out one file: -> ```bash -> source file.env -> ``` +`security/templates/ssl-extensions-x509.cnf` defines the shared CA and general service certificate extensions. `security/templates/gitea-x509.cnf` contains the narrower server-only SAN set used by Gitea. Add every deployment hostname to the relevant SAN list before generating certificates; changing a template does not alter certificates that have already been generated. + +The Make targets load the required `.env` files automatically. The lower-level scripts remain available for development and troubleshooting, but should be run from `security/scripts/` because several of them use paths relative to that directory. --- ### πŸ› οΈ Generation workflow -From the repository root, initialize all certificates required by NiFi and the -search backend selected by `ELASTICSEARCH_VERSION` in `deploy/elasticsearch.env`: +From the repository root, initialize all certificates required by NiFi, Gitea, +and the search backend selected by `ELASTICSEARCH_VERSION` in `deploy/elasticsearch.env`: ```bash make -C deploy init-security @@ -165,39 +91,41 @@ You can also initialize certificate sets independently: ```bash make -C deploy init-security-root-ca make -C deploy init-security-nifi +make -C deploy init-security-gitea make -C deploy init-security-opensearch make -C deploy init-security-elasticsearch ``` The initialization targets are idempotent: complete certificate sets are left -unchanged. Native Elasticsearch generation uses Docker and refuses to overwrite -an existing incomplete directory automatically. +unchanged. Root CA and native Elasticsearch generation refuse to overwrite an +existing incomplete directory automatically, preventing accidental CA rotation. + +1. **(Optional) Create a custom JKS keystore** -1. **(Optional) Create custom JKS keystores** + The low-level helper expects `mycert.crt` and `mycert.key` in the current directory. Pass base names rather than file names with extensions: ```bash cd security/scripts - bash create_keystore.sh mycert.pem mystore.jks mypassword + bash create_keystore.sh mycert mycert-keystore mypassword ``` -2. **Re-export environment variables and restart services** +2. **Restart the required services** ```bash - cd ../../deploy - source export_env_vars.sh - make start- + make -C deploy start- ``` --- ### 🧠 Best practices -- **Do not commit** private keys (`*.key`, `*.p12`, `*.jks`) to version control. -- **Back up** the Root CA files securely β€” they’re your trust anchor. -- **Rotate** certificates regularly (every 2 years) or whenever hostnames change. -- **Use unique CN/SANs** per environment (`dev`, `staging`, `prod`). +- **Do not commit** private keys (`*.key`, `*.p12`, `*.jks`) to version control. +- **Back up** the root CA securely β€” it is the deployment trust anchor. +- **Rotate** certificates before expiry or whenever a key may have been exposed. +- **Use unique CN/SANs** per environment (`dev`, `staging`, `prod`). - **Verify** certificate chains before deployment (e.g): ```bash - openssl verify -CAfile security/certificates/root/root-ca.pem security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt +openssl verify -CAfile security/certificates/root/root-ca.pem \ + security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt ``` diff --git a/docs/security/elasticsearch_opensearch.md b/docs/security/elasticsearch_opensearch.md index 32a3dab5e..cafd70ab9 100644 --- a/docs/security/elasticsearch_opensearch.md +++ b/docs/security/elasticsearch_opensearch.md @@ -2,7 +2,7 @@ This section describes how to secure both **Elasticsearch (native)** and **OpenSearch** clusters used in the CogStack-NiFi stack, including certificate setup, user management, and role configuration. -All related certificates are stored in `security/certificates/elastic/`, and are generated from the shared **Root CA** created via [`create_root_ca_cert.sh`](certificates.md). +All related certificates are stored in `security/certificates/elastic/`. OpenSearch certificates are signed by the shared root CA; native Elasticsearch creates its own backend-specific certificate authority. Use the supported Make targets described in [Certificates and Root CA](certificates.md) to generate either set. --- @@ -14,7 +14,7 @@ Both **Elasticsearch** and **OpenSearch** deployments require: - secure credentials for built-in and custom users, - properly configured roles and role mappings. -Certificates and credentials are generated using the scripts provided in `security/scripts/` and are controlled through the `.env` files under `security/env/`. +Certificates are generated through the Make targets in `deploy/Makefile`. Those targets call the scripts in `security/scripts/` and load their configuration from the `.env` files under `security/env/`. --- @@ -28,13 +28,7 @@ All scripts reference the following environment configuration files: | `certificates_general.env` | Root CA configuration | | `users_elasticsearch.env` | Internal user credentials | -Reload them before running any security-related script: - -```bash -cd ../deploy -source export_env_vars.sh -cd ../security -``` +The Make targets and supported security scripts load these files themselves. Edit the files before generation; no separate export step is required. --- @@ -73,7 +67,7 @@ security/certificates/elastic/ β”‚ β”œβ”€β”€ sample-kibana.yml β”‚ └── README.txt └── opensearch/ - β”œβ”€β”€ admin.*, es_kibana_client.*, elastic-stack-ca.*, root-ca.* + β”œβ”€β”€ admin.*, es_kibana_client.*, elastic-stack-ca.* └── elasticsearch/{1,2,3}/... ``` @@ -85,10 +79,10 @@ Each version has its own generation scripts, but they all depend on the same `.e #### Elasticsearch (native) -To generate certificates for Elasticsearch: +To generate certificates for Elasticsearch from the repository root: ```bash -bash ./create_es_native_certs.sh +make -C deploy init-security-elasticsearch ``` This script creates all required node and HTTP certificates under: @@ -99,7 +93,7 @@ security/certificates/elastic/elasticsearch/elasticsearch-{1,2,3}/ The script uses variables such as: -- `ES_INSTANCE_NAME_*` β€” Node names (match `ELASTICSEARCH_NODE_*_NAME` in `/deploy/elasticsearch.env`) +- `ES_INSTANCE_NAME_*` β€” Node names (match `ELASTICSEARCH_NODE_*_NAME` in `deploy/elasticsearch.env`) - `ES_INSTANCE_ALTERNATIVE_*_NAME` β€” Alternative hostnames - `ES_HOSTNAMES` β€” List of all node hostnames - `ES_CLIENT_SUBJ_ALT_NAMES` / `ES_NODE_SUBJ_ALT_NAMES` β€” Additional domain aliases for SAN fields @@ -110,16 +104,10 @@ Make sure the environment variables are set correctly before running the script. #### OpenSearch -For OpenSearch nodes: - -```bash -bash ./create_opensearch_node_cert.sh elasticsearch-1 elasticsearch-2 elasticsearch-3 -``` - -Then generate the admin and client certificates: +To generate the OpenSearch node, admin, and client certificates from the repository root: ```bash -bash ./create_opensearch_client_admin_certs.sh +make -C deploy init-security-opensearch ``` This produces: @@ -153,21 +141,16 @@ All certificate references in `services/kibana/config/opensearch.yml` or `servic #### OpenSearch -1. Edit `security/es_roles/opensearch/internal_users.yml` to define users. -2. Optionally generate password hashes: +1. Edit the password values in `security/env/users_elasticsearch.env` and ensure every required user is present in `security/es_roles/opensearch/internal_users.yml`. +2. With OpenSearch running, validate and then apply hashes for all internal users: ```bash - bash ./create_opensearch_internal_passwords.sh - ``` - -3. Apply changes by recreating containers: - - ```bash - docker compose down -v - docker compose up -d + cd security/scripts + ./update_opensearch_users.sh elasticsearch-1 + ./update_opensearch_users.sh elasticsearch-1 --apply ``` -4. Populate tenants, roles, users, and role mappings: +3. Populate the additional tenants, roles, users, and role mappings: ```bash cd security/scripts @@ -206,8 +189,10 @@ What it creates/updates: Verification example: ```bash -curl -k -u admin:${ELASTIC_PASSWORD} \ - https://elasticsearch-1:9200/_opendistro/_security/api/roles/cogstack_ingest +source security/env/users_elasticsearch.env +curl --cacert security/certificates/elastic/opensearch/elastic-stack-ca.crt.pem \ + -u "admin:${ADMIN_PASSWORD:-$ELASTIC_PASSWORD}" \ + https://localhost:9200/_plugins/_security/api/roles/cogstack_ingest ``` Troubleshooting: @@ -293,13 +278,14 @@ Verification example after rotating `admin`, from the repository root: ```bash source security/env/users_elasticsearch.env -curl -k -u "admin:${ADMIN_PASSWORD:-$ELASTIC_PASSWORD}" \ - https://elasticsearch-1:9200/_plugins/_security/api/account +curl --cacert security/certificates/elastic/opensearch/elastic-stack-ca.crt.pem \ + -u "admin:${ADMIN_PASSWORD:-$ELASTIC_PASSWORD}" \ + https://localhost:9200/_plugins/_security/api/account ``` ##### OpenSearch Dashboards post-login setup (Global tenant + workspace) -After your first login to `https://localhost:5601` (default: `admin` / `admin`): +After your first login to `https://localhost:5601` using the development credentials in `security/env/users_elasticsearch.env`: 1. Open the user menu (top-right) and select **Switch tenant**. 2. Select `Global`, then apply the change. @@ -326,6 +312,7 @@ workspace.enabled: true Run after containers start: ```bash +cd security/scripts bash ./create_es_native_credentials.sh ``` @@ -355,14 +342,19 @@ You can modify credentials in `security/env/users_elasticsearch.env`. #### βœ… Verification -To verify HTTPS access and trust: +To verify HTTPS access and trust for the selected backend from the repository root, use its generated CA file: ```bash -curl -vk --cacert ./root-ca.pem https://elasticsearch-1:9200 +source deploy/elasticsearch.env +curl --cacert "security/certificates/elastic/${ELASTICSEARCH_VERSION}/elastic-stack-ca.crt.pem" \ + https://localhost:9200/ ``` -To check inter-node encryption (inside a container): +To inspect a node certificate while verifying the same CA: ```bash -openssl s_client -connect elasticsearch-1:9300 -CAfile ./root-ca.pem +source deploy/elasticsearch.env +openssl s_client -connect localhost:9200 -servername localhost \ + -CAfile "security/certificates/elastic/${ELASTICSEARCH_VERSION}/elastic-stack-ca.crt.pem" \ + -verify_hostname localhost ``` diff --git a/docs/security/main.md b/docs/security/main.md index 13faa51ca..08795b77c 100644 --- a/docs/security/main.md +++ b/docs/security/main.md @@ -2,31 +2,31 @@ ## πŸ—ΊοΈ Overview -All core CogStack-NiFi services β€” including **NiFi**, **Elasticsearch/OpenSearch**, **Kibana/OpenSearch Dashboards**, **JupyterHub**, **NGINX** and **Gitea** β€” are now deployed with **HTTPS enabled by default**. -Each component is provisioned with its own X.509 certificates issued by the shared root CA generated via the `create_root_ca_cert.sh` script. +Core CogStack-NiFi services use TLS certificates generated locally for each deployment. A shared root Certificate Authority (CA) signs dedicated service leaf certificates, while native Elasticsearch uses its own certificate-generation tooling. This ensures full end-to-end encryption across the stack for essential operations, including service-to-service communication and user-facing endpoints. Security is achieved through: - A unified **root Certificate Authority (CA)**, -- Per-service certificate generation and signing scripts, -- Environment variable management for secrets and credentials, and +- Per-service certificate generation and signing targets, +- Environment-file management for local development credentials, and - Optional reverse-proxy enforcement via **NGINX**. -> ⚠️ **Important:** Always generate unique certificates and credentials for each deployment. -> The repository provides sample certificates for demonstration only. +!!! warning + + Generated certificates and private keys are deployment-local and ignored by Git. Run `make -C deploy init-security` before starting services. The tracked `security/env/*.env` files contain public development defaults only; never use those values as production secrets. ## 🧩 Components secured with HTTPS -| Service | HTTPS/TLS Enabled | Certificate Location | Script(s) Used | -|----------|------------------|----------------------|----------------| -| NiFi | βœ… | `security/certificates/nifi/` | `nifi_toolkit_security.sh` | -| Elasticsearch / OpenSearch | βœ… | `security/certificates/elastic/(elasticsearch or opensearch)/` | `create_es_native_certs.sh`, `create_opensearch_node_cert.sh` | -| Kibana / OpenSearch Dashboards | βœ… | `security/certificates/elastic/(elasticsearch or opensearch)/` | `create_opensearch_client_admin_certs.sh` | -| JupyterHub | βœ… | `security/certificates/root/` | `create_root_ca_cert.sh` | -| Gitea | βœ… | `security/certificates/root/` | `create_root_ca_cert.sh` | -| NGINX | βœ… | `security/certificates/root/` | `create_root_ca_cert.sh` | +| Service | Certificate location | Supported initialization target | +|---------|----------------------|---------------------------------| +| NiFi | `security/certificates/nifi/` | `make -C deploy init-security-nifi` | +| Elasticsearch | `security/certificates/elastic/elasticsearch/` | `make -C deploy init-security-elasticsearch` | +| OpenSearch and Dashboards | `security/certificates/elastic/opensearch/` | `make -C deploy init-security-opensearch` | +| Gitea | `security/certificates/gitea/` | `make -C deploy init-security-gitea` | + +The root CA private key must be used only to sign leaf certificates. Services trust `root-ca.pem`; they must never serve `root-ca.key` as their TLS private key. --- @@ -39,12 +39,13 @@ Below is the high-level structure with explanations for each sub-folder. security/ β”œβ”€β”€ certificates/ # All generated certificates and keystores β”‚ β”œβ”€β”€ elastic/ # Elasticsearch / OpenSearch + Kibana certs -β”‚ β”œβ”€β”€ nifi/ # Apache NiFi certificates (generated via NiFi Toolkit) +β”‚ β”œβ”€β”€ nifi/ # Apache NiFi leaf certificate and Java stores +β”‚ β”œβ”€β”€ gitea/ # Gitea leaf certificate β”‚ └── root/ # Root CA files and truststores β”‚ β”œβ”€β”€ env/ # Environment variable definitions for certs and users β”‚ β”œβ”€β”€ certificates_*.env # Variables controlling certificate generation -β”‚ └── users_*.env # Default credentials for each service +β”‚ └── users_*.env # Public local-development defaults only β”‚ β”œβ”€β”€ es_roles/ # Role and role mapping definitions for ES / OpenSearch β”‚ β”œβ”€β”€ elasticsearch/ # Native Elasticsearch roles @@ -55,15 +56,17 @@ security/ β”‚ β”œβ”€β”€ create_es_native_certs.sh # Elasticsearch node and client certs β”‚ β”œβ”€β”€ create_es_native_credentials.sh # Runs post-deployment to create default Elasticsearch system users and tokens β”‚ β”œβ”€β”€ create_opensearch_node_cert.sh # Generates certificates and JKS stores for each OpenSearch node -β”‚ β”œβ”€β”€ create_opensearch_admin_certs.sh # Creates admin + client certificates for OpenSearch Dashboards (Kibana equivalent) +β”‚ β”œβ”€β”€ create_opensearch_client_admin_certs.sh # Creates admin + client certificates for OpenSearch Dashboards β”‚ β”œβ”€β”€ create_opensearch_internal_passwords.sh # Generates bcrypt password hashes for OpenSearch internal_users.yml β”‚ β”œβ”€β”€ update_opensearch_users.sh # Updates password hashes for every user in OpenSearch internal_users.yml β”‚ β”œβ”€β”€ create_opensearch_users.sh # Creates OpenSearch internal users and role mappings (manual execution post-startup) -β”‚ β”œβ”€β”€ nifi_toolkit_security.sh # Generates NiFi HTTPS certs using NiFi Toolkit (for NiFi < 2.0, no longer used for certs as of 2.0+) +β”‚ β”œβ”€β”€ create_nifi_certs.sh # Generates NiFi 2.x leaf certificates and Java stores +β”‚ β”œβ”€β”€ create_gitea_certs.sh # Generates a dedicated Gitea leaf certificate +β”‚ β”œβ”€β”€ nifi_toolkit_security.sh # Legacy NiFi < 2.0 certificate helper β”‚ β”œβ”€β”€ nifi_init_create_user_auth.sh # Bootstraps a temporary NiFi container to create a single-user authentication file β”‚ β”œβ”€β”€ nifi_create_single_user_auth.sh # Helper script executed inside the container to generate NiFi single-user credentials β”‚ β”œβ”€β”€ es_native_cert_generator.sh # Helper called by create_es_native_certs.sh to assemble ES cert bundles -β”‚ └── create_keystore.sh # Builds Java KeyStores (JKS) from PEM or PKCS#12 certificates +β”‚ └── create_keystore.sh # Builds Java keystores from a certificate and private key β”‚ └── templates/ # OpenSSL / X.509 configuration templates └── ssl-extensions-x509.cnf # SAN extensions used across certificate scripts diff --git a/docs/security/nifi.md b/docs/security/nifi.md index e1c3bffa8..7ed1fda23 100644 --- a/docs/security/nifi.md +++ b/docs/security/nifi.md @@ -35,7 +35,7 @@ For securing Apache NiFi endpoints with certificates, see [the official document Before starting the NiFi container: -- (optional if already done) run `create_root_ca_cert.sh` to generate root CA certs used across services. +- run `make -C deploy init-security-nifi` from the repository root. This creates the shared root CA when needed, then generates the NiFi certificate bundle without replacing a complete existing bundle. - set `nifi.sensitive.props.key` to a stable value (minimum 12 characters). Example (`nifi/conf/nifi.properties`): @@ -52,12 +52,7 @@ nifi.security.truststorePasswd=example-truststore-password ### Setting up access via user account (single user credentials) -Default: - -```text -username: admin -password: cogstackNiFi -``` +Local single-user credentials are defined in `security/env/users_nifi.env`. They are public development defaults and must be replaced for any exposed deployment. - `login-identity-providers.xml` in `nifi/conf/` stores the account settings. - to generate credentials inside the container: @@ -165,7 +160,10 @@ server { ### πŸ§ͺ Test connectivity ```bash -curl -vk --cert ./nifi.pem --key ./nifi.key https://localhost:8443/nifi-api/flow/about +curl --cacert security/certificates/root/root-ca.pem \ + --cert security/certificates/nifi/nifi.pem \ + --key security/certificates/nifi/nifi.key \ + https://localhost:8443/nifi-api/flow/about ``` --- diff --git a/docs/security/services.md b/docs/security/services.md index bbe15ca28..0afb62fa0 100644 --- a/docs/security/services.md +++ b/docs/security/services.md @@ -1,47 +1,49 @@ -## πŸ—„οΈ Security for CogStack provided other services +# Security for additional services -### General services TLS configuration +Services use dedicated leaf certificates for HTTPS and trust the shared CogStack root CA. The root CA private key must be retained only for signing and must never be mounted as a service's TLS key. -All services in cogstack that are not listed in `deploy/services.yml`and use TLS will be described on this page. For services that are still part of the stack but in `dervices/` (again, service not also present in `deploy/services.yml`) the TLS setup is handled differently, and the setup is described in each service's README.md. Generally, most should just use the root-ca certs from `security/certificates/root/`. +## Gitea TLS configuration -### Gitea TLS Configuration +Generate the local/reference Gitea certificate from the repository root: -This section describes how **Gitea** is secured using the shared **Root Certificate Authority (CA)** generated by `create_root_ca_cert.sh`. - -Unlike other services (such as NiFi or Elastic), **Gitea does not require its own dedicated certificate pair** or an NGINX reverse proxy. -It operates directly with the **Root CA** to provide HTTPS encryption and mutual trust within the CogStack-NiFi stack. - ---- - -### πŸ“ Certificate source +```bash +make -C deploy init-security-gitea +``` -All certificates used by Gitea originate from: +This creates: ```text -security/certificates/root/ +security/certificates/gitea/ +β”œβ”€β”€ gitea.key +β”œβ”€β”€ gitea.csr +β”œβ”€β”€ gitea.pem +└── gitea.crt ``` -| File | Purpose | -|------|----------| -| `root-ca.pem` | Public CA certificate used by Gitea for HTTPS trust | -| `root-ca.key` | Root CA private key (used only when generating new certificates) | -| `root-ca.p12` | Optional PKCS#12 keystore (not required by Gitea) | +The leaf certificate is signed by the shared CA and contains local development SANs for `gitea`, `cogstack-gitea`, `localhost`, and `127.0.0.1`. The Compose configuration mounts the generated certificate directory and configures Gitea to serve `gitea.pem` with `gitea.key`. -### 🧠 Notes +For Kubernetes, create the development TLS Secret with: -- The **Root CA** (`root-ca.pem`) is shared across all CogStack services for internal TLS trust. -- You do **not** need to create a new `gitea.crt` or `gitea.key`; the Root CA cert/key pair is sufficient. -- Ensure `root-ca.key` remains private and is not committed to version control. -- The same CA also secures NiFi, ElasticSearch, OpenSearch, Kibana, and JupyterHub. +```bash +kubectl -n cogstack create secret generic gitea-tls \ + --from-file=gitea.pem=./security/certificates/gitea/gitea.pem \ + --from-file=gitea.key=./security/certificates/gitea/gitea.key +``` ---- +Production deployments should instead provide a deployment-specific TLS Secret issued for their public Gitea hostname, normally through the platform certificate manager. -### βœ… Verification +## Verification -To confirm Gitea is serving HTTPS correctly: +Verify the generated chain before starting Gitea: ```bash -curl -vk --cacert ./security/certificates/root/root-ca.pem https://gitea.local:2222/ +openssl verify \ + -CAfile security/certificates/root/root-ca.pem \ + security/certificates/gitea/gitea.pem ``` -You should see a valid TLS handshake and an HTTP 200 response. +After starting Gitea, verify its HTTPS endpoint: + +```bash +curl --cacert security/certificates/root/root-ca.pem https://localhost:3000/ +``` diff --git a/mkdocs.yml b/mkdocs.yml index 48558c271..83f798e67 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,5 @@ site_name: Cogstack NiFi Documentation -site_url: http://localhost:8080/docs/ +site_url: !ENV [READTHEDOCS_CANONICAL_URL, "https://cogstack-nifi.readthedocs.io/en/latest/"] theme: name: material @@ -34,6 +34,9 @@ edit_uri: edit/main/docs/ docs_dir: docs +exclude_docs: | + README.md + nav: - Home: index.md - πŸ“° News: news.md @@ -54,7 +57,7 @@ nav: - πŸ›‘οΈ Security: - security/main.md - πŸ›οΈ Certificates and Root CA: security/certificates.md - - πŸ—„οΈ Security for CogStack provided other services: security/services.md + - πŸ—„οΈ Additional services: security/services.md - πŸ” NiFi TLS & Admin Access Setup (with NGINX): security/nifi.md - 🌐 Elasticsearch / OpenSearch Security: security/elasticsearch_opensearch.md @@ -79,3 +82,14 @@ markdown_extensions: - pymdownx.emoji: emoji_index: !!python/name:material.extensions.emoji.twemoji emoji_generator: !!python/name:material.extensions.emoji.to_svg + +validation: + nav: + omitted_files: warn + not_found: warn + absolute_links: warn + links: + not_found: warn + anchors: warn + absolute_links: warn + unrecognized_links: warn diff --git a/security/certificates/README.md b/security/certificates/README.md index 875e8b53c..dd60ca9f0 100644 --- a/security/certificates/README.md +++ b/security/certificates/README.md @@ -4,8 +4,8 @@ Everything in this directory, apart from this file, is generated locally and must not be committed. Generated bundles include private keys and are specific to a development or deployment environment. -From the repository root, generate all missing certificates required by NiFi -and the search backend selected in `deploy/elasticsearch.env`: +From the repository root, generate all missing certificates required by NiFi, +Gitea, and the search backend selected in `deploy/elasticsearch.env`: ```bash make -C deploy init-security @@ -16,13 +16,14 @@ The individual initialization targets are also available: ```bash make -C deploy init-security-root-ca make -C deploy init-security-nifi +make -C deploy init-security-gitea make -C deploy init-security-opensearch make -C deploy init-security-elasticsearch ``` -These targets leave complete existing certificate sets unchanged. They generate -only missing or incomplete service sets and do not silently rotate an existing -root CA. +These targets leave complete existing certificate sets unchanged. An incomplete +root CA or native Elasticsearch set causes a safe failure so the existing +material can be preserved and repaired; the targets never silently rotate a CA. Any private keys that were previously committed to Git must be considered public. Do not reuse them outside local development, and rotate any deployment diff --git a/security/scripts/create_gitea_certs.sh b/security/scripts/create_gitea_certs.sh new file mode 100644 index 000000000..fd8651f36 --- /dev/null +++ b/security/scripts/create_gitea_certs.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +# Generate a dedicated Gitea leaf certificate signed by the shared CogStack CA. + +set -euo pipefail + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +SECURITY_DIR="${SECURITY_DIR_OVERRIDE:-$(cd -- "${SCRIPT_DIR}/.." && pwd)}" +SECURITY_ENV_DIR="${SECURITY_DIR}/env" +CERTIFICATES_DIR="${SECURITY_DIR}/certificates" +ROOT_CERTIFICATES_DIR="${CERTIFICATES_DIR}/root" +GITEA_CERTIFICATES_DIR="${CERTIFICATES_DIR}/gitea" +EXT_FILE="${SECURITY_DIR}/templates/gitea-x509.cnf" + +# shellcheck disable=SC1091 +source "${SECURITY_ENV_DIR}/certificates_general.env" + +: "${ROOT_CERTIFICATE_NAME:?Must be set in certificates_general.env}" +: "${ROOT_CERTIFICATE_TIME_VAILIDITY_IN_DAYS:?Must be set in certificates_general.env}" + +CA_CERT="${ROOT_CERTIFICATES_DIR}/${ROOT_CERTIFICATE_NAME}.pem" +CA_KEY="${ROOT_CERTIFICATES_DIR}/${ROOT_CERTIFICATE_NAME}.key" +KEY_FILE="${GITEA_CERTIFICATES_DIR}/gitea.key" +CSR_FILE="${GITEA_CERTIFICATES_DIR}/gitea.csr" +CERT_FILE="${GITEA_CERTIFICATES_DIR}/gitea.pem" +CRT_FILE="${GITEA_CERTIFICATES_DIR}/gitea.crt" + +if [[ ! -f "$CA_CERT" || ! -f "$CA_KEY" ]]; then + echo "ERROR: Missing root CA files. Run 'make -C deploy init-security-root-ca' first." >&2 + exit 1 +fi + +mkdir -p "$GITEA_CERTIFICATES_DIR" +rm -f "$KEY_FILE" "$CSR_FILE" "$CERT_FILE" "$CRT_FILE" + +openssl genrsa -out "$KEY_FILE" 4096 +openssl req -new \ + -key "$KEY_FILE" \ + -out "$CSR_FILE" \ + -subj "/C=UK/ST=London/L=UK/O=cogstack/OU=cogstack/CN=gitea" + +openssl x509 -req \ + -in "$CSR_FILE" \ + -CA "$CA_CERT" \ + -CAkey "$CA_KEY" \ + -CAcreateserial \ + -out "$CERT_FILE" \ + -days "${GITEA_CERTIFICATE_TIME_VALIDITY_IN_DAYS:-825}" \ + -sha256 \ + -extfile "$EXT_FILE" \ + -extensions v3_leaf + +openssl x509 -in "$CERT_FILE" -outform DER -out "$CRT_FILE" + +chmod 600 "$KEY_FILE" +chmod 644 "$CSR_FILE" "$CERT_FILE" "$CRT_FILE" + +echo "Generated Gitea leaf certificate in $GITEA_CERTIFICATES_DIR" diff --git a/security/scripts/nifi_init_create_user_auth.sh b/security/scripts/nifi_init_create_user_auth.sh index 30ef2e83f..e06086bcc 100755 --- a/security/scripts/nifi_init_create_user_auth.sh +++ b/security/scripts/nifi_init_create_user_auth.sh @@ -13,25 +13,47 @@ # - NIFI_SINGLE_USER_CREDENTIALS_USERNAME # - NIFI_SINGLE_USER_CREDENTIALS_PASSWORD # -# ⚠️ Must be run from the root of the CogStack-NiFi repository. -# # Usage: -# ./nifi_init_create_user_auth.sh +# bash security/scripts/nifi_init_create_user_auth.sh # ============================================================================== set -euo pipefail +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd -- "${SCRIPT_DIR}/../.." && pwd)" +DEPLOY_DIR="${REPO_ROOT}/deploy" + +# Load the repository's existing Docker and security .env files so Compose +# interpolation behaves the same way as the deploy/Makefile targets. +# shellcheck disable=SC1091 +source "${DEPLOY_DIR}/export_env_vars.sh" + +remove_existing_nifi_containers() { + local container_id + local -a container_ids=() + + while IFS= read -r container_id; do + if [[ -n "$container_id" ]]; then + container_ids+=("$container_id") + fi + done < <(docker ps -a -q --filter name="cogstack-nifi*") + + if (( ${#container_ids[@]} > 0 )); then + docker container rm -f "${container_ids[@]}" + fi +} + echo "🧹 Removing any existing 'cogstack-nifi' container..." -docker container rm -f $(docker ps -a -q --filter name="cogstack-nifi*") || true +remove_existing_nifi_containers echo "πŸš€ Starting NiFi container (for credential injection)..." -docker compose --project-directory ../deploy -f ../deploy/services.yml up -d nifi +docker compose --project-directory "${DEPLOY_DIR}" -f "${DEPLOY_DIR}/services.yml" up -d nifi echo "πŸ” Setting NiFi single-user credentials from inside the container..." -docker exec -it cogstack-nifi \ +docker exec cogstack-nifi \ /bin/bash /opt/nifi/nifi-current/security_scripts/nifi_create_single_user_auth.sh echo "🧼 Removing temporary NiFi container..." -docker container rm -f $(docker ps -a -q --filter name="cogstack-nifi*") || true +remove_existing_nifi_containers echo "βœ… NiFi single-user credential setup completed." diff --git a/services/gitea/app.ini b/services/gitea/app.ini index d534f4fa8..e82428b0b 100644 --- a/services/gitea/app.ini +++ b/services/gitea/app.ini @@ -274,8 +274,8 @@ SSH_LISTEN_PORT = 22 ; ; $ openssl pkcs12 -in cert.pfx -out cert.pem -nokeys ; ; $ openssl pkcs12 -in cert.pfx -out key.pem -nocerts -nodes ; ; Paths are relative to CUSTOM_PATH -CERT_FILE = /certificates/root/root-ca.pem -KEY_FILE = /certificates/root/root-ca.key +CERT_FILE = /certificates/gitea/gitea.pem +KEY_FILE = /certificates/gitea/gitea.key SSH_DOMAIN = 0.0.0.0 DOMAIN = localhost HTTP_PORT = 3000 From c1d14a1bc4635b03adedf099e4ec5c2e50af0077 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 17:32:23 +0100 Subject: [PATCH 08/30] Deploy: helm updates for gitea. --- deploy/helm/gitea.values.yaml | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/deploy/helm/gitea.values.yaml b/deploy/helm/gitea.values.yaml index cb510837d..fa99c8958 100644 --- a/deploy/helm/gitea.values.yaml +++ b/deploy/helm/gitea.values.yaml @@ -46,10 +46,13 @@ postgresql: # --from-literal=username=admin \ # --from-literal=password='change-me' # -# Create this Secret before install to preserve the current direct-HTTPS setup: -# kubectl create secret generic gitea-root-ca \ -# --from-file=root-ca.pem=./security/certificates/root/root-ca.pem \ -# --from-file=root-ca.key=./security/certificates/root/root-ca.key +# For local/reference deployments, create this Secret from the dedicated Gitea +# leaf certificate generated by `make -C deploy init-security-gitea`: +# kubectl create secret generic gitea-tls \ +# --from-file=gitea.pem=./security/certificates/gitea/gitea.pem \ +# --from-file=gitea.key=./security/certificates/gitea/gitea.key +# Production deployments should use a deployment-specific TLS Secret issued by +# their normal certificate manager instead. gitea: admin: # existingSecret: gitea-admin-credentials @@ -70,8 +73,8 @@ gitea: SSH_PORT: 2222 SSH_LISTEN_HOST: 0.0.0.0 SSH_LISTEN_PORT: 2222 - CERT_FILE: /certificates/root/root-ca.pem - KEY_FILE: /certificates/root/root-ca.key + CERT_FILE: /certificates/gitea/gitea.pem + KEY_FILE: /certificates/gitea/gitea.key database: DB_TYPE: sqlite3 PATH: /data/gitea/gitea.db @@ -94,16 +97,16 @@ gitea: DEFAULT_TRUST_MODEL: committer extraVolumes: - - name: gitea-root-ca + - name: gitea-tls secret: - secretName: gitea-root-ca + secretName: gitea-tls extraInitVolumeMounts: - - name: gitea-root-ca - mountPath: /certificates/root + - name: gitea-tls + mountPath: /certificates/gitea readOnly: true extraContainerVolumeMounts: - - name: gitea-root-ca - mountPath: /certificates/root + - name: gitea-tls + mountPath: /certificates/gitea readOnly: true From e0ae4216ba479b1e5b8b2d78dc3d22d027b32315 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 17:35:50 +0100 Subject: [PATCH 09/30] NiFi: requirements update. --- nifi/requirements.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/nifi/requirements.txt b/nifi/requirements.txt index a53bf7a36..4e7c45d2a 100644 --- a/nifi/requirements.txt +++ b/nifi/requirements.txt @@ -6,17 +6,17 @@ numpy==2.4.2 pandas==2.3.3 dill>=0.4.0,<1.0.0 bokeh==3.8.2 -psycopg[c,binary]==3.2.9 +psycopg[c,binary]==3.3.5 overrides==7.0.0 -polars==1.37.1 -snowflake==1.10.0 +polars==1.44.1 +snowflake==1.13.1 # used in NiFi scripts: geolocation, avro conversion etc. py4j==0.10.9.9 rancoord==0.0.6 geocoder==1.38.1 -avro==1.12.1 -nipyapi==1.5.1 +avro==1.12.2 +nipyapi==1.7.0 py7zr==1.1.3 jsonpickle==4.1.1 xlsxwriter==3.2.9 @@ -25,9 +25,9 @@ snowflake-connector-python==4.7.2 pymssql==2.3.9 requests==2.33.0 PyYAML==6.0.3 -pydantic==2.12.5 +pydantic==2.13.5 overrides==7.0.0 -pyarrow==23.0.1 +pyarrow==25.0.1 pydantic-settings==2.14.2 fhir.resources==8.3.0 # other utils From 9ab604a870ba886eda0b3e9055e23128a612f1b0 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 17:55:12 +0100 Subject: [PATCH 10/30] Security: fixed bash sh perms. --- security/scripts/create_gitea_certs.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 security/scripts/create_gitea_certs.sh diff --git a/security/scripts/create_gitea_certs.sh b/security/scripts/create_gitea_certs.sh old mode 100644 new mode 100755 From 52653d525ed59208115bb920fb65b61a7ebd435f Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 18:15:35 +0100 Subject: [PATCH 11/30] Security: removed credential output from sh scripts. --- .github/workflows/smoke_gitea_service.yml | 3 +- scripts/tests/smoke_elastic_services.sh | 3 ++ scripts/tests/smoke_gitea_service.sh | 3 ++ scripts/tests/smoke_http_checks.sh | 20 +++++++++++-- scripts/tests/smoke_nifi_services.sh | 3 ++ .../scripts/create_es_native_credentials.sh | 30 ++++++++++++++----- security/scripts/create_keystore.sh | 3 +- .../create_opensearch_internal_passwords.sh | 20 ++++--------- 8 files changed, 55 insertions(+), 30 deletions(-) diff --git a/.github/workflows/smoke_gitea_service.yml b/.github/workflows/smoke_gitea_service.yml index 628e74bc8..0dc7445d6 100644 --- a/.github/workflows/smoke_gitea_service.yml +++ b/.github/workflows/smoke_gitea_service.yml @@ -24,10 +24,9 @@ jobs: java-version: '21' - name: Generate certificates - working-directory: security/scripts run: | set -euo pipefail - ./create_root_ca_cert.sh + make -C deploy init-security-gitea - name: Start Gitea service run: | diff --git a/scripts/tests/smoke_elastic_services.sh b/scripts/tests/smoke_elastic_services.sh index 30c6da730..6b646e835 100755 --- a/scripts/tests/smoke_elastic_services.sh +++ b/scripts/tests/smoke_elastic_services.sh @@ -27,6 +27,9 @@ ELASTICSEARCH_PORT_LIST=( "${ELASTICSEARCH_NODE_3_OUTPUT_PORT:-9202}" ) KIBANA_PORT="${KIBANA_SERVER_OUTPUT_PORT:-5601}" +# The sourced smoke helper reads this shared variable when checks run. +# shellcheck disable=SC2034 +SMOKE_CA_CERT="${ELASTICSEARCH_SMOKE_CA_CERT:-${ROOT_DIR}/security/certificates/elastic/${ELASTICSEARCH_VERSION:-opensearch}/elastic-stack-ca.crt.pem}" START_SERVICES="${ELASTICSEARCH_SMOKE_START_SERVICES:-1}" diff --git a/scripts/tests/smoke_gitea_service.sh b/scripts/tests/smoke_gitea_service.sh index 90396df4f..4781efed0 100755 --- a/scripts/tests/smoke_gitea_service.sh +++ b/scripts/tests/smoke_gitea_service.sh @@ -22,6 +22,9 @@ source "$SMOKE_HELPERS" HOST="${GITEA_SMOKE_HOST:-localhost}" PORT="${GITEA_SMOKE_PORT:-3000}" +# The sourced smoke helper reads this shared variable when checks run. +# shellcheck disable=SC2034 +SMOKE_CA_CERT="${GITEA_SMOKE_CA_CERT:-${ROOT_DIR}/security/certificates/root/root-ca.pem}" START_SERVICES="${GITEA_SMOKE_START_SERVICES:-1}" RETRIES="${GITEA_SMOKE_RETRIES:-30}" diff --git a/scripts/tests/smoke_http_checks.sh b/scripts/tests/smoke_http_checks.sh index bc2a4a47d..c77087bfa 100755 --- a/scripts/tests/smoke_http_checks.sh +++ b/scripts/tests/smoke_http_checks.sh @@ -20,10 +20,24 @@ check_url() { local url="$2" local code local allowed + local -a curl_args=( + --silent + --show-error + --output /dev/null + --connect-timeout "$SMOKE_CONNECT_TIMEOUT" + --max-time "$SMOKE_MAX_TIME" + --write-out "%{http_code}" + ) + + if [[ -n "${SMOKE_CA_CERT:-}" ]]; then + if [[ ! -r "$SMOKE_CA_CERT" ]]; then + echo "FAIL: ${name} - CA certificate is not readable: ${SMOKE_CA_CERT}" >&2 + return 1 + fi + curl_args+=(--cacert "$SMOKE_CA_CERT") + fi - if ! code="$(curl --insecure --silent --show-error --output /dev/null \ - --connect-timeout "$SMOKE_CONNECT_TIMEOUT" --max-time "$SMOKE_MAX_TIME" \ - --write-out "%{http_code}" "$url")"; then + if ! code="$(curl "${curl_args[@]}" "$url")"; then echo "FAIL: ${name} - unable to reach ${url}" return 1 fi diff --git a/scripts/tests/smoke_nifi_services.sh b/scripts/tests/smoke_nifi_services.sh index 88e2ad829..9c131c926 100755 --- a/scripts/tests/smoke_nifi_services.sh +++ b/scripts/tests/smoke_nifi_services.sh @@ -22,6 +22,9 @@ source "$SMOKE_HELPERS" HOST="${NIFI_SMOKE_HOST:-localhost}" NIFI_PORT="${NIFI_EXTERNAL_PORT_NGINX:-8443}" +# The sourced smoke helper reads this shared variable when checks run. +# shellcheck disable=SC2034 +SMOKE_CA_CERT="${NIFI_SMOKE_CA_CERT:-${ROOT_DIR}/security/certificates/root/root-ca.pem}" START_SERVICES="${NIFI_SMOKE_START_SERVICES:-1}" RETRIES="${NIFI_SMOKE_RETRIES:-30}" DELAY_SECONDS="${NIFI_SMOKE_DELAY_SECONDS:-15}" diff --git a/security/scripts/create_es_native_credentials.sh b/security/scripts/create_es_native_credentials.sh index e2c70d5e7..c365352d0 100755 --- a/security/scripts/create_es_native_credentials.sh +++ b/security/scripts/create_es_native_credentials.sh @@ -23,10 +23,10 @@ # β€’ `certificates_general.env` must define: # - CA root path used for HTTPS verification # -# Output (to Elasticsearch security API): +# Output: # β€’ Password for `kibana_system` set # β€’ Users `$KIBANA_USER` and `$INGEST_SERVICE_USER` created -# β€’ Fleet Server token generated +# β€’ Fleet Server token written to a mode-0600 JSON file # ============================================================================== set -uo pipefail @@ -55,20 +55,18 @@ ES_CA_KEY="${ES_CERTIFICATES_FOLDER}/elastic-stack-ca.key.pem" echo "====================================== CREATE_ES_NATIVE_CREDENTIALS ==============================" echo "ELASTIC_HOST: $ELASTIC_HOST" -echo "ELASTIC_PASSWORD: $ELASTIC_PASSWORD" echo "ELASTIC_USER: $ELASTIC_USER" echo "KIBANA_USER: $KIBANA_USER" -echo "KIBANA_PASSWORD: $KIBANA_PASSWORD" echo "INGEST_SERVICE_USER: $INGEST_SERVICE_USER" -echo "INGEST_SERVICE_PASSWORD: $INGEST_SERVICE_PASSWORD" echo "ES_ADMIN_EMAIL: $ES_ADMIN_EMAIL" +echo "Credential values: [loaded; values not logged]" echo "==================================================================================================" ES_URL="https://$ELASTIC_HOST:9200" # Wait for Elasticsearch to be available echo "⏳ Waiting for Elasticsearch to become available..." -until curl -ks --cacert "$ES_CA_CERT" -u "elastic:$ELASTIC_PASSWORD" $ES_URL >/dev/null; do +until curl -ks --cacert "$ES_CA_CERT" -u "elastic:$ELASTIC_PASSWORD" "$ES_URL" >/dev/null; do echo " πŸ” Still waiting on $ELASTIC_HOST..." sleep 10 done @@ -116,7 +114,23 @@ create_user "$KIBANA_USER" "$KIBANA_PASSWORD" "\"kibana_system\", \"kibana_admin # Create Fleet server service account token echo "πŸ”‘ Creating Fleet server service account token..." -curl -ks -X POST --cacert "$ES_CA_CERT" -u "elastic:$ELASTIC_PASSWORD" \ - "$ES_URL/_security/service/elastic/fleet-server/credential/token?pretty" +FLEET_TOKEN_OUTPUT_FILE="${ELASTICSEARCH_SERVICE_TOKEN_OUTPUT_FILE:-${ES_CERTIFICATES_FOLDER}/fleet-server-service-token.json}" +mkdir -p "$(dirname "$FLEET_TOKEN_OUTPUT_FILE")" +FLEET_TOKEN_TEMP_FILE="$(mktemp "${FLEET_TOKEN_OUTPUT_FILE}.tmp.XXXXXX")" +trap 'rm -f "$FLEET_TOKEN_TEMP_FILE"' EXIT + +if ! curl -ks --fail -X POST \ + --cacert "$ES_CA_CERT" \ + -u "elastic:$ELASTIC_PASSWORD" \ + --output "$FLEET_TOKEN_TEMP_FILE" \ + "$ES_URL/_security/service/elastic/fleet-server/credential/token?pretty"; then + echo "❌ Failed to create the Fleet Server token; no token file was written." >&2 + exit 1 +fi + +chmod 600 "$FLEET_TOKEN_TEMP_FILE" +mv "$FLEET_TOKEN_TEMP_FILE" "$FLEET_TOKEN_OUTPUT_FILE" +trap - EXIT +echo "βœ… Fleet Server token written to $FLEET_TOKEN_OUTPUT_FILE (value not logged)." echo "βœ… All Elasticsearch native credentials have been created." diff --git a/security/scripts/create_keystore.sh b/security/scripts/create_keystore.sh index 4383bbe6c..a8b7250a3 100755 --- a/security/scripts/create_keystore.sh +++ b/security/scripts/create_keystore.sh @@ -38,7 +38,7 @@ source "${SECURITY_ENV_FOLDER}certificates_general.env" echo "====================================== CREATE_KEYSTORE ==============================" echo "ROOT_CERTIFICATE_NAME: $ROOT_CERTIFICATE_NAME" -echo "ROOT_CERTIFICATE_KEYSTORE_PASSWORD: $ROOT_CERTIFICATE_KEYSTORE_PASSWORD" +echo "Keystore password: [loaded; value not logged]" echo "==================================================================================================" CERT_NAME="${1:-}" @@ -104,4 +104,3 @@ keytool -import \ -keystore "${CERT_NAME}-truststore.key" \ -storepass "$KEYSTORE_PASSWORD" \ -noprompt - \ No newline at end of file diff --git a/security/scripts/create_opensearch_internal_passwords.sh b/security/scripts/create_opensearch_internal_passwords.sh index 1adac134b..f667d8a44 100755 --- a/security/scripts/create_opensearch_internal_passwords.sh +++ b/security/scripts/create_opensearch_internal_passwords.sh @@ -12,7 +12,7 @@ # - ../env/users_elasticsearch.env # # Produces: -# - Two hashes (admin + kibanaserver) printed to stdout +# - Two hashes (admin + kibanaserver) kept out of stdout # - Optionally updates: ./es_roles/opensearch/internal_users.yml # # ============================================================================== @@ -40,8 +40,8 @@ if [[ $# -lt 1 || $# -gt 2 ]]; then fi # Validate required passwords -: "${ELASTIC_PASSWORD:?Must be set in elasticsearch_users.env}" -: "${KIBANA_PASSWORD:?Must be set in elasticsearch_users.env}" +: "${ELASTIC_PASSWORD:?Must be set in users_elasticsearch.env}" +: "${KIBANA_PASSWORD:?Must be set in users_elasticsearch.env}" ES_CONTAINER_NAME="$1" @@ -57,17 +57,7 @@ echo "πŸ” Generating password hashes from container: $ES_CONTAINER_NAME" ES_ADMIN_HASH=$( docker exec "$ES_CONTAINER_NAME" /bin/sh /usr/share/opensearch/plugins/opensearch-security/tools/hash.sh -p "$ELASTIC_PASSWORD" ) ES_KIBANA_HASH=$( docker exec "$ES_CONTAINER_NAME" /bin/sh /usr/share/opensearch/plugins/opensearch-security/tools/hash.sh -p "$KIBANA_PASSWORD" ) -echo "" -echo "--------------------------------" -echo "user: \"admin\"" -echo "password: \"$ELASTIC_PASSWORD\"" -echo "hash: \"$ES_ADMIN_HASH\"" -echo "--------------------------------" -echo "user: \"${KIBANA_USER}\"" -echo "password: \"$KIBANA_PASSWORD\"" -echo "hash: \"$ES_KIBANA_HASH\"" -echo "--------------------------------" -echo "βœ… Now apply these hashes manually in 'internal_users.yml'" +echo "βœ… Generated password hashes for admin and ${KIBANA_USER}; credential material was not logged." # === Patch YAML if --apply is given === if [[ "$APPLY" == "--apply" ]]; then @@ -86,5 +76,5 @@ if [[ "$APPLY" == "--apply" ]]; then echo "βœ… Password hashes updated in $INTERNAL_USERS_YML" else - echo "πŸ“ Skipping YAML patch β€” run with '--apply' to inject into internal_users.yml" + echo "πŸ“ Skipping YAML patch β€” rerun with '--apply' to update internal_users.yml" fi From 5fbe569e68f0fb9cb919ce31ff615f3bc5d18edd Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 18:38:30 +0100 Subject: [PATCH 12/30] Security: updates to x509 templates and gitea cert creation sh. --- security/scripts/create_gitea_certs.sh | 4 ++-- security/templates/ssl-extensions-x509.cnf | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/security/scripts/create_gitea_certs.sh b/security/scripts/create_gitea_certs.sh index fd8651f36..21ea353a8 100755 --- a/security/scripts/create_gitea_certs.sh +++ b/security/scripts/create_gitea_certs.sh @@ -10,7 +10,7 @@ SECURITY_ENV_DIR="${SECURITY_DIR}/env" CERTIFICATES_DIR="${SECURITY_DIR}/certificates" ROOT_CERTIFICATES_DIR="${CERTIFICATES_DIR}/root" GITEA_CERTIFICATES_DIR="${CERTIFICATES_DIR}/gitea" -EXT_FILE="${SECURITY_DIR}/templates/gitea-x509.cnf" +EXT_FILE="${SECURITY_DIR}/templates/ssl-extensions-x509.cnf" # shellcheck disable=SC1091 source "${SECURITY_ENV_DIR}/certificates_general.env" @@ -48,7 +48,7 @@ openssl x509 -req \ -days "${GITEA_CERTIFICATE_TIME_VALIDITY_IN_DAYS:-825}" \ -sha256 \ -extfile "$EXT_FILE" \ - -extensions v3_leaf + -extensions v3_gitea openssl x509 -in "$CERT_FILE" -outform DER -out "$CRT_FILE" diff --git a/security/templates/ssl-extensions-x509.cnf b/security/templates/ssl-extensions-x509.cnf index 78d848a2b..e5e74171c 100755 --- a/security/templates/ssl-extensions-x509.cnf +++ b/security/templates/ssl-extensions-x509.cnf @@ -48,6 +48,20 @@ DNS.25 = localhost IP.1 = 127.0.0.1 email.1 = admin@cogstack.net +[v3_gitea] +basicConstraints = critical, CA:FALSE +keyUsage = critical, digitalSignature, keyEncipherment +extendedKeyUsage = serverAuth +subjectAltName = @gitea_alt_names +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer + +[gitea_alt_names] +DNS.1 = gitea +DNS.2 = cogstack-gitea +DNS.3 = localhost +IP.1 = 127.0.0.1 + [req] default_bits = 4096 string_mask = utf8only From 3e784ad603dc212aeda173001b36ac80421fdf4a Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 18:59:24 +0100 Subject: [PATCH 13/30] Gitea fixes. --- .github/workflows/smoke_gitea_service.yml | 2 ++ deploy/services.yml | 4 ++-- docs/security/services.md | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/smoke_gitea_service.yml b/.github/workflows/smoke_gitea_service.yml index 0dc7445d6..6ae1069a3 100644 --- a/.github/workflows/smoke_gitea_service.yml +++ b/.github/workflows/smoke_gitea_service.yml @@ -27,6 +27,8 @@ jobs: run: | set -euo pipefail make -C deploy init-security-gitea + sudo chown 1000:1000 security/certificates/gitea/gitea.key + sudo chmod 600 security/certificates/gitea/gitea.key - name: Start Gitea service run: | diff --git a/deploy/services.yml b/deploy/services.yml index ee22cac0c..41bfe0368 100644 --- a/deploy/services.yml +++ b/deploy/services.yml @@ -571,8 +571,8 @@ services: volumes: # app config - ../services/gitea/app.ini:/etc/gitea/app.ini:rw - # certificates - - ../security/certificates:/certificates:ro + # dedicated leaf certificate only; never expose the root CA private key + - ../security/certificates/gitea:/certificates/gitea:ro # data & conf volumes - gitea-config-vol:/etc/gitea:rw - gitea-lib-vol:/var/lib/gitea:rw diff --git a/docs/security/services.md b/docs/security/services.md index 0afb62fa0..1fb76a75a 100644 --- a/docs/security/services.md +++ b/docs/security/services.md @@ -20,7 +20,7 @@ security/certificates/gitea/ └── gitea.crt ``` -The leaf certificate is signed by the shared CA and contains local development SANs for `gitea`, `cogstack-gitea`, `localhost`, and `127.0.0.1`. The Compose configuration mounts the generated certificate directory and configures Gitea to serve `gitea.pem` with `gitea.key`. +The leaf certificate is signed by the shared CA and contains local development SANs for `gitea`, `cogstack-gitea`, `localhost`, and `127.0.0.1`. The Compose configuration mounts only this generated leaf-certificate directory and configures Gitea to serve `gitea.pem` with `gitea.key`; it does not expose the root CA private key to the service. For Kubernetes, create the development TLS Secret with: From cea4b5ca806bbb2c1226c941ab637d1acc3c923d Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 19:15:04 +0100 Subject: [PATCH 14/30] Workflow updates. --- .github/workflows/dependency_hygiene.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dependency_hygiene.yml b/.github/workflows/dependency_hygiene.yml index 0f994dc64..9366c1f8d 100644 --- a/.github/workflows/dependency_hygiene.yml +++ b/.github/workflows/dependency_hygiene.yml @@ -6,9 +6,12 @@ on: - cron: "0 6 * * 1" # weekly Monday UTC pull_request: paths: - - "docs/requirements.txt" + - "docs/pyproject.toml" + - "docs/uv.lock" - "nifi/requirements.txt" + - "nifi/requirements-dev.txt" - "scripts/maintenance/audit_pip_dependency.sh" + - ".github/workflows/dependency_hygiene.yml" permissions: contents: read @@ -23,7 +26,7 @@ jobs: uses: actions/cache@v6 with: path: ~/.cache/pip - key: pip-${{ runner.os }}-${{ hashFiles('docs/requirements.txt', 'nifi/requirements.txt', 'scripts/maintenance/audit_pip_dependency.sh') }} + key: pip-${{ runner.os }}-${{ hashFiles('docs/pyproject.toml', 'docs/uv.lock', 'nifi/requirements.txt', 'nifi/requirements-dev.txt', 'scripts/maintenance/audit_pip_dependency.sh') }} restore-keys: | pip-${{ runner.os }}- @@ -32,8 +35,8 @@ jobs: with: python-version: "3.11" - - name: Install pip-audit - run: python -m pip install --upgrade pip pip-audit + - name: Install audit tools + run: python -m pip install --upgrade pip pip-audit uv - name: Ensure script is executable run: chmod +x scripts/maintenance/audit_pip_dependency.sh From 3d83ce7d4cbf8bd1c4db953124b63331b524edd2 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 19:22:32 +0100 Subject: [PATCH 15/30] Fixed pip audit deps. --- scripts/maintenance/audit_pip_dependency.sh | 44 +++++++++++++++------ 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/scripts/maintenance/audit_pip_dependency.sh b/scripts/maintenance/audit_pip_dependency.sh index 37de2582a..dbd353704 100755 --- a/scripts/maintenance/audit_pip_dependency.sh +++ b/scripts/maintenance/audit_pip_dependency.sh @@ -4,11 +4,7 @@ set -euo pipefail -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" - -PY_REQS=( - "docs/requirements.txt" -) +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" PY_REQS_NIFI=( "nifi/requirements.txt" @@ -34,16 +30,42 @@ while [[ $# -gt 0 ]]; do esac done -if [[ "$INCLUDE_NIFI" == true ]]; then - PY_REQS+=("${PY_REQS_NIFI[@]}") -fi +for command in pip-audit uv; do + if ! command -v "$command" >/dev/null 2>&1; then + echo "Required command not found: ${command}" >&2 + exit 1 + fi +done + +TMP_DIR="$(mktemp -d)" +trap 'rm -rf -- "$TMP_DIR"' EXIT + +DOCS_REQUIREMENTS="${TMP_DIR}/docs-requirements.txt" echo "==> Python dependency audit" -for req in "${PY_REQS[@]}"; do +echo "Exporting locked docs dependencies" +uv export \ + --project "${ROOT_DIR}/docs" \ + --quiet \ + --frozen \ + --no-dev \ + --no-emit-project \ + --format requirements.txt \ + --output-file "$DOCS_REQUIREMENTS" + +echo "Running pip-audit on docs/uv.lock" +pip-audit -r "$DOCS_REQUIREMENTS" --progress-spinner off + +if [[ "$INCLUDE_NIFI" != true ]]; then + echo "Dependency audit complete." + exit 0 +fi + +for req in "${PY_REQS_NIFI[@]}"; do file="${ROOT_DIR}/${req}" if [[ ! -f "$file" ]]; then - echo "Skip missing ${req}" - continue + echo "Required dependency file not found: ${req}" >&2 + exit 1 fi echo "Running pip-audit on ${req}" pip-audit -r "$file" --progress-spinner off From 539715d357d61a84ce907ff14b07f3f1bf276332 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 19:45:22 +0100 Subject: [PATCH 16/30] Security: Added proper cert usage to curl commands. --- scripts/gitea_authorize_with_ssh.sh | 14 +++++++- scripts/gitea_create_submodule_repos.sh | 20 ++++++++--- .../scripts/create_es_native_credentials.sh | 6 ++-- security/scripts/create_opensearch_users.sh | 35 +++++++++++-------- security/scripts/es_native_cert_generator.sh | 13 ++++--- 5 files changed, 58 insertions(+), 30 deletions(-) diff --git a/scripts/gitea_authorize_with_ssh.sh b/scripts/gitea_authorize_with_ssh.sh index 58bd92e71..c17320a6c 100755 --- a/scripts/gitea_authorize_with_ssh.sh +++ b/scripts/gitea_authorize_with_ssh.sh @@ -1,6 +1,8 @@ #!/bin/bash set -e +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" GITEA_ENV_FILE="./deploy/gitea.env" if [ -f "$GITEA_ENV_FILE" ]; then @@ -15,6 +17,16 @@ else set +a fi +CURL_TLS_ARGS=() +if [[ "$GITEA_HOST_URL" == https://* ]]; then + GITEA_CA_CERT="${GITEA_CA_CERT:-${REPO_ROOT}/security/certificates/root/root-ca.pem}" + if [[ ! -r "$GITEA_CA_CERT" ]]; then + echo "❌ Gitea CA certificate is not readable: $GITEA_CA_CERT" >&2 + exit 1 + fi + CURL_TLS_ARGS=(--cacert "$GITEA_CA_CERT") +fi + # 1. Generate SSH key if it doesn't exist echo "=================================================================================================================================================" echo "# 1. Generate SSH key if it doesn't exist" @@ -51,7 +63,7 @@ echo "========================================================================== echo "# 3. Upload to Gitea via API" echo "🌐 Uploading SSH key to Gitea..." -curl -s -k -X POST "$GITEA_HOST_URL/api/v1/user/keys" \ +curl --silent --show-error "${CURL_TLS_ARGS[@]}" -X POST "$GITEA_HOST_URL/api/v1/user/keys" \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d @- <&2 + exit 1 + fi + CURL_TLS_ARGS=(--cacert "$GITEA_CA_CERT") +fi + +api_get() { curl --silent --show-error "${CURL_TLS_ARGS[@]}" -H "Authorization: token ${GITEA_TOKEN}" "$1"; } +api_post() { curl --silent --show-error "${CURL_TLS_ARGS[@]}" -X POST -H "Authorization: token ${GITEA_TOKEN}" -H "Content-Type: application/json" "$1" --data-binary @-; } # 1. check if the Organization exists, if not create it echo "=================================================================================================================================================" echo "# 1. check if the Organization exists, if not create it" echo "πŸ”Ž Checking if org '$GITEA_ORG' exists..." -if curl -ks -H "Authorization: token $GITEA_TOKEN" \ +if curl --silent --show-error "${CURL_TLS_ARGS[@]}" -H "Authorization: token $GITEA_TOKEN" \ "$GITEA_HOST_URL/api/v1/orgs/$GITEA_ORG" | grep -q '"username"'; then echo "βœ… Org '$GITEA_ORG' already exists β€” skipping creation." else echo "🏒 Creating org '$GITEA_ORG'..." - curl -ks -X POST "$GITEA_HOST_URL/api/v1/orgs" \ + curl --silent --show-error "${CURL_TLS_ARGS[@]}" -X POST "$GITEA_HOST_URL/api/v1/orgs" \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d "{ diff --git a/security/scripts/create_es_native_credentials.sh b/security/scripts/create_es_native_credentials.sh index c365352d0..386371a1b 100755 --- a/security/scripts/create_es_native_credentials.sh +++ b/security/scripts/create_es_native_credentials.sh @@ -66,7 +66,7 @@ ES_URL="https://$ELASTIC_HOST:9200" # Wait for Elasticsearch to be available echo "⏳ Waiting for Elasticsearch to become available..." -until curl -ks --cacert "$ES_CA_CERT" -u "elastic:$ELASTIC_PASSWORD" "$ES_URL" >/dev/null; do +until curl --silent --show-error --cacert "$ES_CA_CERT" -u "elastic:$ELASTIC_PASSWORD" "$ES_URL" >/dev/null; do echo " πŸ” Still waiting on $ELASTIC_HOST..." sleep 10 done @@ -79,7 +79,7 @@ create_user() { echo "πŸ” Creating user: $username with role: $roles" - response=$(curl -ks -w "\n%{http_code}" --cacert "$ES_CA_CERT" \ + response=$(curl --silent --show-error -w "\n%{http_code}" --cacert "$ES_CA_CERT" \ -u "elastic:$ELASTIC_PASSWORD" \ -X POST "$ES_URL/_security/user/$username?pretty" \ -H 'Content-Type: application/json' \ @@ -119,7 +119,7 @@ mkdir -p "$(dirname "$FLEET_TOKEN_OUTPUT_FILE")" FLEET_TOKEN_TEMP_FILE="$(mktemp "${FLEET_TOKEN_OUTPUT_FILE}.tmp.XXXXXX")" trap 'rm -f "$FLEET_TOKEN_TEMP_FILE"' EXIT -if ! curl -ks --fail -X POST \ +if ! curl --silent --show-error --fail -X POST \ --cacert "$ES_CA_CERT" \ -u "elastic:$ELASTIC_PASSWORD" \ --output "$FLEET_TOKEN_TEMP_FILE" \ diff --git a/security/scripts/create_opensearch_users.sh b/security/scripts/create_opensearch_users.sh index c72246596..39252e886 100755 --- a/security/scripts/create_opensearch_users.sh +++ b/security/scripts/create_opensearch_users.sh @@ -38,10 +38,15 @@ fi # if [ ! -z "$2" ] && [ "$2" = "--use-ssl" ]; then HTTP_PROTOCOL=https - SSL_FLAGS="$SSL_FLAGS" + OPENSEARCH_CA_CERT="${OPENSEARCH_CA_CERT:-${SECURITY_CERTIFICATES_FOLDER}elastic/opensearch/elastic-stack-ca.crt.pem}" + if [[ ! -r "$OPENSEARCH_CA_CERT" ]]; then + echo "OpenSearch CA certificate is not readable: $OPENSEARCH_CA_CERT" >&2 + exit 1 + fi + SSL_FLAGS=(--cacert "$OPENSEARCH_CA_CERT") else HTTP_PROTOCOL=http - SSL_FLAGS="" + SSL_FLAGS=() fi @@ -58,13 +63,13 @@ echo "Going to query: $HTTP_PROTOCOL://$ES_HOST:$ES_PORT" # create tenants # echo "Creating tenants ..." -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/tenants/nifi_tenant" -H 'Content-Type: application/json' $SSL_FLAGS -d' +curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/tenants/nifi_tenant" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d' { "description": "A tenant for the NiFi" }' echo "" -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/tenants/cogstack_tenant" -H 'Content-Type: application/json' $SSL_FLAGS -d' +curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/tenants/cogstack_tenant" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d' { "description": "A tenant for the CogStack" }' @@ -74,7 +79,7 @@ echo "" # create roles # echo "Creating roles ..." -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/roles/cogstack_ingest" -H 'Content-Type: application/json' $SSL_FLAGS -d' +curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/roles/cogstack_ingest" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d' { "cluster_permissions": [ "cluster_composite_ops", @@ -103,7 +108,7 @@ curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_ }' echo "" -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/roles/cogstack_access" -H 'Content-Type: application/json' $SSL_FLAGS -d' +curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/roles/cogstack_access" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d' { "cluster_permissions": [ "cluster_composite_ops" @@ -137,7 +142,7 @@ echo "" # create users # echo "Creating users ..." -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/cogstack_user" -H 'Content-Type: application/json' $SSL_FLAGS -d" +curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/cogstack_user" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d" { \"backend_roles\": [ \"cogstack_access\", @@ -148,7 +153,7 @@ curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_ }" echo "" -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/cogstack_pipeline" -H 'Content-Type: application/json' $SSL_FLAGS -d" +curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/cogstack_pipeline" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d" { \"backend_roles\": [ \"cogstack_ingest\" @@ -158,7 +163,7 @@ curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_ }" echo "" -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/nifi" -H 'Content-Type: application/json' $SSL_FLAGS -d" +curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/nifi" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d" { \"backend_roles\": [ \"cogstack_ingest\" @@ -172,7 +177,7 @@ echo "" # create mapping roles # echo "Creating roles mapping ..." -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/rolesmapping/cogstack_access" -H 'Content-Type: application/json' $SSL_FLAGS -d' +curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/rolesmapping/cogstack_access" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d' { "backend_roles": [ "cogstack_access" @@ -184,7 +189,7 @@ curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES }' echo "" -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/rolesmapping/cogstack_ingest" -H 'Content-Type: application/json' $SSL_FLAGS -d' +curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/rolesmapping/cogstack_ingest" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d' { "backend_roles": [ "cogstack_ingest" @@ -201,7 +206,7 @@ echo "" # mnodify passwords for internal build-in users # echo "Modifying passwords for internal build-in users ..." -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/logstash" -H 'Content-Type: application/json' $SSL_FLAGS -d" +curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/logstash" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d" { \"backend_roles\": [ \"logstash\" @@ -211,7 +216,7 @@ curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_ }" echo "" -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/kibanaro" -H 'Content-Type: application/json' $SSL_FLAGS -d" +curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/kibanaro" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d" { \"backend_roles\": [ \"kibanauser\", @@ -222,7 +227,7 @@ curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_ }" echo "" -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/readall" -H 'Content-Type: application/json' $SSL_FLAGS -d" +curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/readall" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d" { \"backend_roles\": [ \"readall\" @@ -232,7 +237,7 @@ curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_ }" echo "" -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/snapshotrestore" -H 'Content-Type: application/json' $SSL_FLAGS -d" +curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/snapshotrestore" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d" { \"backend_roles\": [ \"snapshotrestore\" diff --git a/security/scripts/es_native_cert_generator.sh b/security/scripts/es_native_cert_generator.sh index c4eda0549..bfd31581b 100755 --- a/security/scripts/es_native_cert_generator.sh +++ b/security/scripts/es_native_cert_generator.sh @@ -44,7 +44,7 @@ instances: - $ES_INSTANCE_NAME_1 - es01 - localhost - $ES_HOSTNAMES +$ES_HOSTNAMES ip: - 127.0.0.1 - name: $ES_INSTANCE_NAME_2 @@ -52,7 +52,7 @@ instances: - $ES_INSTANCE_NAME_2 - es02 - localhost - $ES_HOSTNAMES +$ES_HOSTNAMES ip: - 127.0.0.1 - name: $ES_INSTANCE_NAME_3 @@ -60,7 +60,7 @@ instances: - $ES_INSTANCE_NAME_3 - es02 - localhost - $ES_HOSTNAMES +$ES_HOSTNAMES ip: - 127.0.0.1 - name: $ES_INSTANCE_ALTERNATIVE_1_NAME @@ -68,7 +68,7 @@ instances: - $ES_INSTANCE_ALTERNATIVE_1_NAME - es02 - localhost - $ES_HOSTNAMES +$ES_HOSTNAMES ip: - 127.0.0.1 - name: $ES_INSTANCE_ALTERNATIVE_2_NAME @@ -76,7 +76,7 @@ instances: - $ES_INSTANCE_ALTERNATIVE_2_NAME - es02 - localhost - $ES_HOSTNAMES +$ES_HOSTNAMES ip: - 127.0.0.1 - name: $ES_INSTANCE_ALTERNATIVE_3_NAME @@ -84,7 +84,7 @@ instances: - $ES_INSTANCE_ALTERNATIVE_3_NAME - es02 - localhost - $ES_HOSTNAMES +$ES_HOSTNAMES ip: - 127.0.0.1 EOF @@ -264,4 +264,3 @@ openssl pkcs12 -in /certs/elastic-stack-ca.p12 -out /certs/elastic-stack-ca.key. zip -ur /certs/es_native_certs_bundle_pem.zip /certs/elastic-stack-ca.crt.pem /certs/elastic-stack-ca.key.pem cp -rf /certs/* /usr/share/elasticsearch/config/certificates/ - From bf398cd8c8caadb040c331329a3ecca84f7473c1 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 20:00:42 +0100 Subject: [PATCH 17/30] Updated OS/ES user creation scripts. --- docs/security/elasticsearch_opensearch.md | 22 +- security/scripts/create_opensearch_users.sh | 361 +++++++++----------- 2 files changed, 174 insertions(+), 209 deletions(-) diff --git a/docs/security/elasticsearch_opensearch.md b/docs/security/elasticsearch_opensearch.md index cafd70ab9..5db438509 100644 --- a/docs/security/elasticsearch_opensearch.md +++ b/docs/security/elasticsearch_opensearch.md @@ -153,13 +153,12 @@ All certificate references in `services/kibana/config/opensearch.yml` or `servic 3. Populate the additional tenants, roles, users, and role mappings: ```bash - cd security/scripts - bash create_opensearch_users.sh elasticsearch-1 --use-ssl + ./security/scripts/create_opensearch_users.sh localhost ``` - - `` is the OpenSearch node hostname (for this stack, usually `elasticsearch-1`). - - `--use-ssl` switches the script endpoint from `http` to `https` (recommended for this stack). - - Run the script from `security/scripts/` because it loads env files via relative paths. + - `` is the hostname covered by the OpenSearch node certificate. + - HTTPS with CA verification is the default. Use `--use-http` only for an explicitly unsecured local endpoint. + - The script resolves its files from its own location, so it can be run from any directory. ##### `create_opensearch_users.sh` reference @@ -167,15 +166,12 @@ Script: `security/scripts/create_opensearch_users.sh` Usage: ```bash -bash create_opensearch_users.sh [--use-ssl] +./security/scripts/create_opensearch_users.sh [--use-http] ``` Required inputs are loaded from: -- `deploy/general.env` - `deploy/elasticsearch.env` -- `security/env/certificates_elasticsearch.env` -- `security/env/certificates_general.env` - `security/env/users_elasticsearch.env` What it creates/updates: @@ -184,21 +180,23 @@ What it creates/updates: - Roles: `cogstack_ingest`, `cogstack_access` - Internal users: `cogstack_user`, `cogstack_pipeline`, `nifi` - Role mappings for `cogstack_access` and `cogstack_ingest` -- Passwords for built-in users: `logstash`, `kibanaro`, `readall`, `snapshotrestore` + +The script uses the current `/_plugins/_security/api` endpoints. Password rotation for predefined users such as `admin`, `logstash`, `kibanaro`, `readall`, and `snapshotrestore` remains the responsibility of `update_opensearch_users.sh`. Verification example: ```bash source security/env/users_elasticsearch.env curl --cacert security/certificates/elastic/opensearch/elastic-stack-ca.crt.pem \ - -u "admin:${ADMIN_PASSWORD:-$ELASTIC_PASSWORD}" \ + -u "${OPENSEARCH_ADMIN_USER:-admin}:${OPENSEARCH_ADMIN_PASSWORD:-$ELASTIC_PASSWORD}" \ https://localhost:9200/_plugins/_security/api/roles/cogstack_ingest ``` Troubleshooting: - If you see authentication failures, confirm `ELASTIC_PASSWORD` in `security/env/users_elasticsearch.env` matches the running OpenSearch admin password. -- If you see `404` on security API paths, your OpenSearch version may require `_plugins/_security/api/...` instead of `_opendistro/_security/api/...`. +- If the CA is stored elsewhere, set `OPENSEARCH_CA_CERT` to the appropriate CA certificate before running the script. +- Ensure the supplied hostname appears in the OpenSearch node certificate SANs. - The script is idempotent (`PUT` calls), so it can be re-run safely after credential or role changes. OpenSearch includes default roles (`admin`, `kibanaserver`, `readall`, `snapshotrestore`, etc.) β€” always change their passwords after first run. diff --git a/security/scripts/create_opensearch_users.sh b/security/scripts/create_opensearch_users.sh index 39252e886..9eadc593a 100755 --- a/security/scripts/create_opensearch_users.sh +++ b/security/scripts/create_opensearch_users.sh @@ -1,248 +1,215 @@ #!/usr/bin/env bash -################################################################ -# -# This script creates roles and users for OpenDistro -# ElasticSearch distribution bundled with security plugin -# using provided env file with users/passwords -# - -set -e - - -SECURITY_TEMPLATES_FOLDER="../templates/" -SECURITY_CERTIFICATES_FOLDER="../certificates/" -SECURITY_ENV_FOLDER="../env/" - -# required env var files -source ../../deploy/general.env -source ../../deploy/elasticsearch.env -source "${SECURITY_ENV_FOLDER}certificates_elasticsearch.env" -source "${SECURITY_ENV_FOLDER}certificates_general.env" - -# load the internal users passwords -# IMPORTANT: for production deployments please remember to change the passwords -source "${SECURITY_ENV_FOLDER}users_elasticsearch.env" - -# get the ES hostname -# -if [ -z "$1" ]; then - echo "Usage: $0 [--use-ssl]" +# Create CogStack application tenants, roles, users, and role mappings through +# the OpenSearch Security plugin REST API. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +SECURITY_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" +REPO_ROOT="$(cd "${SECURITY_DIR}/.." && pwd)" + +SECURITY_ENV_DIR="${SECURITY_DIR}/env" +DEFAULT_CA_CERT="${SECURITY_DIR}/certificates/elastic/opensearch/elastic-stack-ca.crt.pem" + +usage() { + cat < [--use-http] + +Options: + --use-http Use plain HTTP instead of the default verified HTTPS connection. + --use-ssl Deprecated compatibility option; HTTPS is already the default. + -h, --help Show this help. + +Environment overrides: + OPENSEARCH_PORT REST API port (default: ELASTICSEARCH_NODE_1_OUTPUT_PORT or 9200) + OPENSEARCH_CA_CERT CA certificate used to verify HTTPS + OPENSEARCH_ADMIN_USER REST API administrator (default: admin) + OPENSEARCH_ADMIN_PASSWORD REST API administrator password (default: ELASTIC_PASSWORD) +USAGE +} + +require_command() { + local command_name="$1" + + if ! command -v "$command_name" >/dev/null 2>&1; then + echo "ERROR: Required command not found: $command_name" >&2 + exit 1 + fi +} + +json_escape() { + local value="$1" + + value=${value//\\/\\\\} + value=${value//\"/\\\"} + value=${value//$'\n'/\\n} + value=${value//$'\r'/\\r} + value=${value//$'\t'/\\t} + printf '%s' "$value" +} + +source_env_files() { + # shellcheck disable=SC1091 + source "${REPO_ROOT}/deploy/elasticsearch.env" + # shellcheck disable=SC1091 + source "${SECURITY_ENV_DIR}/users_elasticsearch.env" +} + +OPENSEARCH_HOST="" +USE_HTTP=false + +while [[ $# -gt 0 ]]; do + case "$1" in + --use-http) + USE_HTTP=true + ;; + --use-ssl) + # Retained so existing automation continues to work. HTTPS is now default. + ;; + -h|--help) + usage + exit 0 + ;; + -*) + echo "ERROR: Unknown option: $1" >&2 + usage + exit 1 + ;; + *) + if [[ -n "$OPENSEARCH_HOST" ]]; then + echo "ERROR: Multiple OpenSearch hostnames supplied." >&2 + usage + exit 1 + fi + OPENSEARCH_HOST="$1" + ;; + esac + shift +done + +if [[ -z "$OPENSEARCH_HOST" ]]; then + usage exit 1 -else - ES_HOST=$1 fi +source_env_files +require_command curl -# check which protocol to use -# -if [ ! -z "$2" ] && [ "$2" = "--use-ssl" ]; then - HTTP_PROTOCOL=https - OPENSEARCH_CA_CERT="${OPENSEARCH_CA_CERT:-${SECURITY_CERTIFICATES_FOLDER}elastic/opensearch/elastic-stack-ca.crt.pem}" +OPENSEARCH_PORT="${OPENSEARCH_PORT:-${ELASTICSEARCH_NODE_1_OUTPUT_PORT:-9200}}" +OPENSEARCH_ADMIN_USER="${OPENSEARCH_ADMIN_USER:-admin}" +OPENSEARCH_ADMIN_PASSWORD="${OPENSEARCH_ADMIN_PASSWORD:-${ELASTIC_PASSWORD:-}}" + +: "${OPENSEARCH_ADMIN_PASSWORD:?Set OPENSEARCH_ADMIN_PASSWORD or ELASTIC_PASSWORD}" +: "${INGEST_SERVICE_PASSWORD:?Set INGEST_SERVICE_PASSWORD in users_elasticsearch.env}" + +if [[ "$USE_HTTP" == true ]]; then + OPENSEARCH_PROTOCOL=http +else + OPENSEARCH_PROTOCOL=https + OPENSEARCH_CA_CERT="${OPENSEARCH_CA_CERT:-$DEFAULT_CA_CERT}" if [[ ! -r "$OPENSEARCH_CA_CERT" ]]; then - echo "OpenSearch CA certificate is not readable: $OPENSEARCH_CA_CERT" >&2 + echo "ERROR: OpenSearch CA certificate is not readable: $OPENSEARCH_CA_CERT" >&2 exit 1 fi - SSL_FLAGS=(--cacert "$OPENSEARCH_CA_CERT") -else - HTTP_PROTOCOL=http - SSL_FLAGS=() fi +API_BASE="${OPENSEARCH_PROTOCOL}://${OPENSEARCH_HOST}:${OPENSEARCH_PORT}/_plugins/_security/api" +CURL_ARGS=( + --silent + --show-error + --fail-with-body + --user "${OPENSEARCH_ADMIN_USER}:${OPENSEARCH_ADMIN_PASSWORD}" + --header "Content-Type: application/json" +) + +if [[ "$USE_HTTP" != true ]]; then + CURL_ARGS+=(--cacert "$OPENSEARCH_CA_CERT") +fi -# ES admin config for altering users and roles -# -ES_PORT=${ELASTICSEARCH_NODE_1_OUTPUT_PORT:-9200} +api_put() { + local resource="$1" + local payload="$2" -# The ES USER IS admin for OpenSearch + echo "Applying ${resource}..." + curl "${CURL_ARGS[@]}" \ + --request PUT \ + "${API_BASE}/${resource}" \ + --data "$payload" + printf '\n' +} -ELASTIC_USER=admin +INGEST_PASSWORD_JSON="$(json_escape "$INGEST_SERVICE_PASSWORD")" -echo "Going to query: $HTTP_PROTOCOL://$ES_HOST:$ES_PORT" +echo "Configuring CogStack OpenSearch resources at ${OPENSEARCH_PROTOCOL}://${OPENSEARCH_HOST}:${OPENSEARCH_PORT}" -# create tenants -# -echo "Creating tenants ..." -curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/tenants/nifi_tenant" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d' -{ - "description": "A tenant for the NiFi" +api_put "tenants/nifi_tenant" '{ + "description": "A tenant for NiFi" }' -echo "" -curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/tenants/cogstack_tenant" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d' -{ - "description": "A tenant for the CogStack" +api_put "tenants/cogstack_tenant" '{ + "description": "A tenant for CogStack" }' -echo "" - -# create roles -# -echo "Creating roles ..." -curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/roles/cogstack_ingest" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d' -{ +api_put "roles/cogstack_ingest" '{ "cluster_permissions": [ "cluster_composite_ops", "indices:data/read/scroll*" ], "index_permissions": [{ - "index_patterns" : [ - "nifi_*", - "cogstack_*" - ], - "fls": [], - "masked_fields": [], - "allowed_actions": [ - "indices_all" - ] + "index_patterns": ["nifi_*", "cogstack_*"], + "fls": [], + "masked_fields": [], + "allowed_actions": ["indices_all"] }], "tenant_permissions": [{ - "tenant_patterns": [ - "nifi_tenant", - "cogstack_tenant" - ], - "allowed_actions": [ - "kibana_all_write" - ] + "tenant_patterns": ["nifi_tenant", "cogstack_tenant"], + "allowed_actions": ["kibana_all_write"] }] }' -echo "" -curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/roles/cogstack_access" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d' -{ - "cluster_permissions": [ - "cluster_composite_ops" - ], +api_put "roles/cogstack_access" '{ + "cluster_permissions": ["cluster_composite_ops"], "index_permissions": [{ - "index_patterns" : [ - "cogstack_*", - "nifi_*" - ], - "fls": [], - "masked_fields": [], - "allowed_actions": [ - "search", - "read", - "get" - ] + "index_patterns": ["cogstack_*", "nifi_*"], + "fls": [], + "masked_fields": [], + "allowed_actions": ["search", "read", "get"] }], "tenant_permissions": [{ - "tenant_patterns": [ - "cogstack_tenant" - ], - "allowed_actions": [ - "kibana_all_write" - ] + "tenant_patterns": ["cogstack_tenant"], + "allowed_actions": ["kibana_all_write"] }] }' -echo "" - - -# create users -# -echo "Creating users ..." -curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/cogstack_user" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d" -{ - \"backend_roles\": [ - \"cogstack_access\", - \"kibanauser\" - ], - \"password\": \"$INGEST_SERVICE_PASSWORD\", +api_put "internalusers/cogstack_user" "{ + \"password\": \"${INGEST_PASSWORD_JSON}\", + \"backend_roles\": [\"cogstack_access\", \"kibanauser\"], \"attributes\": {} }" -echo "" -curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/cogstack_pipeline" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d" -{ - \"backend_roles\": [ - \"cogstack_ingest\" - ], - \"password\": \"$INGEST_SERVICE_PASSWORD\", +api_put "internalusers/cogstack_pipeline" "{ + \"password\": \"${INGEST_PASSWORD_JSON}\", + \"backend_roles\": [\"cogstack_ingest\"], \"attributes\": {} }" -echo "" -curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/nifi" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d" -{ - \"backend_roles\": [ - \"cogstack_ingest\" - ], - \"password\": \"$INGEST_SERVICE_PASSWORD\", +api_put "internalusers/nifi" "{ + \"password\": \"${INGEST_PASSWORD_JSON}\", + \"backend_roles\": [\"cogstack_ingest\"], \"attributes\": {} }" -echo "" - -# create mapping roles -# -echo "Creating roles mapping ..." -curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/rolesmapping/cogstack_access" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d' -{ - "backend_roles": [ - "cogstack_access" - ], +api_put "rolesmapping/cogstack_access" '{ + "backend_roles": ["cogstack_access"], "hosts": [], - "users": [ - "cogstack_user" - ] + "users": ["cogstack_user"] }' -echo "" -curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/rolesmapping/cogstack_ingest" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d' -{ - "backend_roles": [ - "cogstack_ingest" - ], +api_put "rolesmapping/cogstack_ingest" '{ + "backend_roles": ["cogstack_ingest"], "hosts": [], - "users": [ - "cogstack_pipeline", - "nifi" - ] + "users": ["cogstack_pipeline", "nifi"] }' -echo "" - -# mnodify passwords for internal build-in users -# -echo "Modifying passwords for internal build-in users ..." -curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/logstash" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d" -{ - \"backend_roles\": [ - \"logstash\" - ], - \"password\": \"$ES_LOGSTASH_PASS\", - \"attributes\": {} -}" -echo "" - -curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/kibanaro" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d" -{ - \"backend_roles\": [ - \"kibanauser\", - \"readall\" - ], - \"password\": \"$ES_KIBANARO_PASS\", - \"attributes\": {} -}" -echo "" - -curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/readall" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d" -{ - \"backend_roles\": [ - \"readall\" - ], - \"password\": \"$ES_READALL_PASS\", - \"attributes\": {} -}" -echo "" - -curl -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/snapshotrestore" -H 'Content-Type: application/json' "${SSL_FLAGS[@]}" -d" -{ - \"backend_roles\": [ - \"snapshotrestore\" - ], - \"password\": \"$ES_SNAPSHOTRESTORE_PASS\", - \"attributes\": {} -}" -echo "" +echo "OpenSearch application security resources configured successfully." From 0d7e42aa5b3a5f5912a7a379d8ee1a7fb4f0022c Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 20:06:35 +0100 Subject: [PATCH 18/30] Updated nifi reqs. --- nifi/requirements.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nifi/requirements.txt b/nifi/requirements.txt index 4e7c45d2a..cc6a6791f 100644 --- a/nifi/requirements.txt +++ b/nifi/requirements.txt @@ -1,7 +1,7 @@ wheel==0.46.2 # data science pkgs -nltk==3.10.0 +nltk==3.10.3 numpy==2.4.2 pandas==2.3.3 dill>=0.4.0,<1.0.0 @@ -31,7 +31,8 @@ pyarrow==25.0.1 pydantic-settings==2.14.2 fhir.resources==8.3.0 # other utils -xnat==0.7.2 +xnat==0.8.1 +pydicom==3.0.2 # ElasticSearch/OpenSearch packages elasticsearch9==9.1.0 From 846de1e693738f45c622330e48e8906cbe1078df Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 20:27:35 +0100 Subject: [PATCH 19/30] Shellcheck .sh scripts. --- nifi/recreate_nifi_docker_image.sh | 4 +- scripts/git_update_submodules_in_repo.sh | 11 +++- scripts/gitea_authorize_with_ssh.sh | 3 +- scripts/gitea_create_submodule_repos.sh | 49 +++++++++-------- .../gitea_update_submodules_from_upstream.sh | 3 +- scripts/installation_utils/detect_os.sh | 5 +- .../install_docker_and_utils.sh | 6 ++- scripts/tests/smoke_http_checks.sh | 2 + security/scripts/create_es_native_certs.sh | 21 ++++++-- .../scripts/create_es_native_credentials.sh | 2 +- security/scripts/create_keystore.sh | 4 +- .../create_opensearch_client_admin_certs.sh | 7 +-- .../create_opensearch_internal_passwords.sh | 7 +-- .../scripts/create_opensearch_node_cert.sh | 1 + security/scripts/es_native_cert_generator.sh | 53 +++++++++---------- security/scripts/nifi_toolkit_security.sh | 2 +- 16 files changed, 101 insertions(+), 79 deletions(-) diff --git a/nifi/recreate_nifi_docker_image.sh b/nifi/recreate_nifi_docker_image.sh index 640f11f71..e2bdcb233 100755 --- a/nifi/recreate_nifi_docker_image.sh +++ b/nifi/recreate_nifi_docker_image.sh @@ -16,8 +16,8 @@ fi SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" -docker build --build-arg GID=${NIFI_GID} \ - --build-arg UID=${NIFI_UID} \ +docker build --build-arg GID="${NIFI_GID}" \ + --build-arg UID="${NIFI_UID}" \ -t cogstacksystems/cogstack-nifi:latest \ -f "$SCRIPT_DIR/Dockerfile" \ "$REPO_ROOT" diff --git a/scripts/git_update_submodules_in_repo.sh b/scripts/git_update_submodules_in_repo.sh index 12bc6ef13..ab39f87d6 100755 --- a/scripts/git_update_submodules_in_repo.sh +++ b/scripts/git_update_submodules_in_repo.sh @@ -8,6 +8,8 @@ git submodule update --init --recursive echo "Updating submodules to latest release tag on each origin default branch (fallback: branch HEAD)..." +# Variables in this block are intentionally expanded by each submodule shell. +# shellcheck disable=SC2016 git submodule foreach --recursive ' set -e @@ -58,7 +60,14 @@ git submodule foreach --recursive ' ' #git submodule foreach git pull origin main -git add $(git config -f .gitmodules --get-regexp '^submodule\..*\.path$' | awk '{print $2}') || true +submodule_paths=() +while IFS= read -r submodule_path; do + [[ -n "$submodule_path" ]] && submodule_paths+=("$submodule_path") +done < <(git config -f .gitmodules --get-regexp '^submodule\..*\.path$' | awk '{print $2}') + +if (( ${#submodule_paths[@]} > 0 )); then + git add -- "${submodule_paths[@]}" || true +fi git commit -m "Update submodules to latest release tags (or default branch)" || echo "ℹ️ No changes to commit." echo "βœ… Submodule update complete." diff --git a/scripts/gitea_authorize_with_ssh.sh b/scripts/gitea_authorize_with_ssh.sh index c17320a6c..34a952803 100755 --- a/scripts/gitea_authorize_with_ssh.sh +++ b/scripts/gitea_authorize_with_ssh.sh @@ -1,4 +1,5 @@ #!/bin/bash +# shellcheck disable=SC1090 # Environment file location is selected at runtime. set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" @@ -42,7 +43,7 @@ fi if [ -f "$GITEA_LOCAL_KEY_PATH" ]; then if ssh-add -l | grep -q "$GITEA_LOCAL_KEY_PATH"; then - ssh-add -d $GITEA_LOCAL_KEY_PATH + ssh-add -d "$GITEA_LOCAL_KEY_PATH" echo "πŸ—‘οΈ Removed SSH key from agent: $GITEA_LOCAL_KEY_PATH" else echo "ℹ️ SSH key not loaded in agent: $GITEA_LOCAL_KEY_PATH" diff --git a/scripts/gitea_create_submodule_repos.sh b/scripts/gitea_create_submodule_repos.sh index 35cec0d5c..5c12c0bfc 100755 --- a/scripts/gitea_create_submodule_repos.sh +++ b/scripts/gitea_create_submodule_repos.sh @@ -1,4 +1,5 @@ #!/bin/bash +# shellcheck disable=SC1090 # Environment file location is selected at runtime. set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" @@ -60,18 +61,18 @@ if ! api_get "${GITEA_API}/repos/${GITEA_ORG}/${GITEA_MAIN_REPO_NAME}" | grep -q echo '{"name":"'"${GITEA_MAIN_REPO_NAME}"'","private":true}' | api_post "${GITEA_API}/orgs/${GITEA_ORG}/repos" >/dev/null echo "βœ… created repo ${GITEA_MAIN_REPO_NAME}" # add as remote - if git remote get-url $GITEA_DEFAULT_MAIN_REMOTE_NAME >/dev/null 2>&1; then - git remote set-url $GITEA_DEFAULT_MAIN_REMOTE_NAME "$GITEA_BASE_URL" + if git remote get-url "$GITEA_DEFAULT_MAIN_REMOTE_NAME" >/dev/null 2>&1; then + git remote set-url "$GITEA_DEFAULT_MAIN_REMOTE_NAME" "$GITEA_BASE_URL" else - git remote add $GITEA_DEFAULT_MAIN_REMOTE_NAME "$GITEA_BASE_URL" + git remote add "$GITEA_DEFAULT_MAIN_REMOTE_NAME" "$GITEA_BASE_URL" fi else echo "βœ… ${GITEA_MAIN_REPO_NAME} main repo exists" # still ensure remote exists/points correctly - if git remote get-url $GITEA_DEFAULT_MAIN_REMOTE_NAME >/dev/null 2>&1; then - git remote set-url $GITEA_DEFAULT_MAIN_REMOTE_NAME "$GITEA_BASE_URL" + if git remote get-url "$GITEA_DEFAULT_MAIN_REMOTE_NAME" >/dev/null 2>&1; then + git remote set-url "$GITEA_DEFAULT_MAIN_REMOTE_NAME" "$GITEA_BASE_URL" else - git remote add $GITEA_DEFAULT_MAIN_REMOTE_NAME "$GITEA_BASE_URL" + git remote add "$GITEA_DEFAULT_MAIN_REMOTE_NAME" "$GITEA_BASE_URL" fi fi @@ -85,18 +86,20 @@ echo "==> Ensure org repos for submodules, keep original .gitmodules, add '$GITE # ensure .gitmodules exists [ -f .gitmodules ] || { echo "ℹ️ .gitmodules not found"; exit 0; } -# command to extract submodule paths -paths_cmd='git config -f .gitmodules --get-regexp "^submodule\..*\.path$" | awk "{print \$2}"' +# Extract submodule paths once and keep each result as a quoted array entry. +submodule_paths=() +while IFS= read -r path; do + [[ -n "$path" ]] && submodule_paths+=("$path") +done < <(git config -f .gitmodules --get-regexp '^submodule\..*\.path$' | awk '{print $2}') -# count -count=$(eval "$paths_cmd" | grep -v '^$' | wc -l | tr -d ' ') +count=${#submodule_paths[@]} [ "$count" -eq 0 ] && { echo "ℹ️ No submodules found in .gitmodules"; exit 0; } echo "==> Found $count submodule(s):" -eval "$paths_cmd" | while IFS= read -r path; do +for path in "${submodule_paths[@]}"; do printf ' - %s\n' "$path" done -eval "$paths_cmd" | while IFS= read -r path; do +for path in "${submodule_paths[@]}"; do [ -z "$path" ] && continue name="$(basename "$path")" gitea_url="${GITEA_NAMESPACE_URL}/${name}.git" @@ -119,10 +122,10 @@ eval "$paths_cmd" | while IFS= read -r path; do # ensure submodule also uses your SSH key (main repo already set above, but keep it explicit) git config core.sshCommand "ssh -i $GITEA_LOCAL_KEY_PATH -o IdentitiesOnly=yes" - if git remote get-url $GITEA_DEFAULT_MAIN_REMOTE_NAME >/dev/null 2>&1; then - git remote set-url $GITEA_DEFAULT_MAIN_REMOTE_NAME "$gitea_url" + if git remote get-url "$GITEA_DEFAULT_MAIN_REMOTE_NAME" >/dev/null 2>&1; then + git remote set-url "$GITEA_DEFAULT_MAIN_REMOTE_NAME" "$gitea_url" else - git remote add $GITEA_DEFAULT_MAIN_REMOTE_NAME "$gitea_url" + git remote add "$GITEA_DEFAULT_MAIN_REMOTE_NAME" "$gitea_url" fi # make default pushes go to Gitea; fetch stays on origin (GitHub) @@ -139,13 +142,13 @@ eval "$paths_cmd" | while IFS= read -r path; do fi # avoid mirror pushes (which include refs/remotes/origin/*) - git config --get-all remote.$GITEA_DEFAULT_MAIN_REMOTE_NAME.mirror >/dev/null 2>&1 && \ - git config --unset-all remote.$GITEA_DEFAULT_MAIN_REMOTE_NAME.mirror || true + git config --get-all "remote.${GITEA_DEFAULT_MAIN_REMOTE_NAME}.mirror" >/dev/null 2>&1 && \ + git config --unset-all "remote.${GITEA_DEFAULT_MAIN_REMOTE_NAME}.mirror" || true # push only local branches + tags echo "↗️ pushing branches & tags to $GITEA_DEFAULT_MAIN_REMOTE_NAME…" - git push $GITEA_DEFAULT_MAIN_REMOTE_NAME --all - git push $GITEA_DEFAULT_MAIN_REMOTE_NAME --tags + git push "$GITEA_DEFAULT_MAIN_REMOTE_NAME" --all + git push "$GITEA_DEFAULT_MAIN_REMOTE_NAME" --tags else echo "ℹ️ no local refs; skip push" fi @@ -155,15 +158,19 @@ done # 4. Push the main repo to gitea echo "=================================================================================================================================================" echo "# 4. Pushing the main repo to $GITEA_DEFAULT_MAIN_REMOTE_NAME" -git push -u $GITEA_DEFAULT_MAIN_REMOTE_NAME HEAD:main +git push -u "$GITEA_DEFAULT_MAIN_REMOTE_NAME" HEAD:main # 5. Verify submodules point/fetch/push as expected to gitea echo "=================================================================================================================================================" echo "# 5. Verify submodules point/fetch/push as expected to $GITEA_DEFAULT_MAIN_REMOTE_NAME" -git submodule foreach 'echo $name; git remote -v' +# `$name` is provided by `git submodule foreach` in the child shell. +# shellcheck disable=SC2016 +git submodule foreach 'echo "$name"; git remote -v' # 6. Make sure SSH key is always used echo "=================================================================================================================================================" echo "# 6. Make sure SSH key is always used" git config core.sshCommand "ssh -i $GITEA_LOCAL_KEY_PATH -o IdentitiesOnly=yes" +# The exported key path must expand inside each submodule shell. +# shellcheck disable=SC2016 git submodule foreach 'git config core.sshCommand "ssh -i $GITEA_LOCAL_KEY_PATH -o IdentitiesOnly=yes"' diff --git a/scripts/gitea_update_submodules_from_upstream.sh b/scripts/gitea_update_submodules_from_upstream.sh index 333cee51a..5cb8baca2 100755 --- a/scripts/gitea_update_submodules_from_upstream.sh +++ b/scripts/gitea_update_submodules_from_upstream.sh @@ -1,10 +1,11 @@ #!/bin/bash +# shellcheck disable=SC1090 # Environment file location is selected at runtime. set -e GITEA_ENV_FILE="./deploy/gitea.env" if [ -f "$GITEA_ENV_FILE" ]; then - echo "πŸ“¦ Loading environment from $GITEA_ENV_FILE"f + echo "πŸ“¦ Loading environment from $GITEA_ENV_FILE" set -a source "$GITEA_ENV_FILE" set +a diff --git a/scripts/installation_utils/detect_os.sh b/scripts/installation_utils/detect_os.sh index 6b245efb2..4850aa136 100755 --- a/scripts/installation_utils/detect_os.sh +++ b/scripts/installation_utils/detect_os.sh @@ -4,11 +4,10 @@ os_distribution="" if ls /etc/*release 1> /dev/null 2>&1 ; then - os_distribution=$(cat /etc/*release | egrep -iom1 '(centos|debian|ubuntu|red hat)') - os_distribution="$(tr [A-Z] [a-z] <<< "$os_distribution")" # to lower chars + os_distribution=$(grep -Eiom1 '(centos|debian|ubuntu|red hat)' /etc/*release) + os_distribution="$(tr '[:upper:]' '[:lower:]' <<< "$os_distribution")" # to lower chars echo "$os_distribution" else echo "Distribution version could not be found. Stopping script..."; exit 1 fi; - diff --git a/scripts/installation_utils/install_docker_and_utils.sh b/scripts/installation_utils/install_docker_and_utils.sh index 437733aa3..5144acf43 100755 --- a/scripts/installation_utils/install_docker_and_utils.sh +++ b/scripts/installation_utils/install_docker_and_utils.sh @@ -35,9 +35,11 @@ then echo "Installing Azure CLI..." curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash + # shellcheck disable=SC1091 # Standard OS metadata file provided by Debian/Ubuntu. + docker_codename="$(. /etc/os-release && printf '%s' "$VERSION_CODENAME")" echo \ - "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ - "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ + ${docker_codename} stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt -y update diff --git a/scripts/tests/smoke_http_checks.sh b/scripts/tests/smoke_http_checks.sh index c77087bfa..5a876f7d2 100755 --- a/scripts/tests/smoke_http_checks.sh +++ b/scripts/tests/smoke_http_checks.sh @@ -12,6 +12,8 @@ fi if ! command -v curl >/dev/null 2>&1; then echo "curl is required for smoke checks." >&2 + # This helper supports both sourcing (`return`) and direct execution (`exit`). + # shellcheck disable=SC2317 return 1 2>/dev/null || exit 1 fi diff --git a/security/scripts/create_es_native_certs.sh b/security/scripts/create_es_native_certs.sh index 079a0b11e..8fee1b813 100755 --- a/security/scripts/create_es_native_certs.sh +++ b/security/scripts/create_es_native_certs.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC1090,SC1091 # Security env files are selected through runtime paths. # ================================================================================ # πŸ›‘οΈ Create client keys and certificates for Elasticsearch Native mode @@ -25,23 +26,33 @@ set -euo pipefail +cleanup_es_native_artifacts() { + docker ps -a -q --filter name="deploy-es_native_create_certs-run-*" | + while IFS= read -r container_id; do + [[ -n "$container_id" ]] && docker container rm -f "$container_id" + done + + docker volume ls --filter name=deploy_elasticsearch-certs- -q | + while IFS= read -r volume_id; do + [[ -n "$volume_id" ]] && docker volume rm -f "$volume_id" + done +} + if [ ! -d "../certificates/elastic/elasticsearch" ]; then echo "====================================== CREATE_ES_NATIVE_CERTS ===============================" source ../env/certificates_elasticsearch.env source ../env/users_elasticsearch.env echo "Removing previous cert container and volume if existent...." - docker container rm -f $(docker ps -a -q --filter name="deploy-es_native_create_certs-run-*") || true - docker volume rm $(docker volume ls --filter name=deploy_elasticsearch-certs- -q) -f || true + cleanup_es_native_artifacts || true echo "Certificates for es_native not present, creating them now ..." docker compose -f ../../deploy/services.yml run es_native_create_certs echo "Removing cert container and volume...." - docker container rm -f $(docker ps -a -q --filter name="deploy-es_native_create_certs-run-*") - docker volume rm $(docker volume ls --filter name=deploy_elasticsearch-certs- -q) -f + cleanup_es_native_artifacts else echo "Certificates found, skipping creating, if you want to recreate delete the ../certificates/elastic/elasticsearch folder" fi -chown -R $USER ../certificates/elastic/elasticsearch +chown -R "$USER" ../certificates/elastic/elasticsearch diff --git a/security/scripts/create_es_native_credentials.sh b/security/scripts/create_es_native_credentials.sh index 386371a1b..0709e81c4 100755 --- a/security/scripts/create_es_native_credentials.sh +++ b/security/scripts/create_es_native_credentials.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC1090 # Security env files are selected through runtime paths. # ============================================================================== # πŸ” Create users and service account tokens for Elasticsearch Native @@ -42,7 +43,6 @@ source "${SECURITY_ENV_FOLDER}"certificates_general.env source "${SECURITY_ENV_FOLDER}"users_elasticsearch.env ES_CA_CERT="${ES_CERTIFICATES_FOLDER}/elastic-stack-ca.crt.pem" -ES_CA_KEY="${ES_CERTIFICATES_FOLDER}/elastic-stack-ca.key.pem" # Validate required variables : "${ELASTIC_HOST:?Must set ELASTIC_HOST in certificates_elasticsearch.env}" diff --git a/security/scripts/create_keystore.sh b/security/scripts/create_keystore.sh index a8b7250a3..6a31b1d59 100755 --- a/security/scripts/create_keystore.sh +++ b/security/scripts/create_keystore.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC1090 # Security env files are selected through runtime paths. # =========================================================================================================================== # 🧰 Create a Java keystore (.jks) and truststore from existing cert + key @@ -24,7 +25,6 @@ set -euo pipefail -SECURITY_TEMPLATES_FOLDER="../templates/" SECURITY_CERTIFICATES_FOLDER="../certificates/" SECURITY_ENV_FOLDER="../env/" @@ -47,8 +47,6 @@ KEYSTORE_PASSWORD="${3:-$ROOT_CERTIFICATE_KEYSTORE_PASSWORD}" # Root cert defaults CA_ROOT_CERT="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.pem" -CA_ROOT_KEY="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.key" -CA_ROOT_KEYSTORE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.p12" CERT_FILE="${CERT_NAME}.crt" KEY_FILE="${CERT_NAME}.key" diff --git a/security/scripts/create_opensearch_client_admin_certs.sh b/security/scripts/create_opensearch_client_admin_certs.sh index 99f0f9b35..8d1e8f82e 100755 --- a/security/scripts/create_opensearch_client_admin_certs.sh +++ b/security/scripts/create_opensearch_client_admin_certs.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC1091 # Security env files are resolved relative to the runtime working directory. # ============================================================================== # πŸ” Create OpenSearch client + admin certs (key, pem, csr, p12) @@ -47,8 +48,8 @@ echo "ES_ADMIN_SUBJ_LINE: $ES_ADMIN_SUBJ_LINE" echo "ROOT_CERTIFICATE_NAME: $ROOT_CERTIFICATE_NAME" echo "===================================================================================================" -CA_ROOT_CERT="${ROOT_CERTIFICATES_FOLDER}"$ROOT_CERTIFICATE_NAME".pem" -CA_ROOT_KEY="${ROOT_CERTIFICATES_FOLDER}"$ROOT_CERTIFICATE_NAME".key" +CA_ROOT_CERT="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.pem" +CA_ROOT_KEY="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.key" EXT_FILE="${SECURITY_TEMPLATES_FOLDER}ssl-extensions-x509.cnf" # === Client cert === @@ -66,7 +67,7 @@ openssl x509 -req -days "$ES_CERTIFICATE_TIME_VALIDITY_IN_DAYS" \ -in "$ES_CLIENT_CERT_NAME.csr" \ -CA "$CA_ROOT_CERT" -CAkey "$CA_ROOT_KEY" -CAcreateserial \ -out "$ES_CLIENT_CERT_NAME.pem" \ - -extensions v3_leaf -extfile $EXT_FILE + -extensions v3_leaf -extfile "$EXT_FILE" mv "$ES_CLIENT_CERT_NAME"* "$OPENSEARCH_ES_CERTIFICATES_FOLDER" diff --git a/security/scripts/create_opensearch_internal_passwords.sh b/security/scripts/create_opensearch_internal_passwords.sh index f667d8a44..2546be923 100755 --- a/security/scripts/create_opensearch_internal_passwords.sh +++ b/security/scripts/create_opensearch_internal_passwords.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC1090,SC1091 # Security env files are selected through runtime paths. # ============================================================================== # πŸ” Generate OpenSearch internal user password hashes using container @@ -20,14 +21,8 @@ set -euo pipefail -SECURITY_TEMPLATES_FOLDER="../templates/" -SECURITY_CERTIFICATES_FOLDER="../certificates/" SECURITY_ENV_FOLDER="../env/" -ROOT_CERTIFICATES_FOLDER="${SECURITY_CERTIFICATES_FOLDER}root_certificates/" - -OPENSEARCH_ES_CERTIFICATES_FOLDER="${SECURITY_CERTIFICATES_FOLDER}es_certificates/opensearch/" - # required env var files source ../../deploy/elasticsearch.env source "${SECURITY_ENV_FOLDER}certificates_elasticsearch.env" diff --git a/security/scripts/create_opensearch_node_cert.sh b/security/scripts/create_opensearch_node_cert.sh index 590fb59f4..4b0685b7b 100755 --- a/security/scripts/create_opensearch_node_cert.sh +++ b/security/scripts/create_opensearch_node_cert.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC1090 # Security env files are selected through runtime paths. # ============================================================================== # πŸ” Generate OpenSearch node certificate signed by Root CA diff --git a/security/scripts/es_native_cert_generator.sh b/security/scripts/es_native_cert_generator.sh index bfd31581b..fe433641c 100755 --- a/security/scripts/es_native_cert_generator.sh +++ b/security/scripts/es_native_cert_generator.sh @@ -89,40 +89,35 @@ $ES_HOSTNAMES - 127.0.0.1 EOF -if [[ ! -f /certs/es_native_ca_bundle.zip ]]; then +if [[ ! -f /certs/elastic-stack-ca.p12 ]]; then echo "Generating root-ca certificates for native ES" - bin/elasticsearch-certutil ca --silent --days $ES_CERTIFICATE_TIME_VALIDITY_IN_DAYS --out /certs/elastic-stack-ca.p12 --pass $ES_CERTIFICATE_PASSWORD<<<$ES_CERTIFICATE_PASSWORD - bin/elasticsearch-certutil cert --silent --ca /certs/elastic-stack-ca.p12 --pass $ES_CERTIFICATE_PASSWORD<<<""$ES_CERTIFICATE_PASSWORD" - - " - # the above blank line is to avoid answering prompt, don't delete it -fi; + bin/elasticsearch-certutil ca --silent \ + --days "$ES_CERTIFICATE_TIME_VALIDITY_IN_DAYS" \ + --out /certs/elastic-stack-ca.p12 \ + --pass "$ES_CERTIFICATE_PASSWORD" +fi if [[ ! -f /certs/es_native_certs_bundle.zip ]]; then echo "Generating CSR certficates for ES clusters" - bin/elasticsearch-certutil cert --silent --out /certs/es_native_certs_bundle.zip --in config/certificates/instances.yml --days $ES_CERTIFICATE_TIME_VALIDITY_IN_DAYS --ca /certs/elastic-stack-ca.p12<< EOF -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -EOF -fi; + bin/elasticsearch-certutil cert --silent \ + --out /certs/es_native_certs_bundle.zip \ + --in config/certificates/instances.yml \ + --days "$ES_CERTIFICATE_TIME_VALIDITY_IN_DAYS" \ + --ca /certs/elastic-stack-ca.p12 \ + --ca-pass "$ES_CERTIFICATE_PASSWORD" \ + --pass "$ES_CERTIFICATE_PASSWORD" +fi if [[ ! -f /certs/es_native_certs_bundle_pem.zip ]]; then echo "Generating PEM certficates for ES clusters" - bin/elasticsearch-certutil cert --pem --silent --out /certs/es_native_certs_bundle_pem.zip --in config/certificates/instances.yml --days $ES_CERTIFICATE_TIME_VALIDITY_IN_DAYS --ca /certs/elastic-stack-ca.p12<< EOF -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -EOF -fi; + bin/elasticsearch-certutil cert --pem --silent \ + --out /certs/es_native_certs_bundle_pem.zip \ + --in config/certificates/instances.yml \ + --days "$ES_CERTIFICATE_TIME_VALIDITY_IN_DAYS" \ + --ca /certs/elastic-stack-ca.p12 \ + --ca-pass "$ES_CERTIFICATE_PASSWORD" \ + --pass "$ES_CERTIFICATE_PASSWORD" +fi unzip /certs/es_native_certs_bundle_pem.zip -d /certs/elasticsearch unzip /certs/es_native_certs_bundle.zip -d /certs/elasticsearch @@ -258,8 +253,8 @@ find /certs -type d -exec chmod 755 \{\} \;; find /certs -type f -exec chmod 755 \{\} \;; # Convert p12 certificates to PEM -openssl pkcs12 -in /certs/elastic-stack-ca.p12 -out /certs/elastic-stack-ca.crt.pem -clcerts -nokeys -password pass:$ES_CERTIFICATE_PASSWORD -openssl pkcs12 -in /certs/elastic-stack-ca.p12 -out /certs/elastic-stack-ca.key.pem -nocerts -nodes -password pass:$ES_CERTIFICATE_PASSWORD +openssl pkcs12 -in /certs/elastic-stack-ca.p12 -out /certs/elastic-stack-ca.crt.pem -clcerts -nokeys -password "pass:$ES_CERTIFICATE_PASSWORD" +openssl pkcs12 -in /certs/elastic-stack-ca.p12 -out /certs/elastic-stack-ca.key.pem -nocerts -nodes -password "pass:$ES_CERTIFICATE_PASSWORD" zip -ur /certs/es_native_certs_bundle_pem.zip /certs/elastic-stack-ca.crt.pem /certs/elastic-stack-ca.key.pem diff --git a/security/scripts/nifi_toolkit_security.sh b/security/scripts/nifi_toolkit_security.sh index c8d1605fa..37b895233 100755 --- a/security/scripts/nifi_toolkit_security.sh +++ b/security/scripts/nifi_toolkit_security.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC1090,SC1091 # Environment files are selected through runtime paths. # ============================================================================== # ⚠️ Legacy: NiFi Toolkit TLS Setup Script @@ -40,7 +41,6 @@ NIFI_CERTIFICATE_TIME_VAILIDITY_IN_DAYS="${NIFI_CERTIFICATE_TIME_VAILIDITY_IN_DA NIFI_KEYSTORE_PASSWORD="${NIFI_KEYSTORE_PASSWORD:-cogstackNifi}" OUTPUT_DIRECTORY="${SECURITY_CERTIFICATES_FOLDER}nifi/" SECURITY_ROOT_CA_FOLDER="${SECURITY_CERTIFICATES_FOLDER}root/" -PATH_TO_NIFI_PROPERTIES_FILE="./../../../nifi/conf/nifi.properties" EXT_FILE="${SECURITY_TEMPLATES_FOLDER}ssl-extensions-x509.cnf" NIFI_CERTIFICATE_NAME="nifi" From 8c98213cf9749f8d9fd162d0aac930cac97d8c11 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 20:44:49 +0100 Subject: [PATCH 20/30] NiFi: transitioned to req to pyproject.toml & updated GA workflows. --- .dockerignore | 1 + .github/workflows/dependency_hygiene.yml | 15 +- .github/workflows/python_quality.yml | 14 +- .../shell_script_enforce_exec_check.yml | 32 + docs/nifi/development_guide.md | 9 +- docs/nifi/user_python_extensions.md | 5 +- nifi/Dockerfile | 26 +- nifi/requirements-dev.txt | 7 - nifi/requirements.txt | 40 - pyproject.toml | 45 + scripts/maintenance/audit_pip_dependency.sh | 31 +- uv.lock | 2765 +++++++++++++++++ 12 files changed, 2905 insertions(+), 85 deletions(-) delete mode 100644 nifi/requirements-dev.txt delete mode 100644 nifi/requirements.txt diff --git a/.dockerignore b/.dockerignore index 95deddc00..0386138a3 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,6 +3,7 @@ # credentials, and local development state from entering image layers. ** !pyproject.toml +!uv.lock !nifi/ !nifi/** diff --git a/.github/workflows/dependency_hygiene.yml b/.github/workflows/dependency_hygiene.yml index 9366c1f8d..0875a21cb 100644 --- a/.github/workflows/dependency_hygiene.yml +++ b/.github/workflows/dependency_hygiene.yml @@ -4,12 +4,21 @@ on: workflow_dispatch: schedule: - cron: "0 6 * * 1" # weekly Monday UTC + push: + branches: ['**'] + paths: + - "docs/pyproject.toml" + - "docs/uv.lock" + - "pyproject.toml" + - "uv.lock" + - "scripts/maintenance/audit_pip_dependency.sh" + - ".github/workflows/dependency_hygiene.yml" pull_request: paths: - "docs/pyproject.toml" - "docs/uv.lock" - - "nifi/requirements.txt" - - "nifi/requirements-dev.txt" + - "pyproject.toml" + - "uv.lock" - "scripts/maintenance/audit_pip_dependency.sh" - ".github/workflows/dependency_hygiene.yml" @@ -26,7 +35,7 @@ jobs: uses: actions/cache@v6 with: path: ~/.cache/pip - key: pip-${{ runner.os }}-${{ hashFiles('docs/pyproject.toml', 'docs/uv.lock', 'nifi/requirements.txt', 'nifi/requirements-dev.txt', 'scripts/maintenance/audit_pip_dependency.sh') }} + key: pip-${{ runner.os }}-${{ hashFiles('docs/pyproject.toml', 'docs/uv.lock', 'pyproject.toml', 'uv.lock', 'scripts/maintenance/audit_pip_dependency.sh') }} restore-keys: | pip-${{ runner.os }}- diff --git a/.github/workflows/python_quality.yml b/.github/workflows/python_quality.yml index 198b359af..31621af37 100644 --- a/.github/workflows/python_quality.yml +++ b/.github/workflows/python_quality.yml @@ -5,8 +5,7 @@ on: branches: ['**'] paths: - "pyproject.toml" - - "nifi/requirements.txt" - - "nifi/requirements-dev.txt" + - "uv.lock" - "nifi/**/*.py" - "scripts/**/*.py" - "typings/**/*.pyi" @@ -14,8 +13,7 @@ on: pull_request: paths: - "pyproject.toml" - - "nifi/requirements.txt" - - "nifi/requirements-dev.txt" + - "uv.lock" - "nifi/**/*.py" - "scripts/**/*.py" - "typings/**/*.pyi" @@ -42,14 +40,14 @@ jobs: run: | python -m pip install --upgrade pip uv - - name: Install requirements with uv + - name: Install locked project dependencies run: | - uv pip install --system -r nifi/requirements.txt -r nifi/requirements-dev.txt + uv sync --locked --dev - name: Ruff (critical rules) run: | - python -m ruff check scripts nifi/user_python_extensions --select F,E9 + uv run --locked ruff check scripts nifi/user_python_extensions --select F,E9 - name: MyPy run: | - python -m mypy --config-file pyproject.toml nifi/user_python_extensions scripts + uv run --locked mypy --config-file pyproject.toml nifi/user_python_extensions scripts diff --git a/.github/workflows/shell_script_enforce_exec_check.yml b/.github/workflows/shell_script_enforce_exec_check.yml index dd4aa3802..7ccb8f417 100644 --- a/.github/workflows/shell_script_enforce_exec_check.yml +++ b/.github/workflows/shell_script_enforce_exec_check.yml @@ -40,3 +40,35 @@ jobs: echo "Fix with: git update-index --chmod=+x " exit 1 fi + + shell-quality: + name: ShellCheck and syntax + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v7 + + - name: Check root-owned shell scripts + shell: bash + run: | + set -euo pipefail + + scripts=() + while IFS= read -r -d '' file; do + scripts+=("$file") + done < <( + git ls-files -z -- '*.sh' \ + ':(exclude)services/**' \ + ':(exclude)deploy/charts/**' + ) + + if [[ "${#scripts[@]}" -eq 0 ]]; then + echo "No root-owned shell scripts found." + exit 0 + fi + + echo "Checking ${#scripts[@]} root-owned shell scripts." + shellcheck "${scripts[@]}" + + for file in "${scripts[@]}"; do + bash -n "$file" + done diff --git a/docs/nifi/development_guide.md b/docs/nifi/development_guide.md index 2afacee87..177c728cb 100644 --- a/docs/nifi/development_guide.md +++ b/docs/nifi/development_guide.md @@ -73,8 +73,9 @@ echo '[{"text":"hello"}]' | python3 nifi/user_scripts/processors/clean_doc.py te If dependencies changed: -1. Update `nifi/requirements.txt`. -2. Rebuild the NiFi image: +1. Update the runtime dependencies in the root `pyproject.toml`. +2. Refresh the lock file with `uv lock`. +3. Rebuild the NiFi image: ```bash bash nifi/recreate_nifi_docker_image.sh @@ -85,8 +86,8 @@ bash nifi/recreate_nifi_docker_image.sh Run the same core checks as CI: ```bash -python -m ruff check scripts nifi/user_python_extensions --select F,E9 -python -m mypy --config-file pyproject.toml nifi/user_python_extensions scripts +uv run --locked ruff check scripts nifi/user_python_extensions --select F,E9 +uv run --locked mypy --config-file pyproject.toml nifi/user_python_extensions scripts ``` Optional test run: diff --git a/docs/nifi/user_python_extensions.md b/docs/nifi/user_python_extensions.md index 0076a9b78..39ef82603 100644 --- a/docs/nifi/user_python_extensions.md +++ b/docs/nifi/user_python_extensions.md @@ -55,8 +55,9 @@ and set `PYTHONPATH` to `/opt/nifi/nifi-current/python/framework` in the contain ## Dependencies -Python dependencies are installed into NiFi's Python framework from `nifi/requirements.txt` -during the custom image build. Add new dependencies there if your extension needs them. +Python dependencies are installed into NiFi's Python framework from the root `pyproject.toml` +and `uv.lock` during the custom image build. Add new runtime dependencies to `pyproject.toml`, +then refresh the lock with `uv lock`. ## Development workflow diff --git a/nifi/Dockerfile b/nifi/Dockerfile index ddbffee89..cada1eef0 100644 --- a/nifi/Dockerfile +++ b/nifi/Dockerfile @@ -114,14 +114,30 @@ RUN set -eux; \ RUN uv pip install --no-cache-dir --break-system-packages --system --upgrade pip setuptools wheel -# install util packages used in NiFi scripts (such as avro, nifyapi, etc.) -COPY nifi/requirements.txt ./requirements.txt -RUN uv pip install --no-cache-dir --break-system-packages --target=${NIFI_PYTHON_FRAMEWORK_SOURCE_DIRECTORY} -r "./requirements.txt" --index-url https://pypi.org/simple +# Install the locked runtime dependencies used by NiFi scripts and extensions. +COPY pyproject.toml uv.lock /tmp/cogstack_nifi/ +RUN uv export \ + --project /tmp/cogstack_nifi \ + --frozen \ + --no-dev \ + --no-emit-project \ + --format requirements.txt \ + --output-file /tmp/cogstack_nifi/requirements.txt \ + && uv pip install \ + --no-cache-dir \ + --break-system-packages \ + --target=${NIFI_PYTHON_FRAMEWORK_SOURCE_DIRECTORY} \ + -r /tmp/cogstack_nifi/requirements.txt \ + --index-url https://pypi.org/simple # install the local cogstack_nifi package so nifi.user_scripts imports resolve -COPY pyproject.toml /tmp/cogstack_nifi/pyproject.toml COPY nifi /tmp/cogstack_nifi/nifi -RUN uv pip install --no-cache-dir --break-system-packages --target=${NIFI_PYTHON_FRAMEWORK_SOURCE_DIRECTORY} /tmp/cogstack_nifi +RUN uv pip install \ + --no-cache-dir \ + --break-system-packages \ + --no-deps \ + --target=${NIFI_PYTHON_FRAMEWORK_SOURCE_DIRECTORY} \ + /tmp/cogstack_nifi ####################################################################################################### diff --git a/nifi/requirements-dev.txt b/nifi/requirements-dev.txt deleted file mode 100644 index 5547e70bf..000000000 --- a/nifi/requirements-dev.txt +++ /dev/null @@ -1,7 +0,0 @@ -ruff==0.12.12 -mypy==1.17.0 -mypy-extensions==1.1.0 -types-aiofiles==24.1.0.20250708 -types-PyYAML==6.0.12.20250516 -types-setuptools==80.9.0.20250529 -timeout-decorator==0.5.0 diff --git a/nifi/requirements.txt b/nifi/requirements.txt deleted file mode 100644 index cc6a6791f..000000000 --- a/nifi/requirements.txt +++ /dev/null @@ -1,40 +0,0 @@ -wheel==0.46.2 - -# data science pkgs -nltk==3.10.3 -numpy==2.4.2 -pandas==2.3.3 -dill>=0.4.0,<1.0.0 -bokeh==3.8.2 -psycopg[c,binary]==3.3.5 -overrides==7.0.0 -polars==1.44.1 -snowflake==1.13.1 - -# used in NiFi scripts: geolocation, avro conversion etc. -py4j==0.10.9.9 -rancoord==0.0.6 -geocoder==1.38.1 -avro==1.12.2 -nipyapi==1.7.0 -py7zr==1.1.3 -jsonpickle==4.1.1 -xlsxwriter==3.2.9 -mysql-connector-python==26.7.0 -snowflake-connector-python==4.7.2 -pymssql==2.3.9 -requests==2.33.0 -PyYAML==6.0.3 -pydantic==2.13.5 -overrides==7.0.0 -pyarrow==25.0.1 -pydantic-settings==2.14.2 -fhir.resources==8.3.0 -# other utils -xnat==0.8.1 -pydicom==3.0.2 - -# ElasticSearch/OpenSearch packages -elasticsearch9==9.1.0 -opensearch-py==3.0.0 -neo4j==5.28.2 diff --git a/pyproject.toml b/pyproject.toml index 4f7d9c6e2..e5df6ee17 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -52,6 +52,51 @@ venv = ".venv" name = "cogstack_nifi" version = "0.0.1" requires-python = ">=3.11" +dependencies = [ + "avro==1.12.2", + "bokeh==3.8.2", + "dill>=0.4.0,<1.0.0", + "elasticsearch9==9.1.0", + "fhir.resources==8.3.0", + "geocoder==1.38.1", + "jsonpickle==4.1.1", + "mysql-connector-python==26.7.0", + "neo4j==5.28.2", + "nipyapi==1.7.0", + "nltk==3.10.3", + "numpy==2.4.2", + "opensearch-py==3.0.0", + "overrides==7.0.0", + "pandas==2.3.3", + "polars==1.44.1", + "psycopg[binary,c]==3.3.5", + "py4j==0.10.9.9", + "py7zr==1.1.3", + "pyarrow==25.0.1", + "pydantic==2.13.5", + "pydantic-settings==2.14.2", + "pydicom==3.0.2", + "pymssql==2.3.9", + "PyYAML==6.0.3", + "rancoord==0.0.6", + "requests==2.33.0", + "snowflake==1.13.1", + "snowflake-connector-python==4.7.2", + "wheel==0.46.2", + "xlsxwriter==3.2.9", + "xnat==0.8.1", +] + +[dependency-groups] +dev = [ + "mypy==1.17.0", + "mypy-extensions==1.1.0", + "ruff==0.12.12", + "timeout-decorator==0.5.0", + "types-aiofiles==24.1.0.20250708", + "types-PyYAML==6.0.12.20250516", + "types-setuptools==80.9.0.20250529", +] [build-system] requires = ["setuptools>=61.0"] diff --git a/scripts/maintenance/audit_pip_dependency.sh b/scripts/maintenance/audit_pip_dependency.sh index dbd353704..1226e62a8 100755 --- a/scripts/maintenance/audit_pip_dependency.sh +++ b/scripts/maintenance/audit_pip_dependency.sh @@ -1,16 +1,11 @@ #!/usr/bin/env bash -# Pip dependency hygiene for in-repo components (excludes external service submodules). -# Default: audit lightweight docs deps. Use --include-nifi to audit NiFi extras (heavier). +# Python dependency hygiene for in-repo components (excludes external service submodules). +# Default: audit lightweight docs deps. Use --include-nifi to audit the root project lock (heavier). set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -PY_REQS_NIFI=( - "nifi/requirements.txt" - "nifi/requirements-dev.txt" -) - INCLUDE_NIFI=false while [[ $# -gt 0 ]]; do @@ -41,6 +36,7 @@ TMP_DIR="$(mktemp -d)" trap 'rm -rf -- "$TMP_DIR"' EXIT DOCS_REQUIREMENTS="${TMP_DIR}/docs-requirements.txt" +NIFI_REQUIREMENTS="${TMP_DIR}/nifi-requirements.txt" echo "==> Python dependency audit" echo "Exporting locked docs dependencies" @@ -61,14 +57,17 @@ if [[ "$INCLUDE_NIFI" != true ]]; then exit 0 fi -for req in "${PY_REQS_NIFI[@]}"; do - file="${ROOT_DIR}/${req}" - if [[ ! -f "$file" ]]; then - echo "Required dependency file not found: ${req}" >&2 - exit 1 - fi - echo "Running pip-audit on ${req}" - pip-audit -r "$file" --progress-spinner off -done +echo "Exporting locked NiFi runtime and development dependencies" +uv export \ + --project "$ROOT_DIR" \ + --quiet \ + --frozen \ + --all-groups \ + --no-emit-project \ + --format requirements.txt \ + --output-file "$NIFI_REQUIREMENTS" + +echo "Running pip-audit on uv.lock" +pip-audit -r "$NIFI_REQUIREMENTS" --progress-spinner off echo "Dependency audit complete." diff --git a/uv.lock b/uv.lock index 2ac2354a1..b5c54d8e4 100644 --- a/uv.lock +++ b/uv.lock @@ -1,8 +1,2773 @@ version = 1 revision = 3 requires-python = ">=3.11" +resolution-markers = [ + "python_full_version >= '3.13'", + "python_full_version == '3.12.*'", + "python_full_version < '3.12'", +] + +[[package]] +name = "annotated-types" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7", size = 15893, upload-time = "2026-07-23T20:16:13.995Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", size = 13427, upload-time = "2026-07-23T20:16:12.938Z" }, +] + +[[package]] +name = "asn1crypto" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/cf/d547feed25b5244fcb9392e288ff9fdc3280b10260362fc45d37a798a6ee/asn1crypto-1.5.1.tar.gz", hash = "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c", size = 121080, upload-time = "2022-03-15T14:46:52.889Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/7f/09065fd9e27da0eda08b4d6897f1c13535066174cc023af248fc2a8d5e5a/asn1crypto-1.5.1-py2.py3-none-any.whl", hash = "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67", size = 105045, upload-time = "2022-03-15T14:46:51.055Z" }, +] + +[[package]] +name = "avro" +version = "1.12.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/68/973b9c682aa2c3cf2b05fc4c961af11b9be1d9b46604f65aed23cd4fd1e6/avro-1.12.2.tar.gz", hash = "sha256:e900e7b59a4781f63d9e935e88f6ec50c4d60be3f4adf9c63b51ed39d578fe08", size = 105500, upload-time = "2026-08-17T17:58:19.935Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/10/48f47d5da1fda33e2951019d38449e201efd9042117ad660aa4dcbf9268b/avro-1.12.2-py3-none-any.whl", hash = "sha256:bcbed5da65d298cb4ceb1e61f1a61b5b9fb180049c904f4045022338a95bf686", size = 134848, upload-time = "2026-08-17T17:58:18.369Z" }, +] + +[[package]] +name = "backports-zstd" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/75/f0/9ba1b05811aa5f5434f69768253129460a5744e1814f359efba39a01ce20/backports_zstd-1.7.0.tar.gz", hash = "sha256:1a967189c1822b6e85a2e550fdfc88a3272c17633ea0a4732dac5911a8034f2b", size = 1003722, upload-time = "2026-08-15T17:26:43.96Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/14/416e2e75d434bf2b8433ba54f10e5ec01a63bb1dfc7c6a82151faa735b50/backports_zstd-1.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:165a8898c5514b69533edf4ab1f4f4b4bacc62a137a76f36889b473150ec28a5", size = 438790, upload-time = "2026-08-15T17:25:16.171Z" }, + { url = "https://files.pythonhosted.org/packages/08/0d/97e70a1d47d660c3854dfbbbd8a8ea9a98a0993976d9b0e0da07525dcff1/backports_zstd-1.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:700ebb797956767679dbca38e45eaa5c21630e460e31ef53bb4b849125bb5d87", size = 367595, upload-time = "2026-08-15T17:25:17.382Z" }, + { url = "https://files.pythonhosted.org/packages/5c/8f/9b09bc4d29c2b697e9557a54e1e52b264a1ca3babd36542e7be6a0609cf6/backports_zstd-1.7.0-cp311-cp311-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:47f14a24428a2bc070e26c402f8d6d25676345c32fa116b16b60167a2925df2a", size = 507936, upload-time = "2026-08-15T17:25:18.695Z" }, + { url = "https://files.pythonhosted.org/packages/89/e6/7eb513bb06fb2733e71cf358f227969996b74883de86458935c09f08d1c4/backports_zstd-1.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c358e72e5ff8f23e9f3ec778be4d67ddc5ced3e6d8f03521db29d7357a773fc3", size = 477864, upload-time = "2026-08-15T17:25:19.833Z" }, + { url = "https://files.pythonhosted.org/packages/3f/68/fe0e57f2c8e04560eecc106bba18ad62d0576001722e8c5b619bb4517991/backports_zstd-1.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6c8c183027eae38f5b0643d153f7f91e569d22ee8db25639aea0745677a38ed8", size = 583229, upload-time = "2026-08-15T17:25:21.144Z" }, + { url = "https://files.pythonhosted.org/packages/e3/d3/5944fbdfc8c03b8ef72c73c36652a32bb251b1b8ccefab07a8a8fbf202cb/backports_zstd-1.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5d8493f71d9c5c05d18554afc6bb9a319a6674478e8f3042c7e22900c3a06f4d", size = 642898, upload-time = "2026-08-15T17:25:22.379Z" }, + { url = "https://files.pythonhosted.org/packages/96/f2/661bd15e062ceb1a20a78e40598fee599a31472e60a7961dcd75b467c94f/backports_zstd-1.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b2e505d8923e1e9224cf249b99c92cf728e9eb91fbd1e07a9c2816013621fad3", size = 493145, upload-time = "2026-08-15T17:25:23.833Z" }, + { url = "https://files.pythonhosted.org/packages/00/6b/454369a552a3d114b293706441dc43412639a30665b9551959f0773e9b62/backports_zstd-1.7.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5d1bdc293267200e31baf35aa142c6d0ac3e8cce650f79c84e6a32980dfbfd5c", size = 567043, upload-time = "2026-08-15T17:25:25.104Z" }, + { url = "https://files.pythonhosted.org/packages/bc/f2/e7af20299deb43f52aaf24f74e60b994201aea6d22c8a2adaaa13dc4b109/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d85c18170e8cdba339edc67a5021cf79ccc858f5fda6aeae71f9015c5e463f6", size = 483881, upload-time = "2026-08-15T17:25:26.634Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c4/0882cfac8714345cfcc5ba139e16c7b64aee9f2fec3ebff9de77131f1d14/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:96a6f8d3f4cefb6b11ebfc30fc0d970430ecfb169a6555990734a2a46977ec4b", size = 511455, upload-time = "2026-08-15T17:25:27.808Z" }, + { url = "https://files.pythonhosted.org/packages/be/85/01cfbb2f07475ac1091ea93fbd04762c95ee6d82c937e2508072e12a9eb6/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c2c01cb823ed1b2422905a9791759bdc986e44e7a12b4661e9d712d5c8946016", size = 587585, upload-time = "2026-08-15T17:25:29.012Z" }, + { url = "https://files.pythonhosted.org/packages/61/2f/f378daf513ca0feb5740aa4b1291c5133e5095830a7052da6088974f477b/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:86785aef2b4663a97c932d829ddc9565354cc628e2ae61764d9d93c8b186d65f", size = 564894, upload-time = "2026-08-15T17:25:30.28Z" }, + { url = "https://files.pythonhosted.org/packages/34/ef/cb031d27b06863aa666d49dada3c1010151306b98861b8b826ae722af1a6/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:633ceee3ba86f696fc4e992f7bce558c132c26d04d64d0bb8c2f5d487d5b3aee", size = 633546, upload-time = "2026-08-15T17:25:31.652Z" }, + { url = "https://files.pythonhosted.org/packages/f0/44/b5f1480f6c250ed72f22e8682d6532f992aef0e2033b21b8d8bff96be034/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a80bc6a8c9aeaad76cc3ecd58067ec038a764807186b0df970c760df39b89c7", size = 497152, upload-time = "2026-08-15T17:25:32.957Z" }, + { url = "https://files.pythonhosted.org/packages/db/30/13f0447faef940a763dfddf6ba2d4941bb45a350bba8c9ba56a22e933dfd/backports_zstd-1.7.0-cp311-cp311-win32.whl", hash = "sha256:1713271e2faea852a1682a6143c19c3506cd2e1b71f60a8924c59a9d2554d2b2", size = 292182, upload-time = "2026-08-15T17:25:34.262Z" }, + { url = "https://files.pythonhosted.org/packages/99/04/8f67d5436f7ef4b1d286b8b186fb4a3e371416921110f8dc0f6c4d9e497d/backports_zstd-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:ae840be71108f6020567dd389c973e70a4374a6c0b03c02d3242c8a98a9b3cdb", size = 329717, upload-time = "2026-08-15T17:25:35.517Z" }, + { url = "https://files.pythonhosted.org/packages/c2/eb/e446bb3d4520e618571a929ceb7776124d6f8491ea17d3355a8867deb031/backports_zstd-1.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:8827a5601c749a986faa163f3b59d59eedc5947812be114f7132c3d4ad153fee", size = 292294, upload-time = "2026-08-15T17:25:36.797Z" }, + { url = "https://files.pythonhosted.org/packages/df/23/240495dec973dcfb34816248956ca8d05b32fb75936c226c1cf497b83b83/backports_zstd-1.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5548a857bb0fcc5449cc3687353547396c6b1ecd4bd882f1cd34fa8d29e70ca", size = 439047, upload-time = "2026-08-15T17:25:38.084Z" }, + { url = "https://files.pythonhosted.org/packages/6d/24/5556959c7d03bfee5ff14d7f07dd9bf8de737c69f81d823a32784ab39c34/backports_zstd-1.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bab192b934fdf5a03df4752556d9c8af2d058163fdfbafd4a253cdfe25449a6f", size = 367666, upload-time = "2026-08-15T17:25:39.233Z" }, + { url = "https://files.pythonhosted.org/packages/b2/cb/557db98001c4a7202beed19e8bd42603a2315b80fd5def7e21a0b048ec3b/backports_zstd-1.7.0-cp312-cp312-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:8344260bed9842c415a93d9bfe23ea834e5f27758827d56933d8c0d06db507a2", size = 508475, upload-time = "2026-08-15T17:25:40.367Z" }, + { url = "https://files.pythonhosted.org/packages/40/4b/820acbc2c1d1d945aedca0c0d22546a948630ffb186df523098fbd669a95/backports_zstd-1.7.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c55e55e1e9dee312bc5e186386e6aa5207482a6d2242bd7c14709ded254f87f", size = 478240, upload-time = "2026-08-15T17:25:41.806Z" }, + { url = "https://files.pythonhosted.org/packages/f9/76/77fa9b385e79d4c106ce15d66681978f39a844b0eb5db02682687246b716/backports_zstd-1.7.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cf609af3735c7e697ccd13f6b0c88da57c201b6ea63c6afbfe81d6f9b50e298c", size = 583611, upload-time = "2026-08-15T17:25:43.104Z" }, + { url = "https://files.pythonhosted.org/packages/95/a4/fbb7c73336f3279dad36da94382a59755100b656301ea836ebaa42736581/backports_zstd-1.7.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:676a37971f676830d4f90cee8fdf4e438781596fb2f2d1984ac76c9b3eb39a69", size = 642496, upload-time = "2026-08-15T17:25:44.322Z" }, + { url = "https://files.pythonhosted.org/packages/1e/40/121917bd2671bc3f1507c25503c0554f0b52483edcca4e6210e6d22228df/backports_zstd-1.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:470895d0bcddc850766e593d1b26764fb138c2feed149f515a2627ef9587d54c", size = 496195, upload-time = "2026-08-15T17:25:45.503Z" }, + { url = "https://files.pythonhosted.org/packages/de/c7/c6379a0d734bea1c7f14d07c23258108cc92b994654e25cfe3a3e88cd785/backports_zstd-1.7.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:02f2f6649a342d0901ddb35596ddadb7c3bb1cf6bb54d691e5e0285f1fa0674f", size = 570964, upload-time = "2026-08-15T17:25:46.648Z" }, + { url = "https://files.pythonhosted.org/packages/7a/a4/372c3dd3017c3f93cda0acbc282f8073b70efdc1b56d1fdeebe023660725/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:132ba81fad59d44958b7d10da31545e7128c469cfbc2e268d0eaab96daa64175", size = 484276, upload-time = "2026-08-15T17:25:48.129Z" }, + { url = "https://files.pythonhosted.org/packages/f5/50/83fa7bdd5e1d808203b9143848fdf7e15de399b8119a0d4378b2aea9be78/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a3e1c6ce0b232ee6703ed24ee126e8186107f5a4e56edbd21cd1aa5a8c6bfd12", size = 511963, upload-time = "2026-08-15T17:25:49.666Z" }, + { url = "https://files.pythonhosted.org/packages/56/d2/d4ed32c353148acc18f3b665ab24a677b9c49d3640244424c5d6046400c5/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d7a7cb964eb8d1bb5d039970b16fe54802ea47dc935ae96d9874844a126bf8ff", size = 588025, upload-time = "2026-08-15T17:25:51.288Z" }, + { url = "https://files.pythonhosted.org/packages/ae/5a/df8b5b848e8dfdec6edca55f22067ffbafa081d81aec1313e28155c3fea3/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:12a9842a2ec2854cbec7f252ab29d44c2b772788a9bbafded743ca4bf73b115f", size = 568223, upload-time = "2026-08-15T17:25:52.633Z" }, + { url = "https://files.pythonhosted.org/packages/43/8c/f970f15e7fdbf8a251f121c91364fa68bbc2dfab4d5eca058427dec63397/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:138154eea8ced84394991bf0e819dba6b690306a178dd528c28eee724b7d4aec", size = 632937, upload-time = "2026-08-15T17:25:54.511Z" }, + { url = "https://files.pythonhosted.org/packages/6a/d0/e36c18c87a74421954502d123ff7027e0a63a7624dffa99ec0f7474deff9/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:468b636ed365627b364c94be1c35a52858e13b5bc1fa3f068bbc71b1af65f3d7", size = 500735, upload-time = "2026-08-15T17:25:56.064Z" }, + { url = "https://files.pythonhosted.org/packages/1c/57/fc72280334d2aa94238c5882052263bd7796c1fa924044353c30d058e0c3/backports_zstd-1.7.0-cp312-cp312-win32.whl", hash = "sha256:f026fe2e89b7ff01ba6ebec6abaff34c6063919151a32afb68714cf139e17c50", size = 292394, upload-time = "2026-08-15T17:25:57.469Z" }, + { url = "https://files.pythonhosted.org/packages/71/89/6cea747bdeef34cd12482b17e604b832fdb0962987132b99496f1a6c3f82/backports_zstd-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:2ea62ba2f1a6e6c9e6dc108921f9ae881969ca72e073162fa488d0de3eb2713f", size = 329876, upload-time = "2026-08-15T17:25:58.798Z" }, + { url = "https://files.pythonhosted.org/packages/64/28/b4a17c07d5a50a45cb04592960d1593cdf3b3728968371f332aa3643b804/backports_zstd-1.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:cefb983345c55ccaa20423a4eb96434730e6d640ffa2db9b60e5bedb0fbef94e", size = 292461, upload-time = "2026-08-15T17:25:59.928Z" }, + { url = "https://files.pythonhosted.org/packages/6f/24/32b3358ae3a4df0ebad85ebbce721818c6d76a836119bee76089d103e951/backports_zstd-1.7.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:a3fbcbf819bee2b06b8666b13742098d0f40663ee34e64a12bc360ec0f5e3d89", size = 400913, upload-time = "2026-08-15T17:26:01.089Z" }, + { url = "https://files.pythonhosted.org/packages/af/f3/39ef7dd75eb1e699e25a19212737a73d3c030a0c9fd1d0ed1572b5f8e493/backports_zstd-1.7.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:efee02f18e04c2e9e6d694c5cf9b7457c4bda3ea96f48b1ee69769e06bb9d89f", size = 454915, upload-time = "2026-08-15T17:26:02.294Z" }, + { url = "https://files.pythonhosted.org/packages/76/e8/8209081e094aa98b2f28bac388619c85b1a44aed813d6b3c54d1da79d19a/backports_zstd-1.7.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:ecc95fa0e91d92951d74468e7789afdf91d9e702f40af2d0fcbf0ded4d0f650a", size = 357992, upload-time = "2026-08-15T17:26:03.552Z" }, + { url = "https://files.pythonhosted.org/packages/b3/65/64025302bae4ba924d613e404c6120bf194b5636786960ece274622a4a3e/backports_zstd-1.7.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:34154d82fc0246738159084d146401073f9ac9cfd755b66bb8853ca06037810c", size = 366686, upload-time = "2026-08-15T17:26:04.812Z" }, + { url = "https://files.pythonhosted.org/packages/4a/b9/c4d24d113d28b774662152c462d38d28109741d6d45c1aea7834371741dc/backports_zstd-1.7.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:44b687b1c0be5cb279693d2682f91ff84c559d679b2ef2fbe501fe4b2db2c4bb", size = 447221, upload-time = "2026-08-15T17:26:05.979Z" }, + { url = "https://files.pythonhosted.org/packages/cb/9f/8db55c7f77aec60879844a879ac026065d8f03aab74080701acc060c4168/backports_zstd-1.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dcdbd368659f46b570114eeea36b75347716523870d71f6bc5d7801862aefd6e", size = 438571, upload-time = "2026-08-15T17:26:07.421Z" }, + { url = "https://files.pythonhosted.org/packages/cd/f8/72930ae4bb7bf6b9d6c7c31bce7b3e5751c062269a4ee718066e25f1973b/backports_zstd-1.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eda97fa535d4651a4ccdeed4ee7dde3978369046abc8a7456a7117d4271f9333", size = 367041, upload-time = "2026-08-15T17:26:08.537Z" }, + { url = "https://files.pythonhosted.org/packages/17/9b/7289dc191b34279d8f176bf5b181c3b26f8e049d14a2c0a2637650f034e5/backports_zstd-1.7.0-cp313-cp313-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:7e3999b5141d7f85171822d06112f70f7f317d162f0120530dd2c7a28dbf8add", size = 507676, upload-time = "2026-08-15T17:26:09.909Z" }, + { url = "https://files.pythonhosted.org/packages/7c/4d/6dd730b79ab96532e23fe851003545b4cc79e50c5b4c79ffcbe1b724eec4/backports_zstd-1.7.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69367726f4075c2574746f5883b0dc045805c5b02a81fdf8c829c26d33969de3", size = 477744, upload-time = "2026-08-15T17:26:11.038Z" }, + { url = "https://files.pythonhosted.org/packages/e1/53/11687e5019d56ea47893cf2ba59a6b4884a4e2d1496d0e653aed373b973f/backports_zstd-1.7.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:15e97edfd173ade365c01bac7d9d297fa906686015cdbcb5f32a0d410887826b", size = 583215, upload-time = "2026-08-15T17:26:12.379Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c7/5a8c58542469ab31680c403b844770c119a976fd4cf1000fd7d53e7d0f77/backports_zstd-1.7.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:32a94cdcf16b44395cd55086ea38877395ca6bf3362cb507b0eb86db2a45a6a4", size = 644125, upload-time = "2026-08-15T17:26:13.651Z" }, + { url = "https://files.pythonhosted.org/packages/11/35/be5485e65df95b86c4981ad4a577b505cfeec6b700a46a86e2e3175ac718/backports_zstd-1.7.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3f4887a8a1fd1290017fe5a1d29a7d1dc5c57f9477fbd64f119316a7e3ae769", size = 492714, upload-time = "2026-08-15T17:26:14.838Z" }, + { url = "https://files.pythonhosted.org/packages/96/8b/a0603458ca08e4a56f09ae58588ce3c0453425e753df704d9aeaabb66ae5/backports_zstd-1.7.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e590313ce156f1d8986dff3107e8ed1651d6d106a56b3a95f965ff8d845ba979", size = 567953, upload-time = "2026-08-15T17:26:16.276Z" }, + { url = "https://files.pythonhosted.org/packages/02/87/2296db4c3c578947c35ccd8dcdf7992316d7e1f5f43cc829c062b3ed9319/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:565270b0d6497970fa97a0df59593ae0d225e4176678bbce851d39e5f8aa422b", size = 483564, upload-time = "2026-08-15T17:26:17.493Z" }, + { url = "https://files.pythonhosted.org/packages/c0/d8/f53a79e6bf3cdb7ae08f95220c80bd0d606f3d6c3482995deaf21d024fb9/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:37ef23c6c522fe935726c8fba6344350973c4a23b06d10194d90d0868b09ff7a", size = 511193, upload-time = "2026-08-15T17:26:18.7Z" }, + { url = "https://files.pythonhosted.org/packages/31/ea/d4e2eb159cd5813debd5a34d0644caff5fe7cf2e569bf5b02a82934aeee7/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b3975330159f1efdd1fba76afe1c7b84f66f26e2bf209b32630fb148d647e0d5", size = 587748, upload-time = "2026-08-15T17:26:20.148Z" }, + { url = "https://files.pythonhosted.org/packages/81/d2/b5ec9709660fb1c193508215d9c30e781fac406183faac7c3c36b1c583a9/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b40bc8cd0a86cbbe8263a9c3a2bf2e34897483516c6d799725412a19524c32e3", size = 565808, upload-time = "2026-08-15T17:26:21.349Z" }, + { url = "https://files.pythonhosted.org/packages/bd/13/004735cc4536483cbd973a60346a9dbc7bb977b13c28b55a11da14bb0a1e/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f37e12ef10747f76901b1f20ef70d33221e861de177dba5ba08552242c6fd4bd", size = 634520, upload-time = "2026-08-15T17:26:22.944Z" }, + { url = "https://files.pythonhosted.org/packages/a3/28/05b11f7084d1100491cf7c60962aafd900c3dd01b1fc1ce85914476cdae0/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5992143b2a8b71b4d17afed20cce2df50f8718228e31d6e716493b1fe9201712", size = 497098, upload-time = "2026-08-15T17:26:24.181Z" }, + { url = "https://files.pythonhosted.org/packages/f5/a5/bdc98d039ddbd5815fc1dd71912bbfb9f820a46ec12004ead51c8d60ea50/backports_zstd-1.7.0-cp313-cp313-win32.whl", hash = "sha256:31ae30d216ffae9243dfa607bcb995f94a70de5765bb8fae1e35ea1ad6497959", size = 291974, upload-time = "2026-08-15T17:26:25.512Z" }, + { url = "https://files.pythonhosted.org/packages/13/7d/fb0da7351e8b152d5149127594972922829281c316618df37a7e724f2eb9/backports_zstd-1.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:8086b4a7443bb2863f7ef8edb317b715d5f3ccec6c5512619bd23d57661ba1b7", size = 329550, upload-time = "2026-08-15T17:26:26.683Z" }, + { url = "https://files.pythonhosted.org/packages/37/f9/109ac272d650483fbdfa611c0040253a405f640604fbc90acc8076c6d37f/backports_zstd-1.7.0-cp313-cp313-win_arm64.whl", hash = "sha256:7eaceeec75e1dbdce40b81fb0ed1ffdb7ce492d970db7f8aabd6a95ccd6c3dd3", size = 292174, upload-time = "2026-08-15T17:26:27.819Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ea/42fe3258e02a65603d1eab26200712e37bef6ea408e7f9dbfd6858bc036a/backports_zstd-1.7.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:de58be0a3109cfb83b4e61e2b6eb770201cc132ee5a7c677cd8e0140ad2be80c", size = 413302, upload-time = "2026-08-15T17:26:36.286Z" }, + { url = "https://files.pythonhosted.org/packages/37/00/486044556d715a7b1a41e9cd69544bf8cb3988b383453657c021d24c5c27/backports_zstd-1.7.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:c13f73d0389cdc88b02c05e8175d8ad3030e9e70ee079748763166aa843b647d", size = 343983, upload-time = "2026-08-15T17:26:37.603Z" }, + { url = "https://files.pythonhosted.org/packages/02/f8/f078a32c80ef7546ec2d1206a38bedf4d150cbaac653f8f32d7329f987ff/backports_zstd-1.7.0-pp311-pypy311_pp73-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:a2e30ea49c673533d40eb73d0f7abc0ebe9d2e4fc6dbada5ad60b42ff98ffa86", size = 422218, upload-time = "2026-08-15T17:26:38.911Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e2/e5151b85ca9ddfce58388f0fb0316adaacda25d494d2a668842e09f02063/backports_zstd-1.7.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e3f760ee9d16378e3cde9d862e1c9ced577a86736763fb486b9f731d5116807", size = 395760, upload-time = "2026-08-15T17:26:40.09Z" }, + { url = "https://files.pythonhosted.org/packages/78/bf/fd7d55452431d836b3ae81170689f19ddab210fa6c385a72e22006320afe/backports_zstd-1.7.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25caf23dc36de3b839d16c25893751323cf51a8c986f2d01478c16b25133e2e8", size = 415725, upload-time = "2026-08-15T17:26:41.322Z" }, + { url = "https://files.pythonhosted.org/packages/f9/fe/f30ad42bd082b9c6d419c23311a8904a55e248e07c61bf6b91e1691188aa/backports_zstd-1.7.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a64e796c7eee69dfe45827b2e003b7731785ec890c73ea5f5fbc30a1c362fcad", size = 316244, upload-time = "2026-08-15T17:26:42.614Z" }, +] + +[[package]] +name = "bokeh" +version = "3.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "jinja2" }, + { name = "narwhals" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pillow" }, + { name = "pyyaml" }, + { name = "tornado", marker = "sys_platform != 'emscripten'" }, + { name = "xyzservices" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/31/7ee0c4dfd0255631b0624ce01be178704f91f763f02a1879368eb109befd/bokeh-3.8.2.tar.gz", hash = "sha256:8e7dcacc21d53905581b54328ad2705954f72f2997f99fc332c1de8da53aa3cc", size = 6529251, upload-time = "2026-01-06T00:20:06.568Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/a8/877f306720bc114c612579c5af36bcb359026b83d051226945499b306b1a/bokeh-3.8.2-py3-none-any.whl", hash = "sha256:5e2c0d84f75acb25d60efb9e4d2f434a791c4639b47d685534194c4e07bd0111", size = 7207131, upload-time = "2026-01-06T00:20:04.917Z" }, +] + +[[package]] +name = "boto3" +version = "1.43.86" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, + { name = "jmespath" }, + { name = "s3transfer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/a0/b8693637bee21e266a52f3e1b8bb9fe4897934aa62c55cc132f8721c1b8f/boto3-1.43.86.tar.gz", hash = "sha256:aca7b5d7f31a90ad37bec773552ec9bfb57e0029c9aa0f0f4d51d5bf9607b1c4", size = 112685, upload-time = "2026-09-01T19:24:02.867Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/dd/f4874f7bab882a778178b03965b1474c63f2e8bd2eea5dd714f06b0e8713/boto3-1.43.86-py3-none-any.whl", hash = "sha256:94543a5ce482df8bb6a0bf8a944bf5ccf6625889b1df0d7886dfc3311ebd4169", size = 140026, upload-time = "2026-09-01T19:24:00.638Z" }, +] + +[[package]] +name = "botocore" +version = "1.43.86" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jmespath" }, + { name = "python-dateutil" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/77/0ed1c398b7d3aa5d02c1b15df32a049e07961339fe41640af1440079c2f7/botocore-1.43.86.tar.gz", hash = "sha256:0e943c77ab6a54aaaf4d57e6026ede5c3dca341af71ce91f71849a6eae9d5dbf", size = 16059433, upload-time = "2026-09-01T19:23:57.72Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/59/eb95d57ea576feaf1693f5e914f9f27ff9961429cf9ecbc85cef610a6d84/botocore-1.43.86-py3-none-any.whl", hash = "sha256:4efc7fbd6e7616edbd55623bb585a044906149b9a5d3d8558420506526e5a5ac", size = 15751556, upload-time = "2026-09-01T19:23:54.013Z" }, +] + +[[package]] +name = "branca" +version = "0.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jinja2" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/32/14/9d409124bda3f4ab7af3802aba07181d1fd56aa96cc4b999faea6a27a0d2/branca-0.8.2.tar.gz", hash = "sha256:e5040f4c286e973658c27de9225c1a5a7356dd0702a7c8d84c0f0dfbde388fe7", size = 27890, upload-time = "2025-10-06T10:28:20.305Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/50/fc9680058e63161f2f63165b84c957a0df1415431104c408e8104a3a18ef/branca-0.8.2-py3-none-any.whl", hash = "sha256:2ebaef3983e3312733c1ae2b793b0a8ba3e1c4edeb7598e10328505280cf2f7c", size = 26193, upload-time = "2025-10-06T10:28:19.255Z" }, +] + +[[package]] +name = "brotli" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/16/c92ca344d646e71a43b8bb353f0a6490d7f6e06210f8554c8f874e454285/brotli-1.2.0.tar.gz", hash = "sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a", size = 7388632, upload-time = "2025-11-05T18:39:42.86Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/ef/f285668811a9e1ddb47a18cb0b437d5fc2760d537a2fe8a57875ad6f8448/brotli-1.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744", size = 863110, upload-time = "2025-11-05T18:38:12.978Z" }, + { url = "https://files.pythonhosted.org/packages/50/62/a3b77593587010c789a9d6eaa527c79e0848b7b860402cc64bc0bc28a86c/brotli-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f", size = 445438, upload-time = "2025-11-05T18:38:14.208Z" }, + { url = "https://files.pythonhosted.org/packages/cd/e1/7fadd47f40ce5549dc44493877db40292277db373da5053aff181656e16e/brotli-1.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd", size = 1534420, upload-time = "2025-11-05T18:38:15.111Z" }, + { url = "https://files.pythonhosted.org/packages/12/8b/1ed2f64054a5a008a4ccd2f271dbba7a5fb1a3067a99f5ceadedd4c1d5a7/brotli-1.2.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe", size = 1632619, upload-time = "2025-11-05T18:38:16.094Z" }, + { url = "https://files.pythonhosted.org/packages/89/5a/7071a621eb2d052d64efd5da2ef55ecdac7c3b0c6e4f9d519e9c66d987ef/brotli-1.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a", size = 1426014, upload-time = "2025-11-05T18:38:17.177Z" }, + { url = "https://files.pythonhosted.org/packages/26/6d/0971a8ea435af5156acaaccec1a505f981c9c80227633851f2810abd252a/brotli-1.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b", size = 1489661, upload-time = "2025-11-05T18:38:18.41Z" }, + { url = "https://files.pythonhosted.org/packages/f3/75/c1baca8b4ec6c96a03ef8230fab2a785e35297632f402ebb1e78a1e39116/brotli-1.2.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3", size = 1599150, upload-time = "2025-11-05T18:38:19.792Z" }, + { url = "https://files.pythonhosted.org/packages/0d/1a/23fcfee1c324fd48a63d7ebf4bac3a4115bdb1b00e600f80f727d850b1ae/brotli-1.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae", size = 1493505, upload-time = "2025-11-05T18:38:20.913Z" }, + { url = "https://files.pythonhosted.org/packages/36/e5/12904bbd36afeef53d45a84881a4810ae8810ad7e328a971ebbfd760a0b3/brotli-1.2.0-cp311-cp311-win32.whl", hash = "sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03", size = 334451, upload-time = "2025-11-05T18:38:21.94Z" }, + { url = "https://files.pythonhosted.org/packages/02/8b/ecb5761b989629a4758c394b9301607a5880de61ee2ee5fe104b87149ebc/brotli-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24", size = 369035, upload-time = "2025-11-05T18:38:22.941Z" }, + { url = "https://files.pythonhosted.org/packages/11/ee/b0a11ab2315c69bb9b45a2aaed022499c9c24a205c3a49c3513b541a7967/brotli-1.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84", size = 861543, upload-time = "2025-11-05T18:38:24.183Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2f/29c1459513cd35828e25531ebfcbf3e92a5e49f560b1777a9af7203eb46e/brotli-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b", size = 444288, upload-time = "2025-11-05T18:38:25.139Z" }, + { url = "https://files.pythonhosted.org/packages/3d/6f/feba03130d5fceadfa3a1bb102cb14650798c848b1df2a808356f939bb16/brotli-1.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d", size = 1528071, upload-time = "2025-11-05T18:38:26.081Z" }, + { url = "https://files.pythonhosted.org/packages/2b/38/f3abb554eee089bd15471057ba85f47e53a44a462cfce265d9bf7088eb09/brotli-1.2.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca", size = 1626913, upload-time = "2025-11-05T18:38:27.284Z" }, + { url = "https://files.pythonhosted.org/packages/03/a7/03aa61fbc3c5cbf99b44d158665f9b0dd3d8059be16c460208d9e385c837/brotli-1.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f", size = 1419762, upload-time = "2025-11-05T18:38:28.295Z" }, + { url = "https://files.pythonhosted.org/packages/21/1b/0374a89ee27d152a5069c356c96b93afd1b94eae83f1e004b57eb6ce2f10/brotli-1.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28", size = 1484494, upload-time = "2025-11-05T18:38:29.29Z" }, + { url = "https://files.pythonhosted.org/packages/cf/57/69d4fe84a67aef4f524dcd075c6eee868d7850e85bf01d778a857d8dbe0a/brotli-1.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7", size = 1593302, upload-time = "2025-11-05T18:38:30.639Z" }, + { url = "https://files.pythonhosted.org/packages/d5/3b/39e13ce78a8e9a621c5df3aeb5fd181fcc8caba8c48a194cd629771f6828/brotli-1.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036", size = 1487913, upload-time = "2025-11-05T18:38:31.618Z" }, + { url = "https://files.pythonhosted.org/packages/62/28/4d00cb9bd76a6357a66fcd54b4b6d70288385584063f4b07884c1e7286ac/brotli-1.2.0-cp312-cp312-win32.whl", hash = "sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161", size = 334362, upload-time = "2025-11-05T18:38:32.939Z" }, + { url = "https://files.pythonhosted.org/packages/1c/4e/bc1dcac9498859d5e353c9b153627a3752868a9d5f05ce8dedd81a2354ab/brotli-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44", size = 369115, upload-time = "2025-11-05T18:38:33.765Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d4/4ad5432ac98c73096159d9ce7ffeb82d151c2ac84adcc6168e476bb54674/brotli-1.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab", size = 861523, upload-time = "2025-11-05T18:38:34.67Z" }, + { url = "https://files.pythonhosted.org/packages/91/9f/9cc5bd03ee68a85dc4bc89114f7067c056a3c14b3d95f171918c088bf88d/brotli-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c", size = 444289, upload-time = "2025-11-05T18:38:35.6Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b6/fe84227c56a865d16a6614e2c4722864b380cb14b13f3e6bef441e73a85a/brotli-1.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f", size = 1528076, upload-time = "2025-11-05T18:38:36.639Z" }, + { url = "https://files.pythonhosted.org/packages/55/de/de4ae0aaca06c790371cf6e7ee93a024f6b4bb0568727da8c3de112e726c/brotli-1.2.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6", size = 1626880, upload-time = "2025-11-05T18:38:37.623Z" }, + { url = "https://files.pythonhosted.org/packages/5f/16/a1b22cbea436642e071adcaf8d4b350a2ad02f5e0ad0da879a1be16188a0/brotli-1.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c", size = 1419737, upload-time = "2025-11-05T18:38:38.729Z" }, + { url = "https://files.pythonhosted.org/packages/46/63/c968a97cbb3bdbf7f974ef5a6ab467a2879b82afbc5ffb65b8acbb744f95/brotli-1.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48", size = 1484440, upload-time = "2025-11-05T18:38:39.916Z" }, + { url = "https://files.pythonhosted.org/packages/06/9d/102c67ea5c9fc171f423e8399e585dabea29b5bc79b05572891e70013cdd/brotli-1.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18", size = 1593313, upload-time = "2025-11-05T18:38:41.24Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4a/9526d14fa6b87bc827ba1755a8440e214ff90de03095cacd78a64abe2b7d/brotli-1.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5", size = 1487945, upload-time = "2025-11-05T18:38:42.277Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e8/3fe1ffed70cbef83c5236166acaed7bb9c766509b157854c80e2f766b38c/brotli-1.2.0-cp313-cp313-win32.whl", hash = "sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a", size = 334368, upload-time = "2025-11-05T18:38:43.345Z" }, + { url = "https://files.pythonhosted.org/packages/ff/91/e739587be970a113b37b821eae8097aac5a48e5f0eca438c22e4c7dd8648/brotli-1.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8", size = 369116, upload-time = "2025-11-05T18:38:44.609Z" }, + { url = "https://files.pythonhosted.org/packages/17/e1/298c2ddf786bb7347a1cd71d63a347a79e5712a7c0cba9e3c3458ebd976f/brotli-1.2.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21", size = 863080, upload-time = "2025-11-05T18:38:45.503Z" }, + { url = "https://files.pythonhosted.org/packages/84/0c/aac98e286ba66868b2b3b50338ffbd85a35c7122e9531a73a37a29763d38/brotli-1.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac", size = 445453, upload-time = "2025-11-05T18:38:46.433Z" }, + { url = "https://files.pythonhosted.org/packages/ec/f1/0ca1f3f99ae300372635ab3fe2f7a79fa335fee3d874fa7f9e68575e0e62/brotli-1.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e", size = 1528168, upload-time = "2025-11-05T18:38:47.371Z" }, + { url = "https://files.pythonhosted.org/packages/d6/a6/2ebfc8f766d46df8d3e65b880a2e220732395e6d7dc312c1e1244b0f074a/brotli-1.2.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7", size = 1627098, upload-time = "2025-11-05T18:38:48.385Z" }, + { url = "https://files.pythonhosted.org/packages/f3/2f/0976d5b097ff8a22163b10617f76b2557f15f0f39d6a0fe1f02b1a53e92b/brotli-1.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63", size = 1419861, upload-time = "2025-11-05T18:38:49.372Z" }, + { url = "https://files.pythonhosted.org/packages/9c/97/d76df7176a2ce7616ff94c1fb72d307c9a30d2189fe877f3dd99af00ea5a/brotli-1.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b", size = 1484594, upload-time = "2025-11-05T18:38:50.655Z" }, + { url = "https://files.pythonhosted.org/packages/d3/93/14cf0b1216f43df5609f5b272050b0abd219e0b54ea80b47cef9867b45e7/brotli-1.2.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361", size = 1593455, upload-time = "2025-11-05T18:38:51.624Z" }, + { url = "https://files.pythonhosted.org/packages/b3/73/3183c9e41ca755713bdf2cc1d0810df742c09484e2e1ddd693bee53877c1/brotli-1.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888", size = 1488164, upload-time = "2025-11-05T18:38:53.079Z" }, + { url = "https://files.pythonhosted.org/packages/64/6a/0c78d8f3a582859236482fd9fa86a65a60328a00983006bcf6d83b7b2253/brotli-1.2.0-cp314-cp314-win32.whl", hash = "sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d", size = 339280, upload-time = "2025-11-05T18:38:54.02Z" }, + { url = "https://files.pythonhosted.org/packages/f5/10/56978295c14794b2c12007b07f3e41ba26acda9257457d7085b0bb3bb90c/brotli-1.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3", size = 375639, upload-time = "2025-11-05T18:38:55.67Z" }, +] + +[[package]] +name = "brotlicffi" +version = "1.2.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/97/7845739a36828ffe751a1c6b240692f552fd7ecf65026c51326c0a4aa369/brotlicffi-1.2.0.2.tar.gz", hash = "sha256:5e0fbd13644cf1f6015e75fa5e0ad8fdce1048d9c9ff90b0ce826174b249ee35", size = 478755, upload-time = "2026-08-21T17:29:18.415Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/a2/edda4f3fc7143434402eacad1e91433fe68ae648c22738eeddb6138638ba/brotlicffi-1.2.0.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ad05ca993234cf947f0ad71b1c8bc0af3d74e0410b1e2c32bb99de0cef6a994b", size = 438789, upload-time = "2026-08-21T17:28:55.708Z" }, + { url = "https://files.pythonhosted.org/packages/0d/9c/506dc8edabb3cf9339c89f1ecc80a218aa166bb83b9f2e9cc1da67314072/brotlicffi-1.2.0.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0636cb5a85f31c36e08953d09a226cb788be900b976f81302895e3cf35d5e707", size = 1541246, upload-time = "2026-08-21T17:28:57.669Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d6/74cee9f9fbea8c42030a81056c64e092030a95bd2756ea83da1d1e8f5f29/brotlicffi-1.2.0.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:97bae40d45ebc2a6ac7b1c9b30825496a257192194b672ef5869e2df93467f69", size = 1542129, upload-time = "2026-08-21T17:28:59.502Z" }, + { url = "https://files.pythonhosted.org/packages/24/cc/c32630b042ec2a13e8342e6ecb6b9d3531b1be4647b733d6fd365976041c/brotlicffi-1.2.0.2-cp314-cp314t-win32.whl", hash = "sha256:8f3f9bd61293dc48359763e693951393f39656086315067cf97e23e23e8911ab", size = 346840, upload-time = "2026-08-21T17:29:01.085Z" }, + { url = "https://files.pythonhosted.org/packages/ee/0b/83cac3075721fe4c253ea1cc5310cb687c2f7d987e0fd60eb3ed769c24c0/brotlicffi-1.2.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:908add8a9c0eea00f5de799dc6de9f6d205d9ee11afabc7c03d6812c481200e2", size = 386079, upload-time = "2026-08-21T17:29:02.667Z" }, + { url = "https://files.pythonhosted.org/packages/2e/71/c27f24b8334f65f2492601c7764338f156cb904d2ffe0061e6004a76d9cc/brotlicffi-1.2.0.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:d5a8ffa154f16660ab818d78045b55fa6f9970f1ca4c38998766e99c672071cb", size = 438885, upload-time = "2026-08-21T17:29:04.113Z" }, + { url = "https://files.pythonhosted.org/packages/ef/22/d8fd1a4d09b7ab563b89380395e09151d2ef1344be31594df6a6987d4028/brotlicffi-1.2.0.2-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec6b1af7b7a8ce788354f2c603651ada0fba166ec31ab879e2eec462a3e6dbf4", size = 1534365, upload-time = "2026-08-21T17:29:05.878Z" }, + { url = "https://files.pythonhosted.org/packages/06/78/076419ed6c2c6aa3eaac6fd6b076502b4be89d50625fcdc513cd4aeca718/brotlicffi-1.2.0.2-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22916101de0e7ff535f2edf54b52a85591853b8ae9a98737643defdd3c063a3a", size = 1536851, upload-time = "2026-08-21T17:29:07.599Z" }, + { url = "https://files.pythonhosted.org/packages/35/dd/31ae9945cbd605339fb51c9a609f7dbb182cd361adeabc1d470142357206/brotlicffi-1.2.0.2-cp39-abi3-win32.whl", hash = "sha256:df1d34c4ad9adbf7f63a6b42f7d0e4dfd259c88141b85145b57abecc1abc3b24", size = 342379, upload-time = "2026-08-21T17:29:09.05Z" }, + { url = "https://files.pythonhosted.org/packages/95/ae/afd54e744df93b51cc29f6a19beccf9998b25743d7177697390de10479d1/brotlicffi-1.2.0.2-cp39-abi3-win_amd64.whl", hash = "sha256:489ca4da3ee65926d72bf01584b61088a9da6bdd1bb01b2040901e1beaffa8f0", size = 379761, upload-time = "2026-08-21T17:29:10.687Z" }, + { url = "https://files.pythonhosted.org/packages/37/da/a5b65a86725d772504a348193cf1fab5ad6410794b422bf81faa17a96a66/brotlicffi-1.2.0.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:cf500bb9e02e1474ced1ecf22f74c568de2816b3627af6352ec51ac5e09e60ee", size = 407459, upload-time = "2026-08-21T17:29:12.385Z" }, + { url = "https://files.pythonhosted.org/packages/e1/c7/a253288e66ee340f2f6320eda7022daa723f2918438d586a59e9c998aa27/brotlicffi-1.2.0.2-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dbb81489562dd5363bf86d9a8edb0ec8c97049b0819ba4936fc023e8847248bc", size = 406825, upload-time = "2026-08-21T17:29:13.992Z" }, + { url = "https://files.pythonhosted.org/packages/6e/6c/ea8e3d34e1d64c5e5a920bb0c89bf9e92badf973937a60922820395e622d/brotlicffi-1.2.0.2-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc7647657e4f3d73eab591910dbecb57d1ecaea7aa3dd04e6d704a2756fe0c59", size = 402903, upload-time = "2026-08-21T17:29:15.524Z" }, + { url = "https://files.pythonhosted.org/packages/4e/17/17c22d48819001ca08cadab63b09b00e0c56a7579478aa7c2623f4280de6/brotlicffi-1.2.0.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:5eb5563173afb92c9111b180349ff17d7c83c79febabadca5de983b552565c3c", size = 378395, upload-time = "2026-08-21T17:29:16.857Z" }, +] + +[[package]] +name = "certifi" +version = "2026.7.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, +] + +[[package]] +name = "cffi" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/ef/008a1939e372c06329a3fce4279c02f328488f3526744906eeec3da7ad5f/cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be", size = 530807, upload-time = "2026-08-03T21:21:18.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/d2/16d99a0c4948febc0ebd133a13b2f688ff7f8cb04da971e1128872ce0c03/cffi-2.1.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12", size = 183838, upload-time = "2026-08-03T21:19:29.637Z" }, + { url = "https://files.pythonhosted.org/packages/cd/95/31b535a9f0220ae9f357de4a08d57ce89cb417653c2fd9f075f50822a388/cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1", size = 184168, upload-time = "2026-08-03T21:19:30.764Z" }, + { url = "https://files.pythonhosted.org/packages/ad/5a/4707a0dc1f203f5dde5a907b0d4e3c25d71120241048bd5bc6f1bb9d4e71/cffi-2.1.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0", size = 211805, upload-time = "2026-08-03T21:19:31.867Z" }, + { url = "https://files.pythonhosted.org/packages/ad/66/c19feabb28485b6e0bbaaafa90837a1ef5d302e90f2178bd33f17a49879b/cffi-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813", size = 218716, upload-time = "2026-08-03T21:19:32.896Z" }, + { url = "https://files.pythonhosted.org/packages/a7/92/500760486c8baab49a7a8a58ba7fc3355ec3974b454b8a09e528efde9e1d/cffi-2.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990", size = 205569, upload-time = "2026-08-03T21:19:34.142Z" }, + { url = "https://files.pythonhosted.org/packages/a5/a7/a67c733254d6e7373f7822f8082d8d6beade791e0cf12a7611f376fa61c7/cffi-2.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af", size = 204907, upload-time = "2026-08-03T21:19:35.174Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a4/4399daaf8f7dfee9d7c3327fdb0426ee041cc63edc358b93911ceb2bfc7a/cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632", size = 217807, upload-time = "2026-08-03T21:19:36.286Z" }, + { url = "https://files.pythonhosted.org/packages/28/f7/dabe6da2466ecbd82dc62e7342dc6b1065dad990c06f00f0ede9ebf2a0ed/cffi-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd", size = 221252, upload-time = "2026-08-03T21:19:37.416Z" }, + { url = "https://files.pythonhosted.org/packages/ce/87/616202d8e51342c07d2534c510111c4cc37201775ce8f60802c9335d1edd/cffi-2.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a", size = 214214, upload-time = "2026-08-03T21:19:38.507Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c6/ab025d75d2c26c19b087c0124e75ee31cb65032f4fe345d356d8c507ab97/cffi-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa", size = 219408, upload-time = "2026-08-03T21:19:39.809Z" }, + { url = "https://files.pythonhosted.org/packages/db/e2/7e8109f65445bdc673a7b54f02c677de462db75674220fd1335efc8eb598/cffi-2.1.1-cp311-cp311-win32.whl", hash = "sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3", size = 174470, upload-time = "2026-08-03T21:19:41.246Z" }, + { url = "https://files.pythonhosted.org/packages/73/c0/77ba02423c2f7d7091143c45cd49e0e6575c4c1967394bb542bd923a9b74/cffi-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0", size = 185096, upload-time = "2026-08-03T21:19:42.615Z" }, + { url = "https://files.pythonhosted.org/packages/7c/47/9f1f85f9672ceda4984dc6c4f8824e8558992a2972c3d3c81fb8eb28d4ba/cffi-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455", size = 179941, upload-time = "2026-08-03T21:19:43.747Z" }, + { url = "https://files.pythonhosted.org/packages/10/69/43965eccfdead3b9220015fd1320e117be8c6ed01a62ffab76eeb752f5d5/cffi-2.1.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0", size = 184821, upload-time = "2026-08-03T21:19:44.887Z" }, + { url = "https://files.pythonhosted.org/packages/54/7d/16e5a096677b5e313ca80cd5e5170efa3ea44624a82bb111925522da64b1/cffi-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf", size = 184719, upload-time = "2026-08-03T21:19:46.129Z" }, + { url = "https://files.pythonhosted.org/packages/56/e6/8941622732edec876dd17d0453dce07317ae96db34f2ec1436c9d3785986/cffi-2.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a", size = 214799, upload-time = "2026-08-03T21:19:47.218Z" }, + { url = "https://files.pythonhosted.org/packages/44/de/f98430906df1545ffde0d543dd124a7a439bc2cd32b36b9c53f805df7333/cffi-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890", size = 222389, upload-time = "2026-08-03T21:19:48.331Z" }, + { url = "https://files.pythonhosted.org/packages/6a/5b/717f1526b9957b34456313c31645c5b82b8fb5c3fe9e4752999be7128bfc/cffi-2.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50", size = 210249, upload-time = "2026-08-03T21:19:49.543Z" }, + { url = "https://files.pythonhosted.org/packages/64/b3/f8aa4f3e34986c7e4ec45072d1b1b9dd295b6b18007b45518d79726dd725/cffi-2.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e", size = 208775, upload-time = "2026-08-03T21:19:50.918Z" }, + { url = "https://files.pythonhosted.org/packages/b1/db/dceb9dd5b231e1da801793f8acc9f3c52a7e1afe40bb1aae37e02b0faad5/cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf", size = 221822, upload-time = "2026-08-03T21:19:52.054Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d2/6cd24ae3be000a634109c247d1475d62e5616d0dc78c82770942ec384248/cffi-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517", size = 225232, upload-time = "2026-08-03T21:19:53.109Z" }, + { url = "https://files.pythonhosted.org/packages/cb/52/3fa190537004dd7f0ab860a6dc7c0175b8667f68d1e618a46f5498d30250/cffi-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735", size = 223597, upload-time = "2026-08-03T21:19:54.515Z" }, + { url = "https://files.pythonhosted.org/packages/80/fb/0bb75b7039588c074b37ae99f40d9bfddf990ecb2fbc346ebccd2e56b9be/cffi-2.1.1-cp312-cp312-win32.whl", hash = "sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e", size = 175292, upload-time = "2026-08-03T21:19:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/d9/79/615cc094e2fb508cade7de88d3b4f6c4ec2bab695c97bce9153dc65aadf5/cffi-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a", size = 185919, upload-time = "2026-08-03T21:19:56.89Z" }, + { url = "https://files.pythonhosted.org/packages/70/c6/d0ea84713fe46b243a436a18fcd47d639732747e21635c8a27191b06dc30/cffi-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80", size = 180093, upload-time = "2026-08-03T21:19:58.155Z" }, + { url = "https://files.pythonhosted.org/packages/9d/f4/035513d4117049066b4779dc3b7c0c0fdad175fa13731c9f4003f1cd1478/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e", size = 194248, upload-time = "2026-08-03T21:19:59.399Z" }, + { url = "https://files.pythonhosted.org/packages/76/af/2aeb4dbb5fc41a04161ae9ff1518de7cec08e164f44a8ce6a4cf7fd2cd1d/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c", size = 196908, upload-time = "2026-08-03T21:20:00.746Z" }, + { url = "https://files.pythonhosted.org/packages/a7/46/2e5fdde8555706dd98139a910ca11be02809f3f605ce956f655d0214e100/cffi-2.1.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6", size = 184805, upload-time = "2026-08-03T21:20:02.02Z" }, + { url = "https://files.pythonhosted.org/packages/55/41/4c7042f317b9217502988f0873af87e16ad606dc20f84e546e3e6ce9764c/cffi-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971", size = 184764, upload-time = "2026-08-03T21:20:03.141Z" }, + { url = "https://files.pythonhosted.org/packages/43/1f/1c3d90d91811c8f86ced9ed637956c54bfe5b79ca98fe976d7f8c8979f6b/cffi-2.1.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c", size = 214722, upload-time = "2026-08-03T21:20:04.377Z" }, + { url = "https://files.pythonhosted.org/packages/37/6f/3b5ce4c3b2192d250f04908f2bfd91ef34552ec8f7716a5d4abdb8d67bb2/cffi-2.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125", size = 222369, upload-time = "2026-08-03T21:20:05.544Z" }, + { url = "https://files.pythonhosted.org/packages/02/10/4b3c75dde3d9663c9e02ba05c2668b954f671d4bbe346413ca8c696b295a/cffi-2.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264", size = 210175, upload-time = "2026-08-03T21:20:06.75Z" }, + { url = "https://files.pythonhosted.org/packages/df/62/14f74b9543e605d17701dc797b815958b8bb70b7624ce1b832ddad48ed6c/cffi-2.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3", size = 208670, upload-time = "2026-08-03T21:20:08.04Z" }, + { url = "https://files.pythonhosted.org/packages/95/95/86342356ff5953b3fb06f7ef7c5bee212d45e770abc7218d451b9148313c/cffi-2.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2", size = 221824, upload-time = "2026-08-03T21:20:09.274Z" }, + { url = "https://files.pythonhosted.org/packages/eb/ff/7b3429ff53aafe931ed8a5fc69f481bbef7ba6de87ddcbb63d08f483f613/cffi-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b", size = 225148, upload-time = "2026-08-03T21:20:10.7Z" }, + { url = "https://files.pythonhosted.org/packages/34/34/a95870b9221e09cf4f2ce3178b1a210abdfe63a1bd357da940418d7b8d15/cffi-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7", size = 223564, upload-time = "2026-08-03T21:20:12.165Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/839b50531021a647fb5e929f72cf97bc1ff702b5472166164b5b6e76b851/cffi-2.1.1-cp313-cp313-win32.whl", hash = "sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac", size = 175263, upload-time = "2026-08-03T21:20:13.559Z" }, + { url = "https://files.pythonhosted.org/packages/60/a6/8b149b2c3f2e11aaa1618ef64500b45f50f22c57a977a4dff1aff1f91042/cffi-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d", size = 185688, upload-time = "2026-08-03T21:20:14.69Z" }, + { url = "https://files.pythonhosted.org/packages/01/9a/11f687cb39d6a3504060d5242f04f48c735afb4d3d533958a20594890cb2/cffi-2.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973", size = 180078, upload-time = "2026-08-03T21:20:15.917Z" }, + { url = "https://files.pythonhosted.org/packages/d3/7b/d6bbf82b8b96e7391438898c42f5bd96dd02030fd5b64937d248220003e2/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c", size = 194064, upload-time = "2026-08-03T21:20:17.148Z" }, + { url = "https://files.pythonhosted.org/packages/94/e6/bcc91b283be94735e268487a054004f0aa19947b6348fa367db53230abc8/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb", size = 196720, upload-time = "2026-08-03T21:20:18.268Z" }, + { url = "https://files.pythonhosted.org/packages/d9/99/c4b0c17cacdc9c3b8f280026286a9826d6a208c0f047591a3c3ce99b91fd/cffi-2.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54", size = 184964, upload-time = "2026-08-03T21:20:19.708Z" }, + { url = "https://files.pythonhosted.org/packages/b3/a9/9db617d05d7367c1ad0ab00b3aa6e6f9281edd689b4ee9ea0e5a84e89c97/cffi-2.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72", size = 184962, upload-time = "2026-08-03T21:20:20.833Z" }, + { url = "https://files.pythonhosted.org/packages/67/b8/b42132ca113dc567d37684437b46ca1dafc885902b02a110a02d5b511857/cffi-2.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1", size = 222328, upload-time = "2026-08-03T21:20:22.118Z" }, + { url = "https://files.pythonhosted.org/packages/80/10/c5c0cbf0a657aecf59ef511409734230bf556f05a0d6c9eed7aa5c0a0166/cffi-2.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062", size = 209985, upload-time = "2026-08-03T21:20:23.401Z" }, + { url = "https://files.pythonhosted.org/packages/d5/6c/bfa0b87b03b9238148beca990292843c9396ba069b54496596594173de7b/cffi-2.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03", size = 208530, upload-time = "2026-08-03T21:20:24.628Z" }, + { url = "https://files.pythonhosted.org/packages/e9/02/4e7d553a7ac4b4238b38b3c1b80d486e9d4436f8d2acbf87a0997fe3f402/cffi-2.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96", size = 221525, upload-time = "2026-08-03T21:20:25.758Z" }, + { url = "https://files.pythonhosted.org/packages/82/1d/a4aaf9babd75acb4d5f223bff71533bee748dd770a382619a798960ee9ba/cffi-2.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527", size = 225053, upload-time = "2026-08-03T21:20:26.985Z" }, + { url = "https://files.pythonhosted.org/packages/81/10/5dc0e7bdd18e22107054288283380fc97a06ae3f1656a106908d666a3c88/cffi-2.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13", size = 223213, upload-time = "2026-08-03T21:20:28.277Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e9/d0061c364cde06ee43168a0d076ac1da512cbc380d44767b844ba34fe2b6/cffi-2.1.1-cp314-cp314-win32.whl", hash = "sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c", size = 177682, upload-time = "2026-08-03T21:20:44.288Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1c3e01e3ba14c39f6d10bfbac52753b7e22259e38088e5cfe1d704918690/cffi-2.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48", size = 187949, upload-time = "2026-08-03T21:20:45.623Z" }, + { url = "https://files.pythonhosted.org/packages/87/5b/da4e39efe18eeb89cf580ea9cfc66b6a7c3eadb808fc0cc1d3a295cb5a5d/cffi-2.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836", size = 182947, upload-time = "2026-08-03T21:20:46.955Z" }, + { url = "https://files.pythonhosted.org/packages/23/59/40338bf421c5accea1d45158170c87006ef1cd371b05c077e76476949728/cffi-2.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3", size = 188504, upload-time = "2026-08-03T21:20:29.495Z" }, + { url = "https://files.pythonhosted.org/packages/7d/47/5ecf1023850036e674c77ec4de86182d309ae344e39e7cba984b7df5d647/cffi-2.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2", size = 188259, upload-time = "2026-08-03T21:20:31.291Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9c/92934c3bea9f785b23eba304538c0b4d37a2a96d2431eb3a1bc87a11aa19/cffi-2.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94", size = 223864, upload-time = "2026-08-03T21:20:32.571Z" }, + { url = "https://files.pythonhosted.org/packages/4d/45/ba4c93527bc38616a8bd36488acb69a2212d60486794f0c1f318949bbb76/cffi-2.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc", size = 211538, upload-time = "2026-08-03T21:20:33.808Z" }, + { url = "https://files.pythonhosted.org/packages/80/e9/b6ef565e452acb932fb0cb5443f44a78efbd1233e566f02b5a83855e9115/cffi-2.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29", size = 210688, upload-time = "2026-08-03T21:20:34.974Z" }, + { url = "https://files.pythonhosted.org/packages/9a/95/eff5f0cee78d2eabc7eebffec40d3fc1876b5f3c95582e018bb4b99601f2/cffi-2.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676", size = 223803, upload-time = "2026-08-03T21:20:36.564Z" }, + { url = "https://files.pythonhosted.org/packages/fa/01/579d39fb8bef00a335a23d83757b44feb24cd6345a2c451b64cb67b9c362/cffi-2.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e", size = 226763, upload-time = "2026-08-03T21:20:37.816Z" }, + { url = "https://files.pythonhosted.org/packages/8d/b0/0b44f47c60b01b57b6e2bbd92343f13a85a1d93bc46ccf6e47e244acd99c/cffi-2.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f", size = 225688, upload-time = "2026-08-03T21:20:38.959Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d2/3b7176cb570a1d3e27faf67b72f591af508036e0d8b2be2ef9af9e8c84bb/cffi-2.1.1-cp314-cp314t-win32.whl", hash = "sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4", size = 182868, upload-time = "2026-08-03T21:20:40.388Z" }, + { url = "https://files.pythonhosted.org/packages/56/78/31f00c1bcd97c9bbf55f1bfdf5bc809a5de8887473e90bb9960dca825e80/cffi-2.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e", size = 194104, upload-time = "2026-08-03T21:20:41.725Z" }, + { url = "https://files.pythonhosted.org/packages/7b/1b/58496f2ed0a35de575250c02a43ab3cc2c04d494a88fed31c1cabc0fd176/cffi-2.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5", size = 186402, upload-time = "2026-08-03T21:20:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/c1/8f/9ebe220eab48a093d1a5a5e339ab0dc7316eef3bb04d63c42f0251b61f50/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d", size = 194043, upload-time = "2026-08-03T21:20:48.179Z" }, + { url = "https://files.pythonhosted.org/packages/ff/69/844bad3ece306c4782c2ecb93597035b6690d48704b803914c199da1e8b3/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b", size = 196737, upload-time = "2026-08-03T21:20:49.457Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8a/af668013284634733f02d683458a0728739c7d6ddb5e14cb0c20832266fe/cffi-2.1.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4", size = 184933, upload-time = "2026-08-03T21:20:50.639Z" }, + { url = "https://files.pythonhosted.org/packages/0c/75/2f5207ff6d1a613133b23a5203cc0c2a628313b5eb3974d7956ae3c57950/cffi-2.1.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8", size = 185002, upload-time = "2026-08-03T21:20:52.173Z" }, + { url = "https://files.pythonhosted.org/packages/e2/31/9e1313b0a6e30e91b3b3d3fff51ae99c857c07738e3afcce1f7334e1b7ab/cffi-2.1.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6", size = 222271, upload-time = "2026-08-03T21:20:53.462Z" }, + { url = "https://files.pythonhosted.org/packages/50/e3/f6234a833e6e08c7007003074723c406559eecf9b48dfc97471e5a8eb7a0/cffi-2.1.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80", size = 209919, upload-time = "2026-08-03T21:20:54.783Z" }, + { url = "https://files.pythonhosted.org/packages/0d/fc/5f74e293fced6edb51af3a46c4ccf6c23c9943774ecb375ddbd522c76add/cffi-2.1.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779", size = 208529, upload-time = "2026-08-03T21:20:56.066Z" }, + { url = "https://files.pythonhosted.org/packages/44/16/29e6d01b388bef055ecd6ca8244b3f4d336bd09e92d5d892187b9601084e/cffi-2.1.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399", size = 221630, upload-time = "2026-08-03T21:20:57.336Z" }, + { url = "https://files.pythonhosted.org/packages/a4/18/fa7f1f6857d5eb88a4ca99ffcbfb7c387a287ccc154c64a73e86314745d7/cffi-2.1.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688", size = 225134, upload-time = "2026-08-03T21:20:58.675Z" }, + { url = "https://files.pythonhosted.org/packages/e0/9f/e8e3dfa04a1b4c241f8c91faacad872b4d4efd051d49764ad4e2fd4b9fea/cffi-2.1.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7", size = 223197, upload-time = "2026-08-03T21:20:59.968Z" }, + { url = "https://files.pythonhosted.org/packages/f8/7e/8debeb04f1ab9fe2a6963964cd6f1aaf7192627b83926586a6a4e089c9fa/cffi-2.1.1-cp315-cp315-win32.whl", hash = "sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac", size = 177683, upload-time = "2026-08-03T21:21:14.901Z" }, + { url = "https://files.pythonhosted.org/packages/e0/31/5158704cc474ab65c1647932e88be78dc0873f47130e253be38bcaf13d01/cffi-2.1.1-cp315-cp315-win_amd64.whl", hash = "sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960", size = 187897, upload-time = "2026-08-03T21:21:16.108Z" }, + { url = "https://files.pythonhosted.org/packages/cc/4b/b3a2da8570c704ffc0f9762cdc3ec0f02c8573798e0b5cf7f11c82bbb70f/cffi-2.1.1-cp315-cp315-win_arm64.whl", hash = "sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1", size = 182935, upload-time = "2026-08-03T21:21:17.271Z" }, + { url = "https://files.pythonhosted.org/packages/d0/ef/5443574510a1207e6f6bc38ba6e1f1de36cb48fef07b2728bb896a21f430/cffi-2.1.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc", size = 188464, upload-time = "2026-08-03T21:21:01.163Z" }, + { url = "https://files.pythonhosted.org/packages/7e/ae/a56fa8c4686ad50e148fcbc8d3ae0d03915ff5c30d795058988c24118cef/cffi-2.1.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab", size = 188262, upload-time = "2026-08-03T21:21:02.382Z" }, + { url = "https://files.pythonhosted.org/packages/53/b2/6187f46f2912276a3ae284076109cc5c8680482f11f766ccf26db4a86427/cffi-2.1.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e", size = 223779, upload-time = "2026-08-03T21:21:03.553Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f6/c3ad28bd19f77047a03084424fbd4cbe997303267c14423737324be0385d/cffi-2.1.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358", size = 211520, upload-time = "2026-08-03T21:21:04.863Z" }, + { url = "https://files.pythonhosted.org/packages/a0/cd/ccac9013a5bd9fd764de118674ab9c805b5ca10c19270d90ee273f8b2240/cffi-2.1.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231", size = 210673, upload-time = "2026-08-03T21:21:06.223Z" }, + { url = "https://files.pythonhosted.org/packages/52/86/2976131c639aead931c5bee5aba67e4b09fbeb8018b6f282f70803f923a7/cffi-2.1.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6", size = 223835, upload-time = "2026-08-03T21:21:07.539Z" }, + { url = "https://files.pythonhosted.org/packages/ac/0c/33a7aeab2f9c76918c52e084beb39c570db3588133412929e8ec06fab90b/cffi-2.1.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94", size = 226705, upload-time = "2026-08-03T21:21:08.774Z" }, + { url = "https://files.pythonhosted.org/packages/e3/26/2cde30fdde421130bfc18f70395731a6e6b2053c6a1978a5258ff04e72fa/cffi-2.1.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5", size = 225539, upload-time = "2026-08-03T21:21:09.911Z" }, + { url = "https://files.pythonhosted.org/packages/6d/cd/a361394c94b2129d604bb846f624a8e88255a3ee33129c434a00d715e64f/cffi-2.1.1-cp315-cp315t-win32.whl", hash = "sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66", size = 182707, upload-time = "2026-08-03T21:21:11.226Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b5/ba2b299993c26577d529b6ae29841f9e15b9fcf004d65f423f4fcf94ade9/cffi-2.1.1-cp315-cp315t-win_amd64.whl", hash = "sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3", size = 193772, upload-time = "2026-08-03T21:21:12.39Z" }, + { url = "https://files.pythonhosted.org/packages/aa/29/35e016098c814cd93de9cd320c66b5bfba14dc6ecedd3cb518fa7c408c69/cffi-2.1.1-cp315-cp315t-win_arm64.whl", hash = "sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692", size = 186360, upload-time = "2026-08-03T21:21:13.636Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/3f/143b048436775b0f76ac3eec145c019e8173ccc2885c8f20319b996d5e83/charset_normalizer-3.5.1.tar.gz", hash = "sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3", size = 171764, upload-time = "2026-08-15T08:20:44.807Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/b6/034f6802e9c3f6418966cfabb7db8c9252cc2429c5098f41cc43af804149/charset_normalizer-3.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eda059b6bc8bc0812d626fd91a7ce01bf583df0a61296eff390fd94141a34e30", size = 363585, upload-time = "2026-08-15T08:16:46.646Z" }, + { url = "https://files.pythonhosted.org/packages/d5/fa/6a7e2a7c4b5451912b8c417732df79574354443592a88d616de03da66ae5/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa2bb0b37202dca27175591f761108b5d34096ade1191ffe4808bdf6b1571488", size = 251189, upload-time = "2026-08-15T08:16:48.287Z" }, + { url = "https://files.pythonhosted.org/packages/a4/c8/ab42b07cfd82e919f427fcfaa7c41abae8242833ad1aad66d42bae40b669/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b2b1b3fa5670c127b246df1d0c059defd41f689a868a3b9d79df9b1cac42d22", size = 239724, upload-time = "2026-08-15T08:16:49.67Z" }, + { url = "https://files.pythonhosted.org/packages/e7/80/b9348b5d3041209f98b4cdad7655766369233f1d533f4f4f7558e9717bec/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6e5e4d73d588ca5ed09df1b7dcd1b203d1df3c542e3f50d126c947d432b10731", size = 280078, upload-time = "2026-08-15T08:16:51.228Z" }, + { url = "https://files.pythonhosted.org/packages/82/38/083a24028304bc85bb9e376fed801178423dcbb67495f73b6ea0624e1894/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b54e7e13267d49ffbfe68e25b3cbd774dab38fa37238f71265e91b36146eb21c", size = 276650, upload-time = "2026-08-15T08:16:52.625Z" }, + { url = "https://files.pythonhosted.org/packages/0d/35/731ac04aa0a097fc1c97f0994c375bdb230c6c96619db794208fe664e9ce/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7b742bf31c88566b4bb6335a7f393bb322e580b6bb98df7bd0c25e6e3519ce8", size = 262325, upload-time = "2026-08-15T08:16:54.085Z" }, + { url = "https://files.pythonhosted.org/packages/f5/28/c2028e7021fb89c6e56868ed0e387b8e9aa811abdd2ab3208d6578d2c930/charset_normalizer-3.5.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6ba32c4d2abf1d2fe7cf27d280f4cca5664233b0f885549c7761719eb977f486", size = 261140, upload-time = "2026-08-15T08:16:55.604Z" }, + { url = "https://files.pythonhosted.org/packages/28/f0/0c0ceec6d98b7daa62e361e418135d59685811d79ba11529aad5cdf15e84/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0722590aabf9dc6a6c0343d523c05458fa2b5047dbe6302fd526bb570600753f", size = 252791, upload-time = "2026-08-15T08:16:57.103Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3e/48f4cd187b1c33189d86039e9cbe4f92c05454175504b44ff81806d4d1bf/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:aa1099b956fb795e686d073568f6dc002a0bb89765ea6d5b055dd7d9bf1b116c", size = 240730, upload-time = "2026-08-15T08:16:58.418Z" }, + { url = "https://files.pythonhosted.org/packages/42/85/f9e22af69af67c54cce42be9455d9c81294f918b4ccc454db01f66efcac2/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:bd6c173f04743d483881bffa1478d5a4624475b8cd1d2194956a75548e191c18", size = 280791, upload-time = "2026-08-15T08:16:59.918Z" }, + { url = "https://files.pythonhosted.org/packages/fd/4c/9044135f42127630b6fa742feb51256353f6ab87a78f2fdd1de3de955a7f/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:f298e218441525d3794428b4c8b8fb8662c6d3ea79925d4807ee6b9a96a3bca5", size = 259598, upload-time = "2026-08-15T08:17:01.421Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ed/1dd7cfebb4e75812934c49ca3b79757d11948053f7937ab7070c151f3c55/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6e2912d4babbc65196ac13c2f53468dc57fb8b9c25ef913e8c59ddf7c6dc0e1b", size = 278217, upload-time = "2026-08-15T08:17:02.782Z" }, + { url = "https://files.pythonhosted.org/packages/bf/eb/239c84503cc9e3ba6eb34686a24bc66e84f3924efdd7e38e751a19f6bc10/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3d27167433c0d5f18dc850f07d0b3816221984fecdc405d6c157a6f0b8f8e9e6", size = 263417, upload-time = "2026-08-15T08:17:04.216Z" }, + { url = "https://files.pythonhosted.org/packages/37/ab/4e4510e1e288478e2c8333131d1c1382382ba8cd2165053c79e39d1da961/charset_normalizer-3.5.1-cp311-cp311-win32.whl", hash = "sha256:ac00177c4831ffa650f8609e4bdddd5fe09c03b1c0c47acece7e6ea20421598b", size = 181774, upload-time = "2026-08-15T08:17:05.58Z" }, + { url = "https://files.pythonhosted.org/packages/e3/57/32f0ccea59e8612057c61d6fd22ef2cb63cca93c9fe594094919696ac170/charset_normalizer-3.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:f9b1e28d0e8dbfa858abdba91d6b547beaf2df1a59bec6da6faae7b96a4991a9", size = 206653, upload-time = "2026-08-15T08:17:07.075Z" }, + { url = "https://files.pythonhosted.org/packages/17/d4/b65c433fc521e58b5f54293982a5e51c05cb5f2dd3f1c7a6acb65b75324e/charset_normalizer-3.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:ae31a1a1db2ee6cc2942fccaf695c934bc7f3db9f2133a3fef1f367cf1a4ab10", size = 185630, upload-time = "2026-08-15T08:17:08.502Z" }, + { url = "https://files.pythonhosted.org/packages/30/27/78873dc8b6a56357517b74b6bb9568b80450e7bb4f6ef7e3fa9d22aa0bd7/charset_normalizer-3.5.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f", size = 344456, upload-time = "2026-08-15T08:17:10.072Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4c/be49ada26b1f0232d57aa89bbebf997a5cc2332a5616b6eca26ff680044d/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa", size = 238530, upload-time = "2026-08-15T08:17:11.563Z" }, + { url = "https://files.pythonhosted.org/packages/76/84/6f1290fa07ae6978d3960caa3eb1b8019bf9284ab7c2297b00c099ef4250/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1d1c7a53a6c2103925cdd6d7229f8c567379f211c869793df679f2e9f738c369", size = 230200, upload-time = "2026-08-15T08:17:12.919Z" }, + { url = "https://files.pythonhosted.org/packages/e7/a0/47b18adeed31c8f16ba9700f32c1b18594cfa09f47eb672a488c273c22bf/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e6621fb2a4988d6e53eedc455e5903e2679f3967b8acb3d639f1b63c14a2e893", size = 262222, upload-time = "2026-08-15T08:17:14.571Z" }, + { url = "https://files.pythonhosted.org/packages/38/fe/341861ac118dae06f3ec0eb487488af52128f2ef2faf0b11003944d22259/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7c0c10730342b0c9b35dd1d619beb8214e520bd96a1f870f452680b238aab3e0", size = 258951, upload-time = "2026-08-15T08:17:16.158Z" }, + { url = "https://files.pythonhosted.org/packages/6f/89/bb5108dc6c3651dca963f2b0a3ba19bbcb370c94e1b6d3e0e844a58e6dca/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08", size = 248801, upload-time = "2026-08-15T08:17:17.683Z" }, + { url = "https://files.pythonhosted.org/packages/b1/ba/ef83ae3aca816393decfa3530976f38a79812d707b80b580ac33b83f9877/charset_normalizer-3.5.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f9f8405c2c758532c74fed975dbee57be1f31a6e865c031870c79a6ed3212ada", size = 244070, upload-time = "2026-08-15T08:17:19.191Z" }, + { url = "https://files.pythonhosted.org/packages/f6/0b/c5292a2462d69b7378ea89793bbb5b2b6fcf6f7dd6d1667f9619094ad553/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:96fef3e886d6a9874b14f27fc193fbdc69d5d8035783d86aa4e1cea594e695f9", size = 240110, upload-time = "2026-08-15T08:17:20.547Z" }, + { url = "https://files.pythonhosted.org/packages/46/22/111e5be3b740d5c2a5bfcedb3d237b6591e5c2e82ae9d6ffcb121fe0909c/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5d8531a6569d025f68e2321e7638fb7978f23db58e5f69f56913837aae03816e", size = 232836, upload-time = "2026-08-15T08:17:21.895Z" }, + { url = "https://files.pythonhosted.org/packages/f9/d2/d2aad6fe0dbb44b194bf3becb60f5a0ac48446ade999a47fe7bb41eb09a7/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:aae2ee51122d3ae968a3837d97dc24a0aeebb0dea23694422cd172bd30017cd6", size = 262712, upload-time = "2026-08-15T08:17:23.727Z" }, + { url = "https://files.pythonhosted.org/packages/35/5a/337e4663a5eae6de99db940ee8066d4145caafb61327db62deda15313cce/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7235dc28fc6dd9d832ac7c7bce95367dedb85929f17368a0c2bee1e080b9acbf", size = 242977, upload-time = "2026-08-15T08:17:25.157Z" }, + { url = "https://files.pythonhosted.org/packages/ca/85/f82f8a92e31c7519410e2e1afdc630f28ec47490ce2c09a11c1a43cbb459/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4abdc5f9ad448c1ecbfae2974b820535d6bc6e7eef63babbab3d81cf46968c71", size = 260207, upload-time = "2026-08-15T08:17:26.602Z" }, + { url = "https://files.pythonhosted.org/packages/b7/52/643d11ffd60e9ac2fd1fb87e167a19285b9eefeff4a40e63c87cbfbeab36/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba501e667c17d8411f98e67a022d9604ef179aff0e459b7e292c796837c13573", size = 250562, upload-time = "2026-08-15T08:17:27.971Z" }, + { url = "https://files.pythonhosted.org/packages/62/16/46556278c2168d12df9da7fede5dc6fc70e60301b26a82bbeec238c9cfe3/charset_normalizer-3.5.1-cp312-cp312-win32.whl", hash = "sha256:cfa1c0cc3a8f9f53f1243a5a99ac36fd003880199383b37672e86ddda9cb07e2", size = 178507, upload-time = "2026-08-15T08:17:29.277Z" }, + { url = "https://files.pythonhosted.org/packages/9d/7a/4c6c298171e6b3e745633180ff59350fc0ca0db1ffd28df1e369e0579f71/charset_normalizer-3.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2", size = 200551, upload-time = "2026-08-15T08:17:30.668Z" }, + { url = "https://files.pythonhosted.org/packages/cd/d7/eb95a042f0dd22e304b0b6472b154f3546a1a039a9ee89ccb2a7f61591fc/charset_normalizer-3.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:88e85ab89cb822c1e635f51d6d32e488f94e002e70e2f492bdb8b945543f345a", size = 180700, upload-time = "2026-08-15T08:17:32.028Z" }, + { url = "https://files.pythonhosted.org/packages/bc/61/2cb6ad133dbbb449fa2d37ccae973232f4827e799af258d15e589a3d1e9e/charset_normalizer-3.5.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:4f298bdadb8f0b9e5672877f647d1be9373ef5320c9e2f049795e26cad28b6a9", size = 211584, upload-time = "2026-08-15T08:17:33.597Z" }, + { url = "https://files.pythonhosted.org/packages/18/57/a305c968be1ca13f3dd1b32f445877e97addf55d80b65c7cb35fac82b777/charset_normalizer-3.5.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:88ca277405c2d3b71c4e1c2ee0e7966e807bcba86a69d11e19ba199d18ae4491", size = 223359, upload-time = "2026-08-15T08:17:35.022Z" }, + { url = "https://files.pythonhosted.org/packages/09/0a/d3646670292ce8d8f8cc11ac067d44885e697a5591f57a9221128da5e7b3/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9362dd90aa7dab48c0054a21187791ccf05473f7dba5d92b8033ae62164675e7", size = 194464, upload-time = "2026-08-15T08:17:36.452Z" }, + { url = "https://files.pythonhosted.org/packages/de/93/d51ec556e01042fed6f993ea859311bc7917b466684182fbbceb6ca24762/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:977cdbd483a9cff38179bea4fd754289a6f2195c7abd414aba85410b3e66cc5e", size = 197676, upload-time = "2026-08-15T08:17:37.819Z" }, + { url = "https://files.pythonhosted.org/packages/a4/a0/562247944386f7d4ef94467e84876600cc1e0f1b93239aaa9213d2bc3cbd/charset_normalizer-3.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d", size = 340473, upload-time = "2026-08-15T08:17:39.303Z" }, + { url = "https://files.pythonhosted.org/packages/31/e7/1d994be1b93d41e9502b8b0460eaa88a1dd8df335df415db87d6c3e91ab2/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a", size = 240156, upload-time = "2026-08-15T08:17:40.66Z" }, + { url = "https://files.pythonhosted.org/packages/09/53/27923ce5cc6cbccb832037b27dca98882d9c53e9b69e866bbbef4aae7fc8/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d59b75732e9b6f27388e10c14b0259cc5f2e48c78627d185e6a177b58ad3cffe", size = 228246, upload-time = "2026-08-15T08:17:42.003Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/5a97e84d63af1d55c07439cb80e56d99a8efb4295700eb4e18c0d1615d2c/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0d929fc574b4d6fd9e7c0f5c2ede8716a41911923aa7fa5fce38e0818aa4a1ac", size = 263660, upload-time = "2026-08-15T08:17:43.627Z" }, + { url = "https://files.pythonhosted.org/packages/7a/c2/071575791dcc88316c0a9a65ce38897a82e4cfe4a325f0f7fe1b1ac47bcf/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:394fea06235c8543390050ed5f529187074b029fb027213f6c46ac11ab5d950e", size = 260354, upload-time = "2026-08-15T08:17:45.094Z" }, + { url = "https://files.pythonhosted.org/packages/fb/af/63240b0c0248c075c2535a1f1bd992821d8251b9f173abc13329661d09e4/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3", size = 250638, upload-time = "2026-08-15T08:17:46.496Z" }, + { url = "https://files.pythonhosted.org/packages/4d/66/70dfad64f15be09c15ccfee81330a7e515895dbe296dd23114e9a231268a/charset_normalizer-3.5.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa48b1b63d639f9483e0633e092f5851e2348c352f1f9bb6c8182f87884ef876", size = 244583, upload-time = "2026-08-15T08:17:47.963Z" }, + { url = "https://files.pythonhosted.org/packages/c0/24/ef36367d38b9ddd4bccbf72888c342e8de1f5ae506fa0b2dcf970e2732a1/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c71fb0d56c920c269cd3e2e3fe7c610e3f1fdb21a6ce60efa6430ff63676cea6", size = 242038, upload-time = "2026-08-15T08:17:49.481Z" }, + { url = "https://files.pythonhosted.org/packages/db/ab/55e683ba0fff2e43adafc10daa3001eac90fdaa419a97227d5a7067eedde/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:485a0d363cafefcd2538a73c7c838daa2035f09b2c9f9b5e3133f80c6aeb84c2", size = 233677, upload-time = "2026-08-15T08:17:50.845Z" }, + { url = "https://files.pythonhosted.org/packages/bd/67/0f40eaf8d1b6e7cf15e82382a2965efaca787fc1c2794b7021d37aaf5036/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c0ea61a470e070686aa30892fed79e297d2c8d0ab46b8bcdf027d38c51da591", size = 264491, upload-time = "2026-08-15T08:17:52.61Z" }, + { url = "https://files.pythonhosted.org/packages/5c/64/12b4c2a11ee8df4fcc518c78b0d93e3a92bd3d5253d1617ce74ff0e8c7ef/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:90b7481fb62fbe172c558bc6fd1c4c98d82004a54a7551f20e11ac9bf0b8708c", size = 245196, upload-time = "2026-08-15T08:17:54.023Z" }, + { url = "https://files.pythonhosted.org/packages/37/2e/651d910af6d0fba325eee1cda37ec5443462ed25360e666c144166eb6091/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:35fe081843b35aad20ffeccec3eeffbe637b15d14f3fb22cc1b59cd8ec17e93c", size = 261660, upload-time = "2026-08-15T08:17:55.491Z" }, + { url = "https://files.pythonhosted.org/packages/90/c6/b09e05e6db7f64338e0dc067c79577b1138da86c1e38369096851d96be88/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f", size = 252618, upload-time = "2026-08-15T08:17:57.025Z" }, + { url = "https://files.pythonhosted.org/packages/76/4e/362d4f9fdcdf5556fb2aa3ce7d4a58ebce03ed1ff03aa1d9aca8d02f13f3/charset_normalizer-3.5.1-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:9d9a0dc7cbe9bec24c3f767c9122c41fe5a1bc43f47cd099d00d393e09769de4", size = 140362, upload-time = "2026-08-15T08:17:58.425Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d4/703be739b26acce318bd29eb3b25b7209e1b1f527f9eae3d1f1f01fdde2b/charset_normalizer-3.5.1-cp313-cp313-win32.whl", hash = "sha256:d63600d620ad0064c3a748b950ac5ea38a80190e5498532efefa4b7b3f1da1f3", size = 177755, upload-time = "2026-08-15T08:18:00.037Z" }, + { url = "https://files.pythonhosted.org/packages/8a/33/56d97ade41c8db611e727168c52ae46c9224c362ec28d4b65d7e9869e8da/charset_normalizer-3.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6", size = 199295, upload-time = "2026-08-15T08:18:01.506Z" }, + { url = "https://files.pythonhosted.org/packages/5b/75/5b20dd1e6573a01a08158fe104104fa2c8abf941745596954185726cd46c/charset_normalizer-3.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0", size = 179856, upload-time = "2026-08-15T08:18:02.929Z" }, + { url = "https://files.pythonhosted.org/packages/29/cd/2b812ce5e888f1ce69a5350281e58aab07ae64a958ecae8912f30865718e/charset_normalizer-3.5.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:774d157f112367ff4abd29019f38f023c24e00e56edc7829c20e358a5a913ad8", size = 212318, upload-time = "2026-08-15T08:18:04.403Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4a/a6ee107430768a5334e6d63f31f148a04a1a491ef161a1ac9415a73f2fa8/charset_normalizer-3.5.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:26422d45fd13551cf564c58932f7d72b4f58b93b0fcf18c35ba6be12b46bb102", size = 224897, upload-time = "2026-08-15T08:18:05.997Z" }, + { url = "https://files.pythonhosted.org/packages/c3/d9/35ae3f64f29d0179c35c3baefe575904df2913dde519129c7f75995a2b1d/charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:09a7bba9f739468c8e78c36a75c33768e53cb1959fc638f510454c14683f00d5", size = 194848, upload-time = "2026-08-15T08:18:07.397Z" }, + { url = "https://files.pythonhosted.org/packages/74/76/f2fc7380f056cc273a53af37f50d08ad54b2c59f61078f31432edcf1c2bd/charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4c9548dc78002099910abaebc0a72ac58b7d30931869e0351c09b507dff4ece3", size = 198163, upload-time = "2026-08-15T08:18:08.989Z" }, + { url = "https://files.pythonhosted.org/packages/e9/40/095ce62fa078483cccc1fa2b36e6bc9580b85422a20ee9f925341c50e44f/charset_normalizer-3.5.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c", size = 341823, upload-time = "2026-08-15T08:18:10.458Z" }, + { url = "https://files.pythonhosted.org/packages/f1/5a/0e58b1c04a1596e0256f407274a92d5fb2ee21324409d1fab1da48a65b5b/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f06b7eae9dbe77fe1d644ca244dad508de8d302870a43f3c559b521270938a0", size = 242458, upload-time = "2026-08-15T08:18:11.989Z" }, + { url = "https://files.pythonhosted.org/packages/22/95/b4618ce912e6db0b1aae89ba788e38e8a7eba0f3025cc66e8c0699f977b2/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b7430cf5728e68f6c462254009a6ef4086e1bea43cf2f57aa9c55fb4f50ff96", size = 226717, upload-time = "2026-08-15T08:18:13.401Z" }, + { url = "https://files.pythonhosted.org/packages/8a/76/c681192bbda3d55356db5dadd64381d5202b37c6b598fcda5282e88b5d3d/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab743e9bc90c1f73552ec33e10e3331315acd2c397b36065b591b0181de533cc", size = 266111, upload-time = "2026-08-15T08:18:14.961Z" }, + { url = "https://files.pythonhosted.org/packages/88/be/55127bfca72c0cff6c022488d140d7c5b04c771e3b72e9bdb4836d54979d/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6f7deae3feb4edfa2efaf7c574fe88cbf055038a6abdb40188e4fff66d5699f", size = 263128, upload-time = "2026-08-15T08:18:16.515Z" }, + { url = "https://files.pythonhosted.org/packages/e0/91/39c3af510b0aa32bbda03374259200f28430febfd1bf5e511fe765282ce5/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90", size = 251240, upload-time = "2026-08-15T08:18:18.127Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a5/cbe418bbc6ecdfc3e05a0116002897c4b403a5e838d697e64c78e9f0190d/charset_normalizer-3.5.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:823f82903d189af463d7df250ef1f7f696f3cee08cc8d91deb565e8d425f6506", size = 245282, upload-time = "2026-08-15T08:18:19.625Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a4/689bb42e8e7cd492f3cb64907c6bc00ad247ec9a3628cd3f8eed126e8ae1/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:01e93745f7f219b703b60ba7afead36cfc4242782be5af484673fc500df12da5", size = 244597, upload-time = "2026-08-15T08:18:21.121Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ce/9962938e179cf9f699d3f1e7b3114b5d7642dee6a893745229f9dd04f274/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:329fc3ccb63ad22d867d84c2adea759a64079a37ba4a343433b02c7a2816871e", size = 231376, upload-time = "2026-08-15T08:18:22.57Z" }, + { url = "https://files.pythonhosted.org/packages/85/54/46000450ada53bd9eac5429a2c8c54cd2d9b39c0c255f229aea9af0948a5/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:bb57753e36e4855b8ca375069482250a6246372331a3e4f3407eaebb007443f5", size = 266715, upload-time = "2026-08-15T08:18:24.235Z" }, + { url = "https://files.pythonhosted.org/packages/3d/bb/618749d70f792b44252a777bf89bfb86823b9bbc1ea13fe8ce759b07f38a/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fce8cbd4997efeb450bd298b54f755dcdff18d496f7a5ddbb4867c6d7c88fdc3", size = 245848, upload-time = "2026-08-15T08:18:25.726Z" }, + { url = "https://files.pythonhosted.org/packages/7e/3f/ffb64458527c7668031d5eb095d978de561958dc9f5b53f8e488a533e603/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6c9cdde8becb25a7fde49924511aa2644d6f8081cc8df8e9452724303348d8e3", size = 264521, upload-time = "2026-08-15T08:18:27.193Z" }, + { url = "https://files.pythonhosted.org/packages/4f/ab/74a55fd803916a35ac461daf002708191aac19b546b80dc8cabfedc63d98/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9ac4444d8d4fd4c4bd08bf451ed3167aa9e7ec6cdb41b648794f1d1103652e36", size = 253054, upload-time = "2026-08-15T08:18:28.568Z" }, + { url = "https://files.pythonhosted.org/packages/a0/2a/6a9034b7d3c60b17499afb482df5878bf9fa20b50cc3887d5ef017a833db/charset_normalizer-3.5.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:f03ac127268b43ef4fe9e6ab6794a6794b49485a0cc0c1db79876d2f33f75bc7", size = 140580, upload-time = "2026-08-15T08:18:30.214Z" }, + { url = "https://files.pythonhosted.org/packages/f3/46/1d362e1a00d035d66b9869e1281eee115907f7e390a16a07824ab5737360/charset_normalizer-3.5.1-cp314-cp314-win32.whl", hash = "sha256:1f5883d77fd409a261abb5dc8ccbe335720d798b1de4abb3b1d47ccbbc76b53b", size = 180325, upload-time = "2026-08-15T08:18:31.877Z" }, + { url = "https://files.pythonhosted.org/packages/7a/7c/4938c329b6a9d446f6a59aa2092ff7118f274209b5ed0e26893d1d30a63c/charset_normalizer-3.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b", size = 204175, upload-time = "2026-08-15T08:18:33.466Z" }, + { url = "https://files.pythonhosted.org/packages/ac/33/eeb384dbd8dec570661354592f4f2e1b2fcc92585624d146a000caf53841/charset_normalizer-3.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:4bea7f8ebe90bbd7f0e4a2de42ca6924ba23e3e76418c408ff82f1d46fabd687", size = 184123, upload-time = "2026-08-15T08:18:34.913Z" }, + { url = "https://files.pythonhosted.org/packages/1c/6c/c73fa9d5a85f6ab05395de61c5f6984e0a9ff40bb5ff888d46dff02526c6/charset_normalizer-3.5.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:fbc597639158fd7c14d55e808718848319540f51b0e6746e3eefa59723a4a348", size = 381682, upload-time = "2026-08-15T08:18:36.349Z" }, + { url = "https://files.pythonhosted.org/packages/30/c7/63565f860921457feba93bae6c86fb7746deb4cffeed2f375cb845318146/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e71c909f353863b2b89c83de2ebed71ea6d0df8a6ef65a128193c5e650766bef", size = 240826, upload-time = "2026-08-15T08:18:37.887Z" }, + { url = "https://files.pythonhosted.org/packages/06/ae/7ae8807410dfa33f8e6f1715740adeaafa8a816cc4cb33508f54b1f7c896/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7ac76cf9afd34929d76eb7fcb63be476a4853d8a96f0dcf2d0db68a0cbdf9885", size = 227861, upload-time = "2026-08-15T08:18:39.315Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a3/887c1642f0da26000b0e0652d91071113c0e72cea33952e225cf589f49a9/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a3a370082ce34d0612f421e15fe011c53bb1feff21a26d06ad4fb244dab5a375", size = 260758, upload-time = "2026-08-15T08:18:40.88Z" }, + { url = "https://files.pythonhosted.org/packages/3e/11/e6f5b9a3d0e55b0ef7505cd3765cdd48f22db89994c947b316f52f801fd8/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:256dd4d85d9e4dc595e2bc983c980e73f62ddeb3165c58b4c3dfe78c5c8548c1", size = 259950, upload-time = "2026-08-15T08:18:42.351Z" }, + { url = "https://files.pythonhosted.org/packages/1b/ee/e4e10a94d51cd1ee638aa7e00b65399e6b2a4e8376ab6d2eac9f95586671/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:58d4aa13a59c969dbfdf9e6a9560e242cbfd9e8a8f50c2747714df1a423adf65", size = 249329, upload-time = "2026-08-15T08:18:43.914Z" }, + { url = "https://files.pythonhosted.org/packages/c4/25/d5f4198819e6059735a84e8d0bfb72dc33976da67b97adcd3fb5a5e07ec6/charset_normalizer-3.5.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0c6dfb5ca6723eeed15aa8e564a014d69fcb8812f94eef11fe3631e0508199f5", size = 243137, upload-time = "2026-08-15T08:18:45.368Z" }, + { url = "https://files.pythonhosted.org/packages/a5/e9/e925ca7569cf9fb9701fd82503fee73eea5268fdb856bdd64947092d3daa/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c010f5581d9c612804cc59fcf7b524b707fbcb72828551237ab545bb5c7034af", size = 242820, upload-time = "2026-08-15T08:18:46.842Z" }, + { url = "https://files.pythonhosted.org/packages/34/17/672c251a888ed2aebcdd2fe830ad0104e25ff83c43f5c4f9c15e9fc6853c/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:52ec005752a56ae79547a05c0139ca2501a0c866390b6115008456b9f0e7cde1", size = 230504, upload-time = "2026-08-15T08:18:48.353Z" }, + { url = "https://files.pythonhosted.org/packages/3f/fc/f6a85abebd42ce4da2f1db0aa56cc6a0df1995e318b3875d14401b8381d1/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2bced4061f000f7187254a02ad3433ae17eaf991747ceea2f478422590a5bba9", size = 263087, upload-time = "2026-08-15T08:18:49.859Z" }, + { url = "https://files.pythonhosted.org/packages/98/66/7c42677e739ba66746b297e2046918d793078094dc239e1e72768cffccc6/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:9eea3ab2597a5e65fe65296e2d6a84570845a6b55532d90333d740d48bbc850a", size = 243269, upload-time = "2026-08-15T08:18:51.601Z" }, + { url = "https://files.pythonhosted.org/packages/de/d8/a50b79237f417af10f8c2a501ce8d1ca87829a22e69117891ca4ba20a69e/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:496846868fea80e479324862fa877f02411f2fd0f83b79ccee2607aa68b2a032", size = 258766, upload-time = "2026-08-15T08:18:53.23Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1d/0fc91aeaeb3c83b748f532399ce67cf84604b48297405d740000f7a9e786/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85d5855daafc240cc045c026d7a15fd198a09b0fc8ff6f5ecbb5297b509cb11e", size = 250814, upload-time = "2026-08-15T08:18:54.768Z" }, + { url = "https://files.pythonhosted.org/packages/ae/10/3d8c777cf9024615295aa1b808324ad5b4a77855869c00824bad74ffaf8a/charset_normalizer-3.5.1-cp314-cp314t-win32.whl", hash = "sha256:58d3e12c88e0950bca850ae1f7c256055c097639c2edb9eb123af9807d8b15e4", size = 191074, upload-time = "2026-08-15T08:18:56.305Z" }, + { url = "https://files.pythonhosted.org/packages/4d/81/ae557d3c44d1a1d688696d60563413a0866a91b7ebc50f20df838be3d8c8/charset_normalizer-3.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:acaf604462bf330b0d07e7a07c1d6e4adac79e5fb13e9c5140590542cafacc00", size = 216476, upload-time = "2026-08-15T08:18:57.889Z" }, + { url = "https://files.pythonhosted.org/packages/27/e9/61c01fb8b804692569c036b3fc50495814502dcf13a60649c6055390b02c/charset_normalizer-3.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:fdb8a068947befafba9952162645dc2fecaeb400e64584829ed5e9b2fbe21a7f", size = 194115, upload-time = "2026-08-15T08:18:59.418Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4e/8544831ef59d8f27ce92c80871380fdacc8076a8a56ed62f82e54f991333/charset_normalizer-3.5.1-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:9085f87b0e38a2b92b8923059b4e8789fe40d9279712d15dcc670048d77079af", size = 342048, upload-time = "2026-08-15T08:19:01.054Z" }, + { url = "https://files.pythonhosted.org/packages/7f/a6/e3b46852424246065355644f4fb6dbccc0239a42a2eee27ecfc8957f0bcd/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2679de311c7946dde5d3b6f44941844133ff5c7cb86099c0061ab1e8901c20a8", size = 242997, upload-time = "2026-08-15T08:19:02.492Z" }, + { url = "https://files.pythonhosted.org/packages/03/3b/0cc9a26777334ab2f2e3089b948bbf4e4fe72ea70b897715ef6415043ec8/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:baf3775a2635e5a11fbd5e4e64ee69c7e86875d224a5c72aca4c141064589a90", size = 237014, upload-time = "2026-08-15T08:19:03.943Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c2/027335f0aa337a2a2e121bac1ad88c4f02ba6053ea0926802784f3db11af/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ac8c94b6539074e0f40899301273ac8402b9b3e01c7b7ba269ff30340aaaf20", size = 266174, upload-time = "2026-08-15T08:19:05.598Z" }, + { url = "https://files.pythonhosted.org/packages/86/d3/e367787febe4e74769dec0f406f2c3c8d1b955fce5aee1fd0f94e8367a45/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fe532b3c966d1fb794e0698e4589d0444017ae77fc0b31edea13c0e35bcc449", size = 263361, upload-time = "2026-08-15T08:19:07.251Z" }, + { url = "https://files.pythonhosted.org/packages/af/3d/391b193eb9f3e84b02f9314088c386debdc0debee843535aaea2e2c6715d/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5c84bec0ab5ae0c64bfe73a7d2adcb5ce73b467523fc27fd6a28ab2aa6cbe35a", size = 252143, upload-time = "2026-08-15T08:19:08.816Z" }, + { url = "https://files.pythonhosted.org/packages/2e/57/de221f1745a90d418199761967e2776bfe2c275a1194220985e8c1d37833/charset_normalizer-3.5.1-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:854066be00447fa8de2ccbbe893e2ffc4b123ef16d897af794c1e18bd4a714b0", size = 252086, upload-time = "2026-08-15T08:19:10.255Z" }, + { url = "https://files.pythonhosted.org/packages/c8/e3/d119f86a01f9331e8186175f24873b1d74a7ee9e2e4b4d68f9947dae5afd/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:21b82d8082f6f5e7f456ef0bd16323d08de1266efbfeb476e64b2a91d1471a4e", size = 245231, upload-time = "2026-08-15T08:19:11.807Z" }, + { url = "https://files.pythonhosted.org/packages/26/de/d8e48c135ae480879539cdb179c8d3b50c7879497d75dd899b5763b69cee/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:838648accb3a7fd9803fd45c87bce8509648eb0c11bc34e216141300977244f2", size = 241546, upload-time = "2026-08-15T08:19:13.416Z" }, + { url = "https://files.pythonhosted.org/packages/67/c4/217755fd1abc50d326c252922cd642002758095a81ff45010337b8b3ef65/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:195ce897c6153c0700078142cf8efe3e6454ca4cf4357499e4078dfd83396626", size = 267033, upload-time = "2026-08-15T08:19:14.981Z" }, + { url = "https://files.pythonhosted.org/packages/b8/d7/34d8e404e358d2adcc5a228c2134643af00104c8fb0bf525f3688d756f05/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:978eab16f55b4ab2c2a745be9a0a840bf8f09a7f227d9c76eb30214d078865a5", size = 252045, upload-time = "2026-08-15T08:19:16.618Z" }, + { url = "https://files.pythonhosted.org/packages/5e/fa/40414471acf0aa0692ca77305aa00e434fcd8288f0941c93c30e9a5f8f2f/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:cc0329df4caaceb950d2f580b5ac716a377f7059624a0bafaeaf8a218c6ed774", size = 264866, upload-time = "2026-08-15T08:19:18.101Z" }, + { url = "https://files.pythonhosted.org/packages/32/90/fcc850bae791abd2e0c041847f13e270aa08692a79f3e00de6d2dce1cb50/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:687c9ca3035544b113bea2055e180af96fb63c0c476e22a9180f51925186e7b7", size = 253932, upload-time = "2026-08-15T08:19:19.734Z" }, + { url = "https://files.pythonhosted.org/packages/af/af/53afe99068b3c10b4cbae592a52ef72a7c92c0188440e83ee3a078fd8f75/charset_normalizer-3.5.1-cp315-cp315-win32.whl", hash = "sha256:706bfd38730a5ac7a365793269a00f4e988178cec121391f4248d84ad8c972e9", size = 180320, upload-time = "2026-08-15T08:19:21.37Z" }, + { url = "https://files.pythonhosted.org/packages/c9/bc/f46a132041b29e4a8779ed712d3df1bf112e94ca8de58b66d7ec2c0cf8b9/charset_normalizer-3.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:92caef967d287a407085d61176fce4012b1dd62daed4eb6d5ceb26d3d2538712", size = 204174, upload-time = "2026-08-15T08:19:23.088Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5d/9ed554480eda8e447b673648628fdc29574d23dbad01fe11837adedd1cae/charset_normalizer-3.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:5fc45d653ea8c9a20479167e11d4a0f8cb2fa3470737ab6f9c827532313187b7", size = 184126, upload-time = "2026-08-15T08:19:24.471Z" }, + { url = "https://files.pythonhosted.org/packages/3b/32/9b8929bf384061ee1fe5d9c27c6f9776d3d824039ad4e14c88ec00c7808e/charset_normalizer-3.5.1-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:59171c6e45bf07d0d5cab3b0bf81d945035530f6873398b3b531c31184d46663", size = 381441, upload-time = "2026-08-15T08:19:26.038Z" }, + { url = "https://files.pythonhosted.org/packages/96/10/e9aa7923d3ddac652c99a1c5f7be494e737e151566a44abe018daf757f2c/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9dbdd9205662134957cf0c324f639bdc5031c0ca056e2369e238db75187c0f11", size = 241742, upload-time = "2026-08-15T08:19:27.532Z" }, + { url = "https://files.pythonhosted.org/packages/28/53/a2d249ebddf47b889a100c0bdcb61a2f9dbb8bc24ef325cc062e4f476877/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e4b018dc5a0eee4676e38fe84a47a427816c590b93b55d9025274ec4d6ffc2dc", size = 235298, upload-time = "2026-08-15T08:19:29.274Z" }, + { url = "https://files.pythonhosted.org/packages/7d/07/469f78af590f7d5cd48e20d8dbfa3d66deeff9ba37768c04d886b5afd45c/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ced3fdd71aaa83ce593746c2edb42b7a59cb4c19c8b5c407781c72e493aae55a", size = 262500, upload-time = "2026-08-15T08:19:30.955Z" }, + { url = "https://files.pythonhosted.org/packages/55/66/3bb56a47f7dcba014055b1a1d33c6f08bbe9c1e74dba154cfa25f90ae885/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:19a3dd5aa73cef1c99687c4fc57db016a9c17104ae1185da88ba566a5d3bebe4", size = 258888, upload-time = "2026-08-15T08:19:32.458Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c1/2adc2800903fb013210349313b710a5376856578d9e33e6b9a1d8b36714a/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cc5d36d96478aa9c60654bd932525bf32964c62a7281eafdf16d85003a8d6004", size = 250243, upload-time = "2026-08-15T08:19:33.94Z" }, + { url = "https://files.pythonhosted.org/packages/95/b5/a18d0dd1157ab655cc2cb14a545f4a4784bbad70ab3502412e36097502d9/charset_normalizer-3.5.1-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:04368edf83514385ffc3e1cfd4546e595f4f1272dd23ba437a93a9cc3741d47b", size = 249871, upload-time = "2026-08-15T08:19:35.413Z" }, + { url = "https://files.pythonhosted.org/packages/ad/c3/525f508cd1e58d0450ac55ed40ac75bc3a97482c59def5278456a5fbf03c/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:9b5db6052055d34d41230fb78d7c439c23dc536a9896f6cb039e8dd92cfc1263", size = 243580, upload-time = "2026-08-15T08:19:36.886Z" }, + { url = "https://files.pythonhosted.org/packages/7c/c1/49a91fe7e97c8140094ca5c64161ab623a70d9f636bf834eace14048acb5/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:252d099029bcbea642f2a06c4ed5046bdf8b5a8150b64afa5e027e88b106e5ee", size = 239807, upload-time = "2026-08-15T08:19:38.392Z" }, + { url = "https://files.pythonhosted.org/packages/d3/58/56a48c296601274c4689b864a8e2dfb209b81dfcb39472753ce95eea662b/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:6199d5606e2bbf2b096cf64d03f8b6790c91081d5ac866b8e7bb6422738cc60c", size = 264083, upload-time = "2026-08-15T08:19:39.856Z" }, + { url = "https://files.pythonhosted.org/packages/10/4c/dc48409274a1817ff349711d26c62aa0c597df865d4d69ef79160c859193/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:77efcff2b23071c349402ac1066667a3d011f62398d81408c9b88ad991747c9e", size = 250317, upload-time = "2026-08-15T08:19:41.53Z" }, + { url = "https://files.pythonhosted.org/packages/81/58/d325912115caec62d6bdd77bbab5e0b7da5d234a9f20affdffcbcb530d0b/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:a5cbd90ecf0fc62e64726917ad083b73001f0563657a87ec3c0b504e277dc90d", size = 258173, upload-time = "2026-08-15T08:19:43.07Z" }, + { url = "https://files.pythonhosted.org/packages/34/f7/b13b1ccae2c8ec63980d13be1890eb73f8aeabbfce02a24aabc0908788f5/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:4d26f14f041e83dd8edfd61f4cd4fa7285d31798b5bf1f28e70c367ba6c41d61", size = 251960, upload-time = "2026-08-15T08:19:44.587Z" }, + { url = "https://files.pythonhosted.org/packages/1e/25/ed3f9919c5aef8cc818be1f972f565f7610d7b2076b8ebb98839516ffc3c/charset_normalizer-3.5.1-cp315-cp315t-win32.whl", hash = "sha256:ac13b004224fb341e1e25a1ed5e19d32f57cdb2a403e01f003b46f051a550f6f", size = 191186, upload-time = "2026-08-15T08:19:46.293Z" }, + { url = "https://files.pythonhosted.org/packages/69/d5/43c2b3e9d8267092b913eb8b0603f0f71993c395632886bd37a7223f96cf/charset_normalizer-3.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:35aea775dc2bd5f54cd84a1cd2696cc3207c479cb9cf0bd346f0d343e4300ddb", size = 215947, upload-time = "2026-08-15T08:19:47.853Z" }, + { url = "https://files.pythonhosted.org/packages/a8/76/9aad3e9c8865e5e0efa9a7f6f81c37a67635a985145ecd44528a81e088ee/charset_normalizer-3.5.1-cp315-cp315t-win_arm64.whl", hash = "sha256:fb78f6e7fcd8ad785d28cd577168bc1aaee827b25bb8755638f694794ea98f0a", size = 193909, upload-time = "2026-08-15T08:19:49.383Z" }, + { url = "https://files.pythonhosted.org/packages/5b/97/fb4e82231aba271ffd775a1b4993b0defc4e3059f286ae41d9433409fe85/charset_normalizer-3.5.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2", size = 331467, upload-time = "2026-08-15T08:19:50.959Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2f/fe3f187327aac18e2d54e9d2b08e15d27bf9b642d9e51c219f130fc34d1a/charset_normalizer-3.5.1-cp37-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99", size = 253057, upload-time = "2026-08-15T08:19:52.654Z" }, + { url = "https://files.pythonhosted.org/packages/d7/c7/9e48cee5c161fe24da823b61bf381921d77cb994a0a4de148e95018c1984/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2", size = 240930, upload-time = "2026-08-15T08:19:54.163Z" }, + { url = "https://files.pythonhosted.org/packages/49/e0/716601f3cc69be7b198951150c75ead1ece33c3c8036ff6ffa46029659a0/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235", size = 230822, upload-time = "2026-08-15T08:19:55.807Z" }, + { url = "https://files.pythonhosted.org/packages/d3/05/71bfc5caa0abcc45aea1f6a4d50ac68e59605ddc7666fe8494f4cd229665/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598", size = 260037, upload-time = "2026-08-15T08:19:57.312Z" }, + { url = "https://files.pythonhosted.org/packages/c3/92/de7e32ed05341e7a9c4c877c318418197b7f2d66a3b68d561bf2ac57ca3e/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96", size = 255097, upload-time = "2026-08-15T08:19:59.056Z" }, + { url = "https://files.pythonhosted.org/packages/f5/7b/ade0a122600319dfa0b1000ab0f9731c94a817904cf3c5de408c73a4ede7/charset_normalizer-3.5.1-cp37-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962", size = 250166, upload-time = "2026-08-15T08:20:00.612Z" }, + { url = "https://files.pythonhosted.org/packages/75/9c/019fbb9f4834491a160951349b1a3714439376f66e5f7cf18b4f18f0c7aa/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3", size = 241821, upload-time = "2026-08-15T08:20:02.321Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b8/11d4840bfc99330cc7fbcc2681ee5a044553a6e77655508d8f9b2bff7b34/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950", size = 232529, upload-time = "2026-08-15T08:20:04.008Z" }, + { url = "https://files.pythonhosted.org/packages/18/96/2b3a21492d9f65171ac75d872f5018260013d00bfa0ff70ec9f179148cbd/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8", size = 260348, upload-time = "2026-08-15T08:20:05.877Z" }, + { url = "https://files.pythonhosted.org/packages/d6/aa/a69a2028e8bd052476c245460ab19d7de595de084dd968f2d75cd50c3e25/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031", size = 247234, upload-time = "2026-08-15T08:20:07.487Z" }, + { url = "https://files.pythonhosted.org/packages/35/8a/3d130aeabcaf3d2466af76b7b141c08d9e89c9016ab4b7cdd0f7dc2d1c62/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_s390x.whl", hash = "sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072", size = 256917, upload-time = "2026-08-15T08:20:09.142Z" }, + { url = "https://files.pythonhosted.org/packages/80/c2/a7379b840292d0c1ab9fbd17d1f3967aa81794dc95bc74be8999d7fedcf7/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d", size = 254846, upload-time = "2026-08-15T08:20:10.727Z" }, + { url = "https://files.pythonhosted.org/packages/01/65/d43b714731bb2f40d4053dfa00ecfc1c5a301f8e3316c5db3a09af59fe94/charset_normalizer-3.5.1-cp37-abi3-win32.whl", hash = "sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc", size = 174216, upload-time = "2026-08-15T08:20:12.334Z" }, + { url = "https://files.pythonhosted.org/packages/35/4f/b911ed898b26a09789eba9c9200c999aff6c61b4bafaf4838e56d1a1e1a3/charset_normalizer-3.5.1-cp37-abi3-win_amd64.whl", hash = "sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959", size = 199764, upload-time = "2026-08-15T08:20:13.908Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a7/920baf467bfd9bf689f3b318340f37aee4572a71f162bd8db51da55ba4fa/charset_normalizer-3.5.1-cp37-abi3-win_arm64.whl", hash = "sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e", size = 287318, upload-time = "2026-08-15T08:20:15.551Z" }, + { url = "https://files.pythonhosted.org/packages/cc/61/d01fc49b8dea277640b55a9e15960dbca9fdc8c9fde18e572d39c59f4019/charset_normalizer-3.5.1-py3-none-any.whl", hash = "sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6", size = 68658, upload-time = "2026-08-15T08:20:43.306Z" }, +] + +[[package]] +name = "click" +version = "8.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/0e/7fa0ef50764b67090eca4114772a2abf8b6148198475e54c660b97caeee6/click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34", size = 382235, upload-time = "2026-08-26T13:33:14.56Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", size = 125251, upload-time = "2026-08-26T13:33:12.928Z" }, +] + +[[package]] +name = "click-option-group" +version = "0.5.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/ff/d291d66595b30b83d1cb9e314b2c9be7cfc7327d4a0d40a15da2416ea97b/click_option_group-0.5.9.tar.gz", hash = "sha256:f94ed2bc4cf69052e0f29592bd1e771a1789bd7bfc482dd0bc482134aff95823", size = 22222, upload-time = "2025-10-09T09:38:01.474Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/45/54bb2d8d4138964a94bef6e9afe48b0be4705ba66ac442ae7d8a8dc4ffef/click_option_group-0.5.9-py3-none-any.whl", hash = "sha256:ad2599248bd373e2e19bec5407967c3eec1d0d4fc4a5e77b08a0481e75991080", size = 11553, upload-time = "2025-10-09T09:38:00.066Z" }, +] + +[[package]] +name = "cloudpickle" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, +] [[package]] name = "cogstack-nifi" version = "0.0.1" source = { editable = "." } +dependencies = [ + { name = "avro" }, + { name = "bokeh" }, + { name = "dill" }, + { name = "elasticsearch9" }, + { name = "fhir-resources" }, + { name = "geocoder" }, + { name = "jsonpickle" }, + { name = "mysql-connector-python" }, + { name = "neo4j" }, + { name = "nipyapi" }, + { name = "nltk" }, + { name = "numpy" }, + { name = "opensearch-py" }, + { name = "overrides" }, + { name = "pandas" }, + { name = "polars" }, + { name = "psycopg", extra = ["binary", "c"] }, + { name = "py4j" }, + { name = "py7zr" }, + { name = "pyarrow" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pydicom" }, + { name = "pymssql" }, + { name = "pyyaml" }, + { name = "rancoord" }, + { name = "requests" }, + { name = "snowflake" }, + { name = "snowflake-connector-python" }, + { name = "wheel" }, + { name = "xlsxwriter" }, + { name = "xnat" }, +] + +[package.dev-dependencies] +dev = [ + { name = "mypy" }, + { name = "mypy-extensions" }, + { name = "ruff" }, + { name = "timeout-decorator" }, + { name = "types-aiofiles" }, + { name = "types-pyyaml" }, + { name = "types-setuptools" }, +] + +[package.metadata] +requires-dist = [ + { name = "avro", specifier = "==1.12.2" }, + { name = "bokeh", specifier = "==3.8.2" }, + { name = "dill", specifier = ">=0.4.0,<1.0.0" }, + { name = "elasticsearch9", specifier = "==9.1.0" }, + { name = "fhir-resources", specifier = "==8.3.0" }, + { name = "geocoder", specifier = "==1.38.1" }, + { name = "jsonpickle", specifier = "==4.1.1" }, + { name = "mysql-connector-python", specifier = "==26.7.0" }, + { name = "neo4j", specifier = "==5.28.2" }, + { name = "nipyapi", specifier = "==1.7.0" }, + { name = "nltk", specifier = "==3.10.3" }, + { name = "numpy", specifier = "==2.4.2" }, + { name = "opensearch-py", specifier = "==3.0.0" }, + { name = "overrides", specifier = "==7.0.0" }, + { name = "pandas", specifier = "==2.3.3" }, + { name = "polars", specifier = "==1.44.1" }, + { name = "psycopg", extras = ["binary", "c"], specifier = "==3.3.5" }, + { name = "py4j", specifier = "==0.10.9.9" }, + { name = "py7zr", specifier = "==1.1.3" }, + { name = "pyarrow", specifier = "==25.0.1" }, + { name = "pydantic", specifier = "==2.13.5" }, + { name = "pydantic-settings", specifier = "==2.14.2" }, + { name = "pydicom", specifier = "==3.0.2" }, + { name = "pymssql", specifier = "==2.3.9" }, + { name = "pyyaml", specifier = "==6.0.3" }, + { name = "rancoord", specifier = "==0.0.6" }, + { name = "requests", specifier = "==2.33.0" }, + { name = "snowflake", specifier = "==1.13.1" }, + { name = "snowflake-connector-python", specifier = "==4.7.2" }, + { name = "wheel", specifier = "==0.46.2" }, + { name = "xlsxwriter", specifier = "==3.2.9" }, + { name = "xnat", specifier = "==0.8.1" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "mypy", specifier = "==1.17.0" }, + { name = "mypy-extensions", specifier = "==1.1.0" }, + { name = "ruff", specifier = "==0.12.12" }, + { name = "timeout-decorator", specifier = "==0.5.0" }, + { name = "types-aiofiles", specifier = "==24.1.0.20250708" }, + { name = "types-pyyaml", specifier = "==6.0.12.20250516" }, + { name = "types-setuptools", specifier = "==80.9.0.20250529" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/2e/c4390a31919d8a78b90e8ecf87cd4b4c4f05a5b48d05ec17db8e5404c6f4/contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1", size = 288773, upload-time = "2025-07-26T12:01:02.277Z" }, + { url = "https://files.pythonhosted.org/packages/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381", size = 270149, upload-time = "2025-07-26T12:01:04.072Z" }, + { url = "https://files.pythonhosted.org/packages/30/2e/dd4ced42fefac8470661d7cb7e264808425e6c5d56d175291e93890cce09/contourpy-1.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7", size = 329222, upload-time = "2025-07-26T12:01:05.688Z" }, + { url = "https://files.pythonhosted.org/packages/f2/74/cc6ec2548e3d276c71389ea4802a774b7aa3558223b7bade3f25787fafc2/contourpy-1.3.3-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1", size = 377234, upload-time = "2025-07-26T12:01:07.054Z" }, + { url = "https://files.pythonhosted.org/packages/03/b3/64ef723029f917410f75c09da54254c5f9ea90ef89b143ccadb09df14c15/contourpy-1.3.3-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a", size = 380555, upload-time = "2025-07-26T12:01:08.801Z" }, + { url = "https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db", size = 355238, upload-time = "2025-07-26T12:01:10.319Z" }, + { url = "https://files.pythonhosted.org/packages/98/56/f914f0dd678480708a04cfd2206e7c382533249bc5001eb9f58aa693e200/contourpy-1.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620", size = 1326218, upload-time = "2025-07-26T12:01:12.659Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d7/4a972334a0c971acd5172389671113ae82aa7527073980c38d5868ff1161/contourpy-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f", size = 1392867, upload-time = "2025-07-26T12:01:15.533Z" }, + { url = "https://files.pythonhosted.org/packages/75/3e/f2cc6cd56dc8cff46b1a56232eabc6feea52720083ea71ab15523daab796/contourpy-1.3.3-cp311-cp311-win32.whl", hash = "sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff", size = 183677, upload-time = "2025-07-26T12:01:17.088Z" }, + { url = "https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42", size = 225234, upload-time = "2025-07-26T12:01:18.256Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b6/71771e02c2e004450c12b1120a5f488cad2e4d5b590b1af8bad060360fe4/contourpy-1.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470", size = 193123, upload-time = "2025-07-26T12:01:19.848Z" }, + { url = "https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb", size = 293419, upload-time = "2025-07-26T12:01:21.16Z" }, + { url = "https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6", size = 273979, upload-time = "2025-07-26T12:01:22.448Z" }, + { url = "https://files.pythonhosted.org/packages/d4/1c/a12359b9b2ca3a845e8f7f9ac08bdf776114eb931392fcad91743e2ea17b/contourpy-1.3.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7", size = 332653, upload-time = "2025-07-26T12:01:24.155Z" }, + { url = "https://files.pythonhosted.org/packages/63/12/897aeebfb475b7748ea67b61e045accdfcf0d971f8a588b67108ed7f5512/contourpy-1.3.3-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2e8faa0ed68cb29af51edd8e24798bb661eac3bd9f65420c1887b6ca89987c8", size = 379536, upload-time = "2025-07-26T12:01:25.91Z" }, + { url = "https://files.pythonhosted.org/packages/43/8a/a8c584b82deb248930ce069e71576fc09bd7174bbd35183b7943fb1064fd/contourpy-1.3.3-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:626d60935cf668e70a5ce6ff184fd713e9683fb458898e4249b63be9e28286ea", size = 384397, upload-time = "2025-07-26T12:01:27.152Z" }, + { url = "https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1", size = 362601, upload-time = "2025-07-26T12:01:28.808Z" }, + { url = "https://files.pythonhosted.org/packages/05/0a/a3fe3be3ee2dceb3e615ebb4df97ae6f3828aa915d3e10549ce016302bd1/contourpy-1.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:451e71b5a7d597379ef572de31eeb909a87246974d960049a9848c3bc6c41bf7", size = 1331288, upload-time = "2025-07-26T12:01:31.198Z" }, + { url = "https://files.pythonhosted.org/packages/33/1d/acad9bd4e97f13f3e2b18a3977fe1b4a37ecf3d38d815333980c6c72e963/contourpy-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:459c1f020cd59fcfe6650180678a9993932d80d44ccde1fa1868977438f0b411", size = 1403386, upload-time = "2025-07-26T12:01:33.947Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8f/5847f44a7fddf859704217a99a23a4f6417b10e5ab1256a179264561540e/contourpy-1.3.3-cp312-cp312-win32.whl", hash = "sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69", size = 185018, upload-time = "2025-07-26T12:01:35.64Z" }, + { url = "https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b", size = 226567, upload-time = "2025-07-26T12:01:36.804Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e2/f05240d2c39a1ed228d8328a78b6f44cd695f7ef47beb3e684cf93604f86/contourpy-1.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc", size = 193655, upload-time = "2025-07-26T12:01:37.999Z" }, + { url = "https://files.pythonhosted.org/packages/68/35/0167aad910bbdb9599272bd96d01a9ec6852f36b9455cf2ca67bd4cc2d23/contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5", size = 293257, upload-time = "2025-07-26T12:01:39.367Z" }, + { url = "https://files.pythonhosted.org/packages/96/e4/7adcd9c8362745b2210728f209bfbcf7d91ba868a2c5f40d8b58f54c509b/contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1", size = 274034, upload-time = "2025-07-26T12:01:40.645Z" }, + { url = "https://files.pythonhosted.org/packages/73/23/90e31ceeed1de63058a02cb04b12f2de4b40e3bef5e082a7c18d9c8ae281/contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286", size = 334672, upload-time = "2025-07-26T12:01:41.942Z" }, + { url = "https://files.pythonhosted.org/packages/ed/93/b43d8acbe67392e659e1d984700e79eb67e2acb2bd7f62012b583a7f1b55/contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5", size = 381234, upload-time = "2025-07-26T12:01:43.499Z" }, + { url = "https://files.pythonhosted.org/packages/46/3b/bec82a3ea06f66711520f75a40c8fc0b113b2a75edb36aa633eb11c4f50f/contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67", size = 385169, upload-time = "2025-07-26T12:01:45.219Z" }, + { url = "https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9", size = 362859, upload-time = "2025-07-26T12:01:46.519Z" }, + { url = "https://files.pythonhosted.org/packages/33/71/e2a7945b7de4e58af42d708a219f3b2f4cff7386e6b6ab0a0fa0033c49a9/contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659", size = 1332062, upload-time = "2025-07-26T12:01:48.964Z" }, + { url = "https://files.pythonhosted.org/packages/12/fc/4e87ac754220ccc0e807284f88e943d6d43b43843614f0a8afa469801db0/contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7", size = 1403932, upload-time = "2025-07-26T12:01:51.979Z" }, + { url = "https://files.pythonhosted.org/packages/a6/2e/adc197a37443f934594112222ac1aa7dc9a98faf9c3842884df9a9d8751d/contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d", size = 185024, upload-time = "2025-07-26T12:01:53.245Z" }, + { url = "https://files.pythonhosted.org/packages/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263", size = 226578, upload-time = "2025-07-26T12:01:54.422Z" }, + { url = "https://files.pythonhosted.org/packages/8a/9a/2f6024a0c5995243cd63afdeb3651c984f0d2bc727fd98066d40e141ad73/contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9", size = 193524, upload-time = "2025-07-26T12:01:55.73Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b3/f8a1a86bd3298513f500e5b1f5fd92b69896449f6cab6a146a5d52715479/contourpy-1.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d", size = 306730, upload-time = "2025-07-26T12:01:57.051Z" }, + { url = "https://files.pythonhosted.org/packages/3f/11/4780db94ae62fc0c2053909b65dc3246bd7cecfc4f8a20d957ad43aa4ad8/contourpy-1.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216", size = 287897, upload-time = "2025-07-26T12:01:58.663Z" }, + { url = "https://files.pythonhosted.org/packages/ae/15/e59f5f3ffdd6f3d4daa3e47114c53daabcb18574a26c21f03dc9e4e42ff0/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae", size = 326751, upload-time = "2025-07-26T12:02:00.343Z" }, + { url = "https://files.pythonhosted.org/packages/0f/81/03b45cfad088e4770b1dcf72ea78d3802d04200009fb364d18a493857210/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20", size = 375486, upload-time = "2025-07-26T12:02:02.128Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ba/49923366492ffbdd4486e970d421b289a670ae8cf539c1ea9a09822b371a/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99", size = 388106, upload-time = "2025-07-26T12:02:03.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/52/5b00ea89525f8f143651f9f03a0df371d3cbd2fccd21ca9b768c7a6500c2/contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b", size = 352548, upload-time = "2025-07-26T12:02:05.165Z" }, + { url = "https://files.pythonhosted.org/packages/32/1d/a209ec1a3a3452d490f6b14dd92e72280c99ae3d1e73da74f8277d4ee08f/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a", size = 1322297, upload-time = "2025-07-26T12:02:07.379Z" }, + { url = "https://files.pythonhosted.org/packages/bc/9e/46f0e8ebdd884ca0e8877e46a3f4e633f6c9c8c4f3f6e72be3fe075994aa/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e", size = 1391023, upload-time = "2025-07-26T12:02:10.171Z" }, + { url = "https://files.pythonhosted.org/packages/b9/70/f308384a3ae9cd2209e0849f33c913f658d3326900d0ff5d378d6a1422d2/contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3", size = 196157, upload-time = "2025-07-26T12:02:11.488Z" }, + { url = "https://files.pythonhosted.org/packages/b2/dd/880f890a6663b84d9e34a6f88cded89d78f0091e0045a284427cb6b18521/contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8", size = 240570, upload-time = "2025-07-26T12:02:12.754Z" }, + { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" }, + { url = "https://files.pythonhosted.org/packages/72/8b/4546f3ab60f78c514ffb7d01a0bd743f90de36f0019d1be84d0a708a580a/contourpy-1.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a", size = 292189, upload-time = "2025-07-26T12:02:16.095Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77", size = 273251, upload-time = "2025-07-26T12:02:17.524Z" }, + { url = "https://files.pythonhosted.org/packages/b1/71/f93e1e9471d189f79d0ce2497007731c1e6bf9ef6d1d61b911430c3db4e5/contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5", size = 335810, upload-time = "2025-07-26T12:02:18.9Z" }, + { url = "https://files.pythonhosted.org/packages/91/f9/e35f4c1c93f9275d4e38681a80506b5510e9327350c51f8d4a5a724d178c/contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4", size = 382871, upload-time = "2025-07-26T12:02:20.418Z" }, + { url = "https://files.pythonhosted.org/packages/b5/71/47b512f936f66a0a900d81c396a7e60d73419868fba959c61efed7a8ab46/contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36", size = 386264, upload-time = "2025-07-26T12:02:21.916Z" }, + { url = "https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3", size = 363819, upload-time = "2025-07-26T12:02:23.759Z" }, + { url = "https://files.pythonhosted.org/packages/3e/a6/0b185d4cc480ee494945cde102cb0149ae830b5fa17bf855b95f2e70ad13/contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b", size = 1333650, upload-time = "2025-07-26T12:02:26.181Z" }, + { url = "https://files.pythonhosted.org/packages/43/d7/afdc95580ca56f30fbcd3060250f66cedbde69b4547028863abd8aa3b47e/contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36", size = 1404833, upload-time = "2025-07-26T12:02:28.782Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e2/366af18a6d386f41132a48f033cbd2102e9b0cf6345d35ff0826cd984566/contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d", size = 189692, upload-time = "2025-07-26T12:02:30.128Z" }, + { url = "https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd", size = 232424, upload-time = "2025-07-26T12:02:31.395Z" }, + { url = "https://files.pythonhosted.org/packages/18/79/a9416650df9b525737ab521aa181ccc42d56016d2123ddcb7b58e926a42c/contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339", size = 198300, upload-time = "2025-07-26T12:02:32.956Z" }, + { url = "https://files.pythonhosted.org/packages/1f/42/38c159a7d0f2b7b9c04c64ab317042bb6952b713ba875c1681529a2932fe/contourpy-1.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772", size = 306769, upload-time = "2025-07-26T12:02:34.2Z" }, + { url = "https://files.pythonhosted.org/packages/c3/6c/26a8205f24bca10974e77460de68d3d7c63e282e23782f1239f226fcae6f/contourpy-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77", size = 287892, upload-time = "2025-07-26T12:02:35.807Z" }, + { url = "https://files.pythonhosted.org/packages/66/06/8a475c8ab718ebfd7925661747dbb3c3ee9c82ac834ccb3570be49d129f4/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13", size = 326748, upload-time = "2025-07-26T12:02:37.193Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a3/c5ca9f010a44c223f098fccd8b158bb1cb287378a31ac141f04730dc49be/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe", size = 375554, upload-time = "2025-07-26T12:02:38.894Z" }, + { url = "https://files.pythonhosted.org/packages/80/5b/68bd33ae63fac658a4145088c1e894405e07584a316738710b636c6d0333/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f", size = 388118, upload-time = "2025-07-26T12:02:40.642Z" }, + { url = "https://files.pythonhosted.org/packages/40/52/4c285a6435940ae25d7410a6c36bda5145839bc3f0beb20c707cda18b9d2/contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0", size = 352555, upload-time = "2025-07-26T12:02:42.25Z" }, + { url = "https://files.pythonhosted.org/packages/24/ee/3e81e1dd174f5c7fefe50e85d0892de05ca4e26ef1c9a59c2a57e43b865a/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4", size = 1322295, upload-time = "2025-07-26T12:02:44.668Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/6d913d4d04e14379de429057cd169e5e00f6c2af3bb13e1710bcbdb5da12/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f", size = 1391027, upload-time = "2025-07-26T12:02:47.09Z" }, + { url = "https://files.pythonhosted.org/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae", size = 202428, upload-time = "2025-07-26T12:02:48.691Z" }, + { url = "https://files.pythonhosted.org/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc", size = 250331, upload-time = "2025-07-26T12:02:50.137Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" }, + { url = "https://files.pythonhosted.org/packages/a5/29/8dcfe16f0107943fa92388c23f6e05cff0ba58058c4c95b00280d4c75a14/contourpy-1.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497", size = 278809, upload-time = "2025-07-26T12:02:52.74Z" }, + { url = "https://files.pythonhosted.org/packages/85/a9/8b37ef4f7dafeb335daee3c8254645ef5725be4d9c6aa70b50ec46ef2f7e/contourpy-1.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8", size = 261593, upload-time = "2025-07-26T12:02:54.037Z" }, + { url = "https://files.pythonhosted.org/packages/0a/59/ebfb8c677c75605cc27f7122c90313fd2f375ff3c8d19a1694bda74aaa63/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e", size = 302202, upload-time = "2025-07-26T12:02:55.947Z" }, + { url = "https://files.pythonhosted.org/packages/3c/37/21972a15834d90bfbfb009b9d004779bd5a07a0ec0234e5ba8f64d5736f4/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989", size = 329207, upload-time = "2025-07-26T12:02:57.468Z" }, + { url = "https://files.pythonhosted.org/packages/0c/58/bd257695f39d05594ca4ad60df5bcb7e32247f9951fd09a9b8edb82d1daa/contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77", size = 225315, upload-time = "2025-07-26T12:02:58.801Z" }, +] + +[[package]] +name = "cryptography" +version = "50.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/ad/5d6702db60b1e40b41ef513b6967ff5848f307d50f8449baf1634f5908f1/cryptography-50.0.1.tar.gz", hash = "sha256:5dd9bda1c12b4162f6ff568eeb5e0ff956c28d14406e875cfe8a63a2d414ff20", size = 880381, upload-time = "2026-08-25T19:45:45.499Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/19/797e2aaac9df6a66f1550f49979dc1b1e39ecd2077501c30efa81e8d5d67/cryptography-50.0.1-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:b8f852c65863251b9e3a1b8c150ce21e59b522dbb6a7d4bc80e680d38388e986", size = 4010153, upload-time = "2026-08-25T19:44:03.155Z" }, + { url = "https://files.pythonhosted.org/packages/90/34/9ce9a62ed9dc82ca9fd6a34445b6904af56e5f38b3eae2ed32e49c36053d/cryptography-50.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:53e279950892dc102c6b4e52af03ae5ea92fac572a1ddab78ca73a997f62b69f", size = 4723133, upload-time = "2026-08-25T19:44:05.461Z" }, + { url = "https://files.pythonhosted.org/packages/57/26/e6d4fc8512a51a5f9ee7bfdbfb853bce1197087df40c9ad993ad370b846f/cryptography-50.0.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ff838d62ec1bfce4f9ba7fa16f4a7b554cd8d0c299e6be37502161a660c84eef", size = 4712478, upload-time = "2026-08-25T19:44:07.375Z" }, + { url = "https://files.pythonhosted.org/packages/e6/de/d3cdc2815697aae84126cbd6a030ca7b6b452e28a88b501b836bd3aa7a86/cryptography-50.0.1-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e74591e283fe6eb956416c929eb58262a719fe0311fd9054c62c3350ed8760d8", size = 4730726, upload-time = "2026-08-25T19:44:09.294Z" }, + { url = "https://files.pythonhosted.org/packages/55/32/38c0d344b98c06d34b5df8946565a9c0d6dbf32c8e0730a7f05f0a3c6cab/cryptography-50.0.1-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5fe002589592ed749ce77fe0695fcbd3500dd61d7d6db5858a7544c612fa8e45", size = 5353524, upload-time = "2026-08-25T19:44:11.96Z" }, + { url = "https://files.pythonhosted.org/packages/e1/1b/82f0f0d8858d4432be1af790477edf62aef90324041aa07c57e57bef1af7/cryptography-50.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:51593d180cf6d179bde5c5d065bed81386b1f381656ae7d042b7ffc87a9895ad", size = 4746720, upload-time = "2026-08-25T19:44:14.051Z" }, + { url = "https://files.pythonhosted.org/packages/29/ba/042ca458b8c64348c768284b5d23e69b92ed53d057ab779fee628564676d/cryptography-50.0.1-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:359e62deae718bce96170e223fdcb6357e4fbd3bb7a3a75f4430763532560e49", size = 4361866, upload-time = "2026-08-25T19:44:16.167Z" }, + { url = "https://files.pythonhosted.org/packages/39/3b/e96c1ef71edef71057c7e3c3d982ce8fda554e0c52d0cc19c18845cde3eb/cryptography-50.0.1-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e2ca8fd1b6b4b82a1c4cb02841d0837e3c12336c2e24b520ab8ab3b969733d8f", size = 4730028, upload-time = "2026-08-25T19:44:18.085Z" }, + { url = "https://files.pythonhosted.org/packages/e3/38/45abd72ef63f2e7d0754a6cacf97bd8b69512ace7f6130d24c39ece65da2/cryptography-50.0.1-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:76de83fbd91ac49c0feaaa983d0748fd7a53176afac5fb3bf7478d244f0eb527", size = 5308405, upload-time = "2026-08-25T19:44:20.197Z" }, + { url = "https://files.pythonhosted.org/packages/85/66/6ccca4722987ddedaa7fc9c3f4708af7431f5535666c174350830888c6b7/cryptography-50.0.1-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:51afcfceb15597cf2635068e4ac9a56b2abde622edde17f37d85fd7b5306497a", size = 4746230, upload-time = "2026-08-25T19:44:22.376Z" }, + { url = "https://files.pythonhosted.org/packages/13/0e/b1f92e013228111413f2e6743948b80bc24dfd3c1b87ba98ceea16f5df89/cryptography-50.0.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:be224a65493ec5b74a158ff22a5522ce4a5ca1e543c647a3a4730d4a09e5f959", size = 4862596, upload-time = "2026-08-25T19:44:24.472Z" }, + { url = "https://files.pythonhosted.org/packages/7e/22/c3654cccc856e9d682817b04ac3ee79731cb09ca6f95996a95c904de2883/cryptography-50.0.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9ebcdd5519be9b652a46f507817a74591774fc3d6923ac364e4dfa64e36b291b", size = 5014082, upload-time = "2026-08-25T19:44:26.709Z" }, + { url = "https://files.pythonhosted.org/packages/42/8b/cb12b1b60c91b074ca6bf0fdd59aa8f10d8bc5f73af8faece86ef0421b37/cryptography-50.0.1-cp311-abi3-win_amd64.whl", hash = "sha256:aed8db4f6d71c51efb89530e12d9464e7bf2923d46c3205dc794a2a93f8c0648", size = 3842826, upload-time = "2026-08-25T19:44:28.784Z" }, + { url = "https://files.pythonhosted.org/packages/5b/f0/424cb557d99aa86ac55da5e2add02e2882e44047b6264f93ade1b975a993/cryptography-50.0.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:30a125032e5642a21ff816e021152bd4e7e94f03eff3f4b7fca41cd22bc3110f", size = 3973525, upload-time = "2026-08-25T19:44:30.7Z" }, + { url = "https://files.pythonhosted.org/packages/4d/72/3a2711d967977ab5fc80b782837c7e8d1ac7445e764c20c381a265c57ef3/cryptography-50.0.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a0b1a59e3a089064a0ec309e9428c8e3ae4e161419d20ac33600767e83fc658a", size = 4708817, upload-time = "2026-08-25T19:44:32.773Z" }, + { url = "https://files.pythonhosted.org/packages/b4/f2/bb1f56e10815b789df0b409a69fa4992ff3d3fef9c72747f4a6b26fed38e/cryptography-50.0.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8921d58f426793c5f1b47f0b59575780de9a095214958d0eb37d909593db8367", size = 4697300, upload-time = "2026-08-25T19:44:35.144Z" }, + { url = "https://files.pythonhosted.org/packages/08/bd/ed5396be499ffcf8807a585bfe38b71a1fbdd1c342b4f9b6d0ef5162a946/cryptography-50.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:a8f40ea47330e71b594a7e246898f93177c259490c63183dbaf9e571d71ed9a5", size = 4716039, upload-time = "2026-08-25T19:44:37.192Z" }, + { url = "https://files.pythonhosted.org/packages/f6/6e/1cf405c5c8e8df7545378048e954792f00b7f2367af8863ce8b8f3e10607/cryptography-50.0.1-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:a255449073358275b64b67d3f595f268bbef70e72b6edb65e0c70c735bf739c9", size = 5332388, upload-time = "2026-08-25T19:44:39.16Z" }, + { url = "https://files.pythonhosted.org/packages/47/92/b4317e8c32c4f47b062f5398bd79106b220a124546f42be83bf32b761e2a/cryptography-50.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:8df2de9102026855887e4587084f6eabd80ed0f345b8ad8a7ac27ab9bf4723e0", size = 4730293, upload-time = "2026-08-25T19:44:41.298Z" }, + { url = "https://files.pythonhosted.org/packages/39/0d/a1e7633e2c744d0f2983320a27e924ef2264c79c56e1a58d5fb0a1cfd413/cryptography-50.0.1-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:ac02b07824d4d1001bd4367599f839c19cb171924c796e52c23508ac14c2c0cc", size = 4346031, upload-time = "2026-08-25T19:44:43.245Z" }, + { url = "https://files.pythonhosted.org/packages/88/dd/b215616f9bab3fc18510c78a4e5c9f362d77838503c363dc747c7d4f5c6f/cryptography-50.0.1-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:cbf74a81765ee67413503ca6e26dcc4f6f5a519822436cc0a1b97aab6c1b8a17", size = 4715344, upload-time = "2026-08-25T19:44:45.291Z" }, + { url = "https://files.pythonhosted.org/packages/b1/1b/ec3ebd31741d0e963612c4fe43caa39341b9b1e031e469820e42e4c83918/cryptography-50.0.1-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:16c5ecd954b3330ebfb6605eca4fd952da8bef376551d5cc264534e3770a9ee6", size = 5287201, upload-time = "2026-08-25T19:44:47.297Z" }, + { url = "https://files.pythonhosted.org/packages/1a/01/0127d11a762b31a9ee0221894f540318761783f3fdc4bc5d057698caebd5/cryptography-50.0.1-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:79bf008d1f9af6071c797ad133e39915dfee7614f18f18f4db9072eb715064a3", size = 4730023, upload-time = "2026-08-25T19:44:49.435Z" }, + { url = "https://files.pythonhosted.org/packages/9e/b9/e7425ebfb599241a0c1d7000f1b466c3062da66c19d9525031315dff7213/cryptography-50.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:330fbb252391c596f1ae42c5754449dc924e6ad012dca8efe0d703f9f2d12ec6", size = 4847362, upload-time = "2026-08-25T19:44:51.94Z" }, + { url = "https://files.pythonhosted.org/packages/2d/fd/60d0ddf4defa12e482c9d5e0f554384d6e8ab25341fd15f060028fd92e6a/cryptography-50.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:42be3bb70596b3abe4ac097b75be223e8b3ab614a0e5de068e3dcc54d71d6149", size = 4999247, upload-time = "2026-08-25T19:44:53.876Z" }, + { url = "https://files.pythonhosted.org/packages/4d/56/bc4f2b209e766c93372cfcd59b781a0b2b59700f62a969580415b699c2b2/cryptography-50.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f74455bb086a85d5e81246412602aaa97ed095e504cd40dd261ef50be42205bf", size = 3825806, upload-time = "2026-08-25T19:44:56.209Z" }, + { url = "https://files.pythonhosted.org/packages/84/a9/ee16a903f13755e914d1eecc482fe64d1f10761c3960e5d8fa6837377aff/cryptography-50.0.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ca83d00d9e69cd5eb63f2e69c3a5a59e0cecae5ae14c6ae0b35830fe3b37bad0", size = 4035307, upload-time = "2026-08-25T19:44:58.305Z" }, + { url = "https://files.pythonhosted.org/packages/5e/a5/9ec7e81e8526c0d7a387d73386b2daed3f39e10d81a85930bd1b6bfba65c/cryptography-50.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:05ba322c4da95b262a212c345af888ef2c37c88c0509756ea00a0e6d68850f23", size = 4751900, upload-time = "2026-08-25T19:45:00.401Z" }, + { url = "https://files.pythonhosted.org/packages/7e/3c/0e77bd5ffcf078e9dd27d3074aad6c030d9b10d0bf69329d573c927a188c/cryptography-50.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e22dfed744bd4002e909464cb23d2f0b05c6f3113a79ef2e9864a53db737c733", size = 4738357, upload-time = "2026-08-25T19:45:02.786Z" }, + { url = "https://files.pythonhosted.org/packages/27/3a/3c5f80daa4dcd47323c7af8a2fcb90de27a33564d4fcac69846c0972691a/cryptography-50.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4c4188f7c0cf655be5c06342b817ed0f9595b69ffa2b12026e5353eed29dea88", size = 4758474, upload-time = "2026-08-25T19:45:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/6e/2b/214cf0cf93db9628c3c20c896b229f327f6fb1b20e4b3743d8ad3f00af8b/cryptography-50.0.1-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:2ebbfb0f1fed745e91796e3e1080a1440423fdae8ece1b995a1d80883a409054", size = 5375862, upload-time = "2026-08-25T19:45:07.163Z" }, + { url = "https://files.pythonhosted.org/packages/d6/51/3f9701867a46b6c1740c9b52fc4d3bed6cbdcfedcc9b6e64305c07f39cff/cryptography-50.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:407fe2b6db00939c05c0e945e9914238f2f0a430974839429dafc82b1ee6bee5", size = 4772942, upload-time = "2026-08-25T19:45:09.396Z" }, + { url = "https://files.pythonhosted.org/packages/0d/5c/13ea642e08e2544d0f5396122055f4820cfacb3203562197b5967125ea97/cryptography-50.0.1-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:2b34d76a652ea2b6faf777c35df230c5637842cd904e04f16230c3f9f03e4361", size = 4383347, upload-time = "2026-08-25T19:45:11.659Z" }, + { url = "https://files.pythonhosted.org/packages/84/d5/7d1fe1cb93f91c428093ff234e128c89ba8ea61a6f26aab406081f9b996e/cryptography-50.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:01f41478cf33fc605a6a089cd56d28b45c6c0b45a1928b61797f2621a04bac71", size = 4758050, upload-time = "2026-08-25T19:45:13.745Z" }, + { url = "https://files.pythonhosted.org/packages/dd/04/557fc5ead96a829e0bc812a3b9dc4a52a2f27e4f7f5950da7ff27653a805/cryptography-50.0.1-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:fc3ed7ebd2a8c96f5b166de0ab9b624996bef3b07bbeb19364dfb78222c22c80", size = 5332955, upload-time = "2026-08-25T19:45:16.193Z" }, + { url = "https://files.pythonhosted.org/packages/8c/eb/5d7124083e8d8cda8f5b348f544b71ad6f707ad63193758ef4d8e569da02/cryptography-50.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9dde0a357190eb3b1da1bb9ab750e9c85cba82ca5977aa0836cbb94e92611239", size = 4772694, upload-time = "2026-08-25T19:45:18.315Z" }, + { url = "https://files.pythonhosted.org/packages/63/8e/f1f955e0921dd2b6d22eae7e8d24a4c4b638d10735ffbf6a71f99eb0fcb8/cryptography-50.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd3718b960d0b5dd213cdf03f3bcb7000e69dda0de8b956061947ff6bcff5558", size = 4888413, upload-time = "2026-08-25T19:45:20.4Z" }, + { url = "https://files.pythonhosted.org/packages/1f/ab/89e2b798d2c3925f82e2bb72d5979f3d2f6da2dd22ef4a8cd8b70d920039/cryptography-50.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2a93d05e34d5f67fba6f891fe85d929999baa7195e853923ea6d7576c9e68c5e", size = 5044355, upload-time = "2026-08-25T19:45:22.353Z" }, + { url = "https://files.pythonhosted.org/packages/99/89/87ef49ffe383ef4e147d27b7bf2088fb0b54ea409dd87b5a89442e5828a5/cryptography-50.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:55d16b1ef3ee0958d893a977b19777887e546c9954ea81b200c3301a864013f2", size = 3875429, upload-time = "2026-08-25T19:45:24.418Z" }, + { url = "https://files.pythonhosted.org/packages/c7/27/8d207af749c453ee17ea087340b3f2b4adef75aadd1d277b1b129bdda84e/cryptography-50.0.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9cb3cb952cf5a8abd50c782a98a89d71699715e802fe349704b47f2425b42a94", size = 3974350, upload-time = "2026-08-25T19:45:26.551Z" }, + { url = "https://files.pythonhosted.org/packages/14/9a/6d3a4d7852e22d657438b7bf51f66102c7d71c0e1fafeec652281d0403e5/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5fe939deeb161024a6be98229c953b6591fef1f41214497a78fe793a244c017f", size = 4698675, upload-time = "2026-08-25T19:45:28.658Z" }, + { url = "https://files.pythonhosted.org/packages/73/35/5c3717edf9e68a0550ce04e28eab493fe545eccd81742af03f6a75fe260b/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fb4b9672d389c738b175c4166e78310f8a70358886aacd9173ee03a85ffdc671", size = 4707410, upload-time = "2026-08-25T19:45:30.816Z" }, + { url = "https://files.pythonhosted.org/packages/1d/e0/e786934472e3ac4ecdecc7b129a0ca1a2a40dffdafcf2c3ea9d4397f8def/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:d63ae8f6481fec907ac0f588eee8a90aefde112c633131fe540e5711ddbb5a4e", size = 4698378, upload-time = "2026-08-25T19:45:33.043Z" }, + { url = "https://files.pythonhosted.org/packages/51/cf/5b3f53a0b74d122f023476ede40ba5d3e70d5cf475f73b899740d26a4fb2/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:804728ce710890870f3aaa344b2e161172d258d768ac139d02cfd9092d0d94e6", size = 4706889, upload-time = "2026-08-25T19:45:35.086Z" }, + { url = "https://files.pythonhosted.org/packages/71/44/711e61f7d014be825ef79b285b047292d1bf893732ac1bc030a351fb517f/cryptography-50.0.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:693c99b49bd37d0d096e4334c10232c77248c415b98d35236094cdf96d57258b", size = 3824006, upload-time = "2026-08-25T19:45:37.281Z" }, +] + +[[package]] +name = "decorator" +version = "5.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, +] + +[[package]] +name = "dill" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/81/e1/56027a71e31b02ddc53c7d65b01e68edf64dea2932122fe7746a516f75d5/dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa", size = 187315, upload-time = "2026-01-19T02:36:56.85Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d", size = 120019, upload-time = "2026-01-19T02:36:55.663Z" }, +] + +[[package]] +name = "elastic-transport" +version = "9.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "sniffio" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/be/a719a217ed7f179c9e41821dff9dfd28415b21bc94da9d35fff84f7951b2/elastic_transport-9.4.2.tar.gz", hash = "sha256:366f4614f4544c5fb5d780c82f57af8f30492b44a68ed20750390aa81e20c2ea", size = 79310, upload-time = "2026-06-16T15:27:17.182Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/e4/9b7ef7a8e0bb416e0fe1879c92295041cf81e5a47e3c3110744e89b6eb35/elastic_transport-9.4.2-py3-none-any.whl", hash = "sha256:33dc89bb1855faa8b98ae8b036405a39c562778dbcdbe4a00a2eaf753148556c", size = 66314, upload-time = "2026-06-16T15:27:15.875Z" }, +] + +[[package]] +name = "elasticsearch9" +version = "9.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "elastic-transport" }, + { name = "python-dateutil" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e7/2c/0d820895e442d68fdffe08bc307fb85a71fb745a8498f85e0ca21c483b3c/elasticsearch9-9.1.0.tar.gz", hash = "sha256:b8dee7900042cc8bb57181cf79c12b5db1446e671db5ea84705e8a96d3788496", size = 849013, upload-time = "2025-07-30T08:54:53.712Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/3c/b27aebdac9f1f054f4b569dfc245074ab954387dd68c0b7e0a1b5368fd74/elasticsearch9-9.1.0-py3-none-any.whl", hash = "sha256:5281b447587e5440183db280f953e2f34993b8b38df6fb98e7cd66f99b7734d4", size = 929889, upload-time = "2025-07-30T08:54:50.353Z" }, +] + +[[package]] +name = "events" +version = "0.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/ed/e47dec0626edd468c84c04d97769e7ab4ea6457b7f54dcb3f72b17fcd876/Events-0.5-py3-none-any.whl", hash = "sha256:a7286af378ba3e46640ac9825156c93bdba7502174dd696090fdfcd4d80a1abd", size = 6758, upload-time = "2023-07-31T08:23:13.645Z" }, +] + +[[package]] +name = "fhir-core" +version = "1.1.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/93/19/4debca62dce6602c7e5f284600e4cbd3faf2383d2081b7f21b8005da9482/fhir_core-1.1.10.tar.gz", hash = "sha256:de8ee2ff7c14854641b7ad12e23fb5c53d9b3a99ebaeaad360d1d40a086629c3", size = 35713, upload-time = "2026-07-25T10:02:20.711Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/8f/004089ac25fddc6b839e58bdfba0f9a97f56889e4f80715105d91994f1eb/fhir_core-1.1.10-py2.py3-none-any.whl", hash = "sha256:bdbe6164e26843e7e63559a08961e44df54b1ed8bd52a1df415ee8c02f7ec965", size = 30658, upload-time = "2026-07-25T10:02:19.297Z" }, +] + +[[package]] +name = "fhir-resources" +version = "8.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fhir-core" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/06/331d78ad6db6903be6b912701c44b32af295279907b3a2e6ad6c2e2f97b1/fhir_resources-8.3.0.tar.gz", hash = "sha256:bdfd1c7bd1b89bfa269c1f435727771f6c632cd857e2848221713b3f8b9f46e8", size = 1617996, upload-time = "2026-07-03T15:23:54.01Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/86/32914542064b8aee77ac48142f8a1955df78da4eb905dd41697d26941d21/fhir_resources-8.3.0-py2.py3-none-any.whl", hash = "sha256:151e6c9b4336e36383cc2aaf2067a6f112a420fce1c7bd289182e55dd950871b", size = 2288069, upload-time = "2026-07-03T15:23:51.97Z" }, +] + +[[package]] +name = "filelock" +version = "3.32.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/a0/50c2c0ce5e74d7721bbb1b19a26ebd339aac5878553a6e35308c2f31f935/filelock-3.32.5.tar.gz", hash = "sha256:f6a6a28f743f9b95ce19db5abe0f376f75eb56517dff21e1a4751e2657d3e83d", size = 222838, upload-time = "2026-08-31T18:56:34.729Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/d2/b70a31e13d04456d28493f31d2aa087e99eeb2767ef0293b2625727ccb8c/filelock-3.32.5-py3-none-any.whl", hash = "sha256:142cd9fa77a872c5e78c62329a0d15278fadc686eb89e760017968961a4fd6b2", size = 100003, upload-time = "2026-08-31T18:56:33.078Z" }, +] + +[[package]] +name = "folium" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "branca" }, + { name = "jinja2" }, + { name = "numpy" }, + { name = "requests" }, + { name = "xyzservices" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/76/84a1b1b00ce71f9c0c44af7d80f310c02e2e583591fe7d4cb03baecd0d3f/folium-0.20.0.tar.gz", hash = "sha256:a0d78b9d5a36ba7589ca9aedbd433e84e9fcab79cd6ac213adbcff922e454cb9", size = 109932, upload-time = "2025-06-16T20:22:51.803Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/a8/5f764f333204db0390362a4356d03a43626997f26818a0e9396f1b3bd8c9/folium-0.20.0-py2.py3-none-any.whl", hash = "sha256:f0bc2a92acde20bca56367aa5c1c376c433f450608d058daebab2fc9bf8198bf", size = 113394, upload-time = "2025-06-16T20:22:50.318Z" }, +] + +[[package]] +name = "future" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/b2/4140c69c6a66432916b26158687e821ba631a4c9273c474343badf84d3ba/future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05", size = 1228490, upload-time = "2024-02-21T11:52:38.461Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216", size = 491326, upload-time = "2024-02-21T11:52:35.956Z" }, +] + +[[package]] +name = "geocoder" +version = "1.38.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "future" }, + { name = "ratelim" }, + { name = "requests" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ea/0b/2ea440270c1efb7ac73450cb704344c8127f45dabff0bea48711dc9dd93a/geocoder-1.38.1.tar.gz", hash = "sha256:c9925374c961577d0aee403b09e6f8ea1971d913f011f00ca70c76beaf7a77e7", size = 64345, upload-time = "2018-04-04T12:34:47.649Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/6b/13166c909ad2f2d76b929a4227c952630ebaf0d729f6317eb09cbceccbab/geocoder-1.38.1-py2.py3-none-any.whl", hash = "sha256:a733e1dfbce3f4e1a526cac03aadcedb8ed1239cf55bd7f3a23c60075121a834", size = 98590, upload-time = "2018-04-04T12:34:51.222Z" }, +] + +[[package]] +name = "geographiclib" +version = "2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/78/4892343230a9d29faa1364564e525307a37e54ad776ea62c12129dbba704/geographiclib-2.1.tar.gz", hash = "sha256:6a6545e6262d0ed3522e13c515713718797e37ed8c672c31ad7b249f372ef108", size = 37004, upload-time = "2025-08-21T21:34:26Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/b3/802576f2ea5dcb48501bb162e4c7b7b3ca5654a42b2c968ef98a797a4c79/geographiclib-2.1-py3-none-any.whl", hash = "sha256:e2a873b9b9e7fc38721ad73d5f4e6c9ed140d428a339970f505c07056997d40b", size = 40740, upload-time = "2025-08-21T21:34:24.955Z" }, +] + +[[package]] +name = "geopy" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "geographiclib" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/da/0c/b4e42a0495293f6c94364baba4c657c68bc8d8efec784259cc943f4ba28b/geopy-2.5.0.tar.gz", hash = "sha256:7b6c849f18108dcce4faa3d614e2801107b465f7b05fd3c1db9db12e225ae950", size = 122254, upload-time = "2026-07-12T19:50:06.051Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/66/e5/de8b557b279e31cdfb2070ac83eb45dc7e29bd93cd544128756f658e52c7/geopy-2.5.0-py3-none-any.whl", hash = "sha256:8ad8cc226b505ca4d272ae9a2eeba08b8a2c565fc9a04eaefc33ad49c32b51aa", size = 114619, upload-time = "2026-07-12T19:50:04.839Z" }, +] + +[[package]] +name = "idna" +version = "3.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/f7/abb373e5757eaec4b922b92f97ec8d6d7e057cf06778247604fbc4e7c3f3/idna-3.19.tar.gz", hash = "sha256:5e0811a4383b21dc5838069f801c4fb62113b7447663d2530d2bd6e77b49bf15", size = 215237, upload-time = "2026-08-18T05:14:24.27Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/b0/0e52c878c53f245edd3a11020f20979b3f490f245af532c7cae3027754b5/idna-3.19-py3-none-any.whl", hash = "sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4", size = 68550, upload-time = "2026-08-18T05:14:22.343Z" }, +] + +[[package]] +name = "importlib-metadata" +version = "9.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/7e/1e7e8dc30634b93ebb3d58a3dea569ad146e656218d3960ab04f62047b29/importlib_metadata-9.0.1.tar.gz", hash = "sha256:ab830580bc0ef3db61ce8fae716389e5462b67e033018bab6d8f80ef17172f99", size = 59124, upload-time = "2026-08-28T15:30:34.646Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/55/ecca97ae19075f1fac62def77731e7f535e6c1fb8f92ff08160c5e6dade8/importlib_metadata-9.0.1-py3-none-any.whl", hash = "sha256:bba5600596a7e21f3eef53281cf28d6a5195634d2f2b78ff9501a3272c6eaab0", size = 27920, upload-time = "2026-08-28T15:30:33.433Z" }, +] + +[[package]] +name = "inflate64" +version = "1.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3e/f3/41bb2901543abe7aad0b0b0284ae5854bb75f848cf406bf8a046bf525f67/inflate64-1.0.4.tar.gz", hash = "sha256:b398c686960c029777afc0ed281a86f66adb956cfc3fbf6667cc6453f7b407ce", size = 902542, upload-time = "2025-11-28T10:55:52.641Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/e4/2fc07d71cf863ed4167e7d3eb7f89de0341ffe3ed3a62ff6cc4123bdbda6/inflate64-1.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bccda9815b27623e805a34ee3ee4f46c93f0cc7ac621f9834d75f033fd79c27a", size = 58595, upload-time = "2025-11-28T10:54:34.338Z" }, + { url = "https://files.pythonhosted.org/packages/53/77/1119bb53e8f4c9c77f2a5e3ab7d8c3e905fcfc9912073962b9b4cbf72118/inflate64-1.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c11e2a3cb9d9b49620c9b0c806dd0c55daec3b6bb665299b770a68f01bfc5432", size = 35854, upload-time = "2025-11-28T10:54:35.796Z" }, + { url = "https://files.pythonhosted.org/packages/de/40/8b028a731f6fabbb49069a58f1aa5c3332688b57dcb8726f9e596661ce5b/inflate64-1.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e42def03ace8c58fd50b0df4f40241c45a2314c3876d020cce24acf958323c98", size = 36011, upload-time = "2025-11-28T10:54:37.208Z" }, + { url = "https://files.pythonhosted.org/packages/86/a3/5b67ef7fd5e7546d4c2be8a9a869c70d9fd525de1cfb2b4dc4b0855eeee8/inflate64-1.0.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7912927a509ca58d1a445ce4ff6e6e9f276dc1d72687386cdf7103bf590e785c", size = 98112, upload-time = "2025-11-28T10:54:38.616Z" }, + { url = "https://files.pythonhosted.org/packages/5b/6e/6443ea6c42f6b244c4e59cb43f16e6b903669f718a96e3f1985acf473dea/inflate64-1.0.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ec40c0383cbd84d845dcb785a48ae76eef43246c923f84fda380fdd5ea653d3c", size = 99549, upload-time = "2025-11-28T10:54:40.167Z" }, + { url = "https://files.pythonhosted.org/packages/e3/ce/e98577e0771b857b491a64a3f7495eb507e0752b80093068b69813088df1/inflate64-1.0.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b01539fea372c6078b9707d9121c12cb321e587e193f50e257ce06cf5b15e41", size = 95946, upload-time = "2025-11-28T10:54:41.318Z" }, + { url = "https://files.pythonhosted.org/packages/6b/3e/8165ff4051dff08b2cc8448dafd15a697564e84cf40f3ee0dc0df16eed16/inflate64-1.0.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bf4e34e32a37a42e9cf8bd9681f89e3e37b218f97d8b8cc95bd065419bc8db13", size = 98766, upload-time = "2025-11-28T10:54:43.366Z" }, + { url = "https://files.pythonhosted.org/packages/79/b8/20cad309ded1d97195c5ad50e341b38ddc2e82f5c44ee7d000c4372c8b56/inflate64-1.0.4-cp311-cp311-win32.whl", hash = "sha256:2725ccc14b138f0ad622d0322b769f177f9edfe016ee9ed3404102935d39e7de", size = 32939, upload-time = "2025-11-28T10:54:44.507Z" }, + { url = "https://files.pythonhosted.org/packages/8c/32/be5cac018960157d33d61278377d590d5cc34922222cb0c4dc3284ce6eeb/inflate64-1.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:7056148548c1f25dcb38251f88c19b4635a5f32af4c7bad00621c85509e3d8c0", size = 35535, upload-time = "2025-11-28T10:54:46.214Z" }, + { url = "https://files.pythonhosted.org/packages/13/36/9b130e45299d587f306178d65e950e1c8f60a09db8bb55c7cdce8fdda3b6/inflate64-1.0.4-cp311-cp311-win_arm64.whl", hash = "sha256:2ea7bdcad65e255b4596f84880f6e0c1756d6336d620e302653257defa407742", size = 33457, upload-time = "2025-11-28T10:54:47.258Z" }, + { url = "https://files.pythonhosted.org/packages/ed/33/5cfa7468960de1be0833e7e41adf5b7804a0aef2fb46f3679df3876bf3ab/inflate64-1.0.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c8009e4a4918ee6c8cbc49e58fe159464895064cfdf0565fed3f49ca81e45272", size = 58619, upload-time = "2025-11-28T10:54:48.315Z" }, + { url = "https://files.pythonhosted.org/packages/cd/0a/583c7c2832da36e986c5758d0afb6f5944599e55c5b798b066a9ef63e581/inflate64-1.0.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0d173a7a0e865bb7d19685c5b1ad2994712b8361b24136d7e94abeff58505647", size = 35865, upload-time = "2025-11-28T10:54:49.389Z" }, + { url = "https://files.pythonhosted.org/packages/72/4b/9c6acfbe900e5c8698132244c68036b0455bd2169f46e356c83dc0366f11/inflate64-1.0.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8bad992f2d034f5f7e36208e54502d1b0829ce772c898e5dc59109833420148a", size = 36019, upload-time = "2025-11-28T10:54:50.813Z" }, + { url = "https://files.pythonhosted.org/packages/7f/66/c0c3d3b4b863aab2c2ce631d219a8eb3b95b78acd5f40d3212f071e693db/inflate64-1.0.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6bfcf806912ced77a21394f7363805ecacd626b79f93cba87d505a48e88ede78", size = 98765, upload-time = "2025-11-28T10:54:52.273Z" }, + { url = "https://files.pythonhosted.org/packages/37/00/1a2351a85d36b26c5b2b8cfbb37ad86084c98f592dd7590f8577d8b33993/inflate64-1.0.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62d1aac3aba094ae42e27ce7581b414c90f218248be0953b6aeb11a127225e5d", size = 100594, upload-time = "2025-11-28T10:54:53.684Z" }, + { url = "https://files.pythonhosted.org/packages/f7/3e/5d18ff5b86aaaf54117e1bb6ce15cb17163f56035f9c480e609d35f258ab/inflate64-1.0.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8065166f355122484f004225b379d403346bdae69ec624786a9334f025580675", size = 96745, upload-time = "2025-11-28T10:54:55.277Z" }, + { url = "https://files.pythonhosted.org/packages/84/ff/306d5d6aca1e04e596d2a504a59ff9a900623a6ec852f38aab99f384562d/inflate64-1.0.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:94a95f32087d223d2e119ff5c7c264109e8d4cb7e421e7a688a899a6fe021b38", size = 99795, upload-time = "2025-11-28T10:54:56.485Z" }, + { url = "https://files.pythonhosted.org/packages/cf/ec/d4caa4bf3c9e520c15e900fee5a00fc523953843e14aa378ca1abfb2b4ea/inflate64-1.0.4-cp312-cp312-win32.whl", hash = "sha256:ad4fa490bb7dc2a4640a3adaa2d5950f4a465ba034bbcf184c2103646e58ad97", size = 32956, upload-time = "2025-11-28T10:54:57.642Z" }, + { url = "https://files.pythonhosted.org/packages/33/c4/c0de4e9bdf12e449360b710e9ab5b5248804610f382b538773cbd07b72bb/inflate64-1.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:2c6befdf83d088a6e0d10d0873a9d4bfde2ce00ad7a52c8189cf303306f98030", size = 35577, upload-time = "2025-11-28T10:54:59.14Z" }, + { url = "https://files.pythonhosted.org/packages/80/07/03a5ef74ad3869b3c5af3b09216321f5a1a5a45265f7bd6d5abc669c7622/inflate64-1.0.4-cp312-cp312-win_arm64.whl", hash = "sha256:2b263c619469f90a75f29c421c53d31b208ad494a078235a8f6db2bc96583fdc", size = 33465, upload-time = "2025-11-28T10:55:00.568Z" }, + { url = "https://files.pythonhosted.org/packages/c2/55/b7de7ae318a4f233f892c4f7c8b7e0e8643abe3fdcc53ed35020a9fe3f47/inflate64-1.0.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c3f37540d0e64884a935fd62a7d17e40ab69f05ec63e815483b6513675d01bef", size = 58633, upload-time = "2025-11-28T10:55:01.931Z" }, + { url = "https://files.pythonhosted.org/packages/b8/5f/6f89c8524503fd7a9ca2bd91fe60d7291b3f684e9d41edb38ef49e10fc3d/inflate64-1.0.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4d24112180c95d12f279cade9a1e21f8be7f4790c4109c293292edf87d061992", size = 35864, upload-time = "2025-11-28T10:55:03.075Z" }, + { url = "https://files.pythonhosted.org/packages/7d/14/9eadd59244b38cf85ccd0ca43d1296c50b3a33aa37be4fb68a1928efa58c/inflate64-1.0.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5c098dab17821f466fc6e6a3d78fc6e0295bb51458015f03416b1d58d6a8df4f", size = 36019, upload-time = "2025-11-28T10:55:04.126Z" }, + { url = "https://files.pythonhosted.org/packages/ca/04/399e82d8f5003dd92c8a0c5c1a9a8ce0919114710a496cbe88848bff3a72/inflate64-1.0.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a984b9287ff0fb596eb058d66a9e94530556afd2b7c054b44f2e0aeeff894e8f", size = 98973, upload-time = "2025-11-28T10:55:05.229Z" }, + { url = "https://files.pythonhosted.org/packages/c0/c5/038dc2593bbc4272d87eac8c9f75692267d47f834ced888f6d81995df606/inflate64-1.0.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f62a13d0327631778fa2a47c308ae2b07b2659b7bb8564783259ac65949f8c0c", size = 100777, upload-time = "2025-11-28T10:55:06.41Z" }, + { url = "https://files.pythonhosted.org/packages/74/4a/f6d3031dd3578510894a41bfe1ac149228970ce1629a43f20e0c5abbe8d1/inflate64-1.0.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:513201336fb3b0b7e2aee5dbbbe30a9f1b23291738b5ceb80076fc285f2ec2f1", size = 96967, upload-time = "2025-11-28T10:55:07.594Z" }, + { url = "https://files.pythonhosted.org/packages/26/ef/7ab3bde4e176609ae0e607a8a9bb38d201885275664a6d574299f5bf7850/inflate64-1.0.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:84ce3a97272ba745fce52b38363855c7201968f6402a794bbade774e64c657b9", size = 99997, upload-time = "2025-11-28T10:55:08.85Z" }, + { url = "https://files.pythonhosted.org/packages/39/59/8256b3e802e203c8645e0b32b25e6bd94508ad572593f0cdf8234db3879a/inflate64-1.0.4-cp313-cp313-win32.whl", hash = "sha256:332051a9d7e50579b90a3f555d68f53414b06f636c9ffe82e97c0baae3c8fbcc", size = 32958, upload-time = "2025-11-28T10:55:10.343Z" }, + { url = "https://files.pythonhosted.org/packages/e7/4f/5784ee1eb8260f2310e24ef2883f1f494f9332bcfde4ed14ee780372149e/inflate64-1.0.4-cp313-cp313-win_amd64.whl", hash = "sha256:3983f53b590ff7d0ba243f664ce852aca882482f30f7a8eab33e10d769336d0c", size = 35578, upload-time = "2025-11-28T10:55:11.389Z" }, + { url = "https://files.pythonhosted.org/packages/39/e8/8d927770ce25dc9764c8104207a80653d65471d0a6a8f9ead350016e4586/inflate64-1.0.4-cp313-cp313-win_arm64.whl", hash = "sha256:118d8286f085e99a14341c76ef9fbffd56619ccc80318a9a204aea3dbfa71470", size = 33465, upload-time = "2025-11-28T10:55:12.824Z" }, + { url = "https://files.pythonhosted.org/packages/5b/fb/ec9d10f44f2fc7666ad5d70acae2b8a1941e8e08ccae1fad0820f7796be3/inflate64-1.0.4-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:4f61925b2d4248eac2ebb15350a80aaa0d1f7f1dc770bd5ebbbb3b0db4a6a416", size = 58727, upload-time = "2025-11-28T10:55:13.834Z" }, + { url = "https://files.pythonhosted.org/packages/81/80/24ba0d2ee14e07e275e9c5b058e59a8a58f8ef42dd51a78ebbfd7c857ac4/inflate64-1.0.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c1acf18b08b32981a4a11ec5a112b8ad5d7c7a5b15cb5bdbdb5b19201e9aa180", size = 35945, upload-time = "2025-11-28T10:55:15.225Z" }, + { url = "https://files.pythonhosted.org/packages/70/b8/073a79716e093db973b8823bdfb02e10fbdf65642dbe1fa3cda24832aeb2/inflate64-1.0.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:abddae8920b2eaef824254e14b8d4ff54afbe6194a1bbe9816584859f0c1244d", size = 36060, upload-time = "2025-11-28T10:55:16.261Z" }, + { url = "https://files.pythonhosted.org/packages/4c/f0/87d3c317ed0acd94f5e9b3b1b9e9000228ea2af0cb4618c62cbfc816da34/inflate64-1.0.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b303132cc562a906543a56f35c4e164e3880da6ff041cb4a7b1df9f9d2b4bb69", size = 98995, upload-time = "2025-11-28T10:55:17.405Z" }, + { url = "https://files.pythonhosted.org/packages/90/72/0b6035302e9c33f004240a50cb6e2e1fc7bb1f2b415b02d939c551bdd06b/inflate64-1.0.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f0993214dea0738c557fa56c13cd9083aef0097a201d726c21984ad7f577514", size = 100781, upload-time = "2025-11-28T10:55:18.597Z" }, + { url = "https://files.pythonhosted.org/packages/2b/05/5f383c615ec0f01bcbbc699a71da167623e494083ab7ed0df86b4bddf125/inflate64-1.0.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a6baedc3288d7a4ff588951d3a9a97a5391dceed6255ff5b16e42cae7274bfa9", size = 97038, upload-time = "2025-11-28T10:55:20.156Z" }, + { url = "https://files.pythonhosted.org/packages/4e/9a/c1482718c717c49c67490c42b4fdced9476e894eaebd52193e488c12e188/inflate64-1.0.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a846ce1f38845b20bef2625af1b512be83416d97824539524c5a34e7a729aec7", size = 100016, upload-time = "2025-11-28T10:55:21.337Z" }, + { url = "https://files.pythonhosted.org/packages/b8/7f/700ede7474e72a1c0e2e8fe36624cd0225ca8b2875eca33d64aa2de75f4d/inflate64-1.0.4-cp314-cp314-win32.whl", hash = "sha256:eef87908c780439393d577a155868317f0a275b47b417db9f47d8633ec791745", size = 33691, upload-time = "2025-11-28T10:55:22.515Z" }, + { url = "https://files.pythonhosted.org/packages/dd/51/f2972df8cceecc9bf3afa3353d517ffc7125285198c844588e9aaf98f5d0/inflate64-1.0.4-cp314-cp314-win_amd64.whl", hash = "sha256:fb2fdd63ef3933b67af98b3f2ee2f57e7787278041d7ba4821382fedd729b68a", size = 36304, upload-time = "2025-11-28T10:55:24.005Z" }, + { url = "https://files.pythonhosted.org/packages/29/77/16200aced67215119fb30ec9a5889b48289ee2fa5ce5137623a9ad41b2c4/inflate64-1.0.4-cp314-cp314-win_arm64.whl", hash = "sha256:2e129669a0243ac7816fd526946ee01c25688fe81623a6d6bc95b3156d80f4fb", size = 34491, upload-time = "2025-11-28T10:55:25.068Z" }, + { url = "https://files.pythonhosted.org/packages/c0/79/b466ec7666c40912ea81a305a8a2b75f5998e6cec1d3d75e067d76203731/inflate64-1.0.4-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:b17bf665d948dc4edeea0cd17752415d0cd7240c882b9c7e136ad4cc4321e9d4", size = 59300, upload-time = "2025-11-28T10:55:26.185Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ad/16e1168ac80f39894e6cb18b439eec63fec42cbced239aebfe12081b6ec7/inflate64-1.0.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:6751758301936fbb38fa38eb5312e14e27b6a1abf568f83c17557fab2694373d", size = 36258, upload-time = "2025-11-28T10:55:27.295Z" }, + { url = "https://files.pythonhosted.org/packages/25/42/c463b42fd8a7947b4445fbaf57c265bb7f3114362fb7aee6884ffd8b5341/inflate64-1.0.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d6a4136752aa2a544301059d8f13780aeb88c34d60770258436a87dacd3fc304", size = 36296, upload-time = "2025-11-28T10:55:28.632Z" }, + { url = "https://files.pythonhosted.org/packages/39/f1/cf6121926e405020e9e7bccb78ec7781fbc87500ec67368e7d9e866758be/inflate64-1.0.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:938ebc6b28578bfd365d1a9fdb18b7faab08321babeb2198e8025d07d8dc7fb5", size = 106788, upload-time = "2025-11-28T10:55:29.797Z" }, + { url = "https://files.pythonhosted.org/packages/9c/dd/b653f9962497cf4d3520d69272894c37fd76f86a0e04bb3bd9f32827dc2f/inflate64-1.0.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:61f51f80fa6f367288343c1a2cd20a42af454883087064e9274fd2a8c3a5a200", size = 107959, upload-time = "2025-11-28T10:55:31.306Z" }, + { url = "https://files.pythonhosted.org/packages/60/ae/65d88109b63611c9b6c29008201107127cf2603d186ab99beec39d85f38e/inflate64-1.0.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:172b51da7bbfa66b33f0a5405e944807b9949e92cf4cd9f983c07af8152766df", size = 104213, upload-time = "2025-11-28T10:55:32.506Z" }, + { url = "https://files.pythonhosted.org/packages/f9/94/c17de2f55b9fb1269bca4657f9089efe4ba0f3d4b652f07b34dfc69f69a2/inflate64-1.0.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8ca9a2985afd5a14fb48cd126a67e5944ccb7a0a6bdec58c4f796c8c88a84539", size = 106629, upload-time = "2025-11-28T10:55:33.735Z" }, + { url = "https://files.pythonhosted.org/packages/8e/30/8bbc587bb2ad09ab7edf1f9215b2c5faf4fa7ee7c071daefe9ed55e28814/inflate64-1.0.4-cp314-cp314t-win32.whl", hash = "sha256:f8964ceaabea294bc20abc9ef408c6aae978a75c25c83168a76cd87a37c38938", size = 33865, upload-time = "2025-11-28T10:55:35.335Z" }, + { url = "https://files.pythonhosted.org/packages/91/87/8bf6f412f93c8b6dc14866a021b83321331fbdd17f6ab902a24dbf88773d/inflate64-1.0.4-cp314-cp314t-win_amd64.whl", hash = "sha256:7d13b04cba65c12d21e65eaa77da9484e265e8e821b26e0761d1455ad3a878d9", size = 36943, upload-time = "2025-11-28T10:55:36.983Z" }, + { url = "https://files.pythonhosted.org/packages/7d/85/33447bb3c4e3c0ae7b1fde3aadc52a18b2b0193cfcf4f585977e924c6463/inflate64-1.0.4-cp314-cp314t-win_arm64.whl", hash = "sha256:9ae3ee727235a06dc3cd353ee5761fdd8e3b56ad119c711f61680528972a6ced", size = 34846, upload-time = "2025-11-28T10:55:38.433Z" }, +] + +[[package]] +name = "isodate" +version = "0.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705, upload-time = "2024-10-08T23:04:11.5Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload-time = "2024-10-08T23:04:09.501Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "jmespath" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/59/322338183ecda247fb5d1763a6cbe46eff7222eaeebafd9fa65d4bf5cb11/jmespath-1.1.0.tar.gz", hash = "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d", size = 27377, upload-time = "2026-01-22T16:35:26.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl", hash = "sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64", size = 20419, upload-time = "2026-01-22T16:35:24.919Z" }, +] + +[[package]] +name = "joblib" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cloudpickle" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d5/1d/537ab090f302b838943a1b56497dd53059b9a9b46a074936470173a2e207/joblib-1.6.0.tar.gz", hash = "sha256:2ccc96785b12046c08fd6d55839c12857831b54a3c1673ffadd2f04bfc4eda03", size = 327903, upload-time = "2026-08-31T09:39:04.122Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/53/84099323c2ec4be98d935f63c033ac4151ee83836ca1050ede3b3aadf155/joblib-1.6.0-py3-none-any.whl", hash = "sha256:3dbbf9f6e4b592a2357b854608e980fe6390d131d7a82f011a377ef2ebef7aba", size = 306115, upload-time = "2026-08-31T09:39:02.298Z" }, +] + +[[package]] +name = "jsonpickle" +version = "4.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/a6/d07afcfdef402900229bcca795f80506b207af13a838d4d99ad45abf530c/jsonpickle-4.1.1.tar.gz", hash = "sha256:f86e18f13e2b96c1c1eede0b7b90095bbb61d99fedc14813c44dc2f361dbbae1", size = 316885, upload-time = "2025-06-02T20:36:11.57Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/73/04df8a6fa66d43a9fd45c30f283cc4afff17da671886e451d52af60bdc7e/jsonpickle-4.1.1-py3-none-any.whl", hash = "sha256:bb141da6057898aa2438ff268362b126826c812a1721e31cf08a6e142910dc91", size = 47125, upload-time = "2025-06-02T20:36:08.647Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "multivolumefile" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/50/f0/a7786212b5a4cb9ba05ae84a2bbd11d1d0279523aea0424b6d981d652a14/multivolumefile-0.2.3.tar.gz", hash = "sha256:a0648d0aafbc96e59198d5c17e9acad7eb531abea51035d08ce8060dcad709d6", size = 77984, upload-time = "2021-04-29T12:18:39.882Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/31/ec5f46fd4c83185b806aa9c736e228cb780f13990a9cf4da0beb70025fcc/multivolumefile-0.2.3-py3-none-any.whl", hash = "sha256:237f4353b60af1703087cf7725755a1f6fcaeeea48421e1896940cd1c920d678", size = 17037, upload-time = "2021-04-29T12:18:38.886Z" }, +] + +[[package]] +name = "mypy" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "pathspec" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1e/e3/034322d5a779685218ed69286c32faa505247f1f096251ef66c8fd203b08/mypy-1.17.0.tar.gz", hash = "sha256:e5d7ccc08ba089c06e2f5629c660388ef1fee708444f1dee0b9203fa031dee03", size = 3352114, upload-time = "2025-07-14T20:34:30.181Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/24/82efb502b0b0f661c49aa21cfe3e1999ddf64bf5500fc03b5a1536a39d39/mypy-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9d4fe5c72fd262d9c2c91c1117d16aac555e05f5beb2bae6a755274c6eec42be", size = 10914150, upload-time = "2025-07-14T20:31:51.985Z" }, + { url = "https://files.pythonhosted.org/packages/03/96/8ef9a6ff8cedadff4400e2254689ca1dc4b420b92c55255b44573de10c54/mypy-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d96b196e5c16f41b4f7736840e8455958e832871990c7ba26bf58175e357ed61", size = 10039845, upload-time = "2025-07-14T20:32:30.527Z" }, + { url = "https://files.pythonhosted.org/packages/df/32/7ce359a56be779d38021d07941cfbb099b41411d72d827230a36203dbb81/mypy-1.17.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:73a0ff2dd10337ceb521c080d4147755ee302dcde6e1a913babd59473904615f", size = 11837246, upload-time = "2025-07-14T20:32:01.28Z" }, + { url = "https://files.pythonhosted.org/packages/82/16/b775047054de4d8dbd668df9137707e54b07fe18c7923839cd1e524bf756/mypy-1.17.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24cfcc1179c4447854e9e406d3af0f77736d631ec87d31c6281ecd5025df625d", size = 12571106, upload-time = "2025-07-14T20:34:26.942Z" }, + { url = "https://files.pythonhosted.org/packages/a1/cf/fa33eaf29a606102c8d9ffa45a386a04c2203d9ad18bf4eef3e20c43ebc8/mypy-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3c56f180ff6430e6373db7a1d569317675b0a451caf5fef6ce4ab365f5f2f6c3", size = 12759960, upload-time = "2025-07-14T20:33:42.882Z" }, + { url = "https://files.pythonhosted.org/packages/94/75/3f5a29209f27e739ca57e6350bc6b783a38c7621bdf9cac3ab8a08665801/mypy-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:eafaf8b9252734400f9b77df98b4eee3d2eecab16104680d51341c75702cad70", size = 9503888, upload-time = "2025-07-14T20:32:34.392Z" }, + { url = "https://files.pythonhosted.org/packages/12/e9/e6824ed620bbf51d3bf4d6cbbe4953e83eaf31a448d1b3cfb3620ccb641c/mypy-1.17.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f986f1cab8dbec39ba6e0eaa42d4d3ac6686516a5d3dccd64be095db05ebc6bb", size = 11086395, upload-time = "2025-07-14T20:34:11.452Z" }, + { url = "https://files.pythonhosted.org/packages/ba/51/a4afd1ae279707953be175d303f04a5a7bd7e28dc62463ad29c1c857927e/mypy-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:51e455a54d199dd6e931cd7ea987d061c2afbaf0960f7f66deef47c90d1b304d", size = 10120052, upload-time = "2025-07-14T20:33:09.897Z" }, + { url = "https://files.pythonhosted.org/packages/8a/71/19adfeac926ba8205f1d1466d0d360d07b46486bf64360c54cb5a2bd86a8/mypy-1.17.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3204d773bab5ff4ebbd1f8efa11b498027cd57017c003ae970f310e5b96be8d8", size = 11861806, upload-time = "2025-07-14T20:32:16.028Z" }, + { url = "https://files.pythonhosted.org/packages/0b/64/d6120eca3835baf7179e6797a0b61d6c47e0bc2324b1f6819d8428d5b9ba/mypy-1.17.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1051df7ec0886fa246a530ae917c473491e9a0ba6938cfd0ec2abc1076495c3e", size = 12744371, upload-time = "2025-07-14T20:33:33.503Z" }, + { url = "https://files.pythonhosted.org/packages/1f/dc/56f53b5255a166f5bd0f137eed960e5065f2744509dfe69474ff0ba772a5/mypy-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f773c6d14dcc108a5b141b4456b0871df638eb411a89cd1c0c001fc4a9d08fc8", size = 12914558, upload-time = "2025-07-14T20:33:56.961Z" }, + { url = "https://files.pythonhosted.org/packages/69/ac/070bad311171badc9add2910e7f89271695a25c136de24bbafc7eded56d5/mypy-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:1619a485fd0e9c959b943c7b519ed26b712de3002d7de43154a489a2d0fd817d", size = 9585447, upload-time = "2025-07-14T20:32:20.594Z" }, + { url = "https://files.pythonhosted.org/packages/be/7b/5f8ab461369b9e62157072156935cec9d272196556bdc7c2ff5f4c7c0f9b/mypy-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c41aa59211e49d717d92b3bb1238c06d387c9325d3122085113c79118bebb06", size = 11070019, upload-time = "2025-07-14T20:32:07.99Z" }, + { url = "https://files.pythonhosted.org/packages/9c/f8/c49c9e5a2ac0badcc54beb24e774d2499748302c9568f7f09e8730e953fa/mypy-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0e69db1fb65b3114f98c753e3930a00514f5b68794ba80590eb02090d54a5d4a", size = 10114457, upload-time = "2025-07-14T20:33:47.285Z" }, + { url = "https://files.pythonhosted.org/packages/89/0c/fb3f9c939ad9beed3e328008b3fb90b20fda2cddc0f7e4c20dbefefc3b33/mypy-1.17.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:03ba330b76710f83d6ac500053f7727270b6b8553b0423348ffb3af6f2f7b889", size = 11857838, upload-time = "2025-07-14T20:33:14.462Z" }, + { url = "https://files.pythonhosted.org/packages/4c/66/85607ab5137d65e4f54d9797b77d5a038ef34f714929cf8ad30b03f628df/mypy-1.17.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:037bc0f0b124ce46bfde955c647f3e395c6174476a968c0f22c95a8d2f589bba", size = 12731358, upload-time = "2025-07-14T20:32:25.579Z" }, + { url = "https://files.pythonhosted.org/packages/73/d0/341dbbfb35ce53d01f8f2969facbb66486cee9804048bf6c01b048127501/mypy-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c38876106cb6132259683632b287238858bd58de267d80defb6f418e9ee50658", size = 12917480, upload-time = "2025-07-14T20:34:21.868Z" }, + { url = "https://files.pythonhosted.org/packages/64/63/70c8b7dbfc520089ac48d01367a97e8acd734f65bd07813081f508a8c94c/mypy-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:d30ba01c0f151998f367506fab31c2ac4527e6a7b2690107c7a7f9e3cb419a9c", size = 9589666, upload-time = "2025-07-14T20:34:16.841Z" }, + { url = "https://files.pythonhosted.org/packages/e3/fc/ee058cc4316f219078464555873e99d170bde1d9569abd833300dbeb484a/mypy-1.17.0-py3-none-any.whl", hash = "sha256:15d9d0018237ab058e5de3d8fce61b6fa72cc59cc78fd91f1b474bce12abf496", size = 2283195, upload-time = "2025-07-14T20:31:54.753Z" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "mysql-connector-python" +version = "26.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/ce/a53b169388f8c6a595cfa9a653138381f3afef1d2af60f5c1972d015f52f/mysql_connector_python-26.7.0.tar.gz", hash = "sha256:d8ff5ee236ea46661ee639336323e124ed868e37f3ea991bdc5de5a146f39fd5", size = 12256009, upload-time = "2026-07-29T10:24:13.314Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/3c/97a247c74b937f3087fd63f487a162b18dd8a28aabb4acf8e8f3ea2e9668/mysql_connector_python-26.7.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:27c9808be25cd6f0b173f3894407635764db01db039b8904f9b566f7d1795bcc", size = 20275920, upload-time = "2026-07-29T10:18:00.546Z" }, + { url = "https://files.pythonhosted.org/packages/52/fe/f55d4af14d733dde6af69e04313e18befa0a17992e2fac4741d77f17fa33/mysql_connector_python-26.7.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:638be8882de1ab4dd982a9db56afaa9e357468c7c5be9e20bd5e972ed4d68db2", size = 19837939, upload-time = "2026-07-29T10:18:02.979Z" }, + { url = "https://files.pythonhosted.org/packages/a3/6e/4e68293b76949d4b02aa5c708983a6e623a8a22470cda68a9ab7456d25a8/mysql_connector_python-26.7.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:55565516053e46a7a49cdd3a61f6fe3e5651747522597f5500de3e0655fd70d6", size = 21953561, upload-time = "2026-07-29T10:18:05.367Z" }, + { url = "https://files.pythonhosted.org/packages/0b/55/0a946351d7c9c0fbe018aef5c3d36818cc28ef1a8ee964354582743f31d1/mysql_connector_python-26.7.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:9fee7cfbdaa8ed295e05b0c66778760cdc8705b1edbbd1963da87a04c22fb6b1", size = 21744356, upload-time = "2026-07-29T10:18:07.797Z" }, + { url = "https://files.pythonhosted.org/packages/00/88/7060928e0b9743d5e49133be158c05399817e04f2eebdf23d562d2d805e7/mysql_connector_python-26.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:2fd56a86f316e676c4cafa16fe6149a08d8dd4f071f8b4aa298f5968b6eb1cbf", size = 17681665, upload-time = "2026-07-29T10:18:10.029Z" }, + { url = "https://files.pythonhosted.org/packages/e3/24/8c3516ee9edc3d740059253410bcb30a0dd7686bfd876eb905af6b92b4e6/mysql_connector_python-26.7.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9b63672cc381f097966faecd6940beb2a91f9efdf674a5807dc45f4efdb42e62", size = 20279974, upload-time = "2026-07-29T10:18:12.334Z" }, + { url = "https://files.pythonhosted.org/packages/ad/9c/d2f705d2caaf2c91d05bdea0d67dde7cc243a62245ee91fba4e201e24ea1/mysql_connector_python-26.7.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:375f9a042398e515a670003f26ab07e9b2ecaecba6eaf678f66fb5c2d36bd305", size = 19840279, upload-time = "2026-07-29T10:18:15.057Z" }, + { url = "https://files.pythonhosted.org/packages/4f/1c/73b9f540fbbcf78949e00d673db576f61ab93e7824e31dfb568295e58f2c/mysql_connector_python-26.7.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:227063e73c3d7b0326bc6ce9af47b8aa081e53a4e97e8683bba658569cb57271", size = 21954262, upload-time = "2026-07-29T10:18:18.148Z" }, + { url = "https://files.pythonhosted.org/packages/2d/0c/7dc1c1367a6a7881f20b0ed8bf92133d4710ea0dce22657972f56bf2a365/mysql_connector_python-26.7.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e118030bdd6a9882f5aa80a0c0c88d684d0e82d78747e5baf3c3e54a5a2d1348", size = 21746245, upload-time = "2026-07-29T10:18:20.65Z" }, + { url = "https://files.pythonhosted.org/packages/59/d1/1988f561be35527ab8a8906d97f52b60160ef50578cbe13096c66ef9d41a/mysql_connector_python-26.7.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:2be2f5b8ffc66bac305afee970256e74b2bc1d072cd0d21a277af3c9ff5fcb1d", size = 20280143, upload-time = "2026-07-29T10:18:22.998Z" }, + { url = "https://files.pythonhosted.org/packages/2e/78/d13a243bcc7299dfc74265f4896a1bf3c09d230b81f505c9da99593a4246/mysql_connector_python-26.7.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6e2d06c653c7f18ae91c5899e62210565660c871941769b1725c8dfa98da66b8", size = 19840273, upload-time = "2026-07-29T10:18:25.85Z" }, + { url = "https://files.pythonhosted.org/packages/40/cc/93c38d25b0c1b0b784b7cf7a94699b5d6379ce315329f9e789e827cd50d0/mysql_connector_python-26.7.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9f8fde7f909891bc5093f63e3b78a8f80b637591d8f77591a758cf78541325b8", size = 21954459, upload-time = "2026-07-29T10:18:28.76Z" }, + { url = "https://files.pythonhosted.org/packages/33/5a/ffc4663fb061f612b6efe2afc3b1c94cec4de86af8b4736935010c159263/mysql_connector_python-26.7.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ec8fe2f5af701d3146a6e31ef2fce293f2418c148a99df7c9917f87cfcdaea93", size = 21746465, upload-time = "2026-07-29T10:18:31.331Z" }, + { url = "https://files.pythonhosted.org/packages/78/68/1ee48a7c2c1104e6fe6cf8a98d6fbdba547d72331a3d1352fe2443e3cf95/mysql_connector_python-26.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:fd10764bd6dadb0ad44475126a87d184dac519712874459ab5f3976c23314f22", size = 17682618, upload-time = "2026-07-29T10:18:33.684Z" }, + { url = "https://files.pythonhosted.org/packages/eb/46/a2383cebea1cf22e07a0bc7b6e5035baac04de18415df188d257b68abab2/mysql_connector_python-26.7.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:c02cc3d5e4763ddc960fce521bd353b242cfec4c6a936234916f2597bfd656cd", size = 20280169, upload-time = "2026-07-29T10:18:38.298Z" }, + { url = "https://files.pythonhosted.org/packages/62/4b/200023b5628ac075c1182c62999195dc096aeaf24787f0697f0830a886c4/mysql_connector_python-26.7.0-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:32f63bbf069b242921c13de05e56857625e167d64fc7fa4f15e05478d78c56fe", size = 19840283, upload-time = "2026-07-29T10:18:40.451Z" }, + { url = "https://files.pythonhosted.org/packages/74/7c/e57f2dada0a371c37715b2e402bf7b403718a265aa8afd341c91a7674d97/mysql_connector_python-26.7.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:a86c988f033d3e116c5d326931aabae340ebef0425399bcd5f076af877ae0fbc", size = 21956488, upload-time = "2026-07-29T10:18:42.91Z" }, + { url = "https://files.pythonhosted.org/packages/02/be/c57e60d49e481cd8a7e5ab0ed874bf18dc90f32aed6d3953213ddbb7d86a/mysql_connector_python-26.7.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:76cffea9fc0cd9d4d5c79935a18342d9680f2c0dc0d5675b966b3df06229f238", size = 21747047, upload-time = "2026-07-29T10:18:45.719Z" }, + { url = "https://files.pythonhosted.org/packages/34/a6/946645e3c7e8feb159c97b2e8f612075e4ec08c0fb7d26d310d7e1b0e22c/mysql_connector_python-26.7.0-cp314-cp314-win_amd64.whl", hash = "sha256:a4eac2b4bcbf18fbaab736b5c3996425728472fea7b3d71a8c7056aa6349471f", size = 18207344, upload-time = "2026-07-29T10:18:47.926Z" }, + { url = "https://files.pythonhosted.org/packages/ff/01/07efeb3e3fc730f945af40ddf1f4c879c13945b193a94eba8e642c0d4176/mysql_connector_python-26.7.0-py2.py3-none-any.whl", hash = "sha256:43ee453b53556f690e4f4b795d3f17a1c6d4b45f729657bb0d999c8dfc9261d5", size = 480733, upload-time = "2026-07-29T10:18:49.777Z" }, +] + +[[package]] +name = "narwhals" +version = "2.25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/7b/6248dada39781db1ab3ebf08943080df0796098515a87f6f8696d14ec744/narwhals-2.25.0.tar.gz", hash = "sha256:62c036c810662bf7820b7737077176313bc59350eeeefb808510f388c743e4b2", size = 677076, upload-time = "2026-08-20T18:10:15.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/dc/55481808fd70ef1567cf13540ffd4702af3f74b112e35427564b03f79c2d/narwhals-2.25.0-py3-none-any.whl", hash = "sha256:1f0f403e8c7e4463cde9bfe78b12fdd809e3ae3dda6d9b2f802934fb9c7a6a8f", size = 467373, upload-time = "2026-08-20T18:10:13.834Z" }, +] + +[[package]] +name = "neo4j" +version = "5.28.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/69/4862fabc082f2447131aada5c91736155349d77ebf443af7f59553b7b789/neo4j-5.28.2.tar.gz", hash = "sha256:7d38e27e4f987a45cc9052500c6ee27325cb23dae6509037fe31dd7ddaed70c7", size = 231874, upload-time = "2025-07-30T06:04:34.669Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/00/1f74089c06aec1fac9390e2300a6a6b2381e0dac281783d64ccca9d681fd/neo4j-5.28.2-py3-none-any.whl", hash = "sha256:5c53b5c3eee6dee7e920c9724391aa38d7135a651e71b766da00533b92a91a94", size = 313156, upload-time = "2025-07-30T06:04:31.438Z" }, +] + +[[package]] +name = "nipyapi" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "packaging" }, + { name = "pysocks" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "setuptools" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/d5/52987d555a9dbf682cf1f8ec9d9f893da3b3c325a9ff0a293762ac70b9fd/nipyapi-1.7.0.tar.gz", hash = "sha256:bf8d692ccbecb3c5e2c8096a9b6e315e5648a889e33cec8ffa8d7389d88a0a64", size = 839473, upload-time = "2026-07-20T13:04:34.422Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/60/93adedac373a18760a0fcc5943acf109840c92f87879df70f11ae7c7ae66/nipyapi-1.7.0-py2.py3-none-any.whl", hash = "sha256:158b69aad46bf6eaff4ad45985a5c76b8a6fa34140f072730c862af6ff81e879", size = 1268648, upload-time = "2026-07-20T13:04:32.711Z" }, +] + +[[package]] +name = "nltk" +version = "3.10.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "defusedxml" }, + { name = "joblib" }, + { name = "regex" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e0/e6/fe51d2bb1a3b446f59c5c8165999a9fee208bc346af90a7cbf7657bc0d75/nltk-3.10.3.tar.gz", hash = "sha256:bb9327a461c3811c2fa4900e03840401f2126adfb30c0072827c433bd2444ea4", size = 5137152, upload-time = "2026-08-12T23:46:37.258Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/6d/ebd2af4640b12168fdf0cb74b6118df2f32a2f62ec7e0c06fbfd80706639/nltk-3.10.3-py3-none-any.whl", hash = "sha256:ff9598a8e20518ee0d557745890cc4435b9578489e2dcbc69c4f81fa060caf7c", size = 1798643, upload-time = "2026-08-12T23:44:13.478Z" }, +] + +[[package]] +name = "numpy" +version = "2.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/fd/0005efbd0af48e55eb3c7208af93f2862d4b1a56cd78e84309a2d959208d/numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae", size = 20723651, upload-time = "2026-01-31T23:13:10.135Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/44/71852273146957899753e69986246d6a176061ea183407e95418c2aa4d9a/numpy-2.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7e88598032542bd49af7c4747541422884219056c268823ef6e5e89851c8825", size = 16955478, upload-time = "2026-01-31T23:10:25.623Z" }, + { url = "https://files.pythonhosted.org/packages/74/41/5d17d4058bd0cd96bcbd4d9ff0fb2e21f52702aab9a72e4a594efa18692f/numpy-2.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7edc794af8b36ca37ef5fcb5e0d128c7e0595c7b96a2318d1badb6fcd8ee86b1", size = 14965467, upload-time = "2026-01-31T23:10:28.186Z" }, + { url = "https://files.pythonhosted.org/packages/49/48/fb1ce8136c19452ed15f033f8aee91d5defe515094e330ce368a0647846f/numpy-2.4.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:6e9f61981ace1360e42737e2bae58b27bf28a1b27e781721047d84bd754d32e7", size = 5475172, upload-time = "2026-01-31T23:10:30.848Z" }, + { url = "https://files.pythonhosted.org/packages/40/a9/3feb49f17bbd1300dd2570432961f5c8a4ffeff1db6f02c7273bd020a4c9/numpy-2.4.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:cb7bbb88aa74908950d979eeaa24dbdf1a865e3c7e45ff0121d8f70387b55f73", size = 6805145, upload-time = "2026-01-31T23:10:32.352Z" }, + { url = "https://files.pythonhosted.org/packages/3f/39/fdf35cbd6d6e2fcad42fcf85ac04a85a0d0fbfbf34b30721c98d602fd70a/numpy-2.4.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f069069931240b3fc703f1e23df63443dbd6390614c8c44a87d96cd0ec81eb1", size = 15966084, upload-time = "2026-01-31T23:10:34.502Z" }, + { url = "https://files.pythonhosted.org/packages/1b/46/6fa4ea94f1ddf969b2ee941290cca6f1bfac92b53c76ae5f44afe17ceb69/numpy-2.4.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c02ef4401a506fb60b411467ad501e1429a3487abca4664871d9ae0b46c8ba32", size = 16899477, upload-time = "2026-01-31T23:10:37.075Z" }, + { url = "https://files.pythonhosted.org/packages/09/a1/2a424e162b1a14a5bd860a464ab4e07513916a64ab1683fae262f735ccd2/numpy-2.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2653de5c24910e49c2b106499803124dde62a5a1fe0eedeaecf4309a5f639390", size = 17323429, upload-time = "2026-01-31T23:10:39.704Z" }, + { url = "https://files.pythonhosted.org/packages/ce/a2/73014149ff250628df72c58204822ac01d768697913881aacf839ff78680/numpy-2.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1ae241bbfc6ae276f94a170b14785e561cb5e7f626b6688cf076af4110887413", size = 18635109, upload-time = "2026-01-31T23:10:41.924Z" }, + { url = "https://files.pythonhosted.org/packages/6c/0c/73e8be2f1accd56df74abc1c5e18527822067dced5ec0861b5bb882c2ce0/numpy-2.4.2-cp311-cp311-win32.whl", hash = "sha256:df1b10187212b198dd45fa943d8985a3c8cf854aed4923796e0e019e113a1bda", size = 6237915, upload-time = "2026-01-31T23:10:45.26Z" }, + { url = "https://files.pythonhosted.org/packages/76/ae/e0265e0163cf127c24c3969d29f1c4c64551a1e375d95a13d32eab25d364/numpy-2.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:b9c618d56a29c9cb1c4da979e9899be7578d2e0b3c24d52079c166324c9e8695", size = 12607972, upload-time = "2026-01-31T23:10:47.021Z" }, + { url = "https://files.pythonhosted.org/packages/29/a5/c43029af9b8014d6ea157f192652c50042e8911f4300f8f6ed3336bf437f/numpy-2.4.2-cp311-cp311-win_arm64.whl", hash = "sha256:47c5a6ed21d9452b10227e5e8a0e1c22979811cad7dcc19d8e3e2fb8fa03f1a3", size = 10485763, upload-time = "2026-01-31T23:10:50.087Z" }, + { url = "https://files.pythonhosted.org/packages/51/6e/6f394c9c77668153e14d4da83bcc247beb5952f6ead7699a1a2992613bea/numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a", size = 16667963, upload-time = "2026-01-31T23:10:52.147Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f8/55483431f2b2fd015ae6ed4fe62288823ce908437ed49db5a03d15151678/numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1", size = 14693571, upload-time = "2026-01-31T23:10:54.789Z" }, + { url = "https://files.pythonhosted.org/packages/2f/20/18026832b1845cdc82248208dd929ca14c9d8f2bac391f67440707fff27c/numpy-2.4.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b3a24467af63c67829bfaa61eecf18d5432d4f11992688537be59ecd6ad32f5e", size = 5203469, upload-time = "2026-01-31T23:10:57.343Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/2eb97c8a77daaba34eaa3fa7241a14ac5f51c46a6bd5911361b644c4a1e2/numpy-2.4.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:805cc8de9fd6e7a22da5aed858e0ab16be5a4db6c873dde1d7451c541553aa27", size = 6550820, upload-time = "2026-01-31T23:10:59.429Z" }, + { url = "https://files.pythonhosted.org/packages/b1/91/b97fdfd12dc75b02c44e26c6638241cc004d4079a0321a69c62f51470c4c/numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548", size = 15663067, upload-time = "2026-01-31T23:11:01.291Z" }, + { url = "https://files.pythonhosted.org/packages/f5/c6/a18e59f3f0b8071cc85cbc8d80cd02d68aa9710170b2553a117203d46936/numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f", size = 16619782, upload-time = "2026-01-31T23:11:03.669Z" }, + { url = "https://files.pythonhosted.org/packages/b7/83/9751502164601a79e18847309f5ceec0b1446d7b6aa12305759b72cf98b2/numpy-2.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adb6ed2ad29b9e15321d167d152ee909ec73395901b70936f029c3bc6d7f4460", size = 17013128, upload-time = "2026-01-31T23:11:05.913Z" }, + { url = "https://files.pythonhosted.org/packages/61/c4/c4066322256ec740acc1c8923a10047818691d2f8aec254798f3dd90f5f2/numpy-2.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8906e71fd8afcb76580404e2a950caef2685df3d2a57fe82a86ac8d33cc007ba", size = 18345324, upload-time = "2026-01-31T23:11:08.248Z" }, + { url = "https://files.pythonhosted.org/packages/ab/af/6157aa6da728fa4525a755bfad486ae7e3f76d4c1864138003eb84328497/numpy-2.4.2-cp312-cp312-win32.whl", hash = "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f", size = 5960282, upload-time = "2026-01-31T23:11:10.497Z" }, + { url = "https://files.pythonhosted.org/packages/92/0f/7ceaaeaacb40567071e94dbf2c9480c0ae453d5bb4f52bea3892c39dc83c/numpy-2.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85", size = 12314210, upload-time = "2026-01-31T23:11:12.176Z" }, + { url = "https://files.pythonhosted.org/packages/2f/a3/56c5c604fae6dd40fa2ed3040d005fca97e91bd320d232ac9931d77ba13c/numpy-2.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa", size = 10220171, upload-time = "2026-01-31T23:11:14.684Z" }, + { url = "https://files.pythonhosted.org/packages/a1/22/815b9fe25d1d7ae7d492152adbc7226d3eff731dffc38fe970589fcaaa38/numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c", size = 16663696, upload-time = "2026-01-31T23:11:17.516Z" }, + { url = "https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bd3a7a9f5847d2fb8c2c6d1c862fa109c31a9abeca1a3c2bd5a64572955b2979", size = 14688322, upload-time = "2026-01-31T23:11:19.883Z" }, + { url = "https://files.pythonhosted.org/packages/da/b4/f805ab79293c728b9a99438775ce51885fd4f31b76178767cfc718701a39/numpy-2.4.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98", size = 5198157, upload-time = "2026-01-31T23:11:22.375Z" }, + { url = "https://files.pythonhosted.org/packages/74/09/826e4289844eccdcd64aac27d13b0fd3f32039915dd5b9ba01baae1f436c/numpy-2.4.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef", size = 6546330, upload-time = "2026-01-31T23:11:23.958Z" }, + { url = "https://files.pythonhosted.org/packages/19/fb/cbfdbfa3057a10aea5422c558ac57538e6acc87ec1669e666d32ac198da7/numpy-2.4.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3cd545784805de05aafe1dde61752ea49a359ccba9760c1e5d1c88a93bbf2b7", size = 15660968, upload-time = "2026-01-31T23:11:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499", size = 16607311, upload-time = "2026-01-31T23:11:28.117Z" }, + { url = "https://files.pythonhosted.org/packages/14/d9/4b5adfc39a43fa6bf918c6d544bc60c05236cc2f6339847fc5b35e6cb5b0/numpy-2.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f74f0f7779cc7ae07d1810aab8ac6b1464c3eafb9e283a40da7309d5e6e48fbb", size = 17012850, upload-time = "2026-01-31T23:11:30.888Z" }, + { url = "https://files.pythonhosted.org/packages/b7/20/adb6e6adde6d0130046e6fdfb7675cc62bc2f6b7b02239a09eb58435753d/numpy-2.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7ac672d699bf36275c035e16b65539931347d68b70667d28984c9fb34e07fa7", size = 18334210, upload-time = "2026-01-31T23:11:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/78/0e/0a73b3dff26803a8c02baa76398015ea2a5434d9b8265a7898a6028c1591/numpy-2.4.2-cp313-cp313-win32.whl", hash = "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110", size = 5958199, upload-time = "2026-01-31T23:11:35.385Z" }, + { url = "https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622", size = 12310848, upload-time = "2026-01-31T23:11:38.001Z" }, + { url = "https://files.pythonhosted.org/packages/6e/8d/6da186483e308da5da1cc6918ce913dcfe14ffde98e710bfeff2a6158d4e/numpy-2.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71", size = 10221082, upload-time = "2026-01-31T23:11:40.392Z" }, + { url = "https://files.pythonhosted.org/packages/25/a1/9510aa43555b44781968935c7548a8926274f815de42ad3997e9e83680dd/numpy-2.4.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5633c0da313330fd20c484c78cdd3f9b175b55e1a766c4a174230c6b70ad8262", size = 14815866, upload-time = "2026-01-31T23:11:42.495Z" }, + { url = "https://files.pythonhosted.org/packages/36/30/6bbb5e76631a5ae46e7923dd16ca9d3f1c93cfa8d4ed79a129814a9d8db3/numpy-2.4.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d9f64d786b3b1dd742c946c42d15b07497ed14af1a1f3ce840cce27daa0ce913", size = 5325631, upload-time = "2026-01-31T23:11:44.7Z" }, + { url = "https://files.pythonhosted.org/packages/46/00/3a490938800c1923b567b3a15cd17896e68052e2145d8662aaf3e1ffc58f/numpy-2.4.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:b21041e8cb6a1eb5312dd1d2f80a94d91efffb7a06b70597d44f1bd2dfc315ab", size = 6646254, upload-time = "2026-01-31T23:11:46.341Z" }, + { url = "https://files.pythonhosted.org/packages/d3/e9/fac0890149898a9b609caa5af7455a948b544746e4b8fe7c212c8edd71f8/numpy-2.4.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00ab83c56211a1d7c07c25e3217ea6695e50a3e2f255053686b081dc0b091a82", size = 15720138, upload-time = "2026-01-31T23:11:48.082Z" }, + { url = "https://files.pythonhosted.org/packages/ea/5c/08887c54e68e1e28df53709f1893ce92932cc6f01f7c3d4dc952f61ffd4e/numpy-2.4.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fb882da679409066b4603579619341c6d6898fc83a8995199d5249f986e8e8f", size = 16655398, upload-time = "2026-01-31T23:11:50.293Z" }, + { url = "https://files.pythonhosted.org/packages/4d/89/253db0fa0e66e9129c745e4ef25631dc37d5f1314dad2b53e907b8538e6d/numpy-2.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66cb9422236317f9d44b67b4d18f44efe6e9c7f8794ac0462978513359461554", size = 17079064, upload-time = "2026-01-31T23:11:52.927Z" }, + { url = "https://files.pythonhosted.org/packages/2a/d5/cbade46ce97c59c6c3da525e8d95b7abe8a42974a1dc5c1d489c10433e88/numpy-2.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0f01dcf33e73d80bd8dc0f20a71303abbafa26a19e23f6b68d1aa9990af90257", size = 18379680, upload-time = "2026-01-31T23:11:55.22Z" }, + { url = "https://files.pythonhosted.org/packages/40/62/48f99ae172a4b63d981babe683685030e8a3df4f246c893ea5c6ef99f018/numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657", size = 6082433, upload-time = "2026-01-31T23:11:58.096Z" }, + { url = "https://files.pythonhosted.org/packages/07/38/e054a61cfe48ad9f1ed0d188e78b7e26859d0b60ef21cd9de4897cdb5326/numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b", size = 12451181, upload-time = "2026-01-31T23:11:59.782Z" }, + { url = "https://files.pythonhosted.org/packages/6e/a4/a05c3a6418575e185dd84d0b9680b6bb2e2dc3e4202f036b7b4e22d6e9dc/numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1", size = 10290756, upload-time = "2026-01-31T23:12:02.438Z" }, + { url = "https://files.pythonhosted.org/packages/18/88/b7df6050bf18fdcfb7046286c6535cabbdd2064a3440fca3f069d319c16e/numpy-2.4.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:444be170853f1f9d528428eceb55f12918e4fda5d8805480f36a002f1415e09b", size = 16663092, upload-time = "2026-01-31T23:12:04.521Z" }, + { url = "https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000", size = 14698770, upload-time = "2026-01-31T23:12:06.96Z" }, + { url = "https://files.pythonhosted.org/packages/fb/0b/f9e49ba6c923678ad5bc38181c08ac5e53b7a5754dbca8e581aa1a56b1ff/numpy-2.4.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:7cdde6de52fb6664b00b056341265441192d1291c130e99183ec0d4b110ff8b1", size = 5208562, upload-time = "2026-01-31T23:12:09.632Z" }, + { url = "https://files.pythonhosted.org/packages/7d/12/d7de8f6f53f9bb76997e5e4c069eda2051e3fe134e9181671c4391677bb2/numpy-2.4.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:cda077c2e5b780200b6b3e09d0b42205a3d1c68f30c6dceb90401c13bff8fe74", size = 6543710, upload-time = "2026-01-31T23:12:11.969Z" }, + { url = "https://files.pythonhosted.org/packages/09/63/c66418c2e0268a31a4cf8a8b512685748200f8e8e8ec6c507ce14e773529/numpy-2.4.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30291931c915b2ab5717c2974bb95ee891a1cf22ebc16a8006bd59cd210d40a", size = 15677205, upload-time = "2026-01-31T23:12:14.33Z" }, + { url = "https://files.pythonhosted.org/packages/5d/6c/7f237821c9642fb2a04d2f1e88b4295677144ca93285fd76eff3bcba858d/numpy-2.4.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bba37bc29d4d85761deed3954a1bc62be7cf462b9510b51d367b769a8c8df325", size = 16611738, upload-time = "2026-01-31T23:12:16.525Z" }, + { url = "https://files.pythonhosted.org/packages/c2/a7/39c4cdda9f019b609b5c473899d87abff092fc908cfe4d1ecb2fcff453b0/numpy-2.4.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b2f0073ed0868db1dcd86e052d37279eef185b9c8db5bf61f30f46adac63c909", size = 17028888, upload-time = "2026-01-31T23:12:19.306Z" }, + { url = "https://files.pythonhosted.org/packages/da/b3/e84bb64bdfea967cc10950d71090ec2d84b49bc691df0025dddb7c26e8e3/numpy-2.4.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f54844851cdb630ceb623dcec4db3240d1ac13d4990532446761baede94996a", size = 18339556, upload-time = "2026-01-31T23:12:21.816Z" }, + { url = "https://files.pythonhosted.org/packages/88/f5/954a291bc1192a27081706862ac62bb5920fbecfbaa302f64682aa90beed/numpy-2.4.2-cp314-cp314-win32.whl", hash = "sha256:12e26134a0331d8dbd9351620f037ec470b7c75929cb8a1537f6bfe411152a1a", size = 6006899, upload-time = "2026-01-31T23:12:24.14Z" }, + { url = "https://files.pythonhosted.org/packages/05/cb/eff72a91b2efdd1bc98b3b8759f6a1654aa87612fc86e3d87d6fe4f948c4/numpy-2.4.2-cp314-cp314-win_amd64.whl", hash = "sha256:068cdb2d0d644cdb45670810894f6a0600797a69c05f1ac478e8d31670b8ee75", size = 12443072, upload-time = "2026-01-31T23:12:26.33Z" }, + { url = "https://files.pythonhosted.org/packages/37/75/62726948db36a56428fce4ba80a115716dc4fad6a3a4352487f8bb950966/numpy-2.4.2-cp314-cp314-win_arm64.whl", hash = "sha256:6ed0be1ee58eef41231a5c943d7d1375f093142702d5723ca2eb07db9b934b05", size = 10494886, upload-time = "2026-01-31T23:12:28.488Z" }, + { url = "https://files.pythonhosted.org/packages/36/2f/ee93744f1e0661dc267e4b21940870cabfae187c092e1433b77b09b50ac4/numpy-2.4.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:98f16a80e917003a12c0580f97b5f875853ebc33e2eaa4bccfc8201ac6869308", size = 14818567, upload-time = "2026-01-31T23:12:30.709Z" }, + { url = "https://files.pythonhosted.org/packages/a7/24/6535212add7d76ff938d8bdc654f53f88d35cddedf807a599e180dcb8e66/numpy-2.4.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:20abd069b9cda45874498b245c8015b18ace6de8546bf50dfa8cea1696ed06ef", size = 5328372, upload-time = "2026-01-31T23:12:32.962Z" }, + { url = "https://files.pythonhosted.org/packages/5e/9d/c48f0a035725f925634bf6b8994253b43f2047f6778a54147d7e213bc5a7/numpy-2.4.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:e98c97502435b53741540a5717a6749ac2ada901056c7db951d33e11c885cc7d", size = 6649306, upload-time = "2026-01-31T23:12:34.797Z" }, + { url = "https://files.pythonhosted.org/packages/81/05/7c73a9574cd4a53a25907bad38b59ac83919c0ddc8234ec157f344d57d9a/numpy-2.4.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6cad4e82cb893db4b69105c604d805e0c3ce11501a55b5e9f9083b47d2ffe8", size = 15722394, upload-time = "2026-01-31T23:12:36.565Z" }, + { url = "https://files.pythonhosted.org/packages/35/fa/4de10089f21fc7d18442c4a767ab156b25c2a6eaf187c0db6d9ecdaeb43f/numpy-2.4.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e4424677ce4b47fe73c8b5556d876571f7c6945d264201180db2dc34f676ab5", size = 16653343, upload-time = "2026-01-31T23:12:39.188Z" }, + { url = "https://files.pythonhosted.org/packages/b8/f9/d33e4ffc857f3763a57aa85650f2e82486832d7492280ac21ba9efda80da/numpy-2.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2b8f157c8a6f20eb657e240f8985cc135598b2b46985c5bccbde7616dc9c6b1e", size = 17078045, upload-time = "2026-01-31T23:12:42.041Z" }, + { url = "https://files.pythonhosted.org/packages/c8/b8/54bdb43b6225badbea6389fa038c4ef868c44f5890f95dd530a218706da3/numpy-2.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5daf6f3914a733336dab21a05cdec343144600e964d2fcdabaac0c0269874b2a", size = 18380024, upload-time = "2026-01-31T23:12:44.331Z" }, + { url = "https://files.pythonhosted.org/packages/a5/55/6e1a61ded7af8df04016d81b5b02daa59f2ea9252ee0397cb9f631efe9e5/numpy-2.4.2-cp314-cp314t-win32.whl", hash = "sha256:8c50dd1fc8826f5b26a5ee4d77ca55d88a895f4e4819c7ecc2a9f5905047a443", size = 6153937, upload-time = "2026-01-31T23:12:47.229Z" }, + { url = "https://files.pythonhosted.org/packages/45/aa/fa6118d1ed6d776b0983f3ceac9b1a5558e80df9365b1c3aa6d42bf9eee4/numpy-2.4.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fcf92bee92742edd401ba41135185866f7026c502617f422eb432cfeca4fe236", size = 12631844, upload-time = "2026-01-31T23:12:48.997Z" }, + { url = "https://files.pythonhosted.org/packages/32/0a/2ec5deea6dcd158f254a7b372fb09cfba5719419c8d66343bab35237b3fb/numpy-2.4.2-cp314-cp314t-win_arm64.whl", hash = "sha256:1f92f53998a17265194018d1cc321b2e96e900ca52d54c7c77837b71b9465181", size = 10565379, upload-time = "2026-01-31T23:12:51.345Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f8/50e14d36d915ef64d8f8bc4a087fc8264d82c785eda6711f80ab7e620335/numpy-2.4.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:89f7268c009bc492f506abd6f5265defa7cb3f7487dc21d357c3d290add45082", size = 16833179, upload-time = "2026-01-31T23:12:53.5Z" }, + { url = "https://files.pythonhosted.org/packages/17/17/809b5cad63812058a8189e91a1e2d55a5a18fd04611dbad244e8aeae465c/numpy-2.4.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6dee3bb76aa4009d5a912180bf5b2de012532998d094acee25d9cb8dee3e44a", size = 14889755, upload-time = "2026-01-31T23:12:55.933Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ea/181b9bcf7627fc8371720316c24db888dcb9829b1c0270abf3d288b2e29b/numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:cd2bd2bbed13e213d6b55dc1d035a4f91748a7d3edc9480c13898b0353708920", size = 5399500, upload-time = "2026-01-31T23:12:58.671Z" }, + { url = "https://files.pythonhosted.org/packages/33/9f/413adf3fc955541ff5536b78fcf0754680b3c6d95103230252a2c9408d23/numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:cf28c0c1d4c4bf00f509fa7eb02c58d7caf221b50b467bcb0d9bbf1584d5c821", size = 6714252, upload-time = "2026-01-31T23:13:00.518Z" }, + { url = "https://files.pythonhosted.org/packages/91/da/643aad274e29ccbdf42ecd94dafe524b81c87bcb56b83872d54827f10543/numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e04ae107ac591763a47398bb45b568fc38f02dbc4aa44c063f67a131f99346cb", size = 15797142, upload-time = "2026-01-31T23:13:02.219Z" }, + { url = "https://files.pythonhosted.org/packages/66/27/965b8525e9cb5dc16481b30a1b3c21e50c7ebf6e9dbd48d0c4d0d5089c7e/numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:602f65afdef699cda27ec0b9224ae5dc43e328f4c24c689deaf77133dbee74d0", size = 16727979, upload-time = "2026-01-31T23:13:04.62Z" }, + { url = "https://files.pythonhosted.org/packages/de/e5/b7d20451657664b07986c2f6e3be564433f5dcaf3482d68eaecd79afaf03/numpy-2.4.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be71bf1edb48ebbbf7f6337b5bfd2f895d1902f6335a5830b20141fc126ffba0", size = 12502577, upload-time = "2026-01-31T23:13:07.08Z" }, +] + +[[package]] +name = "opensearch-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "events" }, + { name = "python-dateutil" }, + { name = "requests" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b8/58/ecec7f855aae7bcfb08f570088c6cb993f68c361a0727abab35dbf021acb/opensearch_py-3.0.0.tar.gz", hash = "sha256:ebb38f303f8a3f794db816196315bcddad880be0dc75094e3334bc271db2ed39", size = 248890, upload-time = "2025-06-17T05:39:48.453Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/e0/69fd114c607b0323d3f864ab4a5ecb87d76ec5a172d2e36a739c8baebea1/opensearch_py-3.0.0-py3-none-any.whl", hash = "sha256:842bf5d56a4a0d8290eda9bb921c50f3080e5dc4e5fefb9c9648289da3f6a8bb", size = 371491, upload-time = "2025-06-17T05:39:46.539Z" }, +] + +[[package]] +name = "overrides" +version = "7.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/67/9b/58655bed3190319830d9ae5fb859c51a14ed35d4ea79d78bf036b5b768d7/overrides-7.0.0.tar.gz", hash = "sha256:49754f440f29de43975e27838942331adcc7521e6f552fdbb434dd5b4f895b3d", size = 24631, upload-time = "2022-10-09T15:46:39.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/ca/bf16d08734ec6d5d502fff617973136e3df8cd0fbfaed339aa169032205b/overrides-7.0.0-py3-none-any.whl", hash = "sha256:f6e4696acba91e5d4fd8ebb6e05cc9fc4d49c7b0ea4064cc0a1f64a1e09861c8", size = 17838, upload-time = "2022-10-09T15:46:37.803Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790, upload-time = "2025-09-29T23:18:30.065Z" }, + { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831, upload-time = "2025-09-29T23:38:56.071Z" }, + { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267, upload-time = "2025-09-29T23:18:41.627Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281, upload-time = "2025-09-29T23:18:56.834Z" }, + { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453, upload-time = "2025-09-29T23:19:09.247Z" }, + { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361, upload-time = "2025-09-29T23:19:25.342Z" }, + { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702, upload-time = "2025-09-29T23:19:38.296Z" }, + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, + { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, + { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, + { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, + { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, +] + +[[package]] +name = "pathspec" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, +] + +[[package]] +name = "pillow" +version = "12.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/3d/bb7fca845737cf9d7dbde16ed1843984665ff2e0a518f5db43e77ec540b9/pillow-12.3.0.tar.gz", hash = "sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce", size = 47025035, upload-time = "2026-07-01T11:56:38.965Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/c8/0a78b0e02d7ac54bc03e5321c9220da52f0c2ea83b21f7c40e7f3169c502/pillow-12.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756", size = 5392415, upload-time = "2026-07-01T11:53:47.162Z" }, + { url = "https://files.pythonhosted.org/packages/b2/5b/a02d30018abd97ced9f5a6c63d28597694a00d066516b9c1c6de45859fc9/pillow-12.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6", size = 4785266, upload-time = "2026-07-01T11:53:49.079Z" }, + { url = "https://files.pythonhosted.org/packages/c8/98/766667a4be768150a202836acd9fad19c06824ca86c4286d3cf6b274964e/pillow-12.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd", size = 6263814, upload-time = "2026-07-01T11:53:51.32Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2d/ede717bc1144f63886c21fd349bb95860b0d1a21149ff16f2bb362b612b6/pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd", size = 6934408, upload-time = "2026-07-01T11:53:53.487Z" }, + { url = "https://files.pythonhosted.org/packages/a3/48/9c58b685e69d49c31af6c8eb9012055fab7e665785165c84796e2c73ce72/pillow-12.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c", size = 6337160, upload-time = "2026-07-01T11:53:55.457Z" }, + { url = "https://files.pythonhosted.org/packages/ff/fa/dc2a5c0ba6df93f67c31d34b808b7ce440b40cdbf96f0b81cde1d1e6fa93/pillow-12.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5", size = 7045172, upload-time = "2026-07-01T11:53:57.736Z" }, + { url = "https://files.pythonhosted.org/packages/86/a5/444817a4d4c4c2417df00513086ca196f388d8f9ef40c2e4ccd1ad1af54b/pillow-12.3.0-cp311-cp311-win32.whl", hash = "sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b", size = 6472232, upload-time = "2026-07-01T11:53:59.767Z" }, + { url = "https://files.pythonhosted.org/packages/63/c6/4bad1b18d132a50b27e1365e1ab163616f7a5bb56d330f66f9d1d9d4f9d4/pillow-12.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a", size = 7233653, upload-time = "2026-07-01T11:54:02.066Z" }, + { url = "https://files.pythonhosted.org/packages/fd/16/00f91ab7760dc842f5aad55217e80fc4a7067a0604535249bc8a2d6d9870/pillow-12.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26", size = 2568195, upload-time = "2026-07-01T11:54:04.622Z" }, + { url = "https://files.pythonhosted.org/packages/37/bf/fb3ebff8ddcb76aac5a01389251bbbb9519922a9b520d8247c1ca864a25d/pillow-12.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965", size = 5345969, upload-time = "2026-07-01T11:54:06.397Z" }, + { url = "https://files.pythonhosted.org/packages/d8/66/9a386a92561f402389a4fc70c18838bf6d35eb5eb5c6850b4b2dc64f5048/pillow-12.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7", size = 4780323, upload-time = "2026-07-01T11:54:09.351Z" }, + { url = "https://files.pythonhosted.org/packages/25/27/ac8f99618ffd3dde21db0f4d4b1d2ab00c0880595bfd17df103f7f39fd0c/pillow-12.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9", size = 6266838, upload-time = "2026-07-01T11:54:11.71Z" }, + { url = "https://files.pythonhosted.org/packages/84/21/a35af28dcc61f37ed850a2d64c65c701321dfbf25085e469d5559360cbbf/pillow-12.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91", size = 6940830, upload-time = "2026-07-01T11:54:13.732Z" }, + { url = "https://files.pythonhosted.org/packages/eb/51/8b08617af3ad95e33ce6d7dd2c99ed6c8298f7fb131636303956be022e25/pillow-12.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c", size = 6344383, upload-time = "2026-07-01T11:54:15.756Z" }, + { url = "https://files.pythonhosted.org/packages/1d/72/cf78ac9780bb93c28328f408973845a309d4d145041665f734572ced1b52/pillow-12.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df", size = 7052934, upload-time = "2026-07-01T11:54:17.721Z" }, + { url = "https://files.pythonhosted.org/packages/20/20/25e0f4dc178a6bc0696793720055519a0de89e7661dae886992decbd2f81/pillow-12.3.0-cp312-cp312-win32.whl", hash = "sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f", size = 6472684, upload-time = "2026-07-01T11:54:19.839Z" }, + { url = "https://files.pythonhosted.org/packages/45/89/da2f7971a317f83d807fdd4065c0af40208e59e692cc43d315a71a0e96d1/pillow-12.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09", size = 7227137, upload-time = "2026-07-01T11:54:22.025Z" }, + { url = "https://files.pythonhosted.org/packages/de/47/4845a0a6c0dbf1db8456bd9fc791f13c5ced7ced20606d08a0aacfd25b49/pillow-12.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510", size = 2568267, upload-time = "2026-07-01T11:54:24.051Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ac/31fb64e1e7efb5a4b50cd3d92049ba89ac6e4d8d3bb6a74e15048ca3353e/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89", size = 4161684, upload-time = "2026-07-01T11:54:25.934Z" }, + { url = "https://files.pythonhosted.org/packages/87/b4/9805e23d2b4d77842b468513841fda254ee42f0289d25088340e4ff46e2d/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace", size = 4255487, upload-time = "2026-07-01T11:54:27.935Z" }, + { url = "https://files.pythonhosted.org/packages/df/39/ecf519435a200c693fe053a6ee4d835b41cf963a4dfc2551c4e637cb2a71/pillow-12.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec", size = 3696433, upload-time = "2026-07-01T11:54:29.813Z" }, + { url = "https://files.pythonhosted.org/packages/42/92/2fc3ffad878ae8dd5469ec1bc8eb83b71f48e13efdf68f02709003982a32/pillow-12.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66", size = 5345889, upload-time = "2026-07-01T11:54:31.97Z" }, + { url = "https://files.pythonhosted.org/packages/10/76/8803c13605b763d33d156c4678fc77f8443389c0c51c8aef707bb02015f4/pillow-12.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35", size = 4780109, upload-time = "2026-07-01T11:54:34.026Z" }, + { url = "https://files.pythonhosted.org/packages/1f/01/e18aff37cb0b4aac47ac90f016d347a49aca667ef97f190b06ac2aabc928/pillow-12.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65", size = 6263736, upload-time = "2026-07-01T11:54:36.131Z" }, + { url = "https://files.pythonhosted.org/packages/f7/62/de5bdd77d935331f4f802edc11e4d82950f642caad6cb2f949837b8560e2/pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3", size = 6937129, upload-time = "2026-07-01T11:54:38.216Z" }, + { url = "https://files.pythonhosted.org/packages/70/4d/105627a13300c5e0df1d174230b32fd1273062c96f7745fd552b945d1e1d/pillow-12.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a", size = 6339562, upload-time = "2026-07-01T11:54:40.354Z" }, + { url = "https://files.pythonhosted.org/packages/6b/1d/f13de01a553988ab895ba1c722e06cf3144d4f57656fd5b81b6d881f1179/pillow-12.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e", size = 7049439, upload-time = "2026-07-01T11:54:42.489Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f9/066794cca041b969964f779ee5fa66a9498bbf34248ac39c5d7954e4198f/pillow-12.3.0-cp313-cp313-win32.whl", hash = "sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f", size = 6473287, upload-time = "2026-07-01T11:54:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/7a58e61d62be561da3a356fe2384d4059a6345fc130e23ef1c36a5b81d24/pillow-12.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8", size = 7239691, upload-time = "2026-07-01T11:54:47.141Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b0/c4ed4f0ef8f8fa5ee8351537db6650bb8189f7e118842978dd6589065692/pillow-12.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b", size = 2568185, upload-time = "2026-07-01T11:54:49.137Z" }, + { url = "https://files.pythonhosted.org/packages/dc/01/001f65b68192f0228cc1dbbc8d2530ab5d58b61037ba0587f946fea607cd/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330", size = 4161736, upload-time = "2026-07-01T11:54:51.156Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d2/0219746d0fd16fc8a84498e79452375be3797d3ce4044596ce565164b84f/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217", size = 4255435, upload-time = "2026-07-01T11:54:53.414Z" }, + { url = "https://files.pythonhosted.org/packages/c8/02/8d0bc62ef0302318c46ff2a512822d2610e81c7aa46c9b3abe6cbaca5ad0/pillow-12.3.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930", size = 3696262, upload-time = "2026-07-01T11:54:55.739Z" }, + { url = "https://files.pythonhosted.org/packages/85/e2/73c77d218410b14f5f2d565e8a998d5317b7b9c75368d29985139f7a46f0/pillow-12.3.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8", size = 5350344, upload-time = "2026-07-01T11:54:57.657Z" }, + { url = "https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0", size = 4780131, upload-time = "2026-07-01T11:54:59.713Z" }, + { url = "https://files.pythonhosted.org/packages/b1/9d/8b2c807dbef61a5197c047afe99823787eb66f63daf9fb2432f91d6f0462/pillow-12.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321", size = 6263757, upload-time = "2026-07-01T11:55:01.778Z" }, + { url = "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b", size = 6936962, upload-time = "2026-07-01T11:55:03.93Z" }, + { url = "https://files.pythonhosted.org/packages/18/7e/e483414b35800b86b6f08dbbc7803fb5cd52c4d6f897f47d53ea2c7e6f65/pillow-12.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198", size = 6339171, upload-time = "2026-07-01T11:55:05.989Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f4/68c491844841ede6bed70189546b3ee9731cf9f2cbad396faff5e1ccba45/pillow-12.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130", size = 7048116, upload-time = "2026-07-01T11:55:08.131Z" }, + { url = "https://files.pythonhosted.org/packages/a3/34/77f3f793fed8efc7d243f21b33c5a3f0d1c97ee70346d3db855587e155ff/pillow-12.3.0-cp314-cp314-win32.whl", hash = "sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a", size = 6467209, upload-time = "2026-07-01T11:55:10.408Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d", size = 7237707, upload-time = "2026-07-01T11:55:12.745Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ac/6b11f2875f1c2ac040d84e1bbf9cf22a88038f901ca1037898b280b38365/pillow-12.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838", size = 2565995, upload-time = "2026-07-01T11:55:14.736Z" }, + { url = "https://files.pythonhosted.org/packages/52/69/c2208e56af9bfc1913afb24020297a691eb1d4ef688474c8a04913f65e04/pillow-12.3.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e", size = 5352503, upload-time = "2026-07-01T11:55:17.076Z" }, + { url = "https://files.pythonhosted.org/packages/07/70/e5686d753e898a45d778ff1718dba8516ead6ab6b95d85fc8c4b70650cf2/pillow-12.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17", size = 4782956, upload-time = "2026-07-01T11:55:19.448Z" }, + { url = "https://files.pythonhosted.org/packages/d5/37/25c6692f06927ee973ff18c8d9ee98ad0b4d84ee67a09610c2dd1447958e/pillow-12.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385", size = 6322855, upload-time = "2026-07-01T11:55:21.613Z" }, + { url = "https://files.pythonhosted.org/packages/cc/91/420637fcb8f1bc11029e403b4538e6694744428d8246118e45719f944556/pillow-12.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c", size = 6989642, upload-time = "2026-07-01T11:55:24.006Z" }, + { url = "https://files.pythonhosted.org/packages/10/08/b94d7811281ccf0d143a1cf768d1c49e1e54af63e7b708ab2ee3eb87face/pillow-12.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d", size = 6391281, upload-time = "2026-07-01T11:55:26.252Z" }, + { url = "https://files.pythonhosted.org/packages/d2/87/24233f785f55474dc02ce3e739c5528a77e3a862e9333d1dd7a25cc31f70/pillow-12.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931", size = 7096716, upload-time = "2026-07-01T11:55:28.318Z" }, + { url = "https://files.pythonhosted.org/packages/23/26/fcb2f6e37175b04f53570b59937867e2b80ee1685e744023153028fc14f9/pillow-12.3.0-cp314-cp314t-win32.whl", hash = "sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7", size = 6474125, upload-time = "2026-07-01T11:55:30.956Z" }, + { url = "https://files.pythonhosted.org/packages/90/de/3634abee5f1c9e13c56787b7d5517b0ba8d6de51700b95578cf338349c9f/pillow-12.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c", size = 7242939, upload-time = "2026-07-01T11:55:34.044Z" }, + { url = "https://files.pythonhosted.org/packages/ce/2a/fd13f8eb24de5714a6eb444a3d67e2842c6c576e159a43793adf23051351/pillow-12.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45", size = 2567506, upload-time = "2026-07-01T11:55:35.988Z" }, + { url = "https://files.pythonhosted.org/packages/5d/dc/8fdce34ec725a33c81c6ba122b904d6b9024e50ea9ac7bede62fab54506c/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139", size = 4162063, upload-time = "2026-07-01T11:55:37.941Z" }, + { url = "https://files.pythonhosted.org/packages/76/66/2044b9a63d3b84ff048228dfcb7cd9bf0df983e8470971bf7d4c57b693de/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402", size = 4255549, upload-time = "2026-07-01T11:55:40.022Z" }, + { url = "https://files.pythonhosted.org/packages/52/7e/1f67e6f4ece6b582ee4b539decbcc9f848dc245a93ed8cd7338bafef72f1/pillow-12.3.0-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c", size = 3696331, upload-time = "2026-07-01T11:55:41.98Z" }, + { url = "https://files.pythonhosted.org/packages/12/40/d306fc2c8e4d45d7f175c77edca7063be7b86fe7fe6e68f4353bf71d808c/pillow-12.3.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f", size = 5350370, upload-time = "2026-07-01T11:55:44.028Z" }, + { url = "https://files.pythonhosted.org/packages/dd/44/668fb1437e8ce420f62d6106eb66e44a5971602a4d794615bdf79315d82d/pillow-12.3.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701", size = 4780147, upload-time = "2026-07-01T11:55:46.073Z" }, + { url = "https://files.pythonhosted.org/packages/0c/08/93fa2e70e30a2d81547e481b6ee2bb9522117221fb1e0ce4b5df70967677/pillow-12.3.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace", size = 6273659, upload-time = "2026-07-01T11:55:48.264Z" }, + { url = "https://files.pythonhosted.org/packages/f8/6d/043e96ff814fc31a33077e4cba86082167db520c93632afdf2042febbb0c/pillow-12.3.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4", size = 6947439, upload-time = "2026-07-01T11:55:50.503Z" }, + { url = "https://files.pythonhosted.org/packages/af/92/ba71d2ee2ac0edf3fa33bd9d5ee9ee080da70b1766f3ca3934f9938ddac9/pillow-12.3.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39", size = 6353577, upload-time = "2026-07-01T11:55:52.697Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ce/e63064e2122923ff687c8ad792d0d736a7b3920a56a46982e81a7fdd25d6/pillow-12.3.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71", size = 7060394, upload-time = "2026-07-01T11:55:55.149Z" }, + { url = "https://files.pythonhosted.org/packages/54/76/a09cc3ccc8d773a7283d34c38bec1708f9e3cc932093cbc4c5e71ac4060b/pillow-12.3.0-cp315-cp315-win32.whl", hash = "sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827", size = 6467375, upload-time = "2026-07-01T11:55:57.769Z" }, + { url = "https://files.pythonhosted.org/packages/3e/03/1846c49ba3b1d5550392a4bbd06d6fb4578e1cd91a803198b5c90f5f7d53/pillow-12.3.0-cp315-cp315-win_amd64.whl", hash = "sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5", size = 7237048, upload-time = "2026-07-01T11:55:59.975Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bb/89f35dcc79610423f9f195504d7def7f0d1416a711541b42867e25fe3412/pillow-12.3.0-cp315-cp315-win_arm64.whl", hash = "sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658", size = 2566006, upload-time = "2026-07-01T11:56:02.143Z" }, + { url = "https://files.pythonhosted.org/packages/30/88/707027ba09942dfa2c28759b5c222d769290a41c6d20ea60ec250801941f/pillow-12.3.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf", size = 5352509, upload-time = "2026-07-01T11:56:04.2Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6d/00352fa25332c2569cd387851f568cc5a4b75a9adbfb37ac4fbce4c02eec/pillow-12.3.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64", size = 4783167, upload-time = "2026-07-01T11:56:06.631Z" }, + { url = "https://files.pythonhosted.org/packages/13/4f/9e049dfa21af7c22427275720e2490267ba8138120add5c4c574deb69782/pillow-12.3.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e", size = 6329237, upload-time = "2026-07-01T11:56:08.868Z" }, + { url = "https://files.pythonhosted.org/packages/36/16/cf6eeaae8d0fce8dd390a33437cf68c5d5bd73834a2bc6e2f14efda0ab45/pillow-12.3.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777", size = 6997047, upload-time = "2026-07-01T11:56:11.379Z" }, + { url = "https://files.pythonhosted.org/packages/1e/69/dbf769bdd55f48bf5733cac28edc6364ffaa072ec9ba336266e4fe66be55/pillow-12.3.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1", size = 6400440, upload-time = "2026-07-01T11:56:13.908Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e1/ffc9cfc2eea0d178da8018e18e959301ad9d6bc9f3edb7181e748a474b97/pillow-12.3.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9", size = 7105895, upload-time = "2026-07-01T11:56:16.575Z" }, + { url = "https://files.pythonhosted.org/packages/18/f0/a5595c1e8c3ae44b9828cb2f0fa8155e5095ef04d6327b8f61cf44a3df85/pillow-12.3.0-cp315-cp315t-win32.whl", hash = "sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8", size = 6474384, upload-time = "2026-07-01T11:56:18.855Z" }, + { url = "https://files.pythonhosted.org/packages/e4/04/62bcd9f844984c5938d3b05264a61d797a29d3e0812341a8204af70bbdee/pillow-12.3.0-cp315-cp315t-win_amd64.whl", hash = "sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418", size = 7243537, upload-time = "2026-07-01T11:56:21.214Z" }, + { url = "https://files.pythonhosted.org/packages/3d/68/1f3066acedf37673694a7141381d8f811ae97f30d34413d236abe7d489f1/pillow-12.3.0-cp315-cp315t-win_arm64.whl", hash = "sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59", size = 2567491, upload-time = "2026-07-01T11:56:23.506Z" }, + { url = "https://files.pythonhosted.org/packages/75/18/2e8b40223153ccbc60df07f9e8928dc0c76202aa4e55ae9f53962b6510d6/pillow-12.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468", size = 5302510, upload-time = "2026-07-01T11:56:25.736Z" }, + { url = "https://files.pythonhosted.org/packages/46/3e/51fabf59d5ab801ceab709453d3ab6b180083496579549de4c45ced6528a/pillow-12.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94", size = 4736058, upload-time = "2026-07-01T11:56:28.041Z" }, + { url = "https://files.pythonhosted.org/packages/bf/20/22fe9384b7949e25fb1293bcfc84fb82590ff4ea6b37c95b24d26d793d86/pillow-12.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e", size = 5237776, upload-time = "2026-07-01T11:56:30.263Z" }, + { url = "https://files.pythonhosted.org/packages/08/14/f6ba68107680ffa74b39985f3f30884e41318fbc4250caa423c79b4788bb/pillow-12.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3", size = 5860358, upload-time = "2026-07-01T11:56:32.68Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0169bc772ec491108b62f644f8ecf1fe5d8ae5ebafde2ee2142210166903/pillow-12.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a", size = 7231786, upload-time = "2026-07-01T11:56:35.046Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.11.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/69/b7/802a56eca9f2fac455b8bab5375a2647b0f0e14a2cd63ef077de3c4a7658/platformdirs-4.11.7.tar.gz", hash = "sha256:4f41487eeeeeb07f3a6625e61d9bc0ae6809f92d3386dbd74392fbb76108104d", size = 35127, upload-time = "2026-09-01T13:35:10.502Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/6e/80993e10a0482f630cef528635789233224f36b1ffd11592aa15d13ff9ce/platformdirs-4.11.7-py3-none-any.whl", hash = "sha256:8a02cb259042c79d1cd0450facc2fe6dc9d303ae7901afbe33bf8ea0b188cef6", size = 23938, upload-time = "2026-09-01T13:35:09.02Z" }, +] + +[[package]] +name = "polars" +version = "1.44.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "polars-runtime-32" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/26/73/258a1fe17bb2744a507199566ed712663144fdd0811b615b59a47dfa38d2/polars-1.44.1.tar.gz", hash = "sha256:ef3c89e9ebbbe8eb343c06873f1945683f8b6f97a1bdf001c60551c6c5e3cda1", size = 765660, upload-time = "2026-08-26T07:09:12.704Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/f1/59154659081930fbde291ea6225607956b500a71b0ce45d88217b7d32da2/polars-1.44.1-py3-none-any.whl", hash = "sha256:1fa62fc1c88fba77a68b28291b5aabdd69e5f38b34e59721a064ae3169b59bb5", size = 865208, upload-time = "2026-08-26T07:07:44.646Z" }, +] + +[[package]] +name = "polars-runtime-32" +version = "1.44.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/b2/2a76415d047a45df05489f2334c91ff120a274cf655d4ca030c7f54a8743/polars_runtime_32-1.44.1.tar.gz", hash = "sha256:abd10a54ed1caff42228610fcba0f93251f9870bd7cffb0c78bc26f5e0718ce4", size = 3171156, upload-time = "2026-08-26T07:09:14.243Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/93/ef9344dcec16757cf21027dc907ef989197e50742cfe4407f2e87edb0a7f/polars_runtime_32-1.44.1-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:1dfccb2b52aa50468a7d28e3e61c8338a13fb5bffc8646e388a649f5bdc6b463", size = 53962370, upload-time = "2026-08-26T07:07:47.21Z" }, + { url = "https://files.pythonhosted.org/packages/10/da/38b32b7901af33f1fee2172ceaa39e9159825657920064298917392d78fa/polars_runtime_32-1.44.1-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:0580807dc3eed258f0db70bb65d905dd43f0135392119ec25308033ae24258fb", size = 48620468, upload-time = "2026-08-26T07:07:50.436Z" }, + { url = "https://files.pythonhosted.org/packages/49/51/185af877d1d2236671493cf72bd3327a6046240eeea69c0696d1af2a5acb/polars_runtime_32-1.44.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0627f9aa82cb869725235e5188f698862fd9ada0c8c1cf65c3dc5a49a4a0ec26", size = 52455947, upload-time = "2026-08-26T07:07:53.776Z" }, + { url = "https://files.pythonhosted.org/packages/fc/0a/0858f60cb5a6f8f73ec4cdd73eccd9f748d66bfc23304c5c23fa3468094a/polars_runtime_32-1.44.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eea4283be8e60822d890dbda20588fe59b4172b508bd5ebf3471e531ca9f50d7", size = 58561262, upload-time = "2026-08-26T07:07:57.508Z" }, + { url = "https://files.pythonhosted.org/packages/73/08/de4774b5612d7c8739f89ac01b601486b4f057b1da35a5b876bf9276fd95/polars_runtime_32-1.44.1-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:04e2c0f46e7a9906fffb1897f18f23b079b74f83c56b50060bace9e7b9b49b1a", size = 52636064, upload-time = "2026-08-26T07:08:06.337Z" }, + { url = "https://files.pythonhosted.org/packages/98/ac/769c598dd106e2a6647798da3ed25ddeee67f2d12c04f5da316cb3da6360/polars_runtime_32-1.44.1-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:0956f0cae632d8fad3a04b4315bf2bb69b56d10c83c79a75c2c4c5a13b9ce5cc", size = 56447612, upload-time = "2026-08-26T07:08:12.36Z" }, + { url = "https://files.pythonhosted.org/packages/b2/ee/98408296e15388020b6183323fdbe78ccab4f72c20d8e0d7092c062d3ad2/polars_runtime_32-1.44.1-cp310-abi3-win_amd64.whl", hash = "sha256:159334184e6fbb074c9f4692221ea19970a5e2bed2a479f9d7bdb00b7f3eedb9", size = 53702970, upload-time = "2026-08-26T07:08:15.398Z" }, + { url = "https://files.pythonhosted.org/packages/e9/9d/8b17e075aac73c881a50b6c1f690d20df46db2f3bcabc99f600ecdee1290/polars_runtime_32-1.44.1-cp310-abi3-win_arm64.whl", hash = "sha256:3ba28d638d0513e0b4afbcdab5c0059a85021e5f81d62b5f793e7e23badb2cf7", size = 47281050, upload-time = "2026-08-26T07:08:18.43Z" }, +] + +[[package]] +name = "progressbar2" +version = "4.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-utils" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0c/1e/5bd376abe32a392e74fffd82feb42ee1472d263bd358d628af20663d0346/progressbar2-4.6.0.tar.gz", hash = "sha256:fe48c8955a84428af77bff2642ba47041e1b8f7c867a5b7cc94f8bc255a8f0cf", size = 542464, upload-time = "2026-08-14T01:07:30.008Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/4c/ba64c450164fa4feaa9c4bb1c6445811d89d6a1995bfc58d039273b698af/progressbar2-4.6.0-py3-none-any.whl", hash = "sha256:2d78bdeb1debef92a39dd9042e0689542bd72d6e2f30b13432db371aa9d8ee4e", size = 104185, upload-time = "2026-08-14T01:07:28.474Z" }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + +[[package]] +name = "psycopg" +version = "3.3.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "tzdata", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/73/8fb739d0f6bba247b9b93c9840c402a4f88545be5f1d4b02b23366371c00/psycopg-3.3.5.tar.gz", hash = "sha256:d0a3d9ccf5788af054cbd745278cb02401b5c312aeaafbf2c6144460aec47da4", size = 166508, upload-time = "2026-08-31T22:45:43.151Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/2e/d0a645bcaadde68bd6d93c43f02f14b0191bdda367ce3f7722abe3da744a/psycopg-3.3.5-py3-none-any.whl", hash = "sha256:ce5aa5cdb4f9379f00f487590e5890bfa7df9a164648c969ffa628505e21af4e", size = 213598, upload-time = "2026-08-31T22:39:02.184Z" }, +] + +[package.optional-dependencies] +binary = [ + { name = "psycopg-binary", marker = "implementation_name != 'pypy'" }, +] +c = [ + { name = "psycopg-c", marker = "implementation_name != 'pypy'" }, +] + +[[package]] +name = "psycopg-binary" +version = "3.3.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/67/ac6b3dfd2d495f8599f7179f8082af4b3be72caa44942ddb45e9613338eb/psycopg_binary-3.3.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c6bd84e4cf67930f26f015dec33f615472b9c5871d46408efe112dbc1bc021de", size = 4720383, upload-time = "2026-08-31T22:40:22.262Z" }, + { url = "https://files.pythonhosted.org/packages/2a/7f/c3870c7e5ba6b4444e3e5401c79d5e83afe2c7045844eabb25d5b39adecb/psycopg_binary-3.3.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fdbeb38c9b7ca8fa57a7bda3802bedb62f4494ad3dd46c7dd36dc3f77fd5093f", size = 4768854, upload-time = "2026-08-31T22:40:26.639Z" }, + { url = "https://files.pythonhosted.org/packages/0e/a2/04834fb8a2af14d42e48abeb61ace0a4fee2d6f516723d897cff16fce677/psycopg_binary-3.3.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:06de14ac978a2d53e864069fb5487075c6e3cfb0740f1bfd7017bc8b9942067f", size = 5588618, upload-time = "2026-08-31T22:40:36.524Z" }, + { url = "https://files.pythonhosted.org/packages/de/0d/2eed6e7f8c5ada9e08cbdca4b78083df12f5c2a8d13fa0c62cd6b2b1d762/psycopg_binary-3.3.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d8b66353b20e79bf7ac0a80f03ae97f522ccbbf909d687eec62f112e56c0276d", size = 5259471, upload-time = "2026-08-31T22:40:46.43Z" }, + { url = "https://files.pythonhosted.org/packages/96/66/2347889e693502e8473a60b3defac0300829007275a21980a2197c200418/psycopg_binary-3.3.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:af5084124fb2fd16557073822519dfe8c389636a16adef661a4c0c3918733171", size = 6851181, upload-time = "2026-08-31T22:40:52.939Z" }, + { url = "https://files.pythonhosted.org/packages/b6/11/039d7bbdc8ac28292a2fb9f54a7385116c7d31a3bf9c87e71eda154b32b9/psycopg_binary-3.3.5-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1344fd57a19737554670e67aecabd4fb37cd7937f2925840009645d641117e5a", size = 5098916, upload-time = "2026-08-31T22:40:57.505Z" }, + { url = "https://files.pythonhosted.org/packages/d4/01/5f77284d0c682106279da7d9e26527ae99f3241a91f0549b033c84441404/psycopg_binary-3.3.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2719fe19a4da752c4110cc767716d0a5bdb760d1153d89018bb7c9c61717bde5", size = 4617043, upload-time = "2026-08-31T22:41:04.555Z" }, + { url = "https://files.pythonhosted.org/packages/8b/4a/c07000298ffa3eaf25a720a5fd4bc9326676e99712722ca1accb40071e66/psycopg_binary-3.3.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:893ce86a4b997f6ca1261a7826db2506727332a6ff66646fa7f024b39b5e630e", size = 4310458, upload-time = "2026-08-31T22:41:11.72Z" }, + { url = "https://files.pythonhosted.org/packages/c7/0a/cc7da5bb2bed198354f8dcc7c5dab3f1473edf2b6a177c1e8ec3fa9841ea/psycopg_binary-3.3.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:a5e45e4bb68656253ce5c7a344c0a425c293581eba954d7fd7c2e4b2dc9f3038", size = 4039320, upload-time = "2026-08-31T22:41:20.783Z" }, + { url = "https://files.pythonhosted.org/packages/17/60/f65755f1ab74223b437f1d366f63915b6f5e1292234de47643f898c29faf/psycopg_binary-3.3.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ca8af7c0454cdce235d4aedcb5528857468f1490202d25e24fc7af40e176d563", size = 4342427, upload-time = "2026-08-31T22:41:27.068Z" }, + { url = "https://files.pythonhosted.org/packages/0e/3c/6b1ea5b5544fa51ee6da8e99e96ca6a639ed1e0da2e335467893f14d3182/psycopg_binary-3.3.5-cp311-cp311-win_amd64.whl", hash = "sha256:7b443f943abfe35aa5a776630cea27c9348aa66659286cee0b99084332252080", size = 3665235, upload-time = "2026-08-31T22:41:30.9Z" }, + { url = "https://files.pythonhosted.org/packages/5e/83/ba396428a4fb6b70f0dd41315ad86a2c14441b7214afd47b2d49cb450b78/psycopg_binary-3.3.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:25105f9b46bdf2a30fcb67f56976ed66f6855941ae16bc024192609b917d493c", size = 4700169, upload-time = "2026-08-31T22:41:39.712Z" }, + { url = "https://files.pythonhosted.org/packages/4f/56/b23c5978e55cf4effdc5a3e13a17d69a580a487993e01b7c3768dd24281c/psycopg_binary-3.3.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0249c3e960cdee686000eb77169fb6590105c05bacc37e057ccdffdcd8e6ebde", size = 4763037, upload-time = "2026-08-31T22:41:47.571Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d8/b41108bfe194b4098076c8b873b05ec2ca9582445eccfd9075970d7b948e/psycopg_binary-3.3.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5698ab5941a4d138c30fef858588e651fe7d583280cd6e41832825ad9e747750", size = 5546232, upload-time = "2026-08-31T22:41:55.817Z" }, + { url = "https://files.pythonhosted.org/packages/21/d1/0f244dfef389e52e9dc3056f2a9033d1f6901e97d24d9a9c8b836e32ab6b/psycopg_binary-3.3.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:682a17a57415c3ca1731eec018ed031f012ffcb81ba74806eb219cb396065672", size = 5227752, upload-time = "2026-08-31T22:42:03.776Z" }, + { url = "https://files.pythonhosted.org/packages/31/88/a4781365f09807fb91435e2d00096f3f6ae5d06bce15ef3c3c385dc22772/psycopg_binary-3.3.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d2a61e8147902771df7efe14062a3c8736347850d0d8befcf048235752504f2e", size = 6824658, upload-time = "2026-08-31T22:42:13.263Z" }, + { url = "https://files.pythonhosted.org/packages/65/f1/072c4a46287644694731b3e40fab120ebacf6d153cce7ebf7a5b208f5561/psycopg_binary-3.3.5-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f7e1e45aad410e20de45df2b159df68ff6c8dbf47a3501f806c4489b27f4ad2b", size = 5061439, upload-time = "2026-08-31T22:42:18.591Z" }, + { url = "https://files.pythonhosted.org/packages/e2/d6/1776a95c16941b8bbce89407cc7cf9ea3fd557efb503a40873c9e2b6394f/psycopg_binary-3.3.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c09775c549b40b274206e1b043c5e5b5af39666e85c98382a30bd05d23ab677b", size = 4588586, upload-time = "2026-08-31T22:42:25.23Z" }, + { url = "https://files.pythonhosted.org/packages/82/64/44ec87b9a74faebe966856307b65c0d35ee6321ce509cdd0e8d6a3f5338b/psycopg_binary-3.3.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:cf0e5e63ee86098299c673992053d556c489ba9ae6aca6cb6e24d16a8e0b09e6", size = 4265161, upload-time = "2026-08-31T22:42:31.864Z" }, + { url = "https://files.pythonhosted.org/packages/24/88/cf181df5651395a80afc520f5fefac72beb035c0c9d58ab7fcc880c9b221/psycopg_binary-3.3.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:c065531e8c1815276f50dbfa283e3a7f022671414cdda6fa9a16794dd53b28f9", size = 3998727, upload-time = "2026-08-31T22:42:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/43/1e/c72a1107647db4bb3f534c7fe1b57b1957d9c099e795f5aa81f4a2e0c312/psycopg_binary-3.3.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:df9853b832b7b916e02ef68e0d5403a7dab2d5c1ddfe94f22b1b155eb862622f", size = 4310119, upload-time = "2026-08-31T22:42:46.403Z" }, + { url = "https://files.pythonhosted.org/packages/03/8d/452620608cafff164737e20b42ebffee8151b865ee171ba0d6692a560a44/psycopg_binary-3.3.5-cp312-cp312-win_amd64.whl", hash = "sha256:35885e333020fc152d27bea1a494bef13b2e68f6fd92b6229015e93539152008", size = 3648197, upload-time = "2026-08-31T22:42:51.575Z" }, + { url = "https://files.pythonhosted.org/packages/e0/1c/e718752cc63cf4e99e4a10fd36e3a3364dabdd0819484a24c0d79fbb9685/psycopg_binary-3.3.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6e85d50b87257fb117675a19ee59daa7bf9a57f6431500adf7059df799232ef4", size = 4704421, upload-time = "2026-08-31T22:42:59.564Z" }, + { url = "https://files.pythonhosted.org/packages/af/cf/a0e748e27c09b92738e4460582d121ba1908be3e36791e150f435e54b332/psycopg_binary-3.3.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e5becd311f9af8d180bad372f51fb2252fd02cb2073056e2b170c9274f95fe7f", size = 4765054, upload-time = "2026-08-31T22:43:05.421Z" }, + { url = "https://files.pythonhosted.org/packages/39/62/0cbac0266d56c94dd1f702d9af2b5d54bf80b6e658048f4f2c5bd63dd7e3/psycopg_binary-3.3.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:19e5bf9872dbd164c220567fd385ba2309c7d9df1541f78343510c6b0f36a1b7", size = 5547137, upload-time = "2026-08-31T22:43:11.768Z" }, + { url = "https://files.pythonhosted.org/packages/fb/3a/73c6f8871f38fc07a9c0b4cbc9467beb116a2783cecf87dfa53900a396dc/psycopg_binary-3.3.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cb3b3bffebfe07110730626e76238161124f35ac87b748d663316a28d22f58b0", size = 5227577, upload-time = "2026-08-31T22:43:20.767Z" }, + { url = "https://files.pythonhosted.org/packages/59/7b/9f17b9f4d297b774dc574199c4dcd02dadc32a00c4056265918de5c70635/psycopg_binary-3.3.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2111f880add40fb03c60556069ad68e884a0908a74d2debafc603caf93b73552", size = 6824606, upload-time = "2026-08-31T22:43:33.698Z" }, + { url = "https://files.pythonhosted.org/packages/94/86/d84dadd94a004dbbb43ce0579f1f766fdc6b8cbef745090e24bea77b5283/psycopg_binary-3.3.5-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:40505676b1526b9ea387dace034040a8c8b0bcf984cd6bd4720a2ab15e813586", size = 5060854, upload-time = "2026-08-31T22:43:42.258Z" }, + { url = "https://files.pythonhosted.org/packages/30/d0/e5078be2c7d2490c0d6cd4cb7b3601aec44be2fa8b3fe927e9419b06004f/psycopg_binary-3.3.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5816472e3bb05615f33a741e0835043d1f4bf9709ff30d2f4aed71815cfc6b5e", size = 4589511, upload-time = "2026-08-31T22:43:50.012Z" }, + { url = "https://files.pythonhosted.org/packages/f1/01/08dfb5b18fa482e025864fd91a022310d0782c42e4cf5dda5d0e010b6790/psycopg_binary-3.3.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:358748fc4c8ccdc0e2bdf55420494930e19c3ade586ea9c3a6de3dad1f897311", size = 4268144, upload-time = "2026-08-31T22:43:56.993Z" }, + { url = "https://files.pythonhosted.org/packages/88/b9/cb01dc1d63f3241b49b2ca7fb9f98d0f5c76127f0dbb9440635a6ad0233e/psycopg_binary-3.3.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:1ef2e498be47800f6202b9a2304c22646325ca6d54001b7c785bcfdb24a1e8ab", size = 4001036, upload-time = "2026-08-31T22:44:04.429Z" }, + { url = "https://files.pythonhosted.org/packages/95/49/7c17dd832c05b380562ff2ff5f6ab2bcaeca8b7fff2c2b355854368a5bdb/psycopg_binary-3.3.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:88e01aa2e938a45655a8a5213fc3a44ba78cb4cab8a569b3e0bcb3d1d0eaba16", size = 4313112, upload-time = "2026-08-31T22:44:12.446Z" }, + { url = "https://files.pythonhosted.org/packages/7c/2c/b0b2f887185d6a2ec0b3bef948cc07656d2d1a5d96fa7f2bb03f6ef06ca4/psycopg_binary-3.3.5-cp313-cp313-win_amd64.whl", hash = "sha256:ba466011569297114449df9d523438e1adeedf3e4f31ffb78e897ec3fef3076b", size = 3647313, upload-time = "2026-08-31T22:44:19.139Z" }, + { url = "https://files.pythonhosted.org/packages/46/7f/4e2395da194558533bd9c31f35e4dc58ecbbae6a7176b0d2f72d629e8a51/psycopg_binary-3.3.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:40f8b132c7243ef5f503f0b6f986bf16d38a51b0df1c6ba2577743f128be03e3", size = 4712612, upload-time = "2026-08-31T22:44:25.723Z" }, + { url = "https://files.pythonhosted.org/packages/ae/94/fdb2093c8ccd7048449156db526ad746740cf34fe9c01e5dc1b7a7a8b257/psycopg_binary-3.3.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c0cac998b9b1e82dec853d2e53b3d34d56a525cf231f9441a636cfd5992929a9", size = 4775139, upload-time = "2026-08-31T22:44:36.719Z" }, + { url = "https://files.pythonhosted.org/packages/31/52/5195e87960715f7be2005761b72d56fce4e7757d5333fd40384f071c2de1/psycopg_binary-3.3.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:479b96fd78149cfa10369dc53fbfb89ee729be13146b584a23dbc7e164c0cf1e", size = 5556807, upload-time = "2026-08-31T22:44:42.668Z" }, + { url = "https://files.pythonhosted.org/packages/f7/42/2d616210a91e1327516ed5ae71961aaa31bb740e4a61d7190f2221685a40/psycopg_binary-3.3.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f45d77e398542ce0937d9fa3cd9d84e9c5fc6b34c50a66404ae840bada312750", size = 5236206, upload-time = "2026-08-31T22:44:47.943Z" }, + { url = "https://files.pythonhosted.org/packages/08/2e/e54b0d4cc263b3526e3728bb50a69660d5e79e52255ccd2a1a71e40e6f9a/psycopg_binary-3.3.5-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98a388509306e5e08a4203253ac52846bc1b034e5cbd0ae6da1211593cc28594", size = 6838066, upload-time = "2026-08-31T22:44:55.701Z" }, + { url = "https://files.pythonhosted.org/packages/77/80/ec22a110f81a44c411965982097efeee86006bdd5a1f51f628318106c84c/psycopg_binary-3.3.5-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ab39e2794b95af61a2ff69e33e5ab6ac5df36e9ffea9a3b18e38b2aaca8c5ad5", size = 5072036, upload-time = "2026-08-31T22:45:02.838Z" }, + { url = "https://files.pythonhosted.org/packages/93/55/7bc3c3ac769ab4fe0c619f2179b4aab3ae043f4d478283dd8279d24c0be4/psycopg_binary-3.3.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9c071bf78e5c2e6efa40bc9089a954d7b41221347a72f35c6bf2d8c96e632f75", size = 4604058, upload-time = "2026-08-31T22:45:10.444Z" }, + { url = "https://files.pythonhosted.org/packages/a3/69/8e7414f7dc10b2959e664330cdcf393e412f67355975dafa876cef265264/psycopg_binary-3.3.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:14fdfd65a96ecbd8b586d14546105641f4a6ac7cbe335c786830ea4de94bbe60", size = 4284766, upload-time = "2026-08-31T22:45:17.881Z" }, + { url = "https://files.pythonhosted.org/packages/c1/72/33f293c1d3ee9114f47e9ef4880f31c9de864e84a9b09454c26e106c25ed/psycopg_binary-3.3.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:8dbd694f3741dd4ac5bc60b70e17f7841aefb3f0f38cef4d2756de270e03af43", size = 4011958, upload-time = "2026-08-31T22:45:24.792Z" }, + { url = "https://files.pythonhosted.org/packages/b7/c9/8e38840e5a7d006987bbc9acb29951912253fa50549a4db92b3aa535f089/psycopg_binary-3.3.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:14f432430fd9e1a9e7d9ab2fe14956c77f5d074ebdc556a1ad04e9a1bd3fca04", size = 4323273, upload-time = "2026-08-31T22:45:32.973Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c7/b7ebf601c307f93e7c4c4ebac0edc9db3b2729ca038efe700a18f86b5517/psycopg_binary-3.3.5-cp314-cp314-win_amd64.whl", hash = "sha256:df209e64674a34b41662c67fdc8b4e0ffd77d2136393790691d086a09f9a6cab", size = 3745885, upload-time = "2026-08-31T22:45:40.537Z" }, +] + +[[package]] +name = "psycopg-c" +version = "3.3.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/7b/5da2274bdbfed6b02aea463e2b803b8d4406bbc9d6c6f6bfd7122492254f/psycopg_c-3.3.5.tar.gz", hash = "sha256:5e11edaa0040a64d0af351a8fd3e276a824cd92fe34abc350cd67aa07ad36c55", size = 694569, upload-time = "2026-08-31T22:45:45.337Z" } + +[[package]] +name = "py4j" +version = "0.10.9.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/38/31/0b210511177070c8d5d3059556194352e5753602fa64b85b7ab81ec1a009/py4j-0.10.9.9.tar.gz", hash = "sha256:f694cad19efa5bd1dee4f3e5270eb406613c974394035e5bfc4ec1aba870b879", size = 761089, upload-time = "2025-01-15T03:53:18.624Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/db/ea0203e495be491c85af87b66e37acfd3bf756fd985f87e46fc5e3bf022c/py4j-0.10.9.9-py2.py3-none-any.whl", hash = "sha256:c7c26e4158defb37b0bb124933163641a2ff6e3a3913f7811b0ddbe07ed61533", size = 203008, upload-time = "2025-01-15T03:53:15.648Z" }, +] + +[[package]] +name = "py7zr" +version = "1.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "backports-zstd", marker = "python_full_version < '3.14'" }, + { name = "brotli", marker = "platform_python_implementation == 'CPython'" }, + { name = "brotlicffi", marker = "platform_python_implementation == 'PyPy'" }, + { name = "inflate64" }, + { name = "multivolumefile" }, + { name = "psutil", marker = "sys_platform != 'cygwin'" }, + { name = "pybcj" }, + { name = "pycryptodomex" }, + { name = "pyppmd" }, + { name = "texttable" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/59/3f/ac248f25f3901d3d6cf80ac99d5bac6fd1e5e6543c1812c79b02b6074c60/py7zr-1.1.3.tar.gz", hash = "sha256:8d51894abb38355bf14881088bb97f01fe4cb5b14ebe22f66d6297668c7e1a74", size = 71695, upload-time = "2026-06-19T09:28:29.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/40/dc7f804abd0ea167ea8d4d9b3f5455321aaf671d040fcef647e9e952e714/py7zr-1.1.3-py3-none-any.whl", hash = "sha256:17934a35089e026dec6c72ee275d9b841e646881ef822d618e805c3006661d9a", size = 72242, upload-time = "2026-06-19T09:28:27.512Z" }, +] + +[[package]] +name = "pyarrow" +version = "25.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/e3/27f57f80141379d60defe6703eb50a707325706f07fedfd1312c7a751995/pyarrow-25.0.1.tar.gz", hash = "sha256:9150a83248bfed9813ea3c3af74c3856c1984d444aa28e58bf7733b9750ddf6a", size = 1201653, upload-time = "2026-08-10T12:40:53.904Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/8b/0d23b47702fcfe8b3618d5292035099675c5a1c48258932350c08020f7b5/pyarrow-25.0.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:51093dd9e10325fbdb3c10a2ae7c4806e5c822d94e74ae4938b26524a3323fee", size = 35946180, upload-time = "2026-08-10T12:37:18.934Z" }, + { url = "https://files.pythonhosted.org/packages/d8/17/707d17a5476c55a9541fde0db8213ac30979a792864d72415f176ba50c45/pyarrow-25.0.1-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:eb6203482ff3746a5632303a7279ae0b5a304c46985b49ed1378cb350ea6728d", size = 37644787, upload-time = "2026-08-10T12:37:25.795Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b2/cdc98ecf1a6408280bc3a6a07054cdd99a3f4670acc0545d383ce113e87d/pyarrow-25.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:880523be3d29efcf83d3998835d206118ccf35e3871dbd2fb60408cf6b007a80", size = 46834633, upload-time = "2026-08-10T12:37:33.604Z" }, + { url = "https://files.pythonhosted.org/packages/c8/6e/d3fafc41f378b2c65be43b827798c0fae42049a641c8526633ed3eb573e2/pyarrow-25.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:25f8720bf6387d5dc2ebd2622112de630760419e4b66134405dd24110d15f37e", size = 50065507, upload-time = "2026-08-10T12:37:40.565Z" }, + { url = "https://files.pythonhosted.org/packages/d5/12/8d0698954b8c3001844a898e0a6900bebe83d7ee40c11195174c5122f324/pyarrow-25.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4facd65742a024a4a366328a1d2292062d72d6e023c1b7dda8d4c37544933a25", size = 49955690, upload-time = "2026-08-10T12:37:46.644Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0b/1ecb936ac6409e90a34d58eea1c7cec09a9ae6d2141b9e49ad01a2b1ea47/pyarrow-25.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aa0559502e1cd6254d6814614085dd9c5a3dd0419362978a936a3f68a9e5c3df", size = 53128198, upload-time = "2026-08-10T12:37:52.531Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1c/5236033550633c9b7377b2a53660b2bbb06cb06dc09c4356332d67643ca1/pyarrow-25.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:62cd0d785b8aa6675ee355f9fc02252a340f4441257c42674937826fd7594325", size = 27857263, upload-time = "2026-08-10T12:37:56.943Z" }, + { url = "https://files.pythonhosted.org/packages/a6/e2/9ab15b88cbfac28e16419ce5439ec29234c5172cb8259301b4ba639bdec0/pyarrow-25.0.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:df961f2e7ae9cf496459259d798652c70625f6c080650d6952f8c04053c58ee9", size = 35861559, upload-time = "2026-08-10T12:38:02.567Z" }, + { url = "https://files.pythonhosted.org/packages/58/79/a0036dbe1eabe1f73127427342f1d99982584c4a2cde2651d6c93499c6f6/pyarrow-25.0.1-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:cc4aa407fde9fc660be3939e49ea31f50f3e9fec17c0ec63159f7711edd3efc9", size = 37628383, upload-time = "2026-08-10T12:38:09.083Z" }, + { url = "https://files.pythonhosted.org/packages/13/49/d93a57d375f4bf0cf82913dd6bb54acafde83dd993be2282c81ac5616cad/pyarrow-25.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:4340f0ba6c1d2e13f21658de1d7c662ca2545018568d0030a1e9afca159d87e3", size = 46820190, upload-time = "2026-08-10T12:38:15.458Z" }, + { url = "https://files.pythonhosted.org/packages/60/c9/711ca85d79f1ec98f29a5eae2b051e25b4ecec5de3e3c0e2d5c5dcb15664/pyarrow-25.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5389cdf79447ed1515c9e31620e6e1e2302249564d603f2ad727d4f6d313e4c3", size = 50102437, upload-time = "2026-08-10T12:38:22.487Z" }, + { url = "https://files.pythonhosted.org/packages/80/53/8fb8359ff17cfb6263a1cf3ebf7caec9fe197de118719e84fcb1d0618026/pyarrow-25.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d51592cb7561e87877c506113e7adbf1342ab579e6c21f0ef44b8ba41cb74c80", size = 49942424, upload-time = "2026-08-10T12:38:28.755Z" }, + { url = "https://files.pythonhosted.org/packages/e8/83/4e5ae02a9341571b18a6fca380ac7a58ce6ddae7ab3c060208c0a1e79f02/pyarrow-25.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6109c94d8b9f3b17a041daca16cacb2f651ad8f1ef70a4232c2c0f37a23da2a8", size = 53144206, upload-time = "2026-08-10T12:38:34.862Z" }, + { url = "https://files.pythonhosted.org/packages/65/ee/197cbf47e49f83e6ebeb946a5259a48a638dea27ac774db42fe78022179d/pyarrow-25.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:8858d7bfc22e3f51529aeaa4077225029724623e4595dc9eff8c793935c34140", size = 27953934, upload-time = "2026-08-10T12:38:39.808Z" }, + { url = "https://files.pythonhosted.org/packages/cc/8d/8f271a7a034c834910ec925d56fa4b29733b1380f5289419f5aaa3b02777/pyarrow-25.0.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:c7c534ec03c358a76ea3e505e74c1b6aef290af90c444dfd092dbfe23e755b85", size = 35855328, upload-time = "2026-08-10T12:38:45.489Z" }, + { url = "https://files.pythonhosted.org/packages/d2/cd/5bac242f4e841b9971d5eb94fdfe2577e2b70be983e27401e72055786037/pyarrow-25.0.1-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:dda9470024204d7bbf2042b47c6e8a0e47a3eeb8e34405882dfaea6577e0c153", size = 37622415, upload-time = "2026-08-10T12:38:51.107Z" }, + { url = "https://files.pythonhosted.org/packages/63/1f/96d03b4e1506524f7087adb0fd6b2f69f0c9c7aaff1ec36d8030082e15a5/pyarrow-25.0.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:44a9120ce5bd81936b8ab9a88076e3fd47c2c6838e0e43630fed83626aca81d9", size = 46813813, upload-time = "2026-08-10T12:38:57.773Z" }, + { url = "https://files.pythonhosted.org/packages/98/d6/33a411115b61dbfc16ad6ad73e71730f6fea654ee3667673bc53ab0e2fe7/pyarrow-25.0.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:0befcf816e45a1af33ac775a9970b749e4868a230c7372f0ae5e932bee27039f", size = 50104452, upload-time = "2026-08-10T12:39:04.579Z" }, + { url = "https://files.pythonhosted.org/packages/33/ae/b1b97c9ca87f9f9ddbb5230c798df94eccce61bd79b9b45458c69a478588/pyarrow-25.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3f89685964f46e4216103c75483aac0c0692a5f72212d7ca835adba5ede56ce3", size = 49951343, upload-time = "2026-08-10T12:39:11.8Z" }, + { url = "https://files.pythonhosted.org/packages/98/9e/a112df5cfd5a68cb1d9fc31cfe38c28d5aec9f10865ce37ecef2e4450873/pyarrow-25.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6943e2fe7954d29d84de45d29d34c8dc36ce96570e67d89aa9976e650a4a9138", size = 53144784, upload-time = "2026-08-10T12:39:20.503Z" }, + { url = "https://files.pythonhosted.org/packages/31/24/97e8bd98f1e3b07e2ba08bcdff690674fbe16d69a7d2712cc3884665e615/pyarrow-25.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:31e49a7888fcdf3a835da33ae777f6bb9a866334e5a789282fc26dcf426f7f15", size = 27870159, upload-time = "2026-08-10T12:39:26.161Z" }, + { url = "https://files.pythonhosted.org/packages/36/4c/b525824ad3094076919273cd97db61fb3d78252dee76fa3b8dc8f76774aa/pyarrow-25.0.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:bf0b672390cdcb640d7288f96b826d71ff4e9abb254a86c89890baf51a29cee6", size = 35885255, upload-time = "2026-08-10T12:39:32.366Z" }, + { url = "https://files.pythonhosted.org/packages/08/62/448bb0e940de41aec31d1a956e63ad9c54afdf122a103cc3ab20c2a3ce33/pyarrow-25.0.1-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:38a9a4b4b9613380e200641891495a56c3d5a98a092db4a870af9975e220471d", size = 37644461, upload-time = "2026-08-10T12:39:38.142Z" }, + { url = "https://files.pythonhosted.org/packages/6e/9a/13587e38bd4806fd218f50fd13b8903fab60588a699ff0c406372e5b4043/pyarrow-25.0.1-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:0b726ad7e7b669be982b0c71c07fe4b037d654354130da79a7902a669e93a66b", size = 46877146, upload-time = "2026-08-10T12:39:43.722Z" }, + { url = "https://files.pythonhosted.org/packages/8d/61/1c5d1229fa21da4cff5365e41e57177aaac57c563c727f35419b8513d1c1/pyarrow-25.0.1-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:9171748cdf796972d85a4b60157c279913e242992e350c90c7450182a9838b2a", size = 50131616, upload-time = "2026-08-10T12:39:49.304Z" }, + { url = "https://files.pythonhosted.org/packages/43/20/291e1d65cc0b09aa19f03cf25cf51a2f5fa94b5db315178f2d254ed5cad4/pyarrow-25.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b7a296aac7a71fa0886c08e155ddb6c636a50013f801f6178daafa0f9e726188", size = 50008879, upload-time = "2026-08-10T12:39:56.891Z" }, + { url = "https://files.pythonhosted.org/packages/8b/7c/1b7c9ec28e76576337e4f97b31141c9a181b89b6d1d6221e9d8205621a58/pyarrow-25.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0fe7c8b6c03969b49c8c66182e4a18e3819ab92d07cfab5d8370c531b9369ef0", size = 53170864, upload-time = "2026-08-10T12:40:04.918Z" }, + { url = "https://files.pythonhosted.org/packages/b7/75/f3d789dc06011a765d14d86bda799cf72ac1d715b6a6edecaa0d73d95062/pyarrow-25.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:f729cfdbd36fd99d543b67a914d2de044c84ebe45be8b34902b299b608c15c8f", size = 28620729, upload-time = "2026-08-10T12:40:51.41Z" }, + { url = "https://files.pythonhosted.org/packages/fc/05/647a8ee6f7c2662feb6921315617bc04dcd6034763fb61b1199720bf6162/pyarrow-25.0.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:59a2de54c0cbd954da861eee4d1d330f8e909c45b53455baef696380f2c55033", size = 36130288, upload-time = "2026-08-10T12:40:11.014Z" }, + { url = "https://files.pythonhosted.org/packages/93/f8/c9ee997554d7bea94520667dd1933f109ac1da3ee3556d2b49381e023484/pyarrow-25.0.1-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:35935cd5de130aa5cf4dea052a63e6bf2e17006c35c3a468194242b9b2bf5956", size = 37762187, upload-time = "2026-08-10T12:40:16.592Z" }, + { url = "https://files.pythonhosted.org/packages/a2/08/a28c01c7fe9e96e8233ce2d13df1d402f4f999f848f51d2daacd6bb4c036/pyarrow-25.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:f3831aaa25c67a99f99dc8b05873cb9d64560390372e2aa197ce9dd4a3f06a44", size = 46888003, upload-time = "2026-08-10T12:40:23.242Z" }, + { url = "https://files.pythonhosted.org/packages/1b/b9/58612e977d28dc58c878448866838369ee8da2f1e7cc8ed2c84b952aafee/pyarrow-25.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6a1fdfc6659b6b19022f2e50627fb5cf7156a66c46bf4299379955cbe742382a", size = 50079036, upload-time = "2026-08-10T12:40:29.169Z" }, + { url = "https://files.pythonhosted.org/packages/72/13/66e1402dcc860e1dc2760b1e0292c9a569b62b3bccab69def1b3e907d006/pyarrow-25.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:169d3429d5be7c752125890620f75a60776d38b0035eddae939651640822332e", size = 50040226, upload-time = "2026-08-10T12:40:35.186Z" }, + { url = "https://files.pythonhosted.org/packages/78/10/3f1a5497a7ef732ab0f03ecca3e66d89d9c0f57fdc61b4794c456b781f01/pyarrow-25.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:119297a6dc197e45d9c6d4415f7814a67ffa36c180d26f68c154c58067ae782d", size = 53149035, upload-time = "2026-08-10T12:40:41.454Z" }, + { url = "https://files.pythonhosted.org/packages/93/c0/37d4a7e8e2f7a6076283673d5298018ca26478b934c6ee369e10505ab32c/pyarrow-25.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:4288f27577352d608ca08553b0865e4a9b3aa14820c5d95b53337218d609835b", size = 28753071, upload-time = "2026-08-10T12:40:46.623Z" }, +] + +[[package]] +name = "pybcj" +version = "1.0.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/14/c9/e2de4f98c21f2ff9e58047395b6a8e17701a0f2977f0e63f80948f61647f/pybcj-1.0.8.tar.gz", hash = "sha256:6818270692912d47e81ccd777b7d0ed2ad3a19ef7aaead3735b38048c80bf368", size = 31763, upload-time = "2026-07-16T22:47:24.705Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/60/c96205182721cea0f5668cef3f6321b23a14ef0764bbc31a0e4773c84a8b/pybcj-1.0.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a5f977b14950ab26c9032784164719f16a4238115a8fe9ae3dcc82dab06cb208", size = 32732, upload-time = "2026-07-16T22:46:28.744Z" }, + { url = "https://files.pythonhosted.org/packages/a3/4d/c20fd8f230f5b5ad3c7cce5e2e639478e16a0ac82c96c01452607e7a4bb2/pybcj-1.0.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:da783c9e002826e6e4e4d6f92e49ab1a77bee5d8e6edc1b99cdee2e883d4cb56", size = 24629, upload-time = "2026-07-16T22:46:30.01Z" }, + { url = "https://files.pythonhosted.org/packages/5b/d2/6e49e51df5aaebac83876414ddbde6ce45a5364488007fe49d4962248651/pybcj-1.0.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a039943fcd80f9924189949909beeca83910bf19c5602c0d7eb3582109f28628", size = 24934, upload-time = "2026-07-16T22:46:31.097Z" }, + { url = "https://files.pythonhosted.org/packages/42/f2/fb31ae098739dd7a3ed131ca5e538703e37f6624a45b02dfe65d0fd29446/pybcj-1.0.8-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:efa420a3565e381e15e6425a3b2887ddf2be6dc66eb1d68e79ce0f177229ebb8", size = 52555, upload-time = "2026-07-16T22:46:32.348Z" }, + { url = "https://files.pythonhosted.org/packages/bf/6c/3b6ccd183d696435aae1dec4c62e8118907f5a2b0900845334ae061dabe1/pybcj-1.0.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0de1f6c90178f5947e4b578821aa2f1f87a78a761ae603aa33a8ad3d8b9b9cac", size = 51414, upload-time = "2026-07-16T22:46:33.679Z" }, + { url = "https://files.pythonhosted.org/packages/71/3d/85aea36e36a336f0f0a72b6f0e97035c36b06efd34cace50f23c3ac100ec/pybcj-1.0.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6722171da5846d9374f2d55474ffd1298ff2e2b21dc6b81a7806bb17ee1c634d", size = 50614, upload-time = "2026-07-16T22:46:35.016Z" }, + { url = "https://files.pythonhosted.org/packages/3c/e7/808083487bc8aaa369d9e93755dd76a88b9203f028a4d3018474754acf7e/pybcj-1.0.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cbca168d4d0aa75cca780b95f530f842b81ebc8d72f36d7865287b59364593a1", size = 50068, upload-time = "2026-07-16T22:46:36.577Z" }, + { url = "https://files.pythonhosted.org/packages/e1/1c/386a50186383045293cd0e1e969a48143e0c073a18fed3dd0b7edec935e3/pybcj-1.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:090eb05fe7a2f7cd7eb42809616ce1b49437c3e995a8aae2faa92b66f218172f", size = 24917, upload-time = "2026-07-16T22:46:37.805Z" }, + { url = "https://files.pythonhosted.org/packages/31/1e/abe31870216273249fd2e4724430d958ea28496825b7772a2e1a58c1fa03/pybcj-1.0.8-cp311-cp311-win_arm64.whl", hash = "sha256:077460a97a69ccd914d09d2a2ad493a48568b356fb14871ce54fb6bb7f3cccc2", size = 24233, upload-time = "2026-07-16T22:46:38.957Z" }, + { url = "https://files.pythonhosted.org/packages/09/32/63b96b702fc4848834ce552302fbdccad92f67886eaf3fbbed530569f4a1/pybcj-1.0.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:748af4545040da68dfae8cdf9f902ac7c29f209aaf6450a970abe0302d1b0f58", size = 32798, upload-time = "2026-07-16T22:46:40.083Z" }, + { url = "https://files.pythonhosted.org/packages/a2/21/0b501901021499e41afe7d0148c94ee26dcf045d3e1389bf1b42a61d11a6/pybcj-1.0.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:190e21c3bdb6b28c63999889668a3f80f5d7eb13b957f2dfda53c9ddeb3d946a", size = 24673, upload-time = "2026-07-16T22:46:41.288Z" }, + { url = "https://files.pythonhosted.org/packages/b3/97/c05d5800d742f5162bd06ef790dfcf73128431328f16abe7a0e2109d8ca5/pybcj-1.0.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:384b25dfe66868329a3872c6eae668033e009e4e86754eba3a70b656c9eb4208", size = 24958, upload-time = "2026-07-16T22:46:42.469Z" }, + { url = "https://files.pythonhosted.org/packages/05/0f/9db13432a6f8878f90c108a68fda46e832eea53585cb5dee8bdbc9472467/pybcj-1.0.8-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b480efcd66cfb4533ede6c3d67224ff477c8dd661613826edff9c95921a562d6", size = 53297, upload-time = "2026-07-16T22:46:43.93Z" }, + { url = "https://files.pythonhosted.org/packages/76/59/5629811698e6cfaea6cf159cf86fa471904ceb60448dc8b80233bba2e392/pybcj-1.0.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a50b58f9b9d9978c55e3219b6816a1021a778b028a810b36aa754407591cb5ae", size = 52332, upload-time = "2026-07-16T22:46:45.252Z" }, + { url = "https://files.pythonhosted.org/packages/b2/0a/c5bd982957b5fd785f02dffcb3f6f45a93143e1e8ccc8224e19b3915fc84/pybcj-1.0.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1997badf9e59221470f84e193ac8c1bab158acfe6b058ffdc28c331807967ff9", size = 51192, upload-time = "2026-07-16T22:46:46.674Z" }, + { url = "https://files.pythonhosted.org/packages/7a/79/1d421d2d45e565a0f8eab8ce6f795e31beca96f658c1e483dac64a466a28/pybcj-1.0.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4f0818cf48fbfddbae487536f3fcd69cfadfb7293630ab8658b66e89a0836d6a", size = 50849, upload-time = "2026-07-16T22:46:48.006Z" }, + { url = "https://files.pythonhosted.org/packages/7b/c3/daddd6edc01689b1cb75733bd3098231bae20c9e77d7022dc0b1c40e56fd/pybcj-1.0.8-cp312-cp312-win_amd64.whl", hash = "sha256:26e3e4d287f306996902289fc0e88b36d0fc817802f4fc4537b40a6518726585", size = 24956, upload-time = "2026-07-16T22:46:49.159Z" }, + { url = "https://files.pythonhosted.org/packages/a7/fc/9c668e2cd1432f7ede31bc131ab336c8602659374bc731bfaca6cf208bbe/pybcj-1.0.8-cp312-cp312-win_arm64.whl", hash = "sha256:82d2e46eff6c3fe8d16f6515f9ab0598eb960af9a2218907c5e0e9f993d7a666", size = 24251, upload-time = "2026-07-16T22:46:50.33Z" }, + { url = "https://files.pythonhosted.org/packages/25/c1/9d8822f1b97813f21b5907b351edb0f607c9736e21637812edf407a2dae6/pybcj-1.0.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9f0e496c49dce294fb41a2221e7b3f96156bb940d8cfe359d441909f1cf241ea", size = 32799, upload-time = "2026-07-16T22:46:51.625Z" }, + { url = "https://files.pythonhosted.org/packages/6f/8b/248154c815e683c0f991c471bedb7476d7c91fd8a56918f1ef66d2341ea5/pybcj-1.0.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0657c9534d480a43b11743cad4209d140d09d417adaf19213ff395686ed08812", size = 24673, upload-time = "2026-07-16T22:46:52.799Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f7/f168c7b091fc41fc7ef6d9ed6cde2ec10bb4814f14ad21b493881476636e/pybcj-1.0.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:784443d0c075871689692679ef01cfe85eca789cc8d091f842fa02f62dead9d5", size = 24955, upload-time = "2026-07-16T22:46:54.069Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a1/7b802ee7c7730521a102dadbdf944943795b3e9ca3ca665dbbdd1213f781/pybcj-1.0.8-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9195ce382f21e13df7ecc0df8fb42c5f391a7ac516066af16b023e6bd2f86046", size = 53344, upload-time = "2026-07-16T22:46:55.272Z" }, + { url = "https://files.pythonhosted.org/packages/4b/cf/c4b0248051cdb7af7f38223db63427175e755db1f1a7905e781e923f6d53/pybcj-1.0.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e5e67ec32176985bbf941185319a3fe385527b6826d457a8ec67dd43b5f0b5fa", size = 52410, upload-time = "2026-07-16T22:46:56.541Z" }, + { url = "https://files.pythonhosted.org/packages/52/77/9afed44c590a19940e04fdf38b7f55e7db3a8b35e3f6320340d99be25ca8/pybcj-1.0.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:20b657e4fe3e701a0f64a7c1224694820687334b17593d74a878f7124f10b24f", size = 51282, upload-time = "2026-07-16T22:46:57.748Z" }, + { url = "https://files.pythonhosted.org/packages/10/4b/7eaf8cf0ad598cc2035a24186a3e2bf45ec798279dad58484d0eb940d4b3/pybcj-1.0.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a5b4c66b5358cd241b6ff81a8fafd5806e816d378c810a796ad51865be5533f7", size = 50935, upload-time = "2026-07-16T22:46:58.94Z" }, + { url = "https://files.pythonhosted.org/packages/39/f4/04d46f5059af00d2fae6086a7f47ebc23e553900ca75ea2a2e276d3a436c/pybcj-1.0.8-cp313-cp313-win_amd64.whl", hash = "sha256:e47d9c655d276200e5d08f7b550097dacc826364b44931f0fbdc0da2e4bdf448", size = 24956, upload-time = "2026-07-16T22:47:00.127Z" }, + { url = "https://files.pythonhosted.org/packages/63/cc/387af6844cdc53be20a9271998bc4a15a96360f06ce8829193d4a45f6b19/pybcj-1.0.8-cp313-cp313-win_arm64.whl", hash = "sha256:f561988aef99f07e991d0708ca6fe86e766d545c0a20e58bdbd38615a615e419", size = 24249, upload-time = "2026-07-16T22:47:01.28Z" }, + { url = "https://files.pythonhosted.org/packages/ff/9a/6ae6062f0a7707a6c818f69653af34be90dffec0450c6a39790a1a7d918e/pybcj-1.0.8-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:b8d80571db5f89944aced42378b208afe38339008027ec56303e11628615a906", size = 33353, upload-time = "2026-07-16T22:47:02.452Z" }, + { url = "https://files.pythonhosted.org/packages/52/7d/182735114b34301326ad197daae729e1b2a67c2be8e4ee661acabb1c4e04/pybcj-1.0.8-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:07eac7a1a8804230060fe56a5d828c620ee2d70acd31aef80705a01627da5946", size = 24737, upload-time = "2026-07-16T22:47:03.754Z" }, + { url = "https://files.pythonhosted.org/packages/4d/0a/0d97486364bdf079631fc9b72b9cad42579fe2f0ce575fc67208037ce041/pybcj-1.0.8-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:af962c96a799ee7b13b9747a73240ba7f73e8643c276492f10e1dc60b564b295", size = 24980, upload-time = "2026-07-16T22:47:04.915Z" }, + { url = "https://files.pythonhosted.org/packages/b7/28/f50bbf5c154f6eebca31789228b547e135fe541d46c85a026cadb842e8f2/pybcj-1.0.8-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:067982ad967ce68ae28c13cc27f96d8b65b5f497819dd4ad5c4f05ffc2fb2ae3", size = 53385, upload-time = "2026-07-16T22:47:06.039Z" }, + { url = "https://files.pythonhosted.org/packages/8e/4f/9f226e64cf82b59d9f803e59f32496edfcd52a40305378eb1dd1f78bb18d/pybcj-1.0.8-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f23a36e978f4620db473b08239ab56dc57a479c83fd5d3808bc95e5bdbc1a703", size = 52372, upload-time = "2026-07-16T22:47:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/fe/d7/b52cbdaee0e41fd44edcf032dbcfe5bce7a4b0a8f9fe3fb38ec402fe99a7/pybcj-1.0.8-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ba3b8f1efd1ebbe3ee99a599c6ea745877a41675a0ade763903b644ccd58da97", size = 51326, upload-time = "2026-07-16T22:47:08.53Z" }, + { url = "https://files.pythonhosted.org/packages/52/16/cafe2644f876639ae85c0a6fbe262c11f8065dd4b806eb4f6ace190076a3/pybcj-1.0.8-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:09c3fe78d325a499fdd0a003b04b0009a3921666dc590d1b7a496dc365eef3a9", size = 50874, upload-time = "2026-07-16T22:47:09.752Z" }, + { url = "https://files.pythonhosted.org/packages/87/c4/767af5f90007cf5b138b2b4b40cf34998ca143fb22210c9d718d04eb2b22/pybcj-1.0.8-cp314-cp314-win_amd64.whl", hash = "sha256:0074af187b1acce9e31717fc9aa42bc36b67f1a44088a8b44f4f4792af688ee6", size = 25225, upload-time = "2026-07-16T22:47:11.144Z" }, + { url = "https://files.pythonhosted.org/packages/22/30/bdbe671d8156ef0f3d8a5ac4d0bccc98bf1d573e1bb10ff6225383211351/pybcj-1.0.8-cp314-cp314-win_arm64.whl", hash = "sha256:458a5bff57f36fba7af822df64da335fa1781d592dd7f802f347ae1f75939aa0", size = 24460, upload-time = "2026-07-16T22:47:12.479Z" }, + { url = "https://files.pythonhosted.org/packages/c3/13/45ec85efc37d71b3def7ad755d9ab964c1a00e9ebc02fd1cd6b199f2535f/pybcj-1.0.8-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:083b41b59672d4aa893b44769bed7a41abfde43211b27d47a0d4d66a59fdafad", size = 33916, upload-time = "2026-07-16T22:47:13.599Z" }, + { url = "https://files.pythonhosted.org/packages/ab/c8/0988ce2bd104c24285a967e2dbddf9c07e0055354fae6a9ccace4202ef66/pybcj-1.0.8-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d432a32bfc23475b7fd62a5eb1c3243a8329ff95aa0e3c941d57902dc6e7c87", size = 25026, upload-time = "2026-07-16T22:47:14.777Z" }, + { url = "https://files.pythonhosted.org/packages/86/37/ba7823ed5831d656eb7e841e026492d8540b59235210b68ba885c8bd0219/pybcj-1.0.8-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:cb1601253a15abfaba42e0bdbde4d459d2afcafdc97dee0d9b698e589167fd8d", size = 25268, upload-time = "2026-07-16T22:47:15.909Z" }, + { url = "https://files.pythonhosted.org/packages/74/1e/572c7e32da9bca384aa28401c09c153eb5bf1b0c64e249e9f13fbbdfadae/pybcj-1.0.8-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78498748ebea7e1483f9cfdeac4a08687f6e2773e3a4223c420ab1beae95d75d", size = 59685, upload-time = "2026-07-16T22:47:17.227Z" }, + { url = "https://files.pythonhosted.org/packages/67/09/737dcd04aa137c91e33b89b8d68b763419c39feff14c9cf5eeb945954a6b/pybcj-1.0.8-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3817997e73d60ccbc731a47e007fe02213eee816cfe6070eb8347c6286aa3cc2", size = 57872, upload-time = "2026-07-16T22:47:18.476Z" }, + { url = "https://files.pythonhosted.org/packages/53/31/519a41bf9ea3c58368bd72e6bd3a2eaf735aef206e715e87e2d0c4f5bb6f/pybcj-1.0.8-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f2a9146d8f3df70305dba6cb9c3d25f285a9a69309e4941333962f5408a244be", size = 56908, upload-time = "2026-07-16T22:47:19.85Z" }, + { url = "https://files.pythonhosted.org/packages/38/6a/fdc7b48e1b27f5cd44f554ca730e1928074d51db5bc640ec92323c46a689/pybcj-1.0.8-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5824e498e2dfafc19a2de2bdf54e5c2857144d84983ac8e13e54b1f7b78e3f50", size = 56063, upload-time = "2026-07-16T22:47:21.1Z" }, + { url = "https://files.pythonhosted.org/packages/cc/c2/3d3d99065816de8acafc77917ac4c0b8e8df74f407ec2955a26f8b641a67/pybcj-1.0.8-cp314-cp314t-win_amd64.whl", hash = "sha256:331c21f0636150d4b846e0749cb0e8d6cbd133692368b391f9ba75dc02d5c51f", size = 25481, upload-time = "2026-07-16T22:47:22.357Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/0901ba3b67842dbf4263c832ab8b05d6441eabfd97bec1d77d27b90a7a4c/pybcj-1.0.8-cp314-cp314t-win_arm64.whl", hash = "sha256:935e0588be20a2b7c3554a6415d1fdb66acfde037df718b7927033b658428518", size = 24893, upload-time = "2026-07-16T22:47:23.547Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pycryptodomex" +version = "3.23.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/85/e24bf90972a30b0fcd16c73009add1d7d7cd9140c2498a68252028899e41/pycryptodomex-3.23.0.tar.gz", hash = "sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da", size = 4922157, upload-time = "2025-05-17T17:23:41.434Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/00/10edb04777069a42490a38c137099d4b17ba6e36a4e6e28bdc7470e9e853/pycryptodomex-3.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:7b37e08e3871efe2187bc1fd9320cc81d87caf19816c648f24443483005ff886", size = 2498764, upload-time = "2025-05-17T17:22:21.453Z" }, + { url = "https://files.pythonhosted.org/packages/6b/3f/2872a9c2d3a27eac094f9ceaa5a8a483b774ae69018040ea3240d5b11154/pycryptodomex-3.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:91979028227543010d7b2ba2471cf1d1e398b3f183cb105ac584df0c36dac28d", size = 1643012, upload-time = "2025-05-17T17:22:23.702Z" }, + { url = "https://files.pythonhosted.org/packages/70/af/774c2e2b4f6570fbf6a4972161adbb183aeeaa1863bde31e8706f123bf92/pycryptodomex-3.23.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b8962204c47464d5c1c4038abeadd4514a133b28748bcd9fa5b6d62e3cec6fa", size = 2187643, upload-time = "2025-05-17T17:22:26.37Z" }, + { url = "https://files.pythonhosted.org/packages/de/a3/71065b24cb889d537954cedc3ae5466af00a2cabcff8e29b73be047e9a19/pycryptodomex-3.23.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a33986a0066860f7fcf7c7bd2bc804fa90e434183645595ae7b33d01f3c91ed8", size = 2273762, upload-time = "2025-05-17T17:22:28.313Z" }, + { url = "https://files.pythonhosted.org/packages/c9/0b/ff6f43b7fbef4d302c8b981fe58467b8871902cdc3eb28896b52421422cc/pycryptodomex-3.23.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7947ab8d589e3178da3d7cdeabe14f841b391e17046954f2fbcd941705762b5", size = 2313012, upload-time = "2025-05-17T17:22:30.57Z" }, + { url = "https://files.pythonhosted.org/packages/02/de/9d4772c0506ab6da10b41159493657105d3f8bb5c53615d19452afc6b315/pycryptodomex-3.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c25e30a20e1b426e1f0fa00131c516f16e474204eee1139d1603e132acffc314", size = 2186856, upload-time = "2025-05-17T17:22:32.819Z" }, + { url = "https://files.pythonhosted.org/packages/28/ad/8b30efcd6341707a234e5eba5493700a17852ca1ac7a75daa7945fcf6427/pycryptodomex-3.23.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:da4fa650cef02db88c2b98acc5434461e027dce0ae8c22dd5a69013eaf510006", size = 2347523, upload-time = "2025-05-17T17:22:35.386Z" }, + { url = "https://files.pythonhosted.org/packages/0f/02/16868e9f655b7670dbb0ac4f2844145cbc42251f916fc35c414ad2359849/pycryptodomex-3.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:58b851b9effd0d072d4ca2e4542bf2a4abcf13c82a29fd2c93ce27ee2a2e9462", size = 2272825, upload-time = "2025-05-17T17:22:37.632Z" }, + { url = "https://files.pythonhosted.org/packages/ca/18/4ca89ac737230b52ac8ffaca42f9c6f1fd07c81a6cd821e91af79db60632/pycryptodomex-3.23.0-cp313-cp313t-win32.whl", hash = "sha256:a9d446e844f08299236780f2efa9898c818fe7e02f17263866b8550c7d5fb328", size = 1772078, upload-time = "2025-05-17T17:22:40Z" }, + { url = "https://files.pythonhosted.org/packages/73/34/13e01c322db027682e00986873eca803f11c56ade9ba5bbf3225841ea2d4/pycryptodomex-3.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:bc65bdd9fc8de7a35a74cab1c898cab391a4add33a8fe740bda00f5976ca4708", size = 1803656, upload-time = "2025-05-17T17:22:42.139Z" }, + { url = "https://files.pythonhosted.org/packages/54/68/9504c8796b1805d58f4425002bcca20f12880e6fa4dc2fc9a668705c7a08/pycryptodomex-3.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:c885da45e70139464f082018ac527fdaad26f1657a99ee13eecdce0f0ca24ab4", size = 1707172, upload-time = "2025-05-17T17:22:44.704Z" }, + { url = "https://files.pythonhosted.org/packages/dd/9c/1a8f35daa39784ed8adf93a694e7e5dc15c23c741bbda06e1d45f8979e9e/pycryptodomex-3.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6", size = 2499240, upload-time = "2025-05-17T17:22:46.953Z" }, + { url = "https://files.pythonhosted.org/packages/7a/62/f5221a191a97157d240cf6643747558759126c76ee92f29a3f4aee3197a5/pycryptodomex-3.23.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545", size = 1644042, upload-time = "2025-05-17T17:22:49.098Z" }, + { url = "https://files.pythonhosted.org/packages/8c/fd/5a054543c8988d4ed7b612721d7e78a4b9bf36bc3c5ad45ef45c22d0060e/pycryptodomex-3.23.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587", size = 2186227, upload-time = "2025-05-17T17:22:51.139Z" }, + { url = "https://files.pythonhosted.org/packages/c8/a9/8862616a85cf450d2822dbd4fff1fcaba90877907a6ff5bc2672cafe42f8/pycryptodomex-3.23.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f489c4765093fb60e2edafdf223397bc716491b2b69fe74367b70d6999257a5c", size = 2272578, upload-time = "2025-05-17T17:22:53.676Z" }, + { url = "https://files.pythonhosted.org/packages/46/9f/bda9c49a7c1842820de674ab36c79f4fbeeee03f8ff0e4f3546c3889076b/pycryptodomex-3.23.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdc69d0d3d989a1029df0eed67cc5e8e5d968f3724f4519bd03e0ec68df7543c", size = 2312166, upload-time = "2025-05-17T17:22:56.585Z" }, + { url = "https://files.pythonhosted.org/packages/03/cc/870b9bf8ca92866ca0186534801cf8d20554ad2a76ca959538041b7a7cf4/pycryptodomex-3.23.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6bbcb1dd0f646484939e142462d9e532482bc74475cecf9c4903d4e1cd21f003", size = 2185467, upload-time = "2025-05-17T17:22:59.237Z" }, + { url = "https://files.pythonhosted.org/packages/96/e3/ce9348236d8e669fea5dd82a90e86be48b9c341210f44e25443162aba187/pycryptodomex-3.23.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:8a4fcd42ccb04c31268d1efeecfccfd1249612b4de6374205376b8f280321744", size = 2346104, upload-time = "2025-05-17T17:23:02.112Z" }, + { url = "https://files.pythonhosted.org/packages/a5/e9/e869bcee87beb89040263c416a8a50204f7f7a83ac11897646c9e71e0daf/pycryptodomex-3.23.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:55ccbe27f049743a4caf4f4221b166560d3438d0b1e5ab929e07ae1702a4d6fd", size = 2271038, upload-time = "2025-05-17T17:23:04.872Z" }, + { url = "https://files.pythonhosted.org/packages/8d/67/09ee8500dd22614af5fbaa51a4aee6e342b5fa8aecf0a6cb9cbf52fa6d45/pycryptodomex-3.23.0-cp37-abi3-win32.whl", hash = "sha256:189afbc87f0b9f158386bf051f720e20fa6145975f1e76369303d0f31d1a8d7c", size = 1771969, upload-time = "2025-05-17T17:23:07.115Z" }, + { url = "https://files.pythonhosted.org/packages/69/96/11f36f71a865dd6df03716d33bd07a67e9d20f6b8d39820470b766af323c/pycryptodomex-3.23.0-cp37-abi3-win_amd64.whl", hash = "sha256:52e5ca58c3a0b0bd5e100a9fbc8015059b05cffc6c66ce9d98b4b45e023443b9", size = 1803124, upload-time = "2025-05-17T17:23:09.267Z" }, + { url = "https://files.pythonhosted.org/packages/f9/93/45c1cdcbeb182ccd2e144c693eaa097763b08b38cded279f0053ed53c553/pycryptodomex-3.23.0-cp37-abi3-win_arm64.whl", hash = "sha256:02d87b80778c171445d67e23d1caef279bf4b25c3597050ccd2e13970b57fd51", size = 1707161, upload-time = "2025-05-17T17:23:11.414Z" }, +] + +[[package]] +name = "pydantic" +version = "2.13.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/53/ef/fc4f868f4e2cee79f863883abffceff107875f569b848507319842d2a681/pydantic-2.13.5.tar.gz", hash = "sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08", size = 845750, upload-time = "2026-08-28T14:04:00.916Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", hash = "sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73", size = 472589, upload-time = "2026-08-28T14:03:59.136Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/f9/8a06bea35ef8daf588f707784c973a7046e0034c8d8cfb08828eeffb8b75/pydantic_core-2.46.5.tar.gz", hash = "sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc", size = 472262, upload-time = "2026-08-28T10:01:31.677Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/b6/81d2d19ea0be2c03664381b59f65fa72fc7969decedae00bc2c4ad835708/pydantic_core-2.46.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a1dee1b804ff4d11c663636cf15d2ea47e9f79cd56c033fb1cbf08924842a48f", size = 2074737, upload-time = "2026-08-28T09:57:57.711Z" }, + { url = "https://files.pythonhosted.org/packages/0c/18/b70da8300e292df4099684ea11b1958043580d2f50d2dc8bf7e542bdd84a/pydantic_core-2.46.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d625a186a65201c23a9e3b8ed9c47e90a026e03256608cc91851c6709096844f", size = 1921751, upload-time = "2026-08-28T09:57:59.265Z" }, + { url = "https://files.pythonhosted.org/packages/e7/1a/0d590341b6ffa4b4aca83508e6b8db4761aaeacfc15a25ca3815876d4797/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8507560a9284e1370bb048ed4282012fbef4e8d109875b95e884d228552061", size = 1948231, upload-time = "2026-08-28T09:58:00.678Z" }, + { url = "https://files.pythonhosted.org/packages/7d/1d/02eb35761c51f2f7b1b042d6ab4cda6600f0c8c88a2243b3f734376201e5/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f93c5fe914d75fbec9a49209b00da5f08e9e467d69da2b1510c81940cfd10be", size = 2020708, upload-time = "2026-08-28T09:58:02.267Z" }, + { url = "https://files.pythonhosted.org/packages/4a/ea/f86073830e35d508cc8ddf9c3d9e6e6840fcb88d34bf726b0b4710186f27/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c767f552b21b10f774aeac128e828eafb796adfa1b666a18bf6321453c3a", size = 2194914, upload-time = "2026-08-28T09:58:03.934Z" }, + { url = "https://files.pythonhosted.org/packages/bb/d7/fc36240d7791ce90939e51608568c33bfdae26202016f9770c229a487d86/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:701b2e04b560eeb4bddf7a25ab8ca476176e34fdbd9a0e18196f0d12d4685f0b", size = 2235622, upload-time = "2026-08-28T09:58:05.516Z" }, + { url = "https://files.pythonhosted.org/packages/cf/bc/3fa2d76b83162820a17da7f645b28d1cba99fc8e1e5fc6517067ec450fa1/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49776eab08766a08dfff7012f8b422dcd7e25e43b316eedf0477c24fcfa84b7c", size = 2062091, upload-time = "2026-08-28T09:58:07.135Z" }, + { url = "https://files.pythonhosted.org/packages/ab/9a/095d557bb492c90cd8a70a6dd048bf793d433d03d86c81c11e912e4cd049/pydantic_core-2.46.5-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:a2468d93d181667a7abd66e1b64bb9f76f361b0fef8faddf687456453576f5ee", size = 2089904, upload-time = "2026-08-28T09:58:08.814Z" }, + { url = "https://files.pythonhosted.org/packages/24/98/7b76b1ad10a19a617a52aaa1d80e159115af939b095e86f8e756fd52e0df/pydantic_core-2.46.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:53feb344243bb9510a9dec7bf3cf1b64d88a98af5dc7872a5160465f8b198c8e", size = 2132244, upload-time = "2026-08-28T09:58:10.435Z" }, + { url = "https://files.pythonhosted.org/packages/20/32/7d6ca365fadba186a0c8f85de1a701663bce81efd309d9479be58687622f/pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cd5214352ae68f3b5e9af7768bdc5253695ee069675db3480518420b3be881f2", size = 2143901, upload-time = "2026-08-28T09:58:12.033Z" }, + { url = "https://files.pythonhosted.org/packages/f8/09/eb9a6aa57f22fd1541a9c0aa2a1f3aeef3ec65347d33e10a6da2f43e0ee9/pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:9432f3598db432cb51c5b37fdbf29a60fcccc79e30d37a05022776a6bc4ab689", size = 2299425, upload-time = "2026-08-28T09:58:13.614Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f9/548a5bb9d4ba8cd26e26daf48052236f6b38bb61e7b7241fbc3c995719eb/pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8feeac04b5794e513e710af2f9c87d49f31a6dc47967bb264a1fed61a8989bec", size = 2318566, upload-time = "2026-08-28T09:58:15.199Z" }, + { url = "https://files.pythonhosted.org/packages/4a/20/06454d18834c02c406c9133f1a3b485305fd9ee984f9636c2f730bef6a9d/pydantic_core-2.46.5-cp311-cp311-win32.whl", hash = "sha256:892a881d5f68c2b9ea304b7a6c2c60d9343df578a311b0f86b94bc8f1ffe8129", size = 1954258, upload-time = "2026-08-28T09:58:16.813Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c2/718b9deb4b72453b5d8c7447a3b14cb77bef36917ef5f514e0948a4096a0/pydantic_core-2.46.5-cp311-cp311-win_amd64.whl", hash = "sha256:40375c2d05acec10323e45dfe2077ac44bc74659008614af5069034e2cfc781c", size = 2041030, upload-time = "2026-08-28T09:58:18.288Z" }, + { url = "https://files.pythonhosted.org/packages/67/ea/c1d1a5b72d6e1ff7f377a4d9199f6591f095beb5b409a8a5d89f7238d939/pydantic_core-2.46.5-cp311-cp311-win_arm64.whl", hash = "sha256:28a6a556cd3b6066bea827857f9d9cce027c96f776e512f544a581f9e42161f8", size = 2009234, upload-time = "2026-08-28T09:58:19.929Z" }, + { url = "https://files.pythonhosted.org/packages/82/3f/76358795aa7a8c6d4f36e2cb828ad1c90ee118e1393a9281664f5aade9d4/pydantic_core-2.46.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b9fe6fb92520e3fd61f2e49000b6911b188824f089b75973ea06d6267f0b476d", size = 2076516, upload-time = "2026-08-28T09:58:21.576Z" }, + { url = "https://files.pythonhosted.org/packages/db/50/26b091836076ce4cb2fac264186936acc069e0595772cfd02a563bc4761a/pydantic_core-2.46.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a39ac25a9a2fa4072efdb429833c4a4c8009a51ff9eea3eeae131713cd27991e", size = 1922874, upload-time = "2026-08-28T09:58:23.766Z" }, + { url = "https://files.pythonhosted.org/packages/09/f0/2a8ce3849e299d44e2d2c196b6082643a3235565a735cb51db7a6261f614/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fdc8b93a41521988916eeaa271173fcca7fa0803d62f87675aac8dcec1c8e29", size = 1951772, upload-time = "2026-08-28T09:58:25.435Z" }, + { url = "https://files.pythonhosted.org/packages/87/46/ac0dc8bdd9e6048183a14eb127764e7ad9240021c17513074a4711b0e31e/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b98134087d9de723658d17a42c7d0da8d6e2ef08015dee7dc93889047315f5e4", size = 2031832, upload-time = "2026-08-28T09:58:27.102Z" }, + { url = "https://files.pythonhosted.org/packages/c4/c2/339de5bef7be36301a2231eaa52e62163742c2281f11b5f4892bc79785cd/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e652ab17569c94bff5475520f907b7148b8c24036a8ebbe5cf7cf7493d28579a", size = 2208645, upload-time = "2026-08-28T09:58:28.948Z" }, + { url = "https://files.pythonhosted.org/packages/7b/a0/9ff22b797724262da14427abaed4dd1d864a139693fc5e7809114376a716/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d925f3d9afd05a8c0fb3a1031463a8d59ebe5e2afad297e29c78be19e13b4e62", size = 2265935, upload-time = "2026-08-28T09:58:30.625Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a4/eb9409ec0736e50aa70a412f16c204ed149516846912f7e6724d4c73ee53/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fc5be0abd4a407e200d844b404e33639a554e7bd0d448e7b9ae181be4789ac2", size = 2066284, upload-time = "2026-08-28T09:58:32.289Z" }, + { url = "https://files.pythonhosted.org/packages/c0/02/7f6156ffc926857f1c37c07d9a388682865a81830ab6a1b637082c25e399/pydantic_core-2.46.5-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:816ff0a6550ffc06c098ccd2e0698600f9aa7da192a79eaa6f9af504a35db869", size = 2105889, upload-time = "2026-08-28T09:58:33.986Z" }, + { url = "https://files.pythonhosted.org/packages/92/b1/e781d357ebe09fc929f995700f1b3503e8897f1cece183ecb1300d4d67e9/pydantic_core-2.46.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c7ea57fc63aa7da93a1bd2d644e6577befae10c52c4e36377635eea1056a74f5", size = 2158006, upload-time = "2026-08-28T09:58:35.647Z" }, + { url = "https://files.pythonhosted.org/packages/70/0a/644597d84ab400e50609c192120b85c9681c22d3a20461b9060a79be0a7a/pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:efd62a42486f1bda5d24cb4f63d15a3c7768375fe83d36f9417b4ad7a2fb20b3", size = 2158408, upload-time = "2026-08-28T09:58:37.38Z" }, + { url = "https://files.pythonhosted.org/packages/1e/ee/ca3b7b3a4b3769ffe9ce9432a7c9be755de9593a46d3b0d54d0409323e44/pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:2bc9419666990c06d7397831f2126a1ecc3594aaa3ff7de5bf2d066802f4e07b", size = 2309609, upload-time = "2026-08-28T09:58:39.22Z" }, + { url = "https://files.pythonhosted.org/packages/ce/52/39fa1f451486019524ca685020390e7ca351832fd874530ba30c8628e6dc/pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:18a09e1e1011b462f2e32774f25859ef1223d5c2b0546a633cf56654710721e0", size = 2342618, upload-time = "2026-08-28T09:58:40.89Z" }, + { url = "https://files.pythonhosted.org/packages/81/5e/468fc630568c61dcef3cd47ad32ffbeed9af643f49208d1ea86ab4f890c4/pydantic_core-2.46.5-cp312-cp312-win32.whl", hash = "sha256:5cb482e9e84c851f4e623fe4acc1ced89168cf1fe18f7089db4548c8f5bbb65b", size = 1939475, upload-time = "2026-08-28T09:58:42.591Z" }, + { url = "https://files.pythonhosted.org/packages/cf/c9/4c19f41b84cf6b622a72fbeed7665b25d47a187d68d47d0d430c07f23268/pydantic_core-2.46.5-cp312-cp312-win_amd64.whl", hash = "sha256:5e81740c09e310f5aa5cbd3e434a01c154d4bef93241c7877b39f211d2b78ba8", size = 2043140, upload-time = "2026-08-28T09:58:44.272Z" }, + { url = "https://files.pythonhosted.org/packages/af/dd/0c1a050299147c746e5256db16d645ab5efd4f78c59937d581a0524e74a2/pydantic_core-2.46.5-cp312-cp312-win_arm64.whl", hash = "sha256:f7b0ec93a2893de856652154d73b7ba622f26fa97726487dcac373de5f4c6084", size = 1997729, upload-time = "2026-08-28T09:58:46.13Z" }, + { url = "https://files.pythonhosted.org/packages/f5/37/5abe39a8372a61d3dc3c1338fc504281c01b32fdb3169cd7187153b56d3e/pydantic_core-2.46.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:b7ca9034437b6022f941f4857459562ee00a560b97e7cce8a0ec5a74fc6766e0", size = 2075885, upload-time = "2026-08-28T09:58:47.856Z" }, + { url = "https://files.pythonhosted.org/packages/21/43/6323b1f8b217780454c61304bcd2b38ae4762f50754414124603ccc90bb2/pydantic_core-2.46.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f332f0e72a5a0400141f830744e141bf9f97917878dbe968669e8a7fefea78ff", size = 1922768, upload-time = "2026-08-28T09:58:49.58Z" }, + { url = "https://files.pythonhosted.org/packages/0f/a3/c05ca796e1197618a774b01e596aeedfefc2f7d8c01ae3054e910b120e8a/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:193375f3548919d3f0b60936ca113ada3e38f264f91b9b8e0508efaad57be931", size = 1951241, upload-time = "2026-08-28T09:58:51.511Z" }, + { url = "https://files.pythonhosted.org/packages/68/32/33bc39ac705c52cffc908e8389f9754fdb208aea5c69cceddf4eb3ce99af/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79bdfa52f843137045b2d081cc05c120ba6665d29b7559c2c47690906f39279f", size = 2031975, upload-time = "2026-08-28T09:58:53.166Z" }, + { url = "https://files.pythonhosted.org/packages/b0/70/2333e885c0f6a67bc105c5916965dac9b57f2718ee20d81d1a06a4ebdc13/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:24922243639cbdac66c75fcb6fd6495a9cb52b213d62f9a0d16f0310b1ff8038", size = 2208542, upload-time = "2026-08-28T09:58:55.017Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ea/296debfb4264207bbda5936133892e027c0a58875ad53ebd512fba8ec3a2/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76fe65e607be28c7fd4d56fc3c42b1583aa058ce3408b7ad0fd540171d31f9f", size = 2264692, upload-time = "2026-08-28T09:58:56.767Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/9e4de77a6271e07a76d2d58b11c091a979c191ed2939bf80067568b369d2/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f7b393a8b3da82f5c1fc0751e6d01ac6c55b93c18226a60bdfba4a724efafd1", size = 2066633, upload-time = "2026-08-28T09:58:58.531Z" }, + { url = "https://files.pythonhosted.org/packages/8d/db/f9e9d0c97445987b2084823d5c240de88087338f04fc2cfaa2df186b8049/pydantic_core-2.46.5-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:7ac031912d54f3d83ef3b3eb98dfabc1608802e2202263d25957eeed40b94761", size = 2105235, upload-time = "2026-08-28T09:59:00.421Z" }, + { url = "https://files.pythonhosted.org/packages/07/c5/79169b047b3b2c3e99e04bc76372af9637e0bf6db638274fa927df96369e/pydantic_core-2.46.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:837b396ca3d7b74091ca623f6cbd8351bd42d670a79c2683e79fb089f06a2de5", size = 2157367, upload-time = "2026-08-28T09:59:02.442Z" }, + { url = "https://files.pythonhosted.org/packages/26/b5/ba6057afb7c291bd449f51b867f95aef2072941c4ce4e5c31d6ffd132d3b/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:5ee239d575f80b08eca11f6e20f90c4c695de7825c67eefe6091fbf20dda648e", size = 2158420, upload-time = "2026-08-28T09:59:04.2Z" }, + { url = "https://files.pythonhosted.org/packages/6e/28/2057abecaafdc22912afa819603a51f0a62d40643b7c4871c51721fea9be/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:e80675d75ae2cd14372cb65cad5400d9347a3d3f6c13000183f22dfd027283ed", size = 2309588, upload-time = "2026-08-28T09:59:06.048Z" }, + { url = "https://files.pythonhosted.org/packages/71/9d/881156dc404e27479c4246128d73538464cab4a239bec61995e227644c30/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:9c4b71f10dd532fb7a5cbc8f58707779e64f03a258c2bf8bfbaecfcd9970b519", size = 2341866, upload-time = "2026-08-28T09:59:08.539Z" }, + { url = "https://files.pythonhosted.org/packages/5a/38/d66f443a259f84d13babdceae568e572b0ed26da17ca5d0a649ebb110a67/pydantic_core-2.46.5-cp313-cp313-win32.whl", hash = "sha256:97bf8de4d541598c94a59344eeb988a94c08ff76b5723c41f6567ec18c7892ea", size = 1938580, upload-time = "2026-08-28T09:59:10.402Z" }, + { url = "https://files.pythonhosted.org/packages/2c/1e/1d5371213f4cc9a7ed70c0bfcc7911de22311ee99a662a56077d7292d2ac/pydantic_core-2.46.5-cp313-cp313-win_amd64.whl", hash = "sha256:15f4a94963c95accac15b7b657bb177d3ad82bb90b0d0526d9a9b85079925db5", size = 2041980, upload-time = "2026-08-28T09:59:12.396Z" }, + { url = "https://files.pythonhosted.org/packages/5a/48/4222d90b1c67568bace4dec6dca6271449c66de3595d72b6d098f5fde597/pydantic_core-2.46.5-cp313-cp313-win_arm64.whl", hash = "sha256:d22a945598fb91236b4dd793a6e42e4f3dd7740bb5aace5ebd7d4c08d13bb575", size = 1997213, upload-time = "2026-08-28T09:59:14.245Z" }, + { url = "https://files.pythonhosted.org/packages/8e/8a/14596f2a8367da50cf7cbac48169ee5d9c8e11d486a3b527082384630c72/pydantic_core-2.46.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c1c43ad4339643d70ebb8124e1305a7dab423001eff58bb41a0f731adbc98355", size = 2074081, upload-time = "2026-08-28T09:59:16.141Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e", size = 1920497, upload-time = "2026-08-28T09:59:18.065Z" }, + { url = "https://files.pythonhosted.org/packages/8e/26/092079428f86e927e030b2c0ced87df69dbb1c875cdeaa67bf42ea2be746/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5086029a57366b8cf81b130a43908738095c270c21a8d7f0e8bdfdb89718e2f3", size = 1952130, upload-time = "2026-08-28T09:59:20.476Z" }, + { url = "https://files.pythonhosted.org/packages/08/c3/8ec0e290a9ebaebd64047bf5fda94be835c6b1551b02437e4b76778fbcd7/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46c25dda9d092a06c08db76ffe0a197107904d0dfac653f7d5306bbcd6d6119c", size = 2026371, upload-time = "2026-08-28T09:59:22.227Z" }, + { url = "https://files.pythonhosted.org/packages/01/72/4fd20ad520fb8da0157f95b27a7eb05a72790ef08138e7701ac972c342ea/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:37ea7b83c935e5b0d68c9449b82651accf78a10828b2c02b2f2d9e9496446c21", size = 2202822, upload-time = "2026-08-28T09:59:24.277Z" }, + { url = "https://files.pythonhosted.org/packages/31/b0/d16e0771206b29314f0d52198b720be21e8a99ab2bf11e3bc0d7c9cebdff/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e64e88d5585bea9ce95861079de72006c7fa6d3df4e3a3b65ba31eb979c15c9f", size = 2262756, upload-time = "2026-08-28T09:59:26.608Z" }, + { url = "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f", size = 2068352, upload-time = "2026-08-28T09:59:29.044Z" }, + { url = "https://files.pythonhosted.org/packages/08/7c/570abb1ad2155348dc754ea91be22e5aaa18eb6d69a6068f7c6f2679a6ed/pydantic_core-2.46.5-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:a2a5e1d0ff29adddc9f6d6821a66302e4493f8ca898b715b6b1182c2c201ea0a", size = 2104777, upload-time = "2026-08-28T09:59:30.95Z" }, + { url = "https://files.pythonhosted.org/packages/8e/25/5bf74adc65a1ac5b7be3f6cb0bcb5433615c1598a801c19d830d84c98ded/pydantic_core-2.46.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:03b9666e41e35d8909852ba191a0607520f81b74eaf12ccf8737005dbb313821", size = 2156312, upload-time = "2026-08-28T09:59:32.604Z" }, + { url = "https://files.pythonhosted.org/packages/90/6a/2ef38830675e050121040618135564ed56b860b45433b02d9b4ebece46f3/pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:a91c17edf6eea2402cb5457b4c89e99bc5ed1004aa34c4adf1d4258c1a5c22c2", size = 2150067, upload-time = "2026-08-28T09:59:34.453Z" }, + { url = "https://files.pythonhosted.org/packages/90/ef/a7dbb03a14a64c2a4621f989c615ed9a892535a6cad938fc27079f919d80/pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b49924c73a235e969511bf2aabdff3beebf9820931f646c80274d5d780010c47", size = 2304516, upload-time = "2026-08-28T09:59:36.194Z" }, + { url = "https://files.pythonhosted.org/packages/68/f8/6bb4c4b80e8a6fde1904c64a51c62a1d04fcdfa3ea521a66b2ddefa1d885/pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:2cbd9a5eff05e51c447c34dfa4632145b26b09120cf04bd0c871e44c1a5e1c9a", size = 2335223, upload-time = "2026-08-28T09:59:37.931Z" }, + { url = "https://files.pythonhosted.org/packages/2a/80/f46b8c681195190b2c1f1c7c0a81abce60663e987613e09ef64d433dd96b/pydantic_core-2.46.5-cp314-cp314-win32.whl", hash = "sha256:2d5d76654becf5efd62c9e51c3756c67b49498b0c9a40884934c40807adbd074", size = 1934827, upload-time = "2026-08-28T09:59:39.836Z" }, + { url = "https://files.pythonhosted.org/packages/f7/3c/60674207246bc0a4009d2391b7c7251c7159f279c8d2ab8aae8ef46f3dee/pydantic_core-2.46.5-cp314-cp314-win_amd64.whl", hash = "sha256:fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0", size = 2042648, upload-time = "2026-08-28T09:59:41.792Z" }, + { url = "https://files.pythonhosted.org/packages/69/0c/117c562c7c1babdf44576b72a5e496906506c93690387ecfbca7c729ae2e/pydantic_core-2.46.5-cp314-cp314-win_arm64.whl", hash = "sha256:045ab3b6d308439e32b81cc173bba5b9018bc6ed896afd0c65b3b009b1699af5", size = 1989652, upload-time = "2026-08-28T09:59:43.702Z" }, + { url = "https://files.pythonhosted.org/packages/e8/66/9336ae58f9eb68c41d121894e52c4c89eccb07eb8f602a04ee9c3f37736a/pydantic_core-2.46.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8816f3d218beb4b787de5c9759c259b8fa61f9dec42dc7811f320a33771778b7", size = 2065829, upload-time = "2026-08-28T09:59:45.364Z" }, + { url = "https://files.pythonhosted.org/packages/c5/02/bc19b47a96c2d3109760711acf22369e56bd7e405ca52f7ade164d2ead57/pydantic_core-2.46.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:bce57638e08ac148e5778cce7feb968307a727d66f8e2274a543d0cf0c9ad6a3", size = 1905716, upload-time = "2026-08-28T09:59:47.18Z" }, + { url = "https://files.pythonhosted.org/packages/52/a4/70b47c0509923dd98ccfed04fb3e32ea3849c82a0ff2205bb41009b43c00/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976e1128455aa595ea04c79ccfedff1aaeab96ee013fcc916bed120c4f0ad94f", size = 1934216, upload-time = "2026-08-28T09:59:49.241Z" }, + { url = "https://files.pythonhosted.org/packages/52/ab/aa03b65f7bb198585edf806b906c3223ecf1795543e39e23aec4cce27ad2/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b891faeedeafba41b2983e5001a81b6a915b69544c7e7570d1989ce1c36ac7", size = 2010635, upload-time = "2026-08-28T09:59:51.692Z" }, + { url = "https://files.pythonhosted.org/packages/3c/8b/0da06343f30b84ec549aafd309c6456223d5dc8bd36af504c573faad561d/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f194189415698233dd1114a093a9b56e61e2c57e11b469be3b0506f46f0771c", size = 2209369, upload-time = "2026-08-28T09:59:53.582Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5b/844c4defaa34a3df66eb9257087d121d70c201298b96abdf9f492fc2f1bf/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82a36973cf8a2ef5406f4fe2edbf8ed0c99629535d959e0b100c76a32535a111", size = 2253238, upload-time = "2026-08-28T09:59:55.484Z" }, + { url = "https://files.pythonhosted.org/packages/f4/64/a4e536cb16d7f61a7fd3120b46c577fc7fa7325992f69c4f52bc786d77d8/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdbb78909f52b981d3b2d56b97328d71eb0b974c36bd77c920123a7ebb192829", size = 2065740, upload-time = "2026-08-28T09:59:58.038Z" }, + { url = "https://files.pythonhosted.org/packages/5f/75/aaa38c6bc2d085f6605b34eabdc6a8a4e0b2e61fc9c8e6e52b28e97b3125/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:52e24eacdb536cade636aa90fb851835222becff8484b7001fdc78cb0290f2aa", size = 2087425, upload-time = "2026-08-28T09:59:59.898Z" }, + { url = "https://files.pythonhosted.org/packages/55/ae/fcab4cfc39aba3689e1d20c8b5250ad280957022c09af2ed9cd585602a5e/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:37ae34309d7bd8c0d61ab839668058f2a7962ea1fc51d105d2db228fe0618034", size = 2139306, upload-time = "2026-08-28T10:00:03.057Z" }, + { url = "https://files.pythonhosted.org/packages/2d/f4/f1d03a4bc9d9acbc62f4d742b8a319af52f71885079868b2ff8e48a651ee/pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:0cdbada856a1c69a7624a64d3d9aefe79300bd6ef827b43a4f265010b9b55184", size = 2144589, upload-time = "2026-08-28T10:00:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/83/f3/7a53bb1356de514a4cd295f25b6ac39237895620c0462d2592b76c16e114/pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:545f26c504b27c3758439a5e6d9349931f0a04f855668d5fe323c89e82300a38", size = 2288882, upload-time = "2026-08-28T10:00:07.931Z" }, + { url = "https://files.pythonhosted.org/packages/cd/94/5a81583660c175c59d49ffb09f4b3a44debeaf86a19fca664ae1cdd9ee32/pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:ff218293c9c806138dca139765e3b067621be52bcd93cdc14c7711be7ddc90a9", size = 2335210, upload-time = "2026-08-28T10:00:10.177Z" }, + { url = "https://files.pythonhosted.org/packages/5a/9f/5d685c2693b972d1a59c998586e8823712b66603aeff47ee60a4bdaafd37/pydantic_core-2.46.5-cp314-cp314t-win32.whl", hash = "sha256:97cf3eb53a8cccacf9d46686a0926186c9bfb5574f2ed66d3639d5fe117cd3a9", size = 1921180, upload-time = "2026-08-28T10:00:12.35Z" }, + { url = "https://files.pythonhosted.org/packages/70/12/5c94ee16d65a37a15f9e869f5e6256df111154491173801a4c5e800ab548/pydantic_core-2.46.5-cp314-cp314t-win_amd64.whl", hash = "sha256:d2f9fc07a8042a8f95925b35c4f04f469707c981fc33245b6ca187cf5d2dd290", size = 2020515, upload-time = "2026-08-28T10:00:14.774Z" }, + { url = "https://files.pythonhosted.org/packages/63/19/67830dda664e6bdf9285ee2e40f355d0d7d6b92aa0c42e8d217bb8d33d36/pydantic_core-2.46.5-cp314-cp314t-win_arm64.whl", hash = "sha256:acf8a67ba51f4ca9ddbd0e6b3000a65ac51ab734661778b3e7ba64d99a710f2f", size = 1989276, upload-time = "2026-08-28T10:00:16.984Z" }, + { url = "https://files.pythonhosted.org/packages/af/1e/ecca01fce348f7e8afa9572441ff6f7d1cc70d21e4859f33944d10877e1e/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:c14ad3bdc85ee7f318742c457ca3968a92126d144b15721c759033bfb06296c2", size = 2075342, upload-time = "2026-08-28T10:00:51.353Z" }, + { url = "https://files.pythonhosted.org/packages/1f/4c/af80c7a8032dfc897040ad5cb772bebde529a381186499e6e29987f23f8c/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0bddb4020d8f04175865ccd17eff3040874fc11fb593f424edb452653b4b947c", size = 1907219, upload-time = "2026-08-28T10:00:53.438Z" }, + { url = "https://files.pythonhosted.org/packages/be/3e/54d89e2b092e778716bf6153634ef479e955f48c261090be23aa1e0fb0b5/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2471fd51c61c610e1dcf7de44d7299283661654d11264ab4802b303368d69c47", size = 1953393, upload-time = "2026-08-28T10:00:55.58Z" }, + { url = "https://files.pythonhosted.org/packages/ea/89/828ee90cda28ce17bdefaa3a6eaf74fe430e113295a10e6126beca559d6c/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10ec717381bdbfafef34607824db4c91de69ff085e4fca3b2af91b4fa17e68a", size = 2099024, upload-time = "2026-08-28T10:00:57.794Z" }, + { url = "https://files.pythonhosted.org/packages/df/dd/053c2e4303f791f3b8f8a14ab0b22008e8eb21d868c0c90b4f9be705b76a/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:013d6f3483d81e02e7c328831808f336c8596ee33b4bd4026b9ffb1e960b8942", size = 2062540, upload-time = "2026-08-28T10:01:00.318Z" }, + { url = "https://files.pythonhosted.org/packages/d7/dd/a18df751a5e37dd51bfad7f68e766999125bebe68c9e1d10a493ad01bd63/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:e9c134bb666dd54b778b9fc0d2b50cbb7f979b9e3716f26a88c9ab3b6fc1dd0f", size = 1902040, upload-time = "2026-08-28T10:01:02.529Z" }, + { url = "https://files.pythonhosted.org/packages/b7/13/01d40f9d07ce8a779fd6e0bd8ad4fba91309500dd67b869e2e219d261a6d/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:347ec774390c87326a2e4929d58d3f7e8763a104d5d35f4cd595a4c952366433", size = 1967479, upload-time = "2026-08-28T10:01:05.004Z" }, + { url = "https://files.pythonhosted.org/packages/fa/04/c81d4841331c2178b6fb09ae225425e110ed72d990c9fe556c4ec03d1013/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e24d8f05fa2d28513d94e877e9c75ad66175376209b3977f916e240e623193c", size = 2111034, upload-time = "2026-08-28T10:01:07.345Z" }, + { url = "https://files.pythonhosted.org/packages/20/21/22102e9950b3049526d20e811b95396508377d87651edd2b80d2b3d28659/pydantic_core-2.46.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ab4b66edffb32d9e951efb3814bd104b8367a7501b81b955cacb5726d897389f", size = 2071333, upload-time = "2026-08-28T10:01:09.636Z" }, + { url = "https://files.pythonhosted.org/packages/d8/18/87aefa427d191e6d3ab1447f1efc1cdcac86af1069239b133e8a0fd7f7c9/pydantic_core-2.46.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:337639ba62a11acde6ef3aeb08c8ea755f8ef1fe5e513356c0f36a2b0d7568b0", size = 1912713, upload-time = "2026-08-28T10:01:12.285Z" }, + { url = "https://files.pythonhosted.org/packages/1f/93/fd89e9ad49b1805ca94d24ce1088b7d305f05c35ffafcedb9819d03588a0/pydantic_core-2.46.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:413a717a410d0c817ef5b786a059415550b3794e1d0c2abffd9efb93a3d9f7b4", size = 2090926, upload-time = "2026-08-28T10:01:15.19Z" }, + { url = "https://files.pythonhosted.org/packages/6f/45/8e59dab6acf8d35f02f0a958980074f31038968bdb2c983fcae9d1efee03/pydantic_core-2.46.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1e449def1945a462c464331254e5a44fca7c3b4f9aedf59ec2f50f8066dd8e25", size = 2131303, upload-time = "2026-08-28T10:01:17.937Z" }, + { url = "https://files.pythonhosted.org/packages/d5/a5/e1d4dc5180dd887a9522efc1f8716b8692b7606b1d3273d7862eaf66be44/pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:a445486499897b88a7d6c310c88ed64dd37b1b59bfd7ae9107490bbb362f47d6", size = 2145128, upload-time = "2026-08-28T10:01:20.694Z" }, + { url = "https://files.pythonhosted.org/packages/c2/d7/ad493864a7fb21c0c4df98f965e2db430cb25a9d7369b5778d5016c09fd9/pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:2d330aaba8621b1edcec8ae2c4050f63b84ccf6d98723a8f212e9684713abf0e", size = 2294560, upload-time = "2026-08-28T10:01:23.495Z" }, + { url = "https://files.pythonhosted.org/packages/02/8e/b41c84c913f29973a268e6c2b5bbf13c95adb9956c126d10da11ba3b2bef/pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b6acfb46a814762367fb7ba0828b0a17d441b92ce249a0e007474c9072662dda", size = 2317531, upload-time = "2026-08-28T10:01:26.334Z" }, + { url = "https://files.pythonhosted.org/packages/db/1d/068464f23075f66a8f1b806935e9cd9363ee446636ea70d2c22ee8659dbf/pydantic_core-2.46.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d0a24b40877af2de4950252be9d21eaf7fb07660f3c2cae1f56c6b599ada5266", size = 2140686, upload-time = "2026-08-28T10:01:28.947Z" }, +] + +[[package]] +name = "pydantic-settings" +version = "2.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5c/b5/8f48e906c3e0205276e8bd8cb7512217a87b2685304d64be27cad5b3019f/pydantic_settings-2.14.2.tar.gz", hash = "sha256:c19dd64b19097f1de80184f0cc7b0272a13ae6e170cbf240a3e27e381ed14a5f", size = 237700, upload-time = "2026-06-19T13:44:56.324Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/c1/6e422f34e569cf8e18df68d1939c81c099d2b61e4f7d9621c8a77560799c/pydantic_settings-2.14.2-py3-none-any.whl", hash = "sha256:a20c97b37910b6550d5ea50fbcc2d4187defe58cd57070b73863d069419c9440", size = 61715, upload-time = "2026-06-19T13:44:55.02Z" }, +] + +[[package]] +name = "pydicom" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7a/de/52aaf905f1f0ae7aba85996e2592ea2c1fe49157f3cfbcd1871965bdb51d/pydicom-3.0.2.tar.gz", hash = "sha256:5942bfc2d72c6fa4b3b5b62c527f54b7f2355f21d6f5d296df6bb30188df6a4f", size = 2886792, upload-time = "2026-03-19T21:46:20.935Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/e0/60466c6d712dad2cf807df315e39863e91609ffd1064ecb835994460bbda/pydicom-3.0.2-py3-none-any.whl", hash = "sha256:abf971a5440f84dbaf42c4b6758e30e62480902584f8b270b9a5d146e278a07b", size = 2376822, upload-time = "2026-03-19T21:46:19.042Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3b/81/58d0ac84e1ef3a3843791d6954d94c0b33d526c75eeb1efbce9d0a4c4077/pyjwt-2.13.0.tar.gz", hash = "sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423", size = 107515, upload-time = "2026-05-21T19:54:36.618Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/5e/ecf12fdb62546d64385c158514e9b2b671f7832108ef2ecd2020ce0af2d1/pyjwt-2.13.0-py3-none-any.whl", hash = "sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728", size = 31274, upload-time = "2026-05-21T19:54:35.362Z" }, +] + +[[package]] +name = "pymssql" +version = "2.3.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/73/3a/9332b3331c423ac6ae40adb4680d858e3e15d39ec25507fd01b45c171730/pymssql-2.3.9.tar.gz", hash = "sha256:00aa861936374f251b8e1e4535f26daed32c2fc365b891fedcd97d7863d7321b", size = 185175, upload-time = "2025-11-07T00:25:18.678Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/5b/3e8f63da36e6f9c2c53919d84fa2a59aab27b5f10d79c337a339ac3ca579/pymssql-2.3.9-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:8bd78052f94d2a519bfc3922831144b79f8c35f96347b2d76c8030670549e7e9", size = 2906587, upload-time = "2025-11-07T00:24:17.518Z" }, + { url = "https://files.pythonhosted.org/packages/cb/fb/f81211fe3050c09427bb69bb2791fbe43293d8d8c230c593aeb85100487a/pymssql-2.3.9-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:7c302c204ea7b64bbb6aa8870a48aeda430b2518d9c9ed4f680b4556ffc66800", size = 3161798, upload-time = "2025-11-07T00:24:18.683Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e1/b2a13c9cec28b47426bdf1c2f4db52c256c1dadfe939da583955754956e6/pymssql-2.3.9-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:18b8d0495649d36499fc47bdd748b30ef7d522ad02dbaa0c99a595b7aff70808", size = 2427237, upload-time = "2025-11-07T00:24:20.314Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/b65176ca09af0191316d75823fdfd9edc149264294f244c35fdef2b42227/pymssql-2.3.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2d67cf85bbbe9de5c42e0cd6b5cc439b3e4537f85cfc9216ffb81a61b22c9878", size = 2764911, upload-time = "2025-11-07T00:24:21.384Z" }, + { url = "https://files.pythonhosted.org/packages/0b/74/c2f935ee6b521886cd1dbdd70b9a451c063598357d86dd42d7dcb1fd02dc/pymssql-2.3.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:843e7cf4df2dcda0e91993fc29388a7f0cf208aa8e6ebab63c9a73c679ef530a", size = 3668315, upload-time = "2025-11-07T00:24:23.146Z" }, + { url = "https://files.pythonhosted.org/packages/77/e5/b839b63a185753db82826c3dfa8e3632cf6436c2ae6ec729f025c5401d14/pymssql-2.3.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4814affb16ec73666f890c3830dfb49d17f50914d3811f232208b01a60af7b5e", size = 3411284, upload-time = "2025-11-07T00:24:24.809Z" }, + { url = "https://files.pythonhosted.org/packages/bd/56/c5f3e94b49b7dfd8e61fcb0ff2139647da585be62bb78488d550d3a9ec58/pymssql-2.3.9-cp311-cp311-win32.whl", hash = "sha256:279f66421f5e6c332112cf99432b2a40e9d55a674f962f704b1abfcc4df556ba", size = 1316180, upload-time = "2025-11-07T00:24:26.29Z" }, + { url = "https://files.pythonhosted.org/packages/51/dd/e1495563aa55b08a6e7198b1d1c0813839a556753aed4d3c4be009bc0d94/pymssql-2.3.9-cp311-cp311-win_amd64.whl", hash = "sha256:0ce5aed7f3eb07186ac45264f835e62295995ec10d8557be6f0e12734bf80e20", size = 1997681, upload-time = "2025-11-07T00:24:28.166Z" }, + { url = "https://files.pythonhosted.org/packages/70/8c/8eabd27238056124165f53d55a925d793bc2e64254cb5c61bef443660ba8/pymssql-2.3.9-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:acb53b1cdc8858c4c65c928ea38bc11fe2dbae87b244d64175233d57ff0da1f4", size = 2890116, upload-time = "2025-11-07T00:24:29.273Z" }, + { url = "https://files.pythonhosted.org/packages/96/a9/8993eb286935d1b8104e69f2541b7d48402f33fe437522d5cf801d1a4683/pymssql-2.3.9-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2dc890adf9fe07184967e0ae88bcb2599ba520dd21ef9a335a582a4bb710b90a", size = 3148441, upload-time = "2025-11-07T00:24:30.543Z" }, + { url = "https://files.pythonhosted.org/packages/bf/6d/06105f13943c6e8285ce27f5053d38409d7eeb21ca5d15449f6804cae77e/pymssql-2.3.9-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4cf09a60226db8e12d0eb8c52e0f4d710664b49b244b80b5a2534a602d826f17", size = 2455833, upload-time = "2025-11-07T00:24:31.746Z" }, + { url = "https://files.pythonhosted.org/packages/15/e4/b33066bc1407c060120f077c7f21efeea9d5929859f928a8bc1418bd6c7d/pymssql-2.3.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f93b4e0d465b1340a373573e8166f568329d4bc95daccdd4a616e5dfe5cabc1b", size = 2791598, upload-time = "2025-11-07T00:24:33.786Z" }, + { url = "https://files.pythonhosted.org/packages/9b/a7/6f27e35203d39c6e478c68151b7847d111be9245df8bbcc9e8d606caeaf3/pymssql-2.3.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d2169f3f55d0abcbcb1b9b6a611ee85a8a61b5f11df66f16700e90dd8aa7ccd5", size = 3696961, upload-time = "2025-11-07T00:24:35.423Z" }, + { url = "https://files.pythonhosted.org/packages/7c/15/1d2b12724199ef98e06858bdb262fb5d76e43ce295058dc22d8756f79a72/pymssql-2.3.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bc678a80519a63a86fef0dda1e264b4ffc60c382a4ba8d50b9656bde71ba8e25", size = 3439929, upload-time = "2025-11-07T00:24:36.885Z" }, + { url = "https://files.pythonhosted.org/packages/37/28/07f3533a162e9db0aef417e48a4e16ba4baae5eb3ee8036ad766f2a94db5/pymssql-2.3.9-cp312-cp312-win32.whl", hash = "sha256:7ea58ea59f781d2519c6bcb9f3faea4ba861baea4cb1c2537fa2ee3a3f98a103", size = 1301950, upload-time = "2025-11-07T00:24:38.18Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ff/1232e7abd765d5b6916414ca7b2a24cecfefcaf369baaa0d1eabced31d0f/pymssql-2.3.9-cp312-cp312-win_amd64.whl", hash = "sha256:1836de4b42ea563dba77e3ba9e18f44157580eaa1c60e5e4c054cf229e8aee85", size = 1982983, upload-time = "2025-11-07T00:24:39.281Z" }, + { url = "https://files.pythonhosted.org/packages/85/2d/54a922790b3ed1f6bb1c45836fad58382b5a9f527054c934d415caa3febf/pymssql-2.3.9-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:8c4e389da9d545829db0d51bf1555bdb866ecabd61a3eb6fd6a8198c425adedc", size = 2887524, upload-time = "2025-11-07T00:24:40.897Z" }, + { url = "https://files.pythonhosted.org/packages/88/ae/819f79197943cd2d356e4ad8793a8acd49575990202533cf12536344fe03/pymssql-2.3.9-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:b589e035a98149148239bf78a9c38eb2d255f1f943633d30dd3dff6c2c23e9cd", size = 3146305, upload-time = "2025-11-07T00:24:42.069Z" }, + { url = "https://files.pythonhosted.org/packages/b5/18/a7df7a402dce5401ef32194e479cc2571397d81511c07c153552294d7aa5/pymssql-2.3.9-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5b4741fbec26e9f63ae66afc971a00b7365eec4b6a619dd2aff3abe0fa8f75ee", size = 2455424, upload-time = "2025-11-07T00:24:43.308Z" }, + { url = "https://files.pythonhosted.org/packages/85/27/91f51a406e270800043d7a15504ca8481e0095685dbc190dd8e5accd9cf2/pymssql-2.3.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:100bcd948247c7eae9f951a3f33a1fdd952bd2c683a7ce277066d4f38a960d83", size = 2790972, upload-time = "2025-11-07T00:24:44.627Z" }, + { url = "https://files.pythonhosted.org/packages/fe/1d/edf69610ead451f552ab3aea71757e2e81b5952ed5616aef80b20ceef7fc/pymssql-2.3.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fada474823586b4c417f57d6256ddc05ced313c2306c67d6677427dff488f70a", size = 3696454, upload-time = "2025-11-07T00:24:46.723Z" }, + { url = "https://files.pythonhosted.org/packages/d5/57/77d23790c3c4ee672d6d3172072e935e014df15e0446f9d289ecf898feb6/pymssql-2.3.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eaaa72530af8012b7d3d7d01e5d5a44b2f7dc04abb9e36a1eb30b914f68ae060", size = 3439485, upload-time = "2025-11-07T00:24:48.352Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ab/a1d4640ddd69a570c31cc377e0bcf44a16369c6b768e76cea2f3b47fc896/pymssql-2.3.9-cp313-cp313-win32.whl", hash = "sha256:734397cc4ffc5aecb2b312adb940b8bd6df0b5a8f52f9207157f06fe5fdacf26", size = 1301862, upload-time = "2025-11-07T00:24:49.578Z" }, + { url = "https://files.pythonhosted.org/packages/27/cc/faf4eb725794c7094a26eca77b6bb81e220de1fb45223e0d723abdcbff76/pymssql-2.3.9-cp313-cp313-win_amd64.whl", hash = "sha256:87282bf2cc318f2c87d3a26e86b9287d863d3f67d31cad077614046d60b8bcd6", size = 1983605, upload-time = "2025-11-07T00:24:50.737Z" }, + { url = "https://files.pythonhosted.org/packages/80/6d/45c161736c998942544c805ab11cccd0ebc2622f355b29bf61fffc6e934d/pymssql-2.3.9-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:437071819b3c864f9c810f2d186df147ccd89eb5923dfc7a8a3dea4cc41005a1", size = 2887874, upload-time = "2025-11-07T00:24:52.315Z" }, + { url = "https://files.pythonhosted.org/packages/7c/5d/a5af2012d6f33dd8aa44410dc1630c4b329bfb99ce13f449efcdf5bee098/pymssql-2.3.9-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:e2c64e55389b849fc84ebabdac5b3a3089e2f86eaeaa9768daf6589ef456bcbd", size = 3148332, upload-time = "2025-11-07T00:24:53.554Z" }, + { url = "https://files.pythonhosted.org/packages/49/e5/9d35d137a82d76db354d026916a94983b89a9c8c913084383c209c528628/pymssql-2.3.9-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:11f4743ff85bf40a248cba03f0ef1aec36c4748bd8c1b1c1940db04989d542b3", size = 2453981, upload-time = "2025-11-07T00:24:55.04Z" }, + { url = "https://files.pythonhosted.org/packages/f6/48/d23423b3c8a180282ec12a918a1d1ccf2084d1d8bf56249a66482baf8767/pymssql-2.3.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeb65c9397ea345148e47cf4c5f4c04280c954d6d5779d9257289cc3321ea34f", size = 2789395, upload-time = "2025-11-07T00:24:57.684Z" }, + { url = "https://files.pythonhosted.org/packages/a5/86/d3120a19ceaa8d10bd908fbc4cce294504224e96a32f88e25518196785c5/pymssql-2.3.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:12e069f058eeec41c6b3e6ca54081df6a4efeca8bd85bbc0790c439f2a1ba0d5", size = 3695581, upload-time = "2025-11-07T00:24:59.635Z" }, + { url = "https://files.pythonhosted.org/packages/99/19/d556ba7f190a26f822d0e2f72e086c7a2e655ee4021405a80441818e2277/pymssql-2.3.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:05ef3b3e2fb08e8c19226d5ed38838107842b8ceb03c2ee4095ccf7cd19c7154", size = 3438213, upload-time = "2025-11-07T00:25:00.851Z" }, + { url = "https://files.pythonhosted.org/packages/34/95/708f92b7da07fdd5a1e35a6f2939aa20650ce7414a21a59184895731741d/pymssql-2.3.9-cp314-cp314-win32.whl", hash = "sha256:2b15cf0614b3a77e344c1f81d6564c4ae14e9f61f7407b6df801d4034e4c94d8", size = 1333272, upload-time = "2025-11-07T00:25:02.912Z" }, + { url = "https://files.pythonhosted.org/packages/23/df/8fdf62807b83649dc71fc7886b5f3462a436430d342c94d3a07a7494cac9/pymssql-2.3.9-cp314-cp314-win_amd64.whl", hash = "sha256:3f6dfde0c1123f5e01b29683456e422472c0af5a533a0f46a1cbb359602ade72", size = 2037389, upload-time = "2025-11-07T00:25:04.654Z" }, +] + +[[package]] +name = "pyopenssl" +version = "26.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3f/e8/7325d258199b159eb2c03fe32107533e2832e70e63f4fb88a6aa00023201/pyopenssl-26.4.0.tar.gz", hash = "sha256:28dfcce0162b9211413e26dfbfdf1d24317fbeba18fc93c12400a1856b2a0bc7", size = 182046, upload-time = "2026-08-01T19:50:50.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/ad/2cf6d3fa2fae5c79e1ed9960c0d42badd0f94d81dd12b50604cdc839e648/pyopenssl-26.4.0-py3-none-any.whl", hash = "sha256:f0eb0cb2d581d3ad2b9c489468485e7f2ab6727d08401bcf9d824c3caddf3c1c", size = 56026, upload-time = "2026-08-01T19:50:48.94Z" }, +] + +[[package]] +name = "pyppmd" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/81/d7/803232913cab9163a1a97ecf2236cd7135903c46ac8d49613448d88e8759/pyppmd-1.3.1.tar.gz", hash = "sha256:ced527f08ade4408c1bfc5264e9f97ffac8d221c9d13eca4f35ec1ec0c7b6b2e", size = 1351815, upload-time = "2025-11-27T22:08:44.175Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/40/580b99818c9db3a09cbae8e3740f9b5127ef7fd7314daf009c487ab02eb6/pyppmd-1.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fdf55aa6ee7aef492f6896464e7a5a528f8615bb9e435f55bc8dff226fcc8292", size = 77550, upload-time = "2025-11-27T22:07:37.839Z" }, + { url = "https://files.pythonhosted.org/packages/8d/a3/f7b4c49ef920f5b2c9812f8f54f48e01435433cb6b46ec82b1b4e740714d/pyppmd-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa820aac385ac4ee57160b26d92862c69d31c08f92272dbef05fe8e619cea8d1", size = 48000, upload-time = "2025-11-27T22:07:38.983Z" }, + { url = "https://files.pythonhosted.org/packages/bc/c3/30de6f7892e77b83350e55d54a6913420591cc2c5c4d2394c219a4c461ac/pyppmd-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e16593ba4ca0a85821ae698ef06847a52937662f5ce1b130c39cca2979a4e8cd", size = 48439, upload-time = "2025-11-27T22:07:40.428Z" }, + { url = "https://files.pythonhosted.org/packages/39/22/33889cbe22a617c42df2199be54e9e1bf88393fd8643fe911eb9f982849c/pyppmd-1.3.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:486dde2294ff9b30465ab5bb0f213b20bd5ac0e4adf21be801a1ceb29aa75d9d", size = 141737, upload-time = "2025-11-27T22:07:41.641Z" }, + { url = "https://files.pythonhosted.org/packages/0c/f7/940ab2fd78caaef3a9e9833adb36e17b9d03016d8b45ae110cbb4bfc83d1/pyppmd-1.3.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89730cf026416ae2546c92738966ecf117c8176d52c229ad621a61c34643818b", size = 143643, upload-time = "2025-11-27T22:07:42.892Z" }, + { url = "https://files.pythonhosted.org/packages/75/51/129ce02d2b28a4f6788bccfe6d0ae1defc45db10eb1c4e4389cde8994ec7/pyppmd-1.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e77f5a6770950d464b50da760d53e67bce308a3abc8e3bd51db620b3f8cf1fa8", size = 138625, upload-time = "2025-11-27T22:07:44.54Z" }, + { url = "https://files.pythonhosted.org/packages/3a/89/f8390d1a21951d3d4619c854a839f7b1431746997cd98b475f614a658305/pyppmd-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8e3bf8deef44f8e03612689a6067a4a3dd7e50d2ef00af4cf987c59b62ff3006", size = 141663, upload-time = "2025-11-27T22:07:45.814Z" }, + { url = "https://files.pythonhosted.org/packages/fa/3f/b58dd8875ebbb78436f87567547967bebdf3a5586f5f243c735fc4460843/pyppmd-1.3.1-cp311-cp311-win32.whl", hash = "sha256:a3509b3f881409ebc5522942438108c48a78f8df88bcf3f9d907b74131b9431c", size = 42014, upload-time = "2025-11-27T22:07:47.058Z" }, + { url = "https://files.pythonhosted.org/packages/b5/d3/5fe05bdccdd7af04461c25a3dc34799f48ad3e9a2bd591aaec9afbc1d10a/pyppmd-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:23b83799f33f9a24577f22e092b0feecda8cd1ea33871ad8610a58629874f7bc", size = 46862, upload-time = "2025-11-27T22:07:48.162Z" }, + { url = "https://files.pythonhosted.org/packages/d4/ba/6414cbe8407c23bacce906dad0599f155b2baf6082da104e64d7f1573717/pyppmd-1.3.1-cp311-cp311-win_arm64.whl", hash = "sha256:234489036a1758670655d1ceafd4caeb93b858bd4c0ca39686837d38aef044c0", size = 45249, upload-time = "2025-11-27T22:07:49.261Z" }, + { url = "https://files.pythonhosted.org/packages/3e/89/696046e53c7aea98bb563aed3f15c3e2fa20c33e3d6c9de3c20992c586cc/pyppmd-1.3.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3faa58ab2ebe3b13ec23b1904639d687fb727270d2962fd2d239ca00fd6eb865", size = 77796, upload-time = "2025-11-27T22:07:50.362Z" }, + { url = "https://files.pythonhosted.org/packages/f1/c5/a708cdb58e76889bc65201eda12211486548ffe00ecddc5dfbdce6d4d252/pyppmd-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27703f041ee96912a5410fd3ce31c5cde32f9323bd67f72f100bd960ee67bf13", size = 48185, upload-time = "2025-11-27T22:07:51.736Z" }, + { url = "https://files.pythonhosted.org/packages/9e/5d/f299535c18009addb866d89a7044f1086e4eecf50542e57ff5bb15840195/pyppmd-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e773d8353b36f7e7973a43526993fb276b98a97839cb5dc8f4e6465ad873f41a", size = 48496, upload-time = "2025-11-27T22:07:52.866Z" }, + { url = "https://files.pythonhosted.org/packages/aa/9d/4a59b73ea8e305f9192ee26ceb7c3d57e17ccb9bcca0e99ef335db29fcf7/pyppmd-1.3.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:37b1883accf840cb0b711785d353f8548853a1401d381da007c0aec362f3ffac", size = 142620, upload-time = "2025-11-27T22:07:54.411Z" }, + { url = "https://files.pythonhosted.org/packages/88/d7/fe32c2a4f8539365e6292aed25545830a5e718a510cdb4caddd6fd8d8056/pyppmd-1.3.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1bd6d179ad39b6191ca0cbe62fb9592f33f49277b4384ad7bc5eb0e6ca27ebee", size = 144306, upload-time = "2025-11-27T22:07:55.727Z" }, + { url = "https://files.pythonhosted.org/packages/20/20/e3907cf263b58f4ed4c5315bc1ac91721c85332fd0d73a89e3e2752904ef/pyppmd-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:806cf8d33606e44bf5ff5786c57891f57993f1eef1c763da3c58ea97de3a13c8", size = 139522, upload-time = "2025-11-27T22:07:57.034Z" }, + { url = "https://files.pythonhosted.org/packages/0a/03/22d5f93251e481f23bf741dde7f59cfc3e315f60b32b63f215a2d7bb8944/pyppmd-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1826cbce9a2c944aa08df79310a7e6d4a61fd20636b6dff64a77ea4bc43da30f", size = 142340, upload-time = "2025-11-27T22:07:58.49Z" }, + { url = "https://files.pythonhosted.org/packages/34/88/38d36c1394d5e331db9708dae08863c87c059bd5b6e43b20234be02a0503/pyppmd-1.3.1-cp312-cp312-win32.whl", hash = "sha256:d3ff96671319318d941dd34300d641745048e8a3251b077bddf98652d6ddc513", size = 42102, upload-time = "2025-11-27T22:08:00.124Z" }, + { url = "https://files.pythonhosted.org/packages/ee/29/1398c6f67dfb66367babeed2980caee837d0a488705e3dff7ff159e017e7/pyppmd-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:c8c1ad39e7ebde71bf5a54cf61f489bf4790f1dd0beb70dc2e8f5ad3329d7ca7", size = 46957, upload-time = "2025-11-27T22:08:01.587Z" }, + { url = "https://files.pythonhosted.org/packages/d2/41/ee3193c16472a5a1c5f1965abb8fa87a7ad455c39688e9a0c2d87d6a7027/pyppmd-1.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:391b2bf76d7dc45b343781754d0b734dcbf539b92667986a343f5488c4bf9ca0", size = 45214, upload-time = "2025-11-27T22:08:02.721Z" }, + { url = "https://files.pythonhosted.org/packages/f0/01/7cc3854b0e1304b90d2435e946db5e1c42e103adf840a68400002fc838b4/pyppmd-1.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:4b4edb3e9619fd0bc39c1a07eb03e8731db833a93b23134f36c7ef581a94b37a", size = 77800, upload-time = "2025-11-27T22:08:03.856Z" }, + { url = "https://files.pythonhosted.org/packages/dd/02/caf6305224b9432ea7373670d101392f620c1ce741d6f95458b1fb9a16a4/pyppmd-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b8b5c813e462c91048b88e2adfbcc0c69f2c905f70097001d32066f86f675bd4", size = 48195, upload-time = "2025-11-27T22:08:05.323Z" }, + { url = "https://files.pythonhosted.org/packages/45/82/8c5d3f0f738a3cf5c209d1471efda105a16417c0aaa91a2ad39efb3d4efb/pyppmd-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e8d372d9fac382183e0371cf0c2d736b494b1857a1befe98d563342b1205265b", size = 48482, upload-time = "2025-11-27T22:08:06.441Z" }, + { url = "https://files.pythonhosted.org/packages/76/9c/09ab8b4f00473f210284dacf837cae8355ad900f3fd8fd98b2bba12de4fa/pyppmd-1.3.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3b765ae21f7ed2f4ea8f32bfd9e3a4a8d738e73fc8f8dcddec9cbe2c898d60be", size = 142828, upload-time = "2025-11-27T22:08:07.611Z" }, + { url = "https://files.pythonhosted.org/packages/64/fd/673d429df719affa1445611288aab6111c0bc87e51eb4677fe2421a1dd64/pyppmd-1.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd00522ddfcc292304577386b6c217758c0c10e1fb9ce7877ad7d3b7b821a808", size = 144502, upload-time = "2025-11-27T22:08:08.869Z" }, + { url = "https://files.pythonhosted.org/packages/cf/0f/64dad213f56eaf23210ac7d3a5dedb19ad8f186f8b8682f65e7d51d9fa4a/pyppmd-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3de62099ff2ca876c2d39bc547bcba6f7b878988663abd782a5bad4edac3bb44", size = 139718, upload-time = "2025-11-27T22:08:10.114Z" }, + { url = "https://files.pythonhosted.org/packages/74/61/bd5dbe8d7374748687d48f0bc44e6b930470e09552b1bbc65ef899ab673e/pyppmd-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:011f845de195d60fe973a635a1f4be981b7d80f357a8acb1b2d83bdf5087c808", size = 142578, upload-time = "2025-11-27T22:08:11.388Z" }, + { url = "https://files.pythonhosted.org/packages/42/ae/0af00a9b1cd59b6821eb182413033d5ddbe05dfcde7511e3a6b1a5b83f6d/pyppmd-1.3.1-cp313-cp313-win32.whl", hash = "sha256:7d61bd01f25289b6ae54832db4254602fb0c6d105f6e6bf0aee39b803b698b98", size = 42102, upload-time = "2025-11-27T22:08:13.297Z" }, + { url = "https://files.pythonhosted.org/packages/6c/6d/311d8faca142f39b4d158c94ed7eb237a197d41dd7eb67f53442a7904e04/pyppmd-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:df8d84ab72381058a964ba66e5e81ed52dbd0b5ad734a5ef8353452983506098", size = 46962, upload-time = "2025-11-27T22:08:14.759Z" }, + { url = "https://files.pythonhosted.org/packages/bb/42/24b59b6bb73a3fec96c7f81521d146c2ac89ffcb89cf9e848f62e0660381/pyppmd-1.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:124a04aab6936ba011f9ad57067798c7f052fdb1848b0cc4318606eea55475e6", size = 45209, upload-time = "2025-11-27T22:08:15.933Z" }, + { url = "https://files.pythonhosted.org/packages/65/10/ac2a011af1c7c40b6482e60d85d267ac5923fb8794b51bfddbb56b04d1ec/pyppmd-1.3.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:ea53f71ac16e113599b8441a9d8b6dcd71cfdf15cdb33ba5151810b8e656c5ec", size = 77897, upload-time = "2025-11-27T22:08:17.104Z" }, + { url = "https://files.pythonhosted.org/packages/20/13/737f4dac06685865d23f51b7061dbe9373c7bcc60b5b6456cd08301bc807/pyppmd-1.3.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:985c8703b53e5f68fe17f653e96748d60b1f855676c852a6e67cd472eb853671", size = 48268, upload-time = "2025-11-27T22:08:18.263Z" }, + { url = "https://files.pythonhosted.org/packages/c2/d3/c50ebaee8b8a064fe9a534e98df5051e309efb705728aadff4e6893cd87f/pyppmd-1.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:33daa996ad5203c665c0b55aff6329817b2cb7fa95f2c33a2e83ed0121b400cb", size = 48521, upload-time = "2025-11-27T22:08:19.742Z" }, + { url = "https://files.pythonhosted.org/packages/80/6c/4a97c0a0ab7640aeddde4843cb6381b80ecb71fe2c6c48b9032d60586b11/pyppmd-1.3.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b49870c6d7194f6eb80f30335ca03596d153e02fcde2c222e4f1202ac25f7fcf", size = 142892, upload-time = "2025-11-27T22:08:20.972Z" }, + { url = "https://files.pythonhosted.org/packages/8f/22/744c32c7da3de171d9e62a1b2cb4104544ac778358565a3dbc06a2253324/pyppmd-1.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:385e92c97c42e8a6f0bfc0e4acfc6c074cb1ba3a2f650f292696dd9f19e2e603", size = 144550, upload-time = "2025-11-27T22:08:22.594Z" }, + { url = "https://files.pythonhosted.org/packages/4a/18/84af6808e0754923062122d3ee9f0532050f1612069d558bb5d53978e67a/pyppmd-1.3.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:017a1e2903f1c3147a1046db486990d401e8a25eb52c320b1fc2fb3e7b83cbeb", size = 139850, upload-time = "2025-11-27T22:08:23.863Z" }, + { url = "https://files.pythonhosted.org/packages/20/5e/dc6166ea7929d442625301289d99313a5b358e3cb2e927a6bd913047e8ee/pyppmd-1.3.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f2770a4b777c0c5236b3d9294b7bf4bc15538c95d45b2079eb8ebc1298e62e37", size = 142589, upload-time = "2025-11-27T22:08:25.228Z" }, + { url = "https://files.pythonhosted.org/packages/77/92/adc6b12ddf11173a02fd631010f88ad4fe4c532363959638d5d53583a3d9/pyppmd-1.3.1-cp314-cp314-win32.whl", hash = "sha256:b9d54cd59ce97f2ba57be1da91b3d874d129faca21c9565d7afec111f942e6a1", size = 42761, upload-time = "2025-11-27T22:08:26.917Z" }, + { url = "https://files.pythonhosted.org/packages/12/4c/5003a413d9f2743298a070df6713a75dedccc470e7adeeced5b43cad7418/pyppmd-1.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:0e64247618cb150d2909beb0137da3084fef1d3479b4cc73b5b47fda7611abf9", size = 47806, upload-time = "2025-11-27T22:08:28.059Z" }, + { url = "https://files.pythonhosted.org/packages/07/b7/db927e1df7fc3132cb57960f4ea23bf174c7e86ccec22857e6a35cccdae7/pyppmd-1.3.1-cp314-cp314-win_arm64.whl", hash = "sha256:d354d6e551d2630b0ac98f27e3ad63e86cdcac9ce2115b5dfe46e2c9d3f4e82c", size = 46122, upload-time = "2025-11-27T22:08:29.191Z" }, + { url = "https://files.pythonhosted.org/packages/a7/5f/3150227624f374b06e331a7f67ae3383e796dd90973ee17ec3e35d30524c/pyppmd-1.3.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:2d77ed79662c32e2551748d59763cfe3dcd10855bf3495937e3d5e5917507818", size = 78876, upload-time = "2025-11-27T22:08:30.635Z" }, + { url = "https://files.pythonhosted.org/packages/2b/81/11a3bba62d1d92050f4dd86db810062b506ec76d20b6e00b4ab567ff15e4/pyppmd-1.3.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:6a1f92b94635c23d85270bb26db25cc0db544e436af86efc1cf58302d71d5af1", size = 48830, upload-time = "2025-11-27T22:08:32.087Z" }, + { url = "https://files.pythonhosted.org/packages/24/47/e8f50cf89c689543d5a16c7be3df3c4afd43cbeb1a019b84ff9e82f13415/pyppmd-1.3.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:610f214f2405e27eb5a3dad7fa15f385cfc42141a01cda71995d9c1e0b09fab9", size = 48956, upload-time = "2025-11-27T22:08:33.567Z" }, + { url = "https://files.pythonhosted.org/packages/0b/0f/944b30679a8dea3ea95a66531ee30cb6feb5d011ec7fd6832069d9130bf3/pyppmd-1.3.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae81a14895498d9a23429d92114c98da478b74b8e33251527d7cff3e01c09de0", size = 152872, upload-time = "2025-11-27T22:08:35.098Z" }, + { url = "https://files.pythonhosted.org/packages/ae/87/1e48ea92994f4c72dc9b5520a6a386b21c524d3d2969c2c2a5c325929ad7/pyppmd-1.3.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d1683e6d1ba09e377e0ae02de3a518191a3d63ccdb0b6037c74e6ddf577b5644", size = 154210, upload-time = "2025-11-27T22:08:36.368Z" }, + { url = "https://files.pythonhosted.org/packages/3f/21/650911f98c4cb360442724bbdade27cb3679b0587ea77e73512693d2918d/pyppmd-1.3.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e4d74fa0f3531e9dadc56e0ace41bce82d3c0babed47b3f224101dc0dbde7287", size = 147636, upload-time = "2025-11-27T22:08:37.657Z" }, + { url = "https://files.pythonhosted.org/packages/7c/29/4f8cfc1dd67b04ced8c10669fa14c4e35a42cf4a84e1101793735a82d5f0/pyppmd-1.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7f8d6375b18b9c79127fee0885cfd52e2e983edb67041464309426571d38dcd4", size = 150998, upload-time = "2025-11-27T22:08:38.951Z" }, + { url = "https://files.pythonhosted.org/packages/c4/da/dc9e5e10bc56056bd8c33e533517cb327752cbaf172688bba3c23f6b2318/pyppmd-1.3.1-cp314-cp314t-win32.whl", hash = "sha256:de87f7acd575fb07a4ff42d41bcc071570fe759a36f345f1f54f574ecfccfc5b", size = 43016, upload-time = "2025-11-27T22:08:40.234Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a0/46dc15549ad2c0427a9825730e6bdf342045ad410543368afd4389a16f36/pyppmd-1.3.1-cp314-cp314t-win_amd64.whl", hash = "sha256:76e4800aa67292b4cc80058fd29b39e02a5dded721af9fe5654f356ef24307f4", size = 48636, upload-time = "2025-11-27T22:08:41.45Z" }, + { url = "https://files.pythonhosted.org/packages/a1/7b/7e9a83848de928c26f0ab3ee105c0da63a932a0804a94807205e6313e73a/pyppmd-1.3.1-cp314-cp314t-win_arm64.whl", hash = "sha256:e066cbf1d335fe20480cd8ecc10848ba78d99fe6d1e44ea00def48feaf46afdf", size = 46402, upload-time = "2025-11-27T22:08:42.804Z" }, +] + +[[package]] +name = "pysocks" +version = "1.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/11/293dd436aea955d45fc4e8a35b6ae7270f5b8e00b53cf6c024c83b657a11/PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0", size = 284429, upload-time = "2019-09-20T02:07:35.714Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5", size = 16725, upload-time = "2019-09-20T02:06:22.938Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/53/ed9d74092561d4b01a2ef1349d52cdbc135e526c245f366b089cfca6de49/python_dotenv-1.2.3.tar.gz", hash = "sha256:a20a594dabeaa385725aa239d5244871c143ecb356add8a20fcf23773a6c3a35", size = 58945, upload-time = "2026-08-16T16:54:54.067Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/17/c5c6b53ddc18f297992099b3d9ec16c855c0ccc83263a21fe4d1c625ec6c/python_dotenv-1.2.3-py3-none-any.whl", hash = "sha256:904552145e8bfed22162c09dab1c2b9b54fefa7b23ba780f4f26ca0316b0f0d9", size = 22780, upload-time = "2026-08-16T16:54:52.473Z" }, +] + +[[package]] +name = "python-utils" +version = "4.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5d/71/ec6665d4ce42ee5a59fffd31a4d5164f92da15ccb8c758dba13d2419ea53/python_utils-4.0.1.tar.gz", hash = "sha256:4e8e8ecaba3862f843a60c1982c99cda23b522f417006a807996a876c18beb8d", size = 43765, upload-time = "2026-08-30T19:26:04.591Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/4d/df2b7b53f759af128123afc73ce7094a29286ef4293dfeb2341f8469018e/python_utils-4.0.1-py3-none-any.whl", hash = "sha256:6017bb56498a58656ecf48e66fb1f1632c7b33f9f2968548a021563e85be1aed", size = 39920, upload-time = "2026-08-30T19:26:03.101Z" }, +] + +[[package]] +name = "pytz" +version = "2026.3.post1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fb/48/fb042503b6ca6cd271261dc559fd6432f7d8c713153e9ec5c591af4dfc1c/pytz-2026.3.post1.tar.gz", hash = "sha256:2211d3fcf9a797d3405cac96ac7f61d80e6a644f72a3309607282fe8a2010c5d", size = 319745, upload-time = "2026-07-25T15:12:07.385Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/7b/39c34ca613b0b198cb866466651b26b045e2009864c5183c979a3b83f383/pytz-2026.3.post1-py2.py3-none-any.whl", hash = "sha256:dd95840dd199baea12d9cc096a1d452caa6596a1c1e4b5f3dbd1541855d5e815", size = 508283, upload-time = "2026-07-25T15:12:05.782Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "rancoord" +version = "0.0.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "folium" }, + { name = "geopy" }, + { name = "numpy" }, + { name = "requests" }, + { name = "shapely" }, + { name = "xlsxwriter" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c8/12/3d3be6ba247492215cd1fbf79dc84a5dfabbffacf2abdc8f88b365778658/rancoord-0.0.6.tar.gz", hash = "sha256:263a253ab396518eb3339a25ef9b30d7547eab7b16961e3965b72e1d343437a7", size = 11963, upload-time = "2022-04-11T13:20:59.792Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/a6/f5644aea89500645e9db37f0ca25c0a830308d7d0cced71b743c4f3f235a/rancoord-0.0.6-py3-none-any.whl", hash = "sha256:8a9e26bedf2164153f4a387e389ceca486fc0653a7efac55e37c1e7aa4a92ee4", size = 11627, upload-time = "2022-04-11T13:20:57.469Z" }, +] + +[[package]] +name = "ratelim" +version = "0.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "decorator" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c5/5a/e1440017bccb14523bb76356e6f3a5468386b8a9192bd901e98babd1a1ea/ratelim-0.1.6.tar.gz", hash = "sha256:826d32177e11f9a12831901c9fda6679fd5bbea3605910820167088f5acbb11d", size = 2793, upload-time = "2015-02-27T18:06:08.53Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/98/7e6d147fd16a10a5f821db6e25f192265d6ecca3d82957a4fdd592cad49c/ratelim-0.1.6-py2.py3-none-any.whl", hash = "sha256:e1a7dd39e6b552b7cc7f52169cd66cdb826a1a30198e355d7016012987c9ad08", size = 4017, upload-time = "2015-02-27T18:06:06.464Z" }, +] + +[[package]] +name = "regex" +version = "2026.9.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/c1/6b30b775c7bcc6cf6506a4d4741c2123e8d99cd50f3fe8cbd731f5fef526/regex-2026.9.3.tar.gz", hash = "sha256:aabd43208e335f4c3f0b56de3464b066dd425983a58f6eeb5738bcd7465403db", size = 416720, upload-time = "2026-09-01T00:53:43.821Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/fc/b4ff5d9550796f9f955b6c2470f37e2b582ec944638f3004499929a69c96/regex-2026.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6fe39780de6916ecb1c664eda81802e6310fd9d4a07dccb13a86b63918e00e65", size = 493967, upload-time = "2026-09-01T00:50:00.23Z" }, + { url = "https://files.pythonhosted.org/packages/49/6b/ab60a24883b810a4b29065540f56e6f72590bb97d704d7e0ee7bcd2ba98c/regex-2026.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d75065d9f6ed1afb2a41588def408cf442cee65b3651cbd7e86650146127bb4", size = 295227, upload-time = "2026-09-01T00:50:01.804Z" }, + { url = "https://files.pythonhosted.org/packages/6c/e6/e3bf61522cd82eda85a90dd8f69c839f0ce1da64dc6e87f803bb79267c59/regex-2026.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5dd356a646fe549d42b766cb9075b54eccd3f20604d87a3eff25f1430bba5b2e", size = 290639, upload-time = "2026-09-01T00:50:03.244Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b2/e8492b054c5c9fe09bc0aefdc308b8f845ec2094b1ae779accec8f14dedb/regex-2026.9.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90aa2a7f9cc1cd2e8082db61618a2ed0f4197eef52266a6420e88277f184e328", size = 791712, upload-time = "2026-09-01T00:50:05.539Z" }, + { url = "https://files.pythonhosted.org/packages/48/03/429ee3479bb438f7b2b41147fa68d63a7ef9c7486fcd3960e04e61133cf3/regex-2026.9.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1f975a75dae06e88665e4a709873d936a7e8f9445e3d354b75de0e735d28cf71", size = 861711, upload-time = "2026-09-01T00:50:06.988Z" }, + { url = "https://files.pythonhosted.org/packages/cb/9e/6ebf3cec538ed49d0a4cf5729129fe39580ddfa80c1c59c4274651762202/regex-2026.9.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1d52739de118acf82bfbaf7046955ead4fb613d24ba4187be565cd91ff9a64e", size = 905894, upload-time = "2026-09-01T00:50:08.437Z" }, + { url = "https://files.pythonhosted.org/packages/19/e4/a7bb1e4038a170714c824dc7c739f8b911cb1172f87ab950be39e0691f95/regex-2026.9.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99034ec353c973e2c89555866083491b9a2dbe81f2fbe15fb0f2b68506232f01", size = 801135, upload-time = "2026-09-01T00:50:10.308Z" }, + { url = "https://files.pythonhosted.org/packages/bd/47/1b318fb249d5fa3dcb0375ad284d34155f0da4a2fe92c8f01edef0cb0258/regex-2026.9.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3cc1a82779315f7b2a4642d5028b39057838cd4c0415744d4e53c8b512352141", size = 773578, upload-time = "2026-09-01T00:50:12.125Z" }, + { url = "https://files.pythonhosted.org/packages/a6/16/63f2644a0a3e92623f83ccadd04873916f5b650e2028bc44ee9df104a839/regex-2026.9.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c0ea77435b1d5a27cccf27f8762f50e73fd2d94e8e412a8e5cdedb650b36d5fc", size = 783915, upload-time = "2026-09-01T00:50:14.081Z" }, + { url = "https://files.pythonhosted.org/packages/ca/f2/f078963d1dbd3632f6e25f7d972cc9a9332649ed239995bfeb403cf88a3b/regex-2026.9.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6c997a1703401089bc02d731e360127428fb4ecdf6524268e8975882ff02528b", size = 854924, upload-time = "2026-09-01T00:50:15.826Z" }, + { url = "https://files.pythonhosted.org/packages/53/46/457ac94a2a2aaa2ab5c076324dfd7e38e76f36d4d78923c4ddb8c3d93d75/regex-2026.9.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:70082b2a8f099b8bf660b553b22a4b8ffd34fcc09ef154fc6b9c7108518fc124", size = 763172, upload-time = "2026-09-01T00:50:17.682Z" }, + { url = "https://files.pythonhosted.org/packages/66/1c/db145a6ad935cdc6c694381543d53e6e7d7212287d4f8885f965e91ea4a4/regex-2026.9.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f5e8a0ce681ddabf6a35d7b817d74a94ab237ae7233a5b97118db0b4e524473f", size = 844983, upload-time = "2026-09-01T00:50:19.572Z" }, + { url = "https://files.pythonhosted.org/packages/76/00/100346c5cc2384a7ce0adfb7dbb11f4a865c76e3a920fe68542042da66ea/regex-2026.9.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3367d5eefae493ac2a1586ec11cc8213c3305528ed3f8e19d5c3871cc01da6ce", size = 789532, upload-time = "2026-09-01T00:50:21.142Z" }, + { url = "https://files.pythonhosted.org/packages/39/62/d878c1d3eed2768f19e8b6fa4aa81b0a0e6bc23fa34e64173ef48816844a/regex-2026.9.3-cp311-cp311-win32.whl", hash = "sha256:33d3a772ff62c882a5d1402045e17c0199f33b9b173139071c4203e7e0292420", size = 266766, upload-time = "2026-09-01T00:50:22.863Z" }, + { url = "https://files.pythonhosted.org/packages/e5/da/6a0ac27bacb39aca3452cdd7d1bfc361608ad000cea3e1b0d7dbaa1e2b15/regex-2026.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:8c8a63d55cdf3c716225a2f8741a1df7a52b5fa98ac7530165c9cc9b32feabcc", size = 278007, upload-time = "2026-09-01T00:50:24.597Z" }, + { url = "https://files.pythonhosted.org/packages/d8/a2/b23997814f48f823bcda615764b4fb00d72a5a06bdbb41cafa895ec62428/regex-2026.9.3-cp311-cp311-win_arm64.whl", hash = "sha256:cb6374a84f11a6b25e63aa69ee2d015286048c1efee93c4a3b5b8df62da79ff8", size = 276960, upload-time = "2026-09-01T00:50:26.101Z" }, + { url = "https://files.pythonhosted.org/packages/da/cb/cba530bc3b068fc337f8f455c63ef5ee91a4eb4c76ecf5998e5cef5aaa6b/regex-2026.9.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5db80d0b1c8238940b5957dd66b5c818ea40a221f6652fb717c027a562d09c77", size = 496699, upload-time = "2026-09-01T00:50:27.98Z" }, + { url = "https://files.pythonhosted.org/packages/81/39/f2e9fb6bbbc80f8bf67ad79d7e2e8866f7837d7c24c692f7faf8f1272e7e/regex-2026.9.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:35d48ce3dee087b63b15cd0a7a3110d0a76c29edbe1f2ad0520b8c4adb7cb596", size = 297018, upload-time = "2026-09-01T00:50:29.487Z" }, + { url = "https://files.pythonhosted.org/packages/a1/b6/c16ee58840baf7659def27ef6f62f3d9a9909670d3c1b4b98bb8b8ee47e2/regex-2026.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1f22e0d21ae7016c77175c139a7fca465b988efc1280df4816c79752068d9e2e", size = 292008, upload-time = "2026-09-01T00:50:30.929Z" }, + { url = "https://files.pythonhosted.org/packages/cb/b4/4987bf0f17604669b4ea5aef219886d0a73188c4716ff3a7d275d4d15c15/regex-2026.9.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:233662cf8cfdfe3c0e58aa8f7bbefc579b5be0ac34546f123c159804179e8687", size = 796101, upload-time = "2026-09-01T00:50:32.486Z" }, + { url = "https://files.pythonhosted.org/packages/0b/95/2a9ab02a68c8a61dc0b4882ed643b1a95740d9dc291dc26c77d19af79691/regex-2026.9.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7d2eed2e4d231278a2ccab3f4bfa2c1e39855f336475f7756a281d767d2b1753", size = 865435, upload-time = "2026-09-01T00:50:34.171Z" }, + { url = "https://files.pythonhosted.org/packages/04/92/0570d41559b446c97c1148cb9ebc1df09f2949b03c7c9bfee09976b3465f/regex-2026.9.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5e674cecb61cb160be392da07fd8a71509ef927f437fbf3215432692ed385151", size = 911828, upload-time = "2026-09-01T00:50:35.72Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8b/9cc6d4123033f7cb82df6cd8ce19eb0fc18a964afe060a03c9b26757c9f3/regex-2026.9.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:665207e41bacd435db001099eeab44103197c2c1a729d73ade74688a905ed4ce", size = 801965, upload-time = "2026-09-01T00:50:37.701Z" }, + { url = "https://files.pythonhosted.org/packages/c9/98/39262e91aa87a67c82cbe90a0df4c3d382c7a44811fe80067904085211b4/regex-2026.9.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7a7ddc9a8ca1795166a1ca80364b8ce74187fc210e112d3fb048b711b934f36c", size = 776192, upload-time = "2026-09-01T00:50:39.57Z" }, + { url = "https://files.pythonhosted.org/packages/24/e9/3bb93fe4ee4b6f8ce7ba69b527c4a63cfa3393fc425ab26486041fe441c8/regex-2026.9.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e3037d02425863ce9501afbaa04ba967162810004bacde39a53ea9a5b740eb32", size = 785053, upload-time = "2026-09-01T00:50:41.156Z" }, + { url = "https://files.pythonhosted.org/packages/f9/05/31d5bc2553a700c0dfc6b5b6a13c61cdcd1210fde1e304cfa18a33f138b2/regex-2026.9.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3de4eab8c763393b75bbb26f81934ab2cc8794f48f79e90622e3ab7ea57f3d14", size = 860546, upload-time = "2026-09-01T00:50:42.746Z" }, + { url = "https://files.pythonhosted.org/packages/65/a3/2e1e854d80becda0f061093805bbfc037a5849448f46d0a2b71a070d45e2/regex-2026.9.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:98620c9c4c22568ad70f57b80527c780b6f8fd26e36507bf8e2273262a228275", size = 765841, upload-time = "2026-09-01T00:50:44.5Z" }, + { url = "https://files.pythonhosted.org/packages/6a/d6/43d02948cedde2e8476ac893ea02755ee5ee1b21c531fda92d80e114f0bc/regex-2026.9.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0b1ba3aaaf5776de473ee16625ac60ac195abb0343afb273575a8201d99be089", size = 852147, upload-time = "2026-09-01T00:50:46.474Z" }, + { url = "https://files.pythonhosted.org/packages/21/ff/adb4e2d08afe8f4c6df004d94604257e1f72af7ba328af7715601585aba4/regex-2026.9.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:56d8659c65166641d8f1b5efccc391c62c8a899eff4d528b981cc62b7b402a4b", size = 789761, upload-time = "2026-09-01T00:50:48.749Z" }, + { url = "https://files.pythonhosted.org/packages/c3/e1/1490d1351758e87f6e702cf2025036bdc7bc59182e2ff5c7bec004b19aed/regex-2026.9.3-cp312-cp312-win32.whl", hash = "sha256:837c1859913798d8bebcd98d4a037e113f8d79e81733009bf590e449769eecb3", size = 267150, upload-time = "2026-09-01T00:50:50.414Z" }, + { url = "https://files.pythonhosted.org/packages/d5/49/4c40cf722d84d60e807a08ef4c3f579216bf97df60c4a1b10be49655d302/regex-2026.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:1ba1dbbb93c5c5629c1861763aec5bfa9f05ad24ef450694130e25029ce7bc36", size = 277773, upload-time = "2026-09-01T00:50:51.963Z" }, + { url = "https://files.pythonhosted.org/packages/aa/af/c48b3b2b4244b4b090554c78d3387e9ae7b859f3dbf7148a27d427e9e5b8/regex-2026.9.3-cp312-cp312-win_arm64.whl", hash = "sha256:d7b3a8a4bbd83ad8b29758f5d24bab10a3f2de87970db36f1e3651c733353136", size = 277122, upload-time = "2026-09-01T00:50:53.778Z" }, + { url = "https://files.pythonhosted.org/packages/9b/d8/1fb6053247efc5b5a1d7b3b7881dcf42861f8ba46bd72a2ff126469d4053/regex-2026.9.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1d9148e47cfa1a067138867996b1d5d825de0132fed8dac3c92eebaaf312d280", size = 496442, upload-time = "2026-09-01T00:50:55.351Z" }, + { url = "https://files.pythonhosted.org/packages/5b/b7/0b9c1c0385365ad12deba0bdf93a70ad9f97d1a919cc5699c33b449ad662/regex-2026.9.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:33c2860b73ea342c0a42bee9ebe3b3a0de3d68c580c4dcb52241cf4b6663731b", size = 296913, upload-time = "2026-09-01T00:50:57.251Z" }, + { url = "https://files.pythonhosted.org/packages/e6/eb/5750ebabdb010ffb0d31fceae68c7a8f3876c06140c3bd6a7feff6240d6d/regex-2026.9.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e33dfc13c02d9c4e55bcf3f3b2eb448537823a6f6f30bf737b2974b63a530bc9", size = 291783, upload-time = "2026-09-01T00:50:58.892Z" }, + { url = "https://files.pythonhosted.org/packages/96/12/3ee1542b6428a0955ac5a31562d87966a417c0e0a4c1e5c62ec822fe78de/regex-2026.9.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48e84252a16234ee860206a738f9a5084f830a5d0a1370a418d3af4e917f5e08", size = 796114, upload-time = "2026-09-01T00:51:00.5Z" }, + { url = "https://files.pythonhosted.org/packages/0a/24/5ad415b80958d79f2da66a1997743ea8c38a1e9e2f63660f7cbf9303eda4/regex-2026.9.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3077ace9bf59f8513c8471a817a5af63699987dc024f535c1eac3447a4d70211", size = 865524, upload-time = "2026-09-01T00:51:02.25Z" }, + { url = "https://files.pythonhosted.org/packages/2b/8a/c298d469f5dd12b11d4e7b8c7714c808b9edace73118eaf753fc327c9429/regex-2026.9.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:635482cd183a1856da75a39c473a2e222697b7927f1955f586db83fc8a5da17c", size = 911948, upload-time = "2026-09-01T00:51:04.099Z" }, + { url = "https://files.pythonhosted.org/packages/3f/a6/e9a59b507cdf7a9735df4bab92b4ea9d2ca2e665c6de14c112db7e3c0926/regex-2026.9.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27f0809798071f56fb1bc536bb93714a95e8ed2ec0dfd869f095deebb30fd11a", size = 801945, upload-time = "2026-09-01T00:51:05.878Z" }, + { url = "https://files.pythonhosted.org/packages/56/1d/443e5541fd23d97c841ccddf90dbc9a964bd00e0ec9219b45a3eb0cde552/regex-2026.9.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d514026ca1c473cc14440e4d7bdf6721c642455b647a74c8143c0f22da358c28", size = 776223, upload-time = "2026-09-01T00:51:07.58Z" }, + { url = "https://files.pythonhosted.org/packages/7e/ae/78d48b14582f5733facaa2e001499b98707d8b8b1b31ab7559053c18f168/regex-2026.9.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b9190d4901d7786af9ab0ec46172e27cf7d72cdba2b82ee38eb40aadd3239a6e", size = 785072, upload-time = "2026-09-01T00:51:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/55/42/2f4ac830de12d264c1486f749988003a7f5a0366d7557a75de2418461466/regex-2026.9.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:6c0f60b05cc708e6cdf68dbca86b7a36d99695962db0189bb1b3884ca3b28e90", size = 860644, upload-time = "2026-09-01T00:51:11.558Z" }, + { url = "https://files.pythonhosted.org/packages/47/50/6b44c6cf56f353744e6066a1310177b7b195afb11d33dff4d6cf3ec52720/regex-2026.9.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b7b7e6be82fd6d5256adabb82253c5c307de981cc20c0ce4cff0cbe6de88529b", size = 765862, upload-time = "2026-09-01T00:51:13.371Z" }, + { url = "https://files.pythonhosted.org/packages/64/0f/c5a8023dfc988cddd2c614b1afbe547aedab1ffebd5b5d9cd58f6ab28908/regex-2026.9.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b5f85bffdfe17da7dfff78eb32b261c27f3cd64c060033645079493f4cebc8e9", size = 852081, upload-time = "2026-09-01T00:51:15.324Z" }, + { url = "https://files.pythonhosted.org/packages/8f/f4/ab0ba467ebcaecfddf72ea7b3527a6088863094377c1303a3379284ef621/regex-2026.9.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d10a442c6450ebd35aa89392b8e4b0459ba474df63fc5e6828573d0a31a627ec", size = 789774, upload-time = "2026-09-01T00:51:17.057Z" }, + { url = "https://files.pythonhosted.org/packages/4e/fa/8e2f3021ff5ee3aafc80eed8f16663be5e16c7b663d72e4bd2c9e71e1433/regex-2026.9.3-cp313-cp313-win32.whl", hash = "sha256:63fa79eab192623acb169de1dfe8e733598c4047d06f7712347d1bb810a5ad20", size = 267125, upload-time = "2026-09-01T00:51:18.837Z" }, + { url = "https://files.pythonhosted.org/packages/6d/25/6d20a309c2e4b554cc33579dd55b0bb50d0c2ace7ce6f084be2327c330fc/regex-2026.9.3-cp313-cp313-win_amd64.whl", hash = "sha256:185c1ae881856208dda05708b6c908aff76878e59c998c8548d365c1bbcaf1bd", size = 277741, upload-time = "2026-09-01T00:51:20.583Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b3/0282ae58fc167953809a968850622f89955e0fd70a65df882e5d488138b0/regex-2026.9.3-cp313-cp313-win_arm64.whl", hash = "sha256:db6538d733047f9ce4b74ee29c77643a1f99e4ca36e273495da93fbeedd2f03f", size = 277123, upload-time = "2026-09-01T00:51:22.332Z" }, + { url = "https://files.pythonhosted.org/packages/c6/a0/322f050f77289a1acf99b5c400fe201780bdcfa8f8876fbe250ae3de37af/regex-2026.9.3-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:99896cc18fb421be93e337d6bf2c1686ba330bc2d5c0ef581c842f0639a5e886", size = 496701, upload-time = "2026-09-01T00:51:24.146Z" }, + { url = "https://files.pythonhosted.org/packages/91/30/85df182aec58aaa34b02a3f0a99068bf34a7c9b3f9bd7ff06d58aa866e1d/regex-2026.9.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:0540de6e7917f89acaf9771bdcd6fa7e505c67416d3b283e52ad4ab25399c6d6", size = 297055, upload-time = "2026-09-01T00:51:25.812Z" }, + { url = "https://files.pythonhosted.org/packages/27/8f/64b8bbd0316baaede047dbdbf2bcc96f10a4eeddec2e9cbf289e855e636f/regex-2026.9.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:647983d2609be6155c748249e770ab7e75e15e386cbf15469569f3eaf165bbb7", size = 292008, upload-time = "2026-09-01T00:51:27.415Z" }, + { url = "https://files.pythonhosted.org/packages/b8/87/224614ef16bc8336269a84b578fb0dbab1433b584aaefc5f0680cacf9227/regex-2026.9.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7bb75921a4885d30d9e881d7a595ce50407a8a82933e15451ad7e0d89d1a5944", size = 796341, upload-time = "2026-09-01T00:51:29.344Z" }, + { url = "https://files.pythonhosted.org/packages/4a/e1/10ad988d3b673db86353666c56cb32e1b6246ca1ab0c81018a58ebec889c/regex-2026.9.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f93c60d8c522b4ecea35dd6c58cc42f251ecb12882a5d67d4bd8d12137fbd05b", size = 866311, upload-time = "2026-09-01T00:51:31.592Z" }, + { url = "https://files.pythonhosted.org/packages/08/16/8d597f97bb6215876512cd7b3c47179c0eb79d1820ab2ed8412d3ba5599a/regex-2026.9.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9e61478a8a06e6456ff2e66b9ac18f7f28d76a75fa5fda0c5198a4de07b8dcb8", size = 911869, upload-time = "2026-09-01T00:51:33.926Z" }, + { url = "https://files.pythonhosted.org/packages/89/e3/f6bcb26472873b9308df329f507d9c6cb526e3f9aed847498f153f2b7539/regex-2026.9.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f64c66b3b13758b4f8f56f17972cd0ce5d0033d19d7332ed32e2dbdbce94dec", size = 801375, upload-time = "2026-09-01T00:51:35.779Z" }, + { url = "https://files.pythonhosted.org/packages/bc/a5/38c7cd736bfd58b190412dbf5a81aae1c38456c538d5c4987f5980cbfa3d/regex-2026.9.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b5dc780377e35be6b0cf6fec7fb4a45cadb1e834bc0ef2ce596cc015290ef69", size = 776522, upload-time = "2026-09-01T00:51:37.81Z" }, + { url = "https://files.pythonhosted.org/packages/a9/ac/8ecefa1c9b57b29fcbe963797435e69a3ba6a9773d802b3d4fca4c75ecf6/regex-2026.9.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f02091b425bbcc2d8481913855c744baa4dd73e334814337b201d837e9040ef7", size = 785727, upload-time = "2026-09-01T00:51:39.995Z" }, + { url = "https://files.pythonhosted.org/packages/5a/4c/af402c5aa95615ab66620d775de07ea09b0fea206cd79e3c8a5716d5fc96/regex-2026.9.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ad2027883344e70ddddff02259411f80faf47d5e779eb0e39cb95ee546fa628c", size = 861375, upload-time = "2026-09-01T00:51:41.829Z" }, + { url = "https://files.pythonhosted.org/packages/dd/7b/b83dd26470fa4cc6d7beee9b3c52ff0e988ba636c1367a04d4b2829d8d95/regex-2026.9.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0edd12c8201222f58817689dc61fe44893f3f2f2aee530b211dfa92af84df9cc", size = 766221, upload-time = "2026-09-01T00:51:44.7Z" }, + { url = "https://files.pythonhosted.org/packages/94/5b/3b91b19d8fb11a353738cec56b19440bf181f3f9a0298d91140fb4061778/regex-2026.9.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4a9cd8485a6729387c889c88c24d5eace39dc0c0c9ddb9003f9c81751f654b69", size = 851737, upload-time = "2026-09-01T00:51:46.708Z" }, + { url = "https://files.pythonhosted.org/packages/2e/be/ea0762fd8a12fa711f1a626283f6d79a3d8a81df4eaada4fbe82009e46f6/regex-2026.9.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:994fa00a9b0d14c6e6926ff5ade98d4d83676a5eeab6f87718170e481396d380", size = 789455, upload-time = "2026-09-01T00:51:49.2Z" }, + { url = "https://files.pythonhosted.org/packages/d1/dd/b9af9d65de78831fb76cb8ef420db4094295b09f93f8abd17c867261c4fb/regex-2026.9.3-cp314-cp314-win32.whl", hash = "sha256:4f39485bb02dae23e14cdbad086ab0e468756775bc5c64bb69e7cb756ebc1dcd", size = 272528, upload-time = "2026-09-01T00:51:51.416Z" }, + { url = "https://files.pythonhosted.org/packages/d0/fe/ecb15616ae7aa4892299b9ca7c20ef0dd6e5c833643b7ed46e27ff5fcccd/regex-2026.9.3-cp314-cp314-win_amd64.whl", hash = "sha256:445623b1337e971ccc571d3642aeb3f2fec77e60b6ee193dd7688168471d1846", size = 280812, upload-time = "2026-09-01T00:51:53.211Z" }, + { url = "https://files.pythonhosted.org/packages/18/4f/60efc748152c82b967bd186c356dd1fc21c4f6c225b8026b52547ae60c9f/regex-2026.9.3-cp314-cp314-win_arm64.whl", hash = "sha256:9887e9455398a1517294dec14e23ed9a178c8dd909f2788e971b66623d3f7c16", size = 281095, upload-time = "2026-09-01T00:51:55.052Z" }, + { url = "https://files.pythonhosted.org/packages/d2/cc/aa269583e8986be9604ef5fb9e2164f33108f6220c896efff2dfb0d4e4c4/regex-2026.9.3-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:c1fa3f84cee5211a3e574ba76ac9596df8c8d16a855f31a25681d23eadcc6c16", size = 501014, upload-time = "2026-09-01T00:51:56.902Z" }, + { url = "https://files.pythonhosted.org/packages/22/51/bb8a3f3a47beccbf92c3bcda67c2c0336c13c2e10f9744306275f428ebc9/regex-2026.9.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d539a51be176e874ed66029b2df8cb8e1123a3e6420d52a690de6effded4f20d", size = 299376, upload-time = "2026-09-01T00:51:59.121Z" }, + { url = "https://files.pythonhosted.org/packages/48/ec/c646df2b62c1b1334e28581715ed776814c8ac80c0c9106175f0c61ce12a/regex-2026.9.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5133884ec10c9d6bcf7fed4ceb98fb3a6acbb6c2ba1bab6c4b6700d6c39c7595", size = 294424, upload-time = "2026-09-01T00:52:01.113Z" }, + { url = "https://files.pythonhosted.org/packages/d2/18/3dd8c49cc4af440a9a1a0ebb2b4a939398398c81fb7fecbc3c7d534924a1/regex-2026.9.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5fecba510f6b8f9cf1dfd103d785a61da47221cf09d4cec10946d1950daf1a17", size = 811421, upload-time = "2026-09-01T00:52:03.289Z" }, + { url = "https://files.pythonhosted.org/packages/71/32/c35f031aec040b9136189e3f403681e3168f1f9862e31d9df92ea599f2c1/regex-2026.9.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:72df83ee0eb89b070e28d1260786d13485b98a8b80228c7439d303dd9aac9970", size = 870110, upload-time = "2026-09-01T00:52:05.746Z" }, + { url = "https://files.pythonhosted.org/packages/a7/7b/931d962f9fbca3326f282a01fa5bed4d6734dab5215d1c20bac0ab85df58/regex-2026.9.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:610371fe95c7e8e824ad8762248836cabbb5a4ab8befb982cb7dc8df773075d3", size = 917489, upload-time = "2026-09-01T00:52:07.703Z" }, + { url = "https://files.pythonhosted.org/packages/46/1a/da0c28f2b1e65d46a24abc1dd33e0dc9ddbcfeeee7c5625103b3e09e548c/regex-2026.9.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:af06c9099df15ee44fda3fdfa002bfe37de02901c2b3a5ef350853861ef3b4b5", size = 817470, upload-time = "2026-09-01T00:52:09.686Z" }, + { url = "https://files.pythonhosted.org/packages/d4/a1/6a540ec40c3b8eeefec445362cf08bbb686b22d4088f97d3c1ea38323434/regex-2026.9.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e27003c0a93a5aa541c260bd8ba8b917a2af4c378eb684daa9f1565f5e363181", size = 784742, upload-time = "2026-09-01T00:52:11.778Z" }, + { url = "https://files.pythonhosted.org/packages/fc/88/75500ca27ba85256eb46119ebd99ec10ead4c3ffacd47fe7dfe034662960/regex-2026.9.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9ce34fc5a6f6c9b2ba4a8060009d989e4f55630e3f9c3bf5962f42dcc31355ef", size = 800609, upload-time = "2026-09-01T00:52:13.817Z" }, + { url = "https://files.pythonhosted.org/packages/67/33/18541aaad8b88977e2c3fbbb53c1a75f6f6c999800a82d2f7306581cb6b6/regex-2026.9.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2cbc83154c8b0201ada07bc5d6e37106df6325f2fda60d73228e2e8da7433cae", size = 864798, upload-time = "2026-09-01T00:52:16.137Z" }, + { url = "https://files.pythonhosted.org/packages/16/62/ffbfbeb5a3f2cca701afb9f8aebbfcbf37a4aae2f1584c96680142aab445/regex-2026.9.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f568bdc17b7ebb3a323ee8920468d2ed74af84da911a00d9585ac887bac73b88", size = 772892, upload-time = "2026-09-01T00:52:18.567Z" }, + { url = "https://files.pythonhosted.org/packages/23/14/04e2db28f490b1fcc684428bd2de21e1ec46f7d8d421b7f2cc74d120affd/regex-2026.9.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ae9f7055e7357b2873866a3d77d0136a251ca2ae2dde3d8cdb819425d717c177", size = 858065, upload-time = "2026-09-01T00:52:20.674Z" }, + { url = "https://files.pythonhosted.org/packages/ac/14/c0cac930d1dc0b86c5d8ff10602f15df4fb15fa3f33e04a98be197f33618/regex-2026.9.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d963442186918577ad83e3a8c5564eeeba90e2da233ce59f6eeccbb7b5cf771e", size = 804739, upload-time = "2026-09-01T00:52:22.866Z" }, + { url = "https://files.pythonhosted.org/packages/01/12/69e6f4d02e11a5cb45033abede6e04b0da3716b1b6c311d4609be14a01a7/regex-2026.9.3-cp314-cp314t-win32.whl", hash = "sha256:bda6af6fb4d5fe9532620e4f72d3c7efcdf7472ead9037b184c0a060f0e7c71f", size = 274514, upload-time = "2026-09-01T00:52:25.224Z" }, + { url = "https://files.pythonhosted.org/packages/28/64/064b78028b52c0c21b9c0b362b1bdcee7179f009891ddf959d9b6390b30c/regex-2026.9.3-cp314-cp314t-win_amd64.whl", hash = "sha256:2d25e41851e41539898116ac760fcc856e2c1047a843a336b19e2c8e4a43ad16", size = 283797, upload-time = "2026-09-01T00:52:27.358Z" }, + { url = "https://files.pythonhosted.org/packages/f2/46/fbb41eb6cc92403ba9f896dfd56a1d5d31549c4033dfb7418da7ecd5802a/regex-2026.9.3-cp314-cp314t-win_arm64.whl", hash = "sha256:356fc21b4c313decb3214a4306bb5bd0623dce4a8d03d0d5ada6fb0b6a5b93b5", size = 283444, upload-time = "2026-09-01T00:52:29.632Z" }, + { url = "https://files.pythonhosted.org/packages/1b/1a/825beb1c803d579d1119723235ede2211949a8d320bcc79e3f6e5dd6090f/regex-2026.9.3-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:e337dceb936f333775cf51d49f6badb8cd3d2a6b27e8cb443a6c5861fbf3c1f9", size = 496929, upload-time = "2026-09-01T00:52:31.593Z" }, + { url = "https://files.pythonhosted.org/packages/ff/54/9b8255521680d54e1d157ed6532e3082998f47925d2ab3861550e0e89455/regex-2026.9.3-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:bb2d4ad7f9bac398a7a19f07bd09fd5b2c1e4eeab316065aa84a305f62fc5361", size = 297050, upload-time = "2026-09-01T00:52:33.459Z" }, + { url = "https://files.pythonhosted.org/packages/5c/8b/0e4df28fd94304050efc2373dff1803e5d62056cf744a694eaa376df2fe8/regex-2026.9.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:01bdce6a372efd5ae3d8560cedbc691be259a50206564bbaf04008b2937721ab", size = 292296, upload-time = "2026-09-01T00:52:35.309Z" }, + { url = "https://files.pythonhosted.org/packages/97/a0/689a8403f309a7a3f3f3e74b3e81b144602481d122c9e4070a601367f8e0/regex-2026.9.3-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55493b5b6cb6c4ec9a3c310d4ef947dbd34326ee4eecd4249e18e00d84f14be5", size = 798376, upload-time = "2026-09-01T00:52:37.235Z" }, + { url = "https://files.pythonhosted.org/packages/ad/a9/3d22278a38bb8adb254d345e60935316222091caf00a4233aaef388d636e/regex-2026.9.3-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:690ab9d06cd689b79aab84afa0984a1bc85ea4b93b0a42b015f3ff5e2f5b08be", size = 866607, upload-time = "2026-09-01T00:52:39.461Z" }, + { url = "https://files.pythonhosted.org/packages/69/ef/ecf8c5fdcec73ac0526fbd074be3bd1059b11cbda739ac0ab9001f311aed/regex-2026.9.3-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:24b4bbb65ff2c4e8c552c93c342bf5ffa0ad162d963d96bac7c1883c20e1b34e", size = 912160, upload-time = "2026-09-01T00:52:41.603Z" }, + { url = "https://files.pythonhosted.org/packages/68/e8/c07c3d2b44c9154672a33911cfcfba626c78d939d7e31103864d81ad319a/regex-2026.9.3-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fbaf76379bf2a72e534bbb1276d45e63a80d8cade17953ed79a350d6426262fb", size = 804589, upload-time = "2026-09-01T00:52:43.658Z" }, + { url = "https://files.pythonhosted.org/packages/91/16/d42957c78b5934efd03ca5713d99952cbe71e2d0b3b24d9e78256f208587/regex-2026.9.3-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:57f405fcb82e2b78df88f04f8aa49ce513ce23bfea073b581597bd52545e9b3f", size = 784446, upload-time = "2026-09-01T00:52:45.866Z" }, + { url = "https://files.pythonhosted.org/packages/00/1e/4252dff33a1a5afb3271fb3859e992d34c47c040ecfc27bbfe6a7eaf99a8/regex-2026.9.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:a87ab35e92d40b53c5373af36625794e422f83ec56122f0a63871892856d721c", size = 787996, upload-time = "2026-09-01T00:52:48.345Z" }, + { url = "https://files.pythonhosted.org/packages/ee/19/90d31048bb402fd746a95922d7dfdb9de9f902c39c8d838f2fef05c9c92c/regex-2026.9.3-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:14bf4a88833c12a990dbf5cca77eb293401d60878be7d566a2d5096fb0216c27", size = 861752, upload-time = "2026-09-01T00:52:50.597Z" }, + { url = "https://files.pythonhosted.org/packages/88/77/42ad133550cbd64d8fb33ec5ff55e1f524b06c6328e9f3bf9c3e8652b525/regex-2026.9.3-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:862c29f7e7927e71391df6700079b1dd7c2aeb75115dc46e37004a092f8f16b7", size = 773488, upload-time = "2026-09-01T00:52:53.142Z" }, + { url = "https://files.pythonhosted.org/packages/78/8f/0c90e8fa607c36a65c360f6b02980aa7aa5885afa3d737daba4229bef086/regex-2026.9.3-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:61a9da95a836e7d300945891265bbeb6510a860863f6b01ed6397e6239a31253", size = 852603, upload-time = "2026-09-01T00:52:55.471Z" }, + { url = "https://files.pythonhosted.org/packages/4e/bc/e1be309afb6be94916d8f4f000dbc66040fc0da2008b3f714dc4893259fd/regex-2026.9.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e7663a6803a47255c32cc7e17ae3ccfe02dba5b0849f87729651c0263a129d20", size = 794635, upload-time = "2026-09-01T00:52:57.611Z" }, + { url = "https://files.pythonhosted.org/packages/0e/f7/15f6d0ea137316531c992e7468a4c6f6e39159a6780c2c16ec3ab56f2149/regex-2026.9.3-cp315-cp315-win32.whl", hash = "sha256:0ee4721472e00e96b3cceec545c9867f91815f628f6ea304ae6cea93a7e4e7ae", size = 272530, upload-time = "2026-09-01T00:52:59.644Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8e/739168818790278dd4f1ba60c582fed41323508d7a8e850323851de1aa1f/regex-2026.9.3-cp315-cp315-win_amd64.whl", hash = "sha256:cc5d0f82cf05beb6c0d463398173a09357ed4f4a631f7641cef6f6480a05bc57", size = 280822, upload-time = "2026-09-01T00:53:02.57Z" }, + { url = "https://files.pythonhosted.org/packages/12/6a/55f5f6e92a8c7d6511e069d3e8a4b45e3506941c1a97dddf5a329b132be4/regex-2026.9.3-cp315-cp315-win_arm64.whl", hash = "sha256:6f198b622a3ccf02eeab00de71f6b2f45b1b50b1979aa56b25178c963e475950", size = 281102, upload-time = "2026-09-01T00:53:04.62Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6a/adaf9ed10ffdef60684bf8757c257400500342503f1ce5c7cffcdb2e8aaf/regex-2026.9.3-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:294ef8fb58a45f912513692380f366ca191940de5b3b3de5308ce2e8500d8ea4", size = 501333, upload-time = "2026-09-01T00:53:06.681Z" }, + { url = "https://files.pythonhosted.org/packages/64/dd/2cbc3b253a88fdb0c8ca641367dc2f280541fdf1722f201fc0be62797577/regex-2026.9.3-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:edfd2b0cad175780f8668fd6f66486354b8770e4057e44038daaa4a066f8ddff", size = 299273, upload-time = "2026-09-01T00:53:09.002Z" }, + { url = "https://files.pythonhosted.org/packages/2a/29/4818d31ec2555309b3935d3cd006a7f6076e11bb21eec9e72afee3db87b1/regex-2026.9.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:cda393bb35828e3993fcaf39c8ede78b16614954eb15fe77336d5d141be40f76", size = 294888, upload-time = "2026-09-01T00:53:11.009Z" }, + { url = "https://files.pythonhosted.org/packages/94/37/8970a4102a067e0a28e40a232bf536752c373da8a4f932755679f77fa9ac/regex-2026.9.3-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cce8e5243d95068f595155663e3e18b1938b16cf716dce6cf2491ebc08b98d96", size = 813072, upload-time = "2026-09-01T00:53:13.566Z" }, + { url = "https://files.pythonhosted.org/packages/90/1c/2e52f5e9e92b79e324c9807e977fa6f9ab210b41ab5b7356307d5ffb2f4c/regex-2026.9.3-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2a1269856278ae8bc78342bf20191c1f10638d2c22df72364d2fa02d70d49f35", size = 869947, upload-time = "2026-09-01T00:53:15.773Z" }, + { url = "https://files.pythonhosted.org/packages/f6/42/c676e3f2dcb47ec941fa678019044cbac51db9441e09cec47392e4986013/regex-2026.9.3-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4ac52b95a938789fcfcfbf6faf647b45d7be940f0c51f06991c1353db54c67aa", size = 915678, upload-time = "2026-09-01T00:53:18.384Z" }, + { url = "https://files.pythonhosted.org/packages/01/6a/73c971bcaf1d24e73aa3c8e0f767caccfdc9fcda021e59f28f6dcd12728b/regex-2026.9.3-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:490a81770599b17b8594227674872dfb215af05f2be0065a32a7c70175fd9e23", size = 817714, upload-time = "2026-09-01T00:53:20.723Z" }, + { url = "https://files.pythonhosted.org/packages/b2/7c/0e9bffb6cfa8a00e765eaea0d1e6d207bb98e620d5658c537c8d87df671c/regex-2026.9.3-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f584dd93ef6ddb10ba028e247fe1fc0ba52ed70ca4d596bb8d52bf4304c147ec", size = 792411, upload-time = "2026-09-01T00:53:22.925Z" }, + { url = "https://files.pythonhosted.org/packages/61/d4/b1d226e8a3d0c8aac577a517384ffaea7b9ff98b194ddbd0bef58b9d8738/regex-2026.9.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:c07eaf30bc072b179acc8ac50519a2a81f03f88a220750c6d83dadbdc33fb1de", size = 802521, upload-time = "2026-09-01T00:53:25.281Z" }, + { url = "https://files.pythonhosted.org/packages/c6/ad/dc47f94a4ace898561dfafeed6052dd3551915f36aa1971f4387d6daf0d4/regex-2026.9.3-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:9e1c602c55dc8ec05cc7e0a8e31f3ad3d4644dbcb7ac39114105c9bd0384371f", size = 865266, upload-time = "2026-09-01T00:53:27.667Z" }, + { url = "https://files.pythonhosted.org/packages/41/7b/743565fc25cb36981186b4e9b42b3d093a7226cca328380cfd223c1b5a03/regex-2026.9.3-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:2ef9a284ec658d48ec57edfba0944d1582532601472f695b799ba08d37fd6544", size = 780298, upload-time = "2026-09-01T00:53:30.017Z" }, + { url = "https://files.pythonhosted.org/packages/c6/ad/d62e48324632eb0bae2c336da5810b51a14a9e23ba964f2828cc1ac23011/regex-2026.9.3-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:c90f34f1b1905d7d6c42b25b6ffb4e5066e6c95c7715169e3332b1760614d092", size = 858045, upload-time = "2026-09-01T00:53:32.397Z" }, + { url = "https://files.pythonhosted.org/packages/2e/41/8eff42a2516494bb6b36d33b15bcd861764dcc836ad7c0b746e46c513af9/regex-2026.9.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:307dbd844f678de48ea74cdc909b007729c50e6be7f182bdf6a1df6732374c69", size = 805406, upload-time = "2026-09-01T00:53:34.601Z" }, + { url = "https://files.pythonhosted.org/packages/f6/1d/98198fd6dc185a172f5de48b8a4c7ca03c0d4285b1c1c32300672e7cf85a/regex-2026.9.3-cp315-cp315t-win32.whl", hash = "sha256:ce6505846d29f860966e0e9cfadaad1041a7d8ce7dc4af39940fcb1877dec29a", size = 274674, upload-time = "2026-09-01T00:53:36.77Z" }, + { url = "https://files.pythonhosted.org/packages/d2/82/dc0e76842ccddc8756471adff38c140d130c6b601b9ae5724274f1881e7a/regex-2026.9.3-cp315-cp315t-win_amd64.whl", hash = "sha256:2c71da070224baf426850d9eab23ac797d9859b1841dbda43012c01b69697803", size = 283692, upload-time = "2026-09-01T00:53:38.951Z" }, + { url = "https://files.pythonhosted.org/packages/da/3d/e0677f590f3473a3defb63ef6e3469154382a2a15ebafb364482d7ed3b01/regex-2026.9.3-cp315-cp315t-win_arm64.whl", hash = "sha256:ecc27adda0d1e1bc39793b41fdd562d2f4bc4dcee6ee0e3c733d519c332183b2", size = 283421, upload-time = "2026-09-01T00:53:41.393Z" }, +] + +[[package]] +name = "requests" +version = "2.33.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/64/8860370b167a9721e8956ae116825caff829224fbca0ca6e7bf8ddef8430/requests-2.33.0.tar.gz", hash = "sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652", size = 134232, upload-time = "2026-03-25T15:10:41.586Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/5d/c814546c2333ceea4ba42262d8c4d55763003e767fa169adc693bd524478/requests-2.33.0-py3-none-any.whl", hash = "sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b", size = 65017, upload-time = "2026-03-25T15:10:40.382Z" }, +] + +[[package]] +name = "ruff" +version = "0.12.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a8/f0/e0965dd709b8cabe6356811c0ee8c096806bb57d20b5019eb4e48a117410/ruff-0.12.12.tar.gz", hash = "sha256:b86cd3415dbe31b3b46a71c598f4c4b2f550346d1ccf6326b347cc0c8fd063d6", size = 5359915, upload-time = "2025-09-04T16:50:18.273Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/09/79/8d3d687224d88367b51c7974cec1040c4b015772bfbeffac95face14c04a/ruff-0.12.12-py3-none-linux_armv6l.whl", hash = "sha256:de1c4b916d98ab289818e55ce481e2cacfaad7710b01d1f990c497edf217dafc", size = 12116602, upload-time = "2025-09-04T16:49:18.892Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c3/6e599657fe192462f94861a09aae935b869aea8a1da07f47d6eae471397c/ruff-0.12.12-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7acd6045e87fac75a0b0cdedacf9ab3e1ad9d929d149785903cff9bb69ad9727", size = 12868393, upload-time = "2025-09-04T16:49:23.043Z" }, + { url = "https://files.pythonhosted.org/packages/e8/d2/9e3e40d399abc95336b1843f52fc0daaceb672d0e3c9290a28ff1a96f79d/ruff-0.12.12-py3-none-macosx_11_0_arm64.whl", hash = "sha256:abf4073688d7d6da16611f2f126be86523a8ec4343d15d276c614bda8ec44edb", size = 12036967, upload-time = "2025-09-04T16:49:26.04Z" }, + { url = "https://files.pythonhosted.org/packages/e9/03/6816b2ed08836be272e87107d905f0908be5b4a40c14bfc91043e76631b8/ruff-0.12.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:968e77094b1d7a576992ac078557d1439df678a34c6fe02fd979f973af167577", size = 12276038, upload-time = "2025-09-04T16:49:29.056Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d5/707b92a61310edf358a389477eabd8af68f375c0ef858194be97ca5b6069/ruff-0.12.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42a67d16e5b1ffc6d21c5f67851e0e769517fb57a8ebad1d0781b30888aa704e", size = 11901110, upload-time = "2025-09-04T16:49:32.07Z" }, + { url = "https://files.pythonhosted.org/packages/9d/3d/f8b1038f4b9822e26ec3d5b49cf2bc313e3c1564cceb4c1a42820bf74853/ruff-0.12.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b216ec0a0674e4b1214dcc998a5088e54eaf39417327b19ffefba1c4a1e4971e", size = 13668352, upload-time = "2025-09-04T16:49:35.148Z" }, + { url = "https://files.pythonhosted.org/packages/98/0e/91421368ae6c4f3765dd41a150f760c5f725516028a6be30e58255e3c668/ruff-0.12.12-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:59f909c0fdd8f1dcdbfed0b9569b8bf428cf144bec87d9de298dcd4723f5bee8", size = 14638365, upload-time = "2025-09-04T16:49:38.892Z" }, + { url = "https://files.pythonhosted.org/packages/74/5d/88f3f06a142f58ecc8ecb0c2fe0b82343e2a2b04dcd098809f717cf74b6c/ruff-0.12.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ac93d87047e765336f0c18eacad51dad0c1c33c9df7484c40f98e1d773876f5", size = 14060812, upload-time = "2025-09-04T16:49:42.732Z" }, + { url = "https://files.pythonhosted.org/packages/13/fc/8962e7ddd2e81863d5c92400820f650b86f97ff919c59836fbc4c1a6d84c/ruff-0.12.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:01543c137fd3650d322922e8b14cc133b8ea734617c4891c5a9fccf4bfc9aa92", size = 13050208, upload-time = "2025-09-04T16:49:46.434Z" }, + { url = "https://files.pythonhosted.org/packages/53/06/8deb52d48a9a624fd37390555d9589e719eac568c020b27e96eed671f25f/ruff-0.12.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afc2fa864197634e549d87fb1e7b6feb01df0a80fd510d6489e1ce8c0b1cc45", size = 13311444, upload-time = "2025-09-04T16:49:49.931Z" }, + { url = "https://files.pythonhosted.org/packages/2a/81/de5a29af7eb8f341f8140867ffb93f82e4fde7256dadee79016ac87c2716/ruff-0.12.12-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:0c0945246f5ad776cb8925e36af2438e66188d2b57d9cf2eed2c382c58b371e5", size = 13279474, upload-time = "2025-09-04T16:49:53.465Z" }, + { url = "https://files.pythonhosted.org/packages/7f/14/d9577fdeaf791737ada1b4f5c6b59c21c3326f3f683229096cccd7674e0c/ruff-0.12.12-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a0fbafe8c58e37aae28b84a80ba1817f2ea552e9450156018a478bf1fa80f4e4", size = 12070204, upload-time = "2025-09-04T16:49:56.882Z" }, + { url = "https://files.pythonhosted.org/packages/77/04/a910078284b47fad54506dc0af13839c418ff704e341c176f64e1127e461/ruff-0.12.12-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b9c456fb2fc8e1282affa932c9e40f5ec31ec9cbb66751a316bd131273b57c23", size = 11880347, upload-time = "2025-09-04T16:49:59.729Z" }, + { url = "https://files.pythonhosted.org/packages/df/58/30185fcb0e89f05e7ea82e5817b47798f7fa7179863f9d9ba6fd4fe1b098/ruff-0.12.12-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5f12856123b0ad0147d90b3961f5c90e7427f9acd4b40050705499c98983f489", size = 12891844, upload-time = "2025-09-04T16:50:02.591Z" }, + { url = "https://files.pythonhosted.org/packages/21/9c/28a8dacce4855e6703dcb8cdf6c1705d0b23dd01d60150786cd55aa93b16/ruff-0.12.12-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:26a1b5a2bf7dd2c47e3b46d077cd9c0fc3b93e6c6cc9ed750bd312ae9dc302ee", size = 13360687, upload-time = "2025-09-04T16:50:05.8Z" }, + { url = "https://files.pythonhosted.org/packages/c8/fa/05b6428a008e60f79546c943e54068316f32ec8ab5c4f73e4563934fbdc7/ruff-0.12.12-py3-none-win32.whl", hash = "sha256:173be2bfc142af07a01e3a759aba6f7791aa47acf3604f610b1c36db888df7b1", size = 12052870, upload-time = "2025-09-04T16:50:09.121Z" }, + { url = "https://files.pythonhosted.org/packages/85/60/d1e335417804df452589271818749d061b22772b87efda88354cf35cdb7a/ruff-0.12.12-py3-none-win_amd64.whl", hash = "sha256:e99620bf01884e5f38611934c09dd194eb665b0109104acae3ba6102b600fd0d", size = 13178016, upload-time = "2025-09-04T16:50:12.559Z" }, + { url = "https://files.pythonhosted.org/packages/28/7e/61c42657f6e4614a4258f1c3b0c5b93adc4d1f8575f5229d1906b483099b/ruff-0.12.12-py3-none-win_arm64.whl", hash = "sha256:2a8199cab4ce4d72d158319b63370abf60991495fb733db96cd923a34c52d093", size = 12256762, upload-time = "2025-09-04T16:50:15.737Z" }, +] + +[[package]] +name = "s3transfer" +version = "0.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/43/35e4d8aa320bffe8287fe8f65f578fa2d2db0a64212f0e710dce58267854/s3transfer-0.19.2.tar.gz", hash = "sha256:ba0309fd86be3c27dbf78cdd813c13c5e1df16e5874b99d2535ebbdfb9892993", size = 165592, upload-time = "2026-07-22T19:30:44.432Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/e7/5c595c75e9f41a44f30e526eda465ea0b4eec93470e074e4a111b253f13a/s3transfer-0.19.2-py3-none-any.whl", hash = "sha256:d8168eccca828cbb2cd573675333f3bddd254313a9c42494b84c76b539e8ba25", size = 90216, upload-time = "2026-07-22T19:30:43.251Z" }, +] + +[[package]] +name = "setuptools" +version = "84.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/44/f5da03a8ef95d369145c5bb53050e7877c9f3d312e128605fd9504829143/setuptools-84.0.0.tar.gz", hash = "sha256:f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73", size = 1168449, upload-time = "2026-08-08T18:27:58.365Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", hash = "sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670", size = 818216, upload-time = "2026-08-08T18:27:56.719Z" }, +] + +[[package]] +name = "shapely" +version = "2.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4d/bc/0989043118a27cccb4e906a46b7565ce36ca7b57f5a18b78f4f1b0f72d9d/shapely-2.1.2.tar.gz", hash = "sha256:2ed4ecb28320a433db18a5bf029986aa8afcfd740745e78847e330d5d94922a9", size = 315489, upload-time = "2025-09-24T13:51:41.432Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/8d/1ff672dea9ec6a7b5d422eb6d095ed886e2e523733329f75fdcb14ee1149/shapely-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:91121757b0a36c9aac3427a651a7e6567110a4a67c97edf04f8d55d4765f6618", size = 1820038, upload-time = "2025-09-24T13:50:15.628Z" }, + { url = "https://files.pythonhosted.org/packages/4f/ce/28fab8c772ce5db23a0d86bf0adaee0c4c79d5ad1db766055fa3dab442e2/shapely-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:16a9c722ba774cf50b5d4541242b4cce05aafd44a015290c82ba8a16931ff63d", size = 1626039, upload-time = "2025-09-24T13:50:16.881Z" }, + { url = "https://files.pythonhosted.org/packages/70/8b/868b7e3f4982f5006e9395c1e12343c66a8155c0374fdc07c0e6a1ab547d/shapely-2.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cc4f7397459b12c0b196c9efe1f9d7e92463cbba142632b4cc6d8bbbbd3e2b09", size = 3001519, upload-time = "2025-09-24T13:50:18.606Z" }, + { url = "https://files.pythonhosted.org/packages/13/02/58b0b8d9c17c93ab6340edd8b7308c0c5a5b81f94ce65705819b7416dba5/shapely-2.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:136ab87b17e733e22f0961504d05e77e7be8c9b5a8184f685b4a91a84efe3c26", size = 3110842, upload-time = "2025-09-24T13:50:21.77Z" }, + { url = "https://files.pythonhosted.org/packages/af/61/8e389c97994d5f331dcffb25e2fa761aeedfb52b3ad9bcdd7b8671f4810a/shapely-2.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:16c5d0fc45d3aa0a69074979f4f1928ca2734fb2e0dde8af9611e134e46774e7", size = 4021316, upload-time = "2025-09-24T13:50:23.626Z" }, + { url = "https://files.pythonhosted.org/packages/d3/d4/9b2a9fe6039f9e42ccf2cb3e84f219fd8364b0c3b8e7bbc857b5fbe9c14c/shapely-2.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6ddc759f72b5b2b0f54a7e7cde44acef680a55019eb52ac63a7af2cf17cb9cd2", size = 4178586, upload-time = "2025-09-24T13:50:25.443Z" }, + { url = "https://files.pythonhosted.org/packages/16/f6/9840f6963ed4decf76b08fd6d7fed14f8779fb7a62cb45c5617fa8ac6eab/shapely-2.1.2-cp311-cp311-win32.whl", hash = "sha256:2fa78b49485391224755a856ed3b3bd91c8455f6121fee0db0e71cefb07d0ef6", size = 1543961, upload-time = "2025-09-24T13:50:26.968Z" }, + { url = "https://files.pythonhosted.org/packages/38/1e/3f8ea46353c2a33c1669eb7327f9665103aa3a8dfe7f2e4ef714c210b2c2/shapely-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:c64d5c97b2f47e3cd9b712eaced3b061f2b71234b3fc263e0fcf7d889c6559dc", size = 1722856, upload-time = "2025-09-24T13:50:28.497Z" }, + { url = "https://files.pythonhosted.org/packages/24/c0/f3b6453cf2dfa99adc0ba6675f9aaff9e526d2224cbd7ff9c1a879238693/shapely-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fe2533caae6a91a543dec62e8360fe86ffcdc42a7c55f9dfd0128a977a896b94", size = 1833550, upload-time = "2025-09-24T13:50:30.019Z" }, + { url = "https://files.pythonhosted.org/packages/86/07/59dee0bc4b913b7ab59ab1086225baca5b8f19865e6101db9ebb7243e132/shapely-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ba4d1333cc0bc94381d6d4308d2e4e008e0bd128bdcff5573199742ee3634359", size = 1643556, upload-time = "2025-09-24T13:50:32.291Z" }, + { url = "https://files.pythonhosted.org/packages/26/29/a5397e75b435b9895cd53e165083faed5d12fd9626eadec15a83a2411f0f/shapely-2.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0bd308103340030feef6c111d3eb98d50dc13feea33affc8a6f9fa549e9458a3", size = 2988308, upload-time = "2025-09-24T13:50:33.862Z" }, + { url = "https://files.pythonhosted.org/packages/b9/37/e781683abac55dde9771e086b790e554811a71ed0b2b8a1e789b7430dd44/shapely-2.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e7d4d7ad262a48bb44277ca12c7c78cb1b0f56b32c10734ec9a1d30c0b0c54b", size = 3099844, upload-time = "2025-09-24T13:50:35.459Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f3/9876b64d4a5a321b9dc482c92bb6f061f2fa42131cba643c699f39317cb9/shapely-2.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e9eddfe513096a71896441a7c37db72da0687b34752c4e193577a145c71736fc", size = 3988842, upload-time = "2025-09-24T13:50:37.478Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a0/704c7292f7014c7e74ec84eddb7b109e1fbae74a16deae9c1504b1d15565/shapely-2.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:980c777c612514c0cf99bc8a9de6d286f5e186dcaf9091252fcd444e5638193d", size = 4152714, upload-time = "2025-09-24T13:50:39.9Z" }, + { url = "https://files.pythonhosted.org/packages/53/46/319c9dc788884ad0785242543cdffac0e6530e4d0deb6c4862bc4143dcf3/shapely-2.1.2-cp312-cp312-win32.whl", hash = "sha256:9111274b88e4d7b54a95218e243282709b330ef52b7b86bc6aaf4f805306f454", size = 1542745, upload-time = "2025-09-24T13:50:41.414Z" }, + { url = "https://files.pythonhosted.org/packages/ec/bf/cb6c1c505cb31e818e900b9312d514f381fbfa5c4363edfce0fcc4f8c1a4/shapely-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:743044b4cfb34f9a67205cee9279feaf60ba7d02e69febc2afc609047cb49179", size = 1722861, upload-time = "2025-09-24T13:50:43.35Z" }, + { url = "https://files.pythonhosted.org/packages/c3/90/98ef257c23c46425dc4d1d31005ad7c8d649fe423a38b917db02c30f1f5a/shapely-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b510dda1a3672d6879beb319bc7c5fd302c6c354584690973c838f46ec3e0fa8", size = 1832644, upload-time = "2025-09-24T13:50:44.886Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ab/0bee5a830d209adcd3a01f2d4b70e587cdd9fd7380d5198c064091005af8/shapely-2.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8cff473e81017594d20ec55d86b54bc635544897e13a7cfc12e36909c5309a2a", size = 1642887, upload-time = "2025-09-24T13:50:46.735Z" }, + { url = "https://files.pythonhosted.org/packages/2d/5e/7d7f54ba960c13302584c73704d8c4d15404a51024631adb60b126a4ae88/shapely-2.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe7b77dc63d707c09726b7908f575fc04ff1d1ad0f3fb92aec212396bc6cfe5e", size = 2970931, upload-time = "2025-09-24T13:50:48.374Z" }, + { url = "https://files.pythonhosted.org/packages/f2/a2/83fc37e2a58090e3d2ff79175a95493c664bcd0b653dd75cb9134645a4e5/shapely-2.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7ed1a5bbfb386ee8332713bf7508bc24e32d24b74fc9a7b9f8529a55db9f4ee6", size = 3082855, upload-time = "2025-09-24T13:50:50.037Z" }, + { url = "https://files.pythonhosted.org/packages/44/2b/578faf235a5b09f16b5f02833c53822294d7f21b242f8e2d0cf03fb64321/shapely-2.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a84e0582858d841d54355246ddfcbd1fce3179f185da7470f41ce39d001ee1af", size = 3979960, upload-time = "2025-09-24T13:50:51.74Z" }, + { url = "https://files.pythonhosted.org/packages/4d/04/167f096386120f692cc4ca02f75a17b961858997a95e67a3cb6a7bbd6b53/shapely-2.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc3487447a43d42adcdf52d7ac73804f2312cbfa5d433a7d2c506dcab0033dfd", size = 4142851, upload-time = "2025-09-24T13:50:53.49Z" }, + { url = "https://files.pythonhosted.org/packages/48/74/fb402c5a6235d1c65a97348b48cdedb75fb19eca2b1d66d04969fc1c6091/shapely-2.1.2-cp313-cp313-win32.whl", hash = "sha256:9c3a3c648aedc9f99c09263b39f2d8252f199cb3ac154fadc173283d7d111350", size = 1541890, upload-time = "2025-09-24T13:50:55.337Z" }, + { url = "https://files.pythonhosted.org/packages/41/47/3647fe7ad990af60ad98b889657a976042c9988c2807cf322a9d6685f462/shapely-2.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:ca2591bff6645c216695bdf1614fca9c82ea1144d4a7591a466fef64f28f0715", size = 1722151, upload-time = "2025-09-24T13:50:57.153Z" }, + { url = "https://files.pythonhosted.org/packages/3c/49/63953754faa51ffe7d8189bfbe9ca34def29f8c0e34c67cbe2a2795f269d/shapely-2.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2d93d23bdd2ed9dc157b46bc2f19b7da143ca8714464249bef6771c679d5ff40", size = 1834130, upload-time = "2025-09-24T13:50:58.49Z" }, + { url = "https://files.pythonhosted.org/packages/7f/ee/dce001c1984052970ff60eb4727164892fb2d08052c575042a47f5a9e88f/shapely-2.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01d0d304b25634d60bd7cf291828119ab55a3bab87dc4af1e44b07fb225f188b", size = 1642802, upload-time = "2025-09-24T13:50:59.871Z" }, + { url = "https://files.pythonhosted.org/packages/da/e7/fc4e9a19929522877fa602f705706b96e78376afb7fad09cad5b9af1553c/shapely-2.1.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8d8382dd120d64b03698b7298b89611a6ea6f55ada9d39942838b79c9bc89801", size = 3018460, upload-time = "2025-09-24T13:51:02.08Z" }, + { url = "https://files.pythonhosted.org/packages/a1/18/7519a25db21847b525696883ddc8e6a0ecaa36159ea88e0fef11466384d0/shapely-2.1.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19efa3611eef966e776183e338b2d7ea43569ae99ab34f8d17c2c054d3205cc0", size = 3095223, upload-time = "2025-09-24T13:51:04.472Z" }, + { url = "https://files.pythonhosted.org/packages/48/de/b59a620b1f3a129c3fecc2737104a0a7e04e79335bd3b0a1f1609744cf17/shapely-2.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:346ec0c1a0fcd32f57f00e4134d1200e14bf3f5ae12af87ba83ca275c502498c", size = 4030760, upload-time = "2025-09-24T13:51:06.455Z" }, + { url = "https://files.pythonhosted.org/packages/96/b3/c6655ee7232b417562bae192ae0d3ceaadb1cc0ffc2088a2ddf415456cc2/shapely-2.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6305993a35989391bd3476ee538a5c9a845861462327efe00dd11a5c8c709a99", size = 4170078, upload-time = "2025-09-24T13:51:08.584Z" }, + { url = "https://files.pythonhosted.org/packages/a0/8e/605c76808d73503c9333af8f6cbe7e1354d2d238bda5f88eea36bfe0f42a/shapely-2.1.2-cp313-cp313t-win32.whl", hash = "sha256:c8876673449f3401f278c86eb33224c5764582f72b653a415d0e6672fde887bf", size = 1559178, upload-time = "2025-09-24T13:51:10.73Z" }, + { url = "https://files.pythonhosted.org/packages/36/f7/d317eb232352a1f1444d11002d477e54514a4a6045536d49d0c59783c0da/shapely-2.1.2-cp313-cp313t-win_amd64.whl", hash = "sha256:4a44bc62a10d84c11a7a3d7c1c4fe857f7477c3506e24c9062da0db0ae0c449c", size = 1739756, upload-time = "2025-09-24T13:51:12.105Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c4/3ce4c2d9b6aabd27d26ec988f08cb877ba9e6e96086eff81bfea93e688c7/shapely-2.1.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:9a522f460d28e2bf4e12396240a5fc1518788b2fcd73535166d748399ef0c223", size = 1831290, upload-time = "2025-09-24T13:51:13.56Z" }, + { url = "https://files.pythonhosted.org/packages/17/b9/f6ab8918fc15429f79cb04afa9f9913546212d7fb5e5196132a2af46676b/shapely-2.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1ff629e00818033b8d71139565527ced7d776c269a49bd78c9df84e8f852190c", size = 1641463, upload-time = "2025-09-24T13:51:14.972Z" }, + { url = "https://files.pythonhosted.org/packages/a5/57/91d59ae525ca641e7ac5551c04c9503aee6f29b92b392f31790fcb1a4358/shapely-2.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f67b34271dedc3c653eba4e3d7111aa421d5be9b4c4c7d38d30907f796cb30df", size = 2970145, upload-time = "2025-09-24T13:51:16.961Z" }, + { url = "https://files.pythonhosted.org/packages/8a/cb/4948be52ee1da6927831ab59e10d4c29baa2a714f599f1f0d1bc747f5777/shapely-2.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:21952dc00df38a2c28375659b07a3979d22641aeb104751e769c3ee825aadecf", size = 3073806, upload-time = "2025-09-24T13:51:18.712Z" }, + { url = "https://files.pythonhosted.org/packages/03/83/f768a54af775eb41ef2e7bec8a0a0dbe7d2431c3e78c0a8bdba7ab17e446/shapely-2.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1f2f33f486777456586948e333a56ae21f35ae273be99255a191f5c1fa302eb4", size = 3980803, upload-time = "2025-09-24T13:51:20.37Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cb/559c7c195807c91c79d38a1f6901384a2878a76fbdf3f1048893a9b7534d/shapely-2.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cf831a13e0d5a7eb519e96f58ec26e049b1fad411fc6fc23b162a7ce04d9cffc", size = 4133301, upload-time = "2025-09-24T13:51:21.887Z" }, + { url = "https://files.pythonhosted.org/packages/80/cd/60d5ae203241c53ef3abd2ef27c6800e21afd6c94e39db5315ea0cbafb4a/shapely-2.1.2-cp314-cp314-win32.whl", hash = "sha256:61edcd8d0d17dd99075d320a1dd39c0cb9616f7572f10ef91b4b5b00c4aeb566", size = 1583247, upload-time = "2025-09-24T13:51:23.401Z" }, + { url = "https://files.pythonhosted.org/packages/74/d4/135684f342e909330e50d31d441ace06bf83c7dc0777e11043f99167b123/shapely-2.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:a444e7afccdb0999e203b976adb37ea633725333e5b119ad40b1ca291ecf311c", size = 1773019, upload-time = "2025-09-24T13:51:24.873Z" }, + { url = "https://files.pythonhosted.org/packages/a3/05/a44f3f9f695fa3ada22786dc9da33c933da1cbc4bfe876fe3a100bafe263/shapely-2.1.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:5ebe3f84c6112ad3d4632b1fd2290665aa75d4cef5f6c5d77c4c95b324527c6a", size = 1834137, upload-time = "2025-09-24T13:51:26.665Z" }, + { url = "https://files.pythonhosted.org/packages/52/7e/4d57db45bf314573427b0a70dfca15d912d108e6023f623947fa69f39b72/shapely-2.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5860eb9f00a1d49ebb14e881f5caf6c2cf472c7fd38bd7f253bbd34f934eb076", size = 1642884, upload-time = "2025-09-24T13:51:28.029Z" }, + { url = "https://files.pythonhosted.org/packages/5a/27/4e29c0a55d6d14ad7422bf86995d7ff3f54af0eba59617eb95caf84b9680/shapely-2.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b705c99c76695702656327b819c9660768ec33f5ce01fa32b2af62b56ba400a1", size = 3018320, upload-time = "2025-09-24T13:51:29.903Z" }, + { url = "https://files.pythonhosted.org/packages/9f/bb/992e6a3c463f4d29d4cd6ab8963b75b1b1040199edbd72beada4af46bde5/shapely-2.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a1fd0ea855b2cf7c9cddaf25543e914dd75af9de08785f20ca3085f2c9ca60b0", size = 3094931, upload-time = "2025-09-24T13:51:32.699Z" }, + { url = "https://files.pythonhosted.org/packages/9c/16/82e65e21070e473f0ed6451224ed9fa0be85033d17e0c6e7213a12f59d12/shapely-2.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:df90e2db118c3671a0754f38e36802db75fe0920d211a27481daf50a711fdf26", size = 4030406, upload-time = "2025-09-24T13:51:34.189Z" }, + { url = "https://files.pythonhosted.org/packages/7c/75/c24ed871c576d7e2b64b04b1fe3d075157f6eb54e59670d3f5ffb36e25c7/shapely-2.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:361b6d45030b4ac64ddd0a26046906c8202eb60d0f9f53085f5179f1d23021a0", size = 4169511, upload-time = "2025-09-24T13:51:36.297Z" }, + { url = "https://files.pythonhosted.org/packages/b1/f7/b3d1d6d18ebf55236eec1c681ce5e665742aab3c0b7b232720a7d43df7b6/shapely-2.1.2-cp314-cp314t-win32.whl", hash = "sha256:b54df60f1fbdecc8ebc2c5b11870461a6417b3d617f555e5033f1505d36e5735", size = 1602607, upload-time = "2025-09-24T13:51:37.757Z" }, + { url = "https://files.pythonhosted.org/packages/9a/f6/f09272a71976dfc138129b8faf435d064a811ae2f708cb147dccdf7aacdb/shapely-2.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:0036ac886e0923417932c2e6369b6c52e38e0ff5d9120b90eef5cd9a5fc5cae9", size = 1796682, upload-time = "2025-09-24T13:51:39.233Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, +] + +[[package]] +name = "snowflake" +version = "1.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "snowflake-core" }, + { name = "snowflake-legacy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/47/4eeee2d2564e0de814c3f045d220df8983ba51d003fd0906035a69227775/snowflake-1.13.1.tar.gz", hash = "sha256:59291b0a93f3b98ba1dc6a1153bfcab1f4ba75dbd84a3abcad391e5d38ddb1f4", size = 6204, upload-time = "2026-08-12T07:52:30.677Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f0/67/035de3cb8411b1212443a5c39ff65202f45bf5bb91c71399b938c9d65b84/snowflake-1.13.1-py3-none-any.whl", hash = "sha256:6c62480f9b925119ecc4d29a48af3c0d52e1c08562b06105e239e20908a0afd6", size = 5645, upload-time = "2026-08-12T07:52:31.597Z" }, +] + +[[package]] +name = "snowflake-connector-python" +version = "4.7.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asn1crypto" }, + { name = "boto3" }, + { name = "botocore" }, + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "cryptography" }, + { name = "filelock" }, + { name = "idna" }, + { name = "packaging" }, + { name = "platformdirs" }, + { name = "pyjwt" }, + { name = "pyopenssl" }, + { name = "pytz" }, + { name = "requests" }, + { name = "sortedcontainers" }, + { name = "tomlkit" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/07/73/e6e45343dd133207a6f710a88e0675ae69f8c12c23efe7f192448bbdace9/snowflake_connector_python-4.7.2.tar.gz", hash = "sha256:c261b73b8dbe3f3d5b9bfdc19196f38e3eade42cb2f24322b7a2bb60fef76534", size = 954059, upload-time = "2026-08-07T13:59:54.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/32/710cc28319ddd8032b82a1f6c2118b0d773de4820c950ccb52620a80d4d7/snowflake_connector_python-4.7.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:5e807b896c7d2d6f95d5f45e4a069198bfeca66589cb06e0da24feb50b309e23", size = 1181594, upload-time = "2026-08-07T13:59:59.342Z" }, + { url = "https://files.pythonhosted.org/packages/53/f3/e4947de8c5166eb5c750a784476e309da93c58adc7fc3fea7cf32283ecd3/snowflake_connector_python-4.7.2-cp311-cp311-macosx_15_0_x86_64.whl", hash = "sha256:80f55ce890f7ced50bf45b04243d244171b4fce81fdf02970daad99902aa8ac8", size = 1193292, upload-time = "2026-08-07T14:00:00.914Z" }, + { url = "https://files.pythonhosted.org/packages/70/38/be5959f563adf266c17963b3333a19ef0cf5463651f14aa806eb03eed917/snowflake_connector_python-4.7.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cbce7e41111545cfbf844fe96e3c9e5f01aff04ce7ab3843ee74da415590bf74", size = 2867890, upload-time = "2026-08-07T13:59:41.635Z" }, + { url = "https://files.pythonhosted.org/packages/66/9e/9c6e764dc97d82188b74c36c12130ba1fba0b94c9f1e57869b4662410d7f/snowflake_connector_python-4.7.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0506eec17f6e237f89458d46ccb8933e398505e412ef5901a1a20a2b52eb56ad", size = 2895739, upload-time = "2026-08-07T13:59:43.854Z" }, + { url = "https://files.pythonhosted.org/packages/31/f6/b64395b0b99931c4083948c99afec4997b59e835b63f63225ecd46a954de/snowflake_connector_python-4.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:989a205accfcca60544f8656958add965c46c2c09b4e0a4f20d59707672f6ada", size = 5420684, upload-time = "2026-08-07T14:00:14.659Z" }, + { url = "https://files.pythonhosted.org/packages/e8/17/a3f4c38a4535b137139a353e60874c83e22eea535b37ce43651191ac5d1f/snowflake_connector_python-4.7.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:4d19ab07f57ec14d074086d7a4eadb51b32e75b37c91e9893ad3702ecd2e3505", size = 1181036, upload-time = "2026-08-07T14:00:02.642Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2b/c9446d830f33961ea7c86b4b5343a0fefda3882a31f577d74025ee8d26f5/snowflake_connector_python-4.7.2-cp312-cp312-macosx_15_0_x86_64.whl", hash = "sha256:1d94f27d67520e6729709114ee00916d89defa909d4cd456d53fe6106dc14df1", size = 1193269, upload-time = "2026-08-07T14:00:04.337Z" }, + { url = "https://files.pythonhosted.org/packages/e6/b5/0cee4d1d6ddd268c2443b2c3e8e2a98139198746525bcf73a1da876d940e/snowflake_connector_python-4.7.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:243c4e2621a58a34909a7863bbffaa886870c9fe19e88804a608660fb775f025", size = 2915086, upload-time = "2026-08-07T13:59:45.446Z" }, + { url = "https://files.pythonhosted.org/packages/29/2b/a52387d5abd5988498deeee502c3889b576f21e486f128115ce548006517/snowflake_connector_python-4.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:24e7a787cae7745756cb25c829e4fef1b828d2872dd70e0e31ff37a9323a62c7", size = 2947242, upload-time = "2026-08-07T13:59:46.904Z" }, + { url = "https://files.pythonhosted.org/packages/e5/29/4cc9353e21ec19570ac2916ed15a237d9cd42675ad70d7b9aa3dd2be6ea7/snowflake_connector_python-4.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:d7b1eabecdeaff6b0df8f583dc1b7a8bbd92e996e29212c324013e4ad7662c75", size = 5419590, upload-time = "2026-08-07T14:00:16.379Z" }, + { url = "https://files.pythonhosted.org/packages/93/c5/12defd8c0022ded5a11d3e2204ee52c0484654a869db3d2bf9027c7d2384/snowflake_connector_python-4.7.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9cb47d1d4881fe7338af91a38029c68926fab016b58fb6963954492257e2a1d9", size = 1179960, upload-time = "2026-08-07T14:00:05.802Z" }, + { url = "https://files.pythonhosted.org/packages/9f/70/b5ccddf8b3689455a3652f71eba16b35753dd90dc6936a1f0905c41a4db9/snowflake_connector_python-4.7.2-cp313-cp313-macosx_15_0_x86_64.whl", hash = "sha256:06281d6f66e857b4d8362fc0738600dafd635da1c1cf91537f0cd57f658ec1ec", size = 1192786, upload-time = "2026-08-07T14:00:07.207Z" }, + { url = "https://files.pythonhosted.org/packages/3a/0f/839bcabc5231daf009db958b11838fd991f68f7de137bb3918f8e5368de4/snowflake_connector_python-4.7.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0771229b11862b0eac60d8a771c66af79b5c3248b5200ad2898217ab4c7d385b", size = 2886123, upload-time = "2026-08-07T13:59:48.314Z" }, + { url = "https://files.pythonhosted.org/packages/e6/77/85754d5a5f3ba7f11a3f0aa569b2edd2429aa96f2342486b1da4530329c6/snowflake_connector_python-4.7.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:eb1e56efaaf258bb8a28968bbebea82488a02a2ffda354e65ea7921935289a19", size = 2918812, upload-time = "2026-08-07T13:59:49.747Z" }, + { url = "https://files.pythonhosted.org/packages/e8/01/9015c0918f4146281c2d36f72069a9ec538b4165bddb2b5cd3bc9ff4f24c/snowflake_connector_python-4.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:17f9cee8985b726afe027920b2842c41b0c52280747d37efa1643c3f77fd5505", size = 5419347, upload-time = "2026-08-07T14:00:18.013Z" }, + { url = "https://files.pythonhosted.org/packages/a0/9e/d768063750fd8e155311414580b79f35552e95b72f1bcbb702f9e577a5bc/snowflake_connector_python-4.7.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:9b5a3860bf4350786c35ffaac0ba60f7b13ef72d6296d23b28e356be1fe938c9", size = 1180582, upload-time = "2026-08-07T14:00:08.808Z" }, + { url = "https://files.pythonhosted.org/packages/01/40/fcff393b5b6de392931e43c5ca17298e59aaf8fd89b34189748af8166bc9/snowflake_connector_python-4.7.2-cp314-cp314-macosx_15_0_x86_64.whl", hash = "sha256:89e19d070ce884a370a2fa6273fcba8c8e1d7fe7c57861ba15ef92be603dfe19", size = 1192907, upload-time = "2026-08-07T14:00:10.44Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c2/b2e0676e2637d612e45e711eb3cbd17be3ffa60ea64ff5d7fea8f9ef6261/snowflake_connector_python-4.7.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1ebae2ff7311e9f383ce805d790b6b85cb9a30fe81b1b5dc56d96fe92cd6b5df", size = 2885786, upload-time = "2026-08-07T13:59:51.11Z" }, + { url = "https://files.pythonhosted.org/packages/ec/cb/a8918acef070f833800c1d3c8221610efffe2c8f0d087e69c81d01c33d39/snowflake_connector_python-4.7.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3751daec1a0f05470d6419ddf068f11e3b4d464d683ee4d0b8749a9a0c0605b8", size = 2914542, upload-time = "2026-08-07T13:59:52.624Z" }, + { url = "https://files.pythonhosted.org/packages/2f/0f/e1556f2501b538875c7d3f656f91b5c1ea66d6b88c33ec611b835c4933c5/snowflake_connector_python-4.7.2-cp314-cp314-win_amd64.whl", hash = "sha256:b06b910ff3965bad9c389e1b423837503c5e29f0bc51a9cec7ba8a3df92e6ca8", size = 5478102, upload-time = "2026-08-07T14:00:19.752Z" }, +] + +[[package]] +name = "snowflake-core" +version = "1.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "python-dateutil" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "snowflake-connector-python" }, + { name = "typing-extensions" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/28/a52204137835c0cdf92410245aa629e07301e5aaf0ee0fbe5a7b2c2c38eb/snowflake_core-1.13.1.tar.gz", hash = "sha256:9f07aa40f77f1e302f18812487afafd49f7fd2b49392ea03f115bc5ab6cb0015", size = 1127388, upload-time = "2026-08-12T07:52:35.592Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/4d/e997d69e94c453dc6175d63ed2625cf34ee66ce729cbd53e43e720fed01d/snowflake_core-1.13.1-py3-none-any.whl", hash = "sha256:6c2e18d4d5648ef68b19783e1aee078c85310581621e061f5f2671d34150e320", size = 1892381, upload-time = "2026-08-12T07:52:33.325Z" }, +] + +[[package]] +name = "snowflake-legacy" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9e/f1/95e11303ef08c9a2e71f58c7f3d12578c7c82e8dfc0cf9f04531c07b19b8/snowflake_legacy-1.0.3.tar.gz", hash = "sha256:681ecb997ba24ee01de1525e2105e214c76f277470074179379fabc1fe5d4bc0", size = 4084, upload-time = "2026-08-10T16:14:00.051Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/be/88339b2ee7d81b8a8b0ae22cb29d0512080aa46794878ecf5bea21f2943a/snowflake_legacy-1.0.3-py3-none-any.whl", hash = "sha256:637b8606266300b7630e2a9edad53308c7e14b7e76861d2dee30f50167c4b791", size = 3061, upload-time = "2026-08-10T16:14:00.879Z" }, +] + +[[package]] +name = "sortedcontainers" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, +] + +[[package]] +name = "texttable" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/dc/0aff23d6036a4d3bf4f1d8c8204c5c79c4437e25e0ae94ffe4bbb55ee3c2/texttable-1.7.0.tar.gz", hash = "sha256:2d2068fb55115807d3ac77a4ca68fa48803e84ebb0ee2340f858107a36522638", size = 12831, upload-time = "2023-10-03T09:48:12.272Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/99/4772b8e00a136f3e01236de33b0efda31ee7077203ba5967fcc76da94d65/texttable-1.7.0-py2.py3-none-any.whl", hash = "sha256:72227d592c82b3d7f672731ae73e4d1f88cd8e2ef5b075a7a7f01a23a3743917", size = 10768, upload-time = "2023-10-03T09:48:10.434Z" }, +] + +[[package]] +name = "timeout-decorator" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/80/f8/0802dd14c58b5d3d72bb9caa4315535f58787a1dc50b81bbbcaaa15451be/timeout-decorator-0.5.0.tar.gz", hash = "sha256:6a2f2f58db1c5b24a2cc79de6345760377ad8bdc13813f5265f6c3e63d16b3d7", size = 4754, upload-time = "2020-11-15T00:53:06.506Z" } + +[[package]] +name = "tomlkit" +version = "0.15.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/96/e07752635b98536177fa1f37671c8f3cdde2e724c6bcf6034b2cfb571565/tomlkit-0.15.1.tar.gz", hash = "sha256:e25bbf38843005246210a12982776f27f99cb9be67160e14434d0c0d21ee1e97", size = 180129, upload-time = "2026-07-17T01:48:04.562Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/bc/8c13eb66537dce1d2bd3a57132902f38d0e7f5bb46fa9f4daed9fe9d76ee/tomlkit-0.15.1-py3-none-any.whl", hash = "sha256:177a05aece5a8ca5266fd3c448abb47b8d352f09d477d3ca8332db4d89b24304", size = 49449, upload-time = "2026-07-17T01:48:05.728Z" }, +] + +[[package]] +name = "tornado" +version = "6.5.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/10/d3/343e5bb989d6515b1646cf3d40135d73f3d5e45339bded401b56cdac24dd/tornado-6.5.8.tar.gz", hash = "sha256:9452e1b208a8bd771e2cb1f2ff564985b9b214bdebbe622793e1799e0a6bd23f", size = 520493, upload-time = "2026-08-07T02:12:42.971Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/d5/007086fd8df5489338e204f65adce33fd4f21a4999dbb2b9cff2f897b5f4/tornado-6.5.8-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:cc6aa787d7cfab7c3d35189dc7a56fbd2399a569624c730c6b55b3d6531d0403", size = 449487, upload-time = "2026-08-07T02:12:28.682Z" }, + { url = "https://files.pythonhosted.org/packages/70/c8/5a24a99495903f594f6a199dd7beead1cbc0a13e2cb9102727bcaaf2a997/tornado-6.5.8-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9715b5eb79735b2bcd454ce216a9275b7c0470e64ea1bf5742f78b2f72b26eeb", size = 447649, upload-time = "2026-08-07T02:12:30.306Z" }, + { url = "https://files.pythonhosted.org/packages/6e/de/f2e733f386b85962d1b1dc82cd63d169b5b4580062b35397eac9244a41fe/tornado-6.5.8-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:547d63f450d570c14fe0e8db2cfb14c9bbd1c2503b4a6612586267955aa47b58", size = 450707, upload-time = "2026-08-07T02:12:31.95Z" }, + { url = "https://files.pythonhosted.org/packages/0b/94/20efeee9a01c141e9ac47c397f81679dfda24b32768fc4fff24e76d36c2c/tornado-6.5.8-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7e2360a0ffbe145eca8af0b19cb7203d79b1a98dd4cccdd6b368f6f49c2e3808", size = 451677, upload-time = "2026-08-07T02:12:33.512Z" }, + { url = "https://files.pythonhosted.org/packages/42/ec/a96ccb8ccf0de2b7bc2c5fa1608a4803735018242e90c4882365a9fd418f/tornado-6.5.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:5d242290bdf7ab3151bc1065fdd75c0dcc21cbc7b49f22a4c56329c2d6566d22", size = 451510, upload-time = "2026-08-07T02:12:35.346Z" }, + { url = "https://files.pythonhosted.org/packages/29/b5/93185859245ad3f00e62175f29607346788b696369347f0146e0421286bb/tornado-6.5.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7b94ff0e128fe0542f3bd331fb44d06260fc4ac16881545159f34ef08aad4195", size = 450917, upload-time = "2026-08-07T02:12:36.963Z" }, + { url = "https://files.pythonhosted.org/packages/97/cf/fe33cf062834487d34d1559746a4a12521033c22645b6d74d4bca702e018/tornado-6.5.8-cp39-abi3-win32.whl", hash = "sha256:67832909c4779c64942380cb5f044a5c6163d00831472d80e25e115de9917836", size = 451952, upload-time = "2026-08-07T02:12:38.512Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e1/468ad54333e92ccb62627e62cb88e5fc14a2171daa67ed47b1b8542d5b86/tornado-6.5.8-cp39-abi3-win_amd64.whl", hash = "sha256:11881db6b7c168494be2c2d12e65931451bdf7ee718535418ae1d8855dd5a0ee", size = 452391, upload-time = "2026-08-07T02:12:39.971Z" }, + { url = "https://files.pythonhosted.org/packages/ad/3e/cd5e4f06e34cde33b8ef66cf36aa2b5ad46354cc1af7d2136bbe365fee1d/tornado-6.5.8-cp39-abi3-win_arm64.whl", hash = "sha256:68a7468c7e289f8514d7d664101753903217eff1bb6822c6b5994a0b5f5bcb26", size = 451411, upload-time = "2026-08-07T02:12:41.469Z" }, +] + +[[package]] +name = "tqdm" +version = "4.70.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/21/3b/6c24bec5be5e743ffd99576daa5cc077722fc7d5bbc00bd133fa0c698dc6/tqdm-4.70.0.tar.gz", hash = "sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220", size = 795438, upload-time = "2026-07-27T11:33:15.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/1c/01bfd571a64e7f270e6bab5e33777debe0edc56759233ce84f27dec92d14/tqdm-4.70.0-py3-none-any.whl", hash = "sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953", size = 80184, upload-time = "2026-07-27T11:33:13.167Z" }, +] + +[[package]] +name = "types-aiofiles" +version = "24.1.0.20250708" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/d6/5c44761bc11cb5c7505013a39f397a9016bfb3a5c932032b2db16c38b87b/types_aiofiles-24.1.0.20250708.tar.gz", hash = "sha256:c8207ed7385491ce5ba94da02658164ebd66b69a44e892288c9f20cbbf5284ff", size = 14322, upload-time = "2025-07-08T03:14:44.814Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/e9/4e0cc79c630040aae0634ac9393341dc2aff1a5be454be9741cc6cc8989f/types_aiofiles-24.1.0.20250708-py3-none-any.whl", hash = "sha256:07f8f06465fd415d9293467d1c66cd074b2c3b62b679e26e353e560a8cf63720", size = 14320, upload-time = "2025-07-08T03:14:44.009Z" }, +] + +[[package]] +name = "types-pyyaml" +version = "6.0.12.20250516" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/22/59e2aeb48ceeee1f7cd4537db9568df80d62bdb44a7f9e743502ea8aab9c/types_pyyaml-6.0.12.20250516.tar.gz", hash = "sha256:9f21a70216fc0fa1b216a8176db5f9e0af6eb35d2f2932acb87689d03a5bf6ba", size = 17378, upload-time = "2025-05-16T03:08:04.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/5f/e0af6f7f6a260d9af67e1db4f54d732abad514252a7a378a6c4d17dd1036/types_pyyaml-6.0.12.20250516-py3-none-any.whl", hash = "sha256:8478208feaeb53a34cb5d970c56a7cd76b72659442e733e268a94dc72b2d0530", size = 20312, upload-time = "2025-05-16T03:08:04.019Z" }, +] + +[[package]] +name = "types-setuptools" +version = "80.9.0.20250529" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/66/1b276526aad4696a9519919e637801f2c103419d2c248a6feb2729e034d1/types_setuptools-80.9.0.20250529.tar.gz", hash = "sha256:79e088ba0cba2186c8d6499cbd3e143abb142d28a44b042c28d3148b1e353c91", size = 41337, upload-time = "2025-05-29T03:07:34.487Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/d8/83790d67ec771bf029a45ff1bd1aedbb738d8aa58c09dd0cc3033eea0e69/types_setuptools-80.9.0.20250529-py3-none-any.whl", hash = "sha256:00dfcedd73e333a430e10db096e4d46af93faf9314f832f13b6bbe3d6757e95f", size = 63263, upload-time = "2025-05-29T03:07:33.064Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/26/b09b8010994eccc3c09092e6b34058f36a460eea2d4c3e8b910c695975a0/typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47", size = 76928, upload-time = "2026-08-12T12:37:25.997Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", size = 14750, upload-time = "2026-08-12T12:37:24.648Z" }, +] + +[[package]] +name = "tzdata" +version = "2026.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/92/ff/5a28bdfd8c3ebec42564ac7d0e54ca3db65044a9314a97f9564fa7a1e926/tzdata-2026.3.tar.gz", hash = "sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415", size = 198674, upload-time = "2026-07-10T08:50:37.887Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/6d/b53b99a9f2766d095985947a5782f1702cabb129a34f7a802d7197af832f/tzdata-2026.3-py2.py3-none-any.whl", hash = "sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931", size = 348168, upload-time = "2026-07-10T08:50:36.46Z" }, +] + +[[package]] +name = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, +] + +[[package]] +name = "wheel" +version = "0.46.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9b/92/3a64fa9639b8e290fe8630d8067a66f7c5510845c6d73686ad880c9b04d9/wheel-0.46.2.tar.gz", hash = "sha256:3d79e48fde9847618a5a181f3cc35764c349c752e2fe911e65fa17faab9809b0", size = 60274, upload-time = "2026-01-21T23:55:25.838Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/2c/5e079cefe955ae58e5a052fe037c850ce493eb7269dedeb960237e78fb0f/wheel-0.46.2-py3-none-any.whl", hash = "sha256:33ae60725d69eaa249bc1982e739943c23b34b58d51f1cb6253453773aca6e65", size = 29971, upload-time = "2026-01-21T23:55:24.447Z" }, +] + +[[package]] +name = "xlsxwriter" +version = "3.2.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/2c/c06ef49dc36e7954e55b802a8b231770d286a9758b3d936bd1e04ce5ba88/xlsxwriter-3.2.9.tar.gz", hash = "sha256:254b1c37a368c444eac6e2f867405cc9e461b0ed97a3233b2ac1e574efb4140c", size = 215940, upload-time = "2025-09-16T00:16:21.63Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/0c/3662f4a66880196a590b202f0db82d919dd2f89e99a27fadef91c4a33d41/xlsxwriter-3.2.9-py3-none-any.whl", hash = "sha256:9a5db42bc5dff014806c58a20b9eae7322a134abb6fce3c92c181bfb275ec5b3", size = 175315, upload-time = "2025-09-16T00:16:20.108Z" }, +] + +[[package]] +name = "xnat" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "click-option-group" }, + { name = "importlib-metadata" }, + { name = "isodate" }, + { name = "progressbar2" }, + { name = "pydicom" }, + { name = "python-dateutil" }, + { name = "pyyaml" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/9a/3998a48c3a2e8792f66e3de533aad0852e6936e4446e1f343fe553c02056/xnat-0.8.1.tar.gz", hash = "sha256:da153e7d4bb4e7c1becff79c9dc4097750f56f77bef4aa5b9c2c446fe54f59ad", size = 94075516, upload-time = "2026-06-24T15:59:50.324Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/2f/cc54888c27ceb4deae887f72be1e04b15042a95dc0e09a67dacdfa8d7566/xnat-0.8.1-py2.py3-none-any.whl", hash = "sha256:5944b966ca53337ee15ff99f7d7dfea99a3c6dfbef38951569ced5b52922b105", size = 120287, upload-time = "2026-06-24T15:59:53.717Z" }, +] + +[[package]] +name = "xyzservices" +version = "2026.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/08/3cb9f67a8d48021aca2a02292cc26eecd71d949ae70ad66420a8730cc302/xyzservices-2026.3.0.tar.gz", hash = "sha256:d226866a5d8e9fef337034d8da37a8298f0a1d9d1489b4018e69579eb321fea4", size = 1135736, upload-time = "2026-03-30T14:42:25.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/a9/d23012099dc88ec69a29c6407b41d89681cb674c2043cd5b467c7e299c08/xyzservices-2026.3.0-py3-none-any.whl", hash = "sha256:503183d4b322bfebc3c50cdd21192aa3e81e36c5efbf9133d54ae82143e0576b", size = 94101, upload-time = "2026-03-30T14:42:24.608Z" }, +] + +[[package]] +name = "zipp" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, +] From df5e04f2fdaffc4081d947e054205535e5a7bc6f Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Tue, 1 Sep 2026 21:19:01 +0100 Subject: [PATCH 21/30] Fixed script. --- scripts/gitea_create_submodule_repos.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/gitea_create_submodule_repos.sh b/scripts/gitea_create_submodule_repos.sh index 5c12c0bfc..f17b10d93 100755 --- a/scripts/gitea_create_submodule_repos.sh +++ b/scripts/gitea_create_submodule_repos.sh @@ -142,8 +142,7 @@ for path in "${submodule_paths[@]}"; do fi # avoid mirror pushes (which include refs/remotes/origin/*) - git config --get-all "remote.${GITEA_DEFAULT_MAIN_REMOTE_NAME}.mirror" >/dev/null 2>&1 && \ - git config --unset-all "remote.${GITEA_DEFAULT_MAIN_REMOTE_NAME}.mirror" || true + git config --unset-all "remote.${GITEA_DEFAULT_MAIN_REMOTE_NAME}.mirror" >/dev/null 2>&1 || true # push only local branches + tags echo "↗️ pushing branches & tags to $GITEA_DEFAULT_MAIN_REMOTE_NAME…" From ce31ad69da23809c29106dce0a3af6c03a4319c5 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Wed, 2 Sep 2026 09:53:05 +0100 Subject: [PATCH 22/30] Pinned build/lint tooling, depdendabot uv pin. --- .github/dependabot.yml | 8 +++++++- .github/workflows/dependency_hygiene.yml | 7 ++++++- .github/workflows/doc_build.yml | 1 + .github/workflows/python_quality.yml | 5 +++-- .github/workflows/shell_script_enforce_exec_check.yml | 6 +++++- nifi/Dockerfile | 11 ++++++----- pyproject.toml | 3 +++ 7 files changed, 31 insertions(+), 10 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 306dc7dde..324d7a47d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -14,9 +14,15 @@ updates: registries: - dockerhub + # Keep the root Python project and lock file up to date. + - package-ecosystem: "uv" + directory: "/" + schedule: + interval: "weekly" + registries: dockerhub: type: "docker-registry" url: "https://index.docker.io" username: "${{secrets.DOCKER_HUB_USERNAME}}" - password: "${{secrets.DOCKER_HUB_ACCESS_TOKEN}}" \ No newline at end of file + password: "${{secrets.DOCKER_HUB_ACCESS_TOKEN}}" diff --git a/.github/workflows/dependency_hygiene.yml b/.github/workflows/dependency_hygiene.yml index 0875a21cb..11e27b9af 100644 --- a/.github/workflows/dependency_hygiene.yml +++ b/.github/workflows/dependency_hygiene.yml @@ -44,8 +44,13 @@ jobs: with: python-version: "3.11" + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + version-file: "pyproject.toml" + - name: Install audit tools - run: python -m pip install --upgrade pip pip-audit uv + run: python -m pip install --upgrade pip pip-audit - name: Ensure script is executable run: chmod +x scripts/maintenance/audit_pip_dependency.sh diff --git a/.github/workflows/doc_build.yml b/.github/workflows/doc_build.yml index 9ab76eb08..83c2740fd 100644 --- a/.github/workflows/doc_build.yml +++ b/.github/workflows/doc_build.yml @@ -24,6 +24,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v5 with: + version-file: "pyproject.toml" python-version: "3.12" enable-cache: true cache-dependency-glob: "docs/uv.lock" diff --git a/.github/workflows/python_quality.yml b/.github/workflows/python_quality.yml index 31621af37..6649e271a 100644 --- a/.github/workflows/python_quality.yml +++ b/.github/workflows/python_quality.yml @@ -37,8 +37,9 @@ jobs: python-version: "3.11" - name: Install uv - run: | - python -m pip install --upgrade pip uv + uses: astral-sh/setup-uv@v5 + with: + version-file: "pyproject.toml" - name: Install locked project dependencies run: | diff --git a/.github/workflows/shell_script_enforce_exec_check.yml b/.github/workflows/shell_script_enforce_exec_check.yml index 7ccb8f417..e8deb62eb 100644 --- a/.github/workflows/shell_script_enforce_exec_check.yml +++ b/.github/workflows/shell_script_enforce_exec_check.yml @@ -67,7 +67,11 @@ jobs: fi echo "Checking ${#scripts[@]} root-owned shell scripts." - shellcheck "${scripts[@]}" + docker run --rm \ + --volume "${GITHUB_WORKSPACE}:/mnt:ro" \ + --workdir /mnt \ + koalaman/shellcheck:v0.11.0@sha256:61862eba1fcf09a484ebcc6feea46f1782532571a34ed51fedf90dd25f925a8d \ + "${scripts[@]}" for file in "${scripts[@]}"; do bash -n "$file" diff --git a/nifi/Dockerfile b/nifi/Dockerfile index cada1eef0..33787fcee 100644 --- a/nifi/Dockerfile +++ b/nifi/Dockerfile @@ -91,9 +91,6 @@ RUN set -eux; \ apt-get clean; \ rm -rf /var/lib/apt/lists/* -# bust cache -ENV UV_VERSION=latest - # install rust, medcat requirement, install UV ENV HOME=/root ENV PATH="/root/.cargo/bin:${PATH}" @@ -105,8 +102,12 @@ RUN set -eux; \ /tmp/rustup-init.sh -y; \ rm /tmp/rustup-init.sh +# Keep the installer version aligned with the repository's uv requirement. +COPY pyproject.toml /tmp/cogstack_nifi/pyproject.toml RUN set -eux; \ - curl -Ls https://astral.sh/uv/install.sh -o /tmp/install_uv.sh; \ + UV_VERSION="$(sed -n 's/^required-version = "==\([^"]*\)"$/\1/p' /tmp/cogstack_nifi/pyproject.toml)"; \ + test -n "${UV_VERSION}"; \ + curl -LsSf "https://astral.sh/uv/${UV_VERSION}/install.sh" -o /tmp/install_uv.sh; \ bash /tmp/install_uv.sh; \ rm /tmp/install_uv.sh @@ -115,7 +116,7 @@ RUN set -eux; \ RUN uv pip install --no-cache-dir --break-system-packages --system --upgrade pip setuptools wheel # Install the locked runtime dependencies used by NiFi scripts and extensions. -COPY pyproject.toml uv.lock /tmp/cogstack_nifi/ +COPY uv.lock /tmp/cogstack_nifi/uv.lock RUN uv export \ --project /tmp/cogstack_nifi \ --frozen \ diff --git a/pyproject.toml b/pyproject.toml index e5df6ee17..2d0ccec13 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,6 +4,9 @@ exclude = ["nifi/user_scripts/legacy_scripts", "services"] target-version = "py311" indent-width = 4 +[tool.uv] +required-version = "==0.12.1" + [tool.ruff.lint] # Enable flake8-bugbear (`B`) rules, in addition to the defaults. select = [ From c2cd069494e14b372adfc7a4f9f0084ea01426e2 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Wed, 2 Sep 2026 14:17:23 +0100 Subject: [PATCH 23/30] GHA updates. --- .github/workflows/compose_config.yml | 37 ++++++++++++++++++++++++++++ .github/workflows/doc_build.yml | 3 +-- 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/compose_config.yml diff --git a/.github/workflows/compose_config.yml b/.github/workflows/compose_config.yml new file mode 100644 index 000000000..fad705f39 --- /dev/null +++ b/.github/workflows/compose_config.yml @@ -0,0 +1,37 @@ +name: compose-config + +on: + push: + branches: ['**'] + paths: + - "deploy/*.env" + - "deploy/export_env_vars.sh" + - "deploy/services*.yml" + - "security/env/*.env" + - ".github/workflows/compose_config.yml" + pull_request: + paths: + - "deploy/*.env" + - "deploy/export_env_vars.sh" + - "deploy/services*.yml" + - "security/env/*.env" + - ".github/workflows/compose_config.yml" + workflow_dispatch: + +permissions: + contents: read + +jobs: + validate: + name: Validate Docker Compose configuration + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + + - name: Validate Compose files + shell: bash + run: | + set -euo pipefail + source deploy/export_env_vars.sh + docker compose -f deploy/services.yml config --quiet + docker compose -f deploy/services.dev.yml config --quiet diff --git a/.github/workflows/doc_build.yml b/.github/workflows/doc_build.yml index 83c2740fd..a2b2514be 100644 --- a/.github/workflows/doc_build.yml +++ b/.github/workflows/doc_build.yml @@ -2,9 +2,8 @@ name: doc-build on: push: - branches: [ main ] + branches: ['**'] pull_request: - branches: [ main ] release: types: [published] From 5e8d336c62098aeeb762a9015c27a06b76b0e1aa Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Wed, 2 Sep 2026 14:17:43 +0100 Subject: [PATCH 24/30] NiFi: removed old netty download script from docker image build. --- nifi/Dockerfile | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/nifi/Dockerfile b/nifi/Dockerfile index 33787fcee..a6fecdc2c 100644 --- a/nifi/Dockerfile +++ b/nifi/Dockerfile @@ -166,16 +166,6 @@ RUN $GROOVY_BIN/grape -V install org.apache.avro avro 1.12.0 # INSTALL NAR extensions WORKDIR /opt/nifi/nifi-current/lib/ -# --- Hotfix: NiFi 2.7.2 + Azure + Netty QUIC missing class (netty 4.2.9.Final) --- -ARG NETTY_VERSION=4.2.17.Final -RUN set -eux; \ - cd /opt/nifi/nifi-current/lib; \ - curl -fL --retry 5 --retry-delay 2 \ - -o "netty-codec-classes-quic-${NETTY_VERSION}.jar" \ - "https://repo1.maven.org/maven2/io/netty/netty-codec-classes-quic/${NETTY_VERSION}/netty-codec-classes-quic-${NETTY_VERSION}.jar"; \ - # sanity check: ensure the Quic class exists in the jar - jar tf "netty-codec-classes-quic-${NETTY_VERSION}.jar" | grep -q '^io/netty/handler/codec/quic/Quic.class$' - # Install parquet NAR RUN set -eux; \ base="https://repo.maven.apache.org/maven2/org/apache/nifi"; \ From 4d73dbd59606d98571e57217e371d07c1224268b Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Wed, 2 Sep 2026 15:11:12 +0100 Subject: [PATCH 25/30] Updated smoke tests. --- .github/workflows/_docker_template.yml | 28 ++++++++-- nifi/Dockerfile | 13 ++--- scripts/tests/smoke_elastic_services.sh | 24 ++++++++- scripts/tests/smoke_gitea_service.sh | 3 ++ scripts/tests/smoke_http_checks.sh | 19 ++++++- scripts/tests/smoke_nifi_services.sh | 68 ++++++++++++++++++++++++- 6 files changed, 139 insertions(+), 16 deletions(-) diff --git a/.github/workflows/_docker_template.yml b/.github/workflows/_docker_template.yml index f8538302c..4494649d2 100644 --- a/.github/workflows/_docker_template.yml +++ b/.github/workflows/_docker_template.yml @@ -125,20 +125,40 @@ jobs: type=ref,event=branch,enable=${{ github.event_name != 'pull_request' }} type=sha,format=short - - name: Wait for Docker Hub to register images - run: sleep 60 - - name: Create multi-arch manifest shell: bash run: | set -euo pipefail + + wait_for_image() { + local image_ref="$1" + local attempt + + for attempt in {1..12}; do + if docker buildx imagetools inspect "$image_ref" >/dev/null 2>&1; then + echo "Available: ${image_ref}" + return 0 + fi + + if [[ "$attempt" -lt 12 ]]; then + echo "Waiting for ${image_ref} (${attempt}/12)..." + sleep 5 + fi + done + + echo "Timed out waiting for ${image_ref}" >&2 + return 1 + } + while IFS= read -r ref; do [[ -z "$ref" ]] && continue img="${ref%%:*}" tag="${ref#*:}" + wait_for_image "${img}:${tag}-amd64" + wait_for_image "${img}:${tag}-arm64" echo "πŸŒ€ Creating manifest for ${img}:${tag}" docker buildx imagetools create \ --tag "${img}:${tag}" \ "${img}:${tag}-amd64" \ "${img}:${tag}-arm64" - done < <(printf "%s" "${{ steps.meta_manifest.outputs.tags }}") + done < <(printf "%s\n" "${{ steps.meta_manifest.outputs.tags }}") diff --git a/nifi/Dockerfile b/nifi/Dockerfile index a6fecdc2c..7050ee497 100644 --- a/nifi/Dockerfile +++ b/nifi/Dockerfile @@ -154,7 +154,7 @@ RUN set -eux; \ mkdir -p /opt/nifi/groovy; \ cd /opt/nifi/groovy; \ url1="https://archive.apache.org/dist/groovy/${GROOVY_VERSION}/distribution/apache-groovy-binary-${GROOVY_VERSION}.zip"; \ - url2="https://repo1.maven.org/maven2/org/apache/groovy/apache-groovy-binary/${GROOVY_VERSION}/apache-groovy-binary-${GROOVY_VERSION}.zip"; \ + url2="https://repo.maven.apache.org/maven2/org/apache/groovy/apache-groovy-binary/${GROOVY_VERSION}/apache-groovy-binary-${GROOVY_VERSION}.zip"; \ curl -fsSL --retry 8 --retry-delay 3 --connect-timeout 20 -o groovy.zip "$url1" \ || curl -fsSL --retry 8 --retry-delay 3 --connect-timeout 20 -o groovy.zip "$url2"; \ unzip groovy.zip; rm groovy.zip @@ -166,7 +166,7 @@ RUN $GROOVY_BIN/grape -V install org.apache.avro avro 1.12.0 # INSTALL NAR extensions WORKDIR /opt/nifi/nifi-current/lib/ -# Install parquet NAR +# Install additional NAR extensions. RUN set -eux; \ base="https://repo.maven.apache.org/maven2/org/apache/nifi"; \ nars=( \ @@ -233,13 +233,10 @@ RUN set -eux; \ ); \ for a in "${nars[@]}"; do \ url="${base}/${a}/${NIFI_VERSION}/${a}-${NIFI_VERSION}.nar"; \ - echo "Checking $a"; \ - if ! curl -fsSL --retry 2 \ + echo "Downloading $a"; \ + curl -fsSL --retry 5 --retry-delay 2 \ -o "${a}-${NIFI_VERSION}.nar" \ - "$url"; then \ - echo "MISSING: $a @ ${NIFI_VERSION}"; \ - rm -f "${a}-${NIFI_VERSION}.nar"; \ - fi; \ + "$url"; \ done; \ chown ${UID}:${GID} ./*.nar diff --git a/scripts/tests/smoke_elastic_services.sh b/scripts/tests/smoke_elastic_services.sh index 6b646e835..a2c82d47f 100755 --- a/scripts/tests/smoke_elastic_services.sh +++ b/scripts/tests/smoke_elastic_services.sh @@ -31,6 +31,25 @@ KIBANA_PORT="${KIBANA_SERVER_OUTPUT_PORT:-5601}" # shellcheck disable=SC2034 SMOKE_CA_CERT="${ELASTICSEARCH_SMOKE_CA_CERT:-${ROOT_DIR}/security/certificates/elastic/${ELASTICSEARCH_VERSION:-opensearch}/elastic-stack-ca.crt.pem}" +SEARCH_BACKEND="${ELASTICSEARCH_VERSION:-opensearch}" +case "$SEARCH_BACKEND" in + opensearch) + ADMIN_CERT_DIR="${ROOT_DIR}/security/certificates/elastic/opensearch" + ADMIN_CERT="${ELASTICSEARCH_SMOKE_ADMIN_CERT:-${ADMIN_CERT_DIR}/admin.crt}" + ADMIN_KEY="${ELASTICSEARCH_SMOKE_ADMIN_KEY:-${ADMIN_CERT_DIR}/admin.key.pem}" + set_smoke_curl_args --cert "$ADMIN_CERT" --key "$ADMIN_KEY" + ;; + elasticsearch) + : "${ELASTIC_USER:?ELASTIC_USER is required for Elasticsearch smoke checks}" + : "${ELASTIC_PASSWORD:?ELASTIC_PASSWORD is required for Elasticsearch smoke checks}" + set_smoke_curl_args --user "${ELASTIC_USER}:${ELASTIC_PASSWORD}" + ;; + *) + echo "Unsupported search backend for smoke checks: ${SEARCH_BACKEND}" >&2 + exit 1 + ;; +esac + START_SERVICES="${ELASTICSEARCH_SMOKE_START_SERVICES:-1}" ELASTICSEARCH_RETRIES="${ELASTICSEARCH_SMOKE_RETRIES:-30}" @@ -42,7 +61,7 @@ KIBANA_GRACE_SECONDS="${KIBANA_SMOKE_GRACE_SECONDS:-60}" ELASTICSEARCH_CHECKS=() for port in "${ELASTICSEARCH_PORT_LIST[@]}"; do - ELASTICSEARCH_CHECKS+=("elasticsearch:${port}|https://${HOST}:${port}/") + ELASTICSEARCH_CHECKS+=("elasticsearch:${port}|https://${HOST}:${port}/_cluster/health") done KIBANA_CHECKS=( @@ -59,6 +78,7 @@ if [[ "$START_SERVICES" != "0" ]]; then make -C "${ROOT_DIR}/deploy" start-elastic fi +set_smoke_allowed_codes 200 wait_for_checks \ "Elasticsearch" \ "$ELASTICSEARCH_RETRIES" \ @@ -70,6 +90,8 @@ if [[ "$KIBANA_GRACE_SECONDS" -gt 0 ]]; then sleep "$KIBANA_GRACE_SECONDS" fi +set_smoke_curl_args +set_smoke_allowed_codes 200 301 302 303 307 308 wait_for_checks \ "Kibana" \ "$KIBANA_RETRIES" \ diff --git a/scripts/tests/smoke_gitea_service.sh b/scripts/tests/smoke_gitea_service.sh index 4781efed0..b165e308f 100755 --- a/scripts/tests/smoke_gitea_service.sh +++ b/scripts/tests/smoke_gitea_service.sh @@ -33,8 +33,11 @@ DELAY_SECONDS="${GITEA_SMOKE_DELAY_SECONDS:-10}" SMOKE_CHECKS=( "gitea-root|https://${HOST}:${PORT}/" "gitea-login|https://${HOST}:${PORT}/user/login" + "gitea-api|https://${HOST}:${PORT}/api/v1/version" ) +set_smoke_allowed_codes 200 + if [[ "$START_SERVICES" != "0" ]]; then if ! command -v make >/dev/null 2>&1; then echo "make is required to start Gitea services via the Makefile." >&2 diff --git a/scripts/tests/smoke_http_checks.sh b/scripts/tests/smoke_http_checks.sh index 5a876f7d2..139623f57 100755 --- a/scripts/tests/smoke_http_checks.sh +++ b/scripts/tests/smoke_http_checks.sh @@ -7,9 +7,13 @@ SMOKE_MAX_TIME="${SMOKE_MAX_TIME:-60}" # Allow callers to provide their own accepted status codes. if [[ -z "${SMOKE_ALLOWED_CODES+x}" ]]; then - SMOKE_ALLOWED_CODES=(200 301 302 303 307 308 401 403) + SMOKE_ALLOWED_CODES=(200 301 302 303 307 308) fi +# Callers can provide additional curl arguments such as authentication options. +SMOKE_CURL_ARGS=() +SMOKE_CURL_ARGS_COUNT=0 + if ! command -v curl >/dev/null 2>&1; then echo "curl is required for smoke checks." >&2 # This helper supports both sourcing (`return`) and direct execution (`exit`). @@ -17,6 +21,15 @@ if ! command -v curl >/dev/null 2>&1; then return 1 2>/dev/null || exit 1 fi +set_smoke_allowed_codes() { + SMOKE_ALLOWED_CODES=("$@") +} + +set_smoke_curl_args() { + SMOKE_CURL_ARGS=("$@") + SMOKE_CURL_ARGS_COUNT="$#" +} + check_url() { local name="$1" local url="$2" @@ -39,6 +52,10 @@ check_url() { curl_args+=(--cacert "$SMOKE_CA_CERT") fi + if (( SMOKE_CURL_ARGS_COUNT > 0 )); then + curl_args+=("${SMOKE_CURL_ARGS[@]}") + fi + if ! code="$(curl "${curl_args[@]}" "$url")"; then echo "FAIL: ${name} - unable to reach ${url}" return 1 diff --git a/scripts/tests/smoke_nifi_services.sh b/scripts/tests/smoke_nifi_services.sh index 9c131c926..9dca31615 100755 --- a/scripts/tests/smoke_nifi_services.sh +++ b/scripts/tests/smoke_nifi_services.sh @@ -28,12 +28,62 @@ SMOKE_CA_CERT="${NIFI_SMOKE_CA_CERT:-${ROOT_DIR}/security/certificates/root/root START_SERVICES="${NIFI_SMOKE_START_SERVICES:-1}" RETRIES="${NIFI_SMOKE_RETRIES:-30}" DELAY_SECONDS="${NIFI_SMOKE_DELAY_SECONDS:-15}" +NIFI_BASE_URL="https://${HOST}:${NIFI_PORT}" SMOKE_CHECKS=( - "nifi|https://${HOST}:${NIFI_PORT}/nifi/" - "nifi-nginx|https://${HOST}:${NIFI_PORT}/" + "nifi|${NIFI_BASE_URL}/nifi/" + "nifi-nginx|${NIFI_BASE_URL}/" ) +check_authenticated_nifi_api() { + local token + local code + + if ! token="$( + curl \ + --silent \ + --show-error \ + --fail \ + --cacert "$SMOKE_CA_CERT" \ + --connect-timeout "$SMOKE_CONNECT_TIMEOUT" \ + --max-time "$SMOKE_MAX_TIME" \ + --data-urlencode "username=${NIFI_SINGLE_USER_CREDENTIALS_USERNAME}" \ + --data-urlencode "password=${NIFI_SINGLE_USER_CREDENTIALS_PASSWORD}" \ + "${NIFI_BASE_URL}/nifi-api/access/token" + )"; then + echo "FAIL: nifi-api - authentication failed" >&2 + return 1 + fi + + if [[ -z "$token" ]]; then + echo "FAIL: nifi-api - authentication returned an empty token" >&2 + return 1 + fi + + if ! code="$( + curl \ + --silent \ + --show-error \ + --output /dev/null \ + --cacert "$SMOKE_CA_CERT" \ + --connect-timeout "$SMOKE_CONNECT_TIMEOUT" \ + --max-time "$SMOKE_MAX_TIME" \ + --header "Authorization: Bearer ${token}" \ + --write-out "%{http_code}" \ + "${NIFI_BASE_URL}/nifi-api/flow/about" + )"; then + echo "FAIL: nifi-api - authenticated request failed" >&2 + return 1 + fi + + if [[ "$code" != "200" ]]; then + echo "FAIL: nifi-api - authenticated request returned HTTP ${code}" >&2 + return 1 + fi + + echo "OK: nifi-api - authenticated API request returned HTTP 200" +} + if [[ "$START_SERVICES" != "0" ]]; then if ! command -v make >/dev/null 2>&1; then echo "make is required to start NiFi services via the Makefile." >&2 @@ -46,3 +96,17 @@ fi echo "Running smoke checks against NiFi and nginx." wait_for_checks "NiFi" "$RETRIES" "$DELAY_SECONDS" "${SMOKE_CHECKS[@]}" + +echo "Checking authenticated NiFi API access." +for attempt in $(seq 1 "$RETRIES"); do + if check_authenticated_nifi_api; then + exit 0 + fi + if [[ "$attempt" -lt "$RETRIES" ]]; then + echo "NiFi API attempt ${attempt}/${RETRIES} failed. Sleeping ${DELAY_SECONDS}s..." + sleep "$DELAY_SECONDS" + fi +done + +echo "Authenticated NiFi API check failed after ${RETRIES} attempts." +exit 1 From 22f6a968f1178256b71c5605e10e1cc34afa28d4 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Wed, 2 Sep 2026 15:22:33 +0100 Subject: [PATCH 26/30] NiFi: updated Dockerfile, Security: removed legacy nifi cert gen script. --- docs/security/main.md | 1 - nifi/Dockerfile | 7 +- security/scripts/nifi_toolkit_security.sh | 147 ---------------------- 3 files changed, 5 insertions(+), 150 deletions(-) delete mode 100755 security/scripts/nifi_toolkit_security.sh diff --git a/docs/security/main.md b/docs/security/main.md index 08795b77c..1b08b5d88 100644 --- a/docs/security/main.md +++ b/docs/security/main.md @@ -62,7 +62,6 @@ security/ β”‚ β”œβ”€β”€ create_opensearch_users.sh # Creates OpenSearch internal users and role mappings (manual execution post-startup) β”‚ β”œβ”€β”€ create_nifi_certs.sh # Generates NiFi 2.x leaf certificates and Java stores β”‚ β”œβ”€β”€ create_gitea_certs.sh # Generates a dedicated Gitea leaf certificate -β”‚ β”œβ”€β”€ nifi_toolkit_security.sh # Legacy NiFi < 2.0 certificate helper β”‚ β”œβ”€β”€ nifi_init_create_user_auth.sh # Bootstraps a temporary NiFi container to create a single-user authentication file β”‚ β”œβ”€β”€ nifi_create_single_user_auth.sh # Helper script executed inside the container to generate NiFi single-user credentials β”‚ β”œβ”€β”€ es_native_cert_generator.sh # Helper called by create_es_native_certs.sh to assemble ES cert bundles diff --git a/nifi/Dockerfile b/nifi/Dockerfile index 7050ee497..d76b27bad 100644 --- a/nifi/Dockerfile +++ b/nifi/Dockerfile @@ -234,9 +234,12 @@ RUN set -eux; \ for a in "${nars[@]}"; do \ url="${base}/${a}/${NIFI_VERSION}/${a}-${NIFI_VERSION}.nar"; \ echo "Downloading $a"; \ - curl -fsSL --retry 5 --retry-delay 2 \ + if ! curl -fsSL --retry 5 --retry-delay 2 \ -o "${a}-${NIFI_VERSION}.nar" \ - "$url"; \ + "$url"; then \ + echo "WARNING: NAR unavailable: $a @ ${NIFI_VERSION}"; \ + rm -f "${a}-${NIFI_VERSION}.nar"; \ + fi; \ done; \ chown ${UID}:${GID} ./*.nar diff --git a/security/scripts/nifi_toolkit_security.sh b/security/scripts/nifi_toolkit_security.sh deleted file mode 100755 index 37b895233..000000000 --- a/security/scripts/nifi_toolkit_security.sh +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env bash -# shellcheck disable=SC1090,SC1091 # Environment files are selected through runtime paths. - -# ============================================================================== -# ⚠️ Legacy: NiFi Toolkit TLS Setup Script -# -# This script uses the Apache NiFi Toolkit (TLS tool) to generate: -# - `nifi.key` (private key) -# - `nifi.pem` (PEM-formatted cert) -# - `nifi.crt` (X.509 DER cert) -# - `nifi-keystore.jks` / `nifi.p12` (Java Keystore) -# - `nifi-truststore.jks` (Truststore) -# - `nifi.csr` (Certificate Signing Request) -# -# Output directory: -# ../certificates/nifi/ -# -# ⚠️ This script is NOT used by default β€” OpenSSL-based flows have replaced it. -# Kept here for backwards compatibility or future fallback. -# -# Usage: -# ./nifi_toolkit_security.sh -# ============================================================================== - - -set -euo pipefail - -SECURITY_TEMPLATES_FOLDER="../templates/" -SECURITY_CERTIFICATES_FOLDER="../certificates/" -SECURITY_ENV_FOLDER="../env/" - -# === Load environment variables -source ../../deploy/general.env -source ../../deploy/nifi.env -source "${SECURITY_ENV_FOLDER}certificates_general.env" -source "${SECURITY_ENV_FOLDER}certificates_nifi.env" - -# === Defaults -NIFI_TOOLKIT_VERSION="${NIFI_TOOLKIT_VERSION:-${NIFI_TOOLKIT_VERSION}}" -NIFI_CERTIFICATE_TIME_VAILIDITY_IN_DAYS="${NIFI_CERTIFICATE_TIME_VAILIDITY_IN_DAYS:-1460}" -NIFI_KEYSTORE_PASSWORD="${NIFI_KEYSTORE_PASSWORD:-cogstackNifi}" -OUTPUT_DIRECTORY="${SECURITY_CERTIFICATES_FOLDER}nifi/" -SECURITY_ROOT_CA_FOLDER="${SECURITY_CERTIFICATES_FOLDER}root/" -EXT_FILE="${SECURITY_TEMPLATES_FOLDER}ssl-extensions-x509.cnf" - -NIFI_CERTIFICATE_NAME="nifi" -NIFI_KEY_FILE="${NIFI_CERTIFICATE_NAME}.key" -NIFI_CSR_FILE="${NIFI_CERTIFICATE_NAME}.csr" -NIFI_CRT_FILE="${NIFI_CERTIFICATE_NAME}.crt" -NIFI_PEM_FILE="${NIFI_CERTIFICATE_NAME}.pem" -NIFI_P12_FILE="${NIFI_CERTIFICATE_NAME}.p12" -NIFI_JKS_FILE="${NIFI_CERTIFICATE_NAME}-keystore.jks" -NIFI_TRUSTSTORE_FILE="${NIFI_CERTIFICATE_NAME}-truststore.jks" - -ROOT_CA_PEM="${SECURITY_ROOT_CA_FOLDER}${ROOT_CERTIFICATE_NAME}.pem" -ROOT_CA_KEY="${SECURITY_ROOT_CA_FOLDER}${ROOT_CERTIFICATE_NAME}.key" - - -# === NiFi Toolkit Download -if [ ! -d "./nifi_toolkit" ]; then - if [ ! -f "nifi-toolkit-${NIFI_TOOLKIT_VERSION}-bin.zip" ]; then - wget "https://archive.apache.org/dist/nifi/${NIFI_TOOLKIT_VERSION}/nifi-toolkit-${NIFI_TOOLKIT_VERSION}-bin.zip" - fi - unzip "nifi-toolkit-${NIFI_TOOLKIT_VERSION}-bin.zip" - mv "nifi-toolkit-${NIFI_TOOLKIT_VERSION}" nifi_toolkit - rm "nifi-toolkit-${NIFI_TOOLKIT_VERSION}-bin.zip" -fi - -# === Handle JVM options on Windows -OLD_JAVA_OPTS=${JAVA_OPTS:-} -export JAVA_OPTS="-Xmx2048m -Xms2048m" - -echo "🧹 Cleaning up any previous certs in ${OUTPUT_DIRECTORY}" -rm -rf "${OUTPUT_DIRECTORY}nifi*" - - -echo "πŸ”‘ Generating NiFi private key" -openssl genrsa -out "$NIFI_KEY_FILE" 4096 - -echo "πŸ“„ Generating Certificate Signing Request (CSR)" -openssl req -new \ - -key "$NIFI_KEY_FILE" \ - -out "$NIFI_CSR_FILE" \ - -config "$EXT_FILE" - -echo "βœ… Signing CSR using Root CA with SAN + extensions" -openssl x509 -req \ - -in "$NIFI_CSR_FILE" \ - -CA "$ROOT_CA_PEM" \ - -CAkey "$ROOT_CA_KEY" \ - -CAcreateserial \ - -out "$NIFI_PEM_FILE" \ - -days "$NIFI_CERTIFICATE_TIME_VAILIDITY_IN_DAYS" \ - -sha256 \ - -extfile "$EXT_FILE" \ - -extensions v3_leaf - -echo "πŸ“Ž Converting PEM to DER format (.crt)" -openssl x509 -in "$NIFI_PEM_FILE" -outform DER -out "$NIFI_CRT_FILE" - -echo "πŸ“¦ Creating PKCS#12 Bundle" -openssl pkcs12 -export \ - -in "$NIFI_PEM_FILE" \ - -inkey "$NIFI_KEY_FILE" \ - -out "$NIFI_P12_FILE" \ - -name "$NIFI_CERTIFICATE_NAME" \ - -passout pass:"$NIFI_KEYSTORE_PASSWORD" - -echo "β˜• Creating Java Keystore (.jks)" -keytool -importkeystore \ - -destkeystore "$NIFI_JKS_FILE" \ - -srckeystore "$NIFI_P12_FILE" \ - -srcstoretype PKCS12 \ - -alias "$NIFI_CERTIFICATE_NAME" \ - -srcstorepass "$NIFI_KEYSTORE_PASSWORD" \ - -deststorepass "$NIFI_KEYSTORE_PASSWORD" \ - -noprompt - -echo "πŸ” Creating Truststore (.jks)" -keytool -importcert \ - -file "$NIFI_PEM_FILE" \ - -alias "$NIFI_CERTIFICATE_NAME" \ - -keystore "$NIFI_TRUSTSTORE_FILE" \ - -storepass "$NIFI_KEYSTORE_PASSWORD" \ - -noprompt - - -echo "βœ… All NiFi TLS artifacts created successfully in: $SECURITY_CERTIFICATES_FOLDER" - -# === Move files to output dir -mkdir -p "$OUTPUT_DIRECTORY" -mv nifi.key nifi.pem nifi-keystore.jks nifi-truststore.jks nifi.crt nifi.csr nifi.p12 "$OUTPUT_DIRECTORY" - -# === Patch NiFi props -sed -i "" "s|nifi\.security\.keystorePasswd=.*|nifi.security.keystorePasswd=${NIFI_KEYSTORE_PASSWORD}|" ../../nifi/conf/nifi.properties -sed -i "" "s|nifi\.security\.keyPasswd=.*|nifi.security.keyPasswd=${NIFI_KEYSTORE_PASSWORD}|" ../../nifi/conf/nifi.properties -sed -i "" "s|nifi\.security\.truststorePasswd=.*|nifi.security.truststorePasswd=${NIFI_KEYSTORE_PASSWORD}|" ../../nifi/conf/nifi.properties - -# === Patch NiFi Registry props -sed -i "" "s|nifi\.registry\.security\.keystorePasswd=.*|nifi.registry.security.keystorePasswd=${NIFI_KEYSTORE_PASSWORD}|" ../../nifi/nifi-registry/nifi-registry.properties -sed -i "" "s|nifi\.registry\.security\.keyPasswd=.*|nifi.registry.security.keyPasswd=${NIFI_KEYSTORE_PASSWORD}|" ../../nifi/nifi-registry/nifi-registry.properties -sed -i "" "s|nifi\.registry\.security\.truststorePasswd=.*|nifi.registry.security.truststorePasswd=${NIFI_KEYSTORE_PASSWORD}|" ../../nifi/nifi-registry/nifi-registry.properties - -# === Reset Java opts -export JAVA_OPTS=$OLD_JAVA_OPTS - -echo "βœ… NiFi TLS certificates created via NiFi Toolkit and applied to config files." From edad611e15c830ef81ff22e4f5fca762faf0ad05 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Wed, 2 Sep 2026 15:55:36 +0100 Subject: [PATCH 27/30] Docs fix. --- .readthedocs.yaml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index ce6bbae71..94cd0ed79 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -10,14 +10,12 @@ build: python: "3.13" jobs: pre_create_environment: - - cd docs - asdf plugin add uv - - asdf install uv latest - - asdf global uv latest + - UV_VERSION="$(sed -n 's/^required-version = "==\([^"]*\)"$/\1/p' pyproject.toml)" && test -n "${UV_VERSION}" && asdf install uv "${UV_VERSION}" && asdf global uv "${UV_VERSION}" create_environment: - uv venv "${READTHEDOCS_VIRTUALENV_PATH}" install: - cd docs && UV_PROJECT_ENVIRONMENT="${READTHEDOCS_VIRTUALENV_PATH}" uv sync --frozen mkdocs: - configuration: mkdocs.yml \ No newline at end of file + configuration: mkdocs.yml From fe7c02c9351d0c4d4e90d938e124d4b4d2c741c3 Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Wed, 2 Sep 2026 16:41:33 +0100 Subject: [PATCH 28/30] Deploy: updated ES to 9.5.2 (untested, likely last release to test before removing ES cfgs). --- deploy/elasticsearch.env | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/deploy/elasticsearch.env b/deploy/elasticsearch.env index bd44c1ab7..56fa8c610 100644 --- a/deploy/elasticsearch.env +++ b/deploy/elasticsearch.env @@ -7,7 +7,7 @@ ELASTICSEARCH_VERSION=opensearch # possible values : -# - elasticsearch : docker.elastic.co/elasticsearch/elasticsearch:8.19.11 +# - elasticsearch : docker.elastic.co/elasticsearch/elasticsearch:9.5.2 # - elasticsearch (custom cogstack image) : cogstacksystems/cogstack-elasticsearch:latest # - opensearch : opensearchproject/opensearch:3.8.0 # the custom cogstack image is always based on the last image of ES native @@ -177,7 +177,7 @@ KIBANA_VERSION=opensearch-dashboards KIBANA_CONFIG_FILE_VERSION=opensearch_dashboards # possible values: -# - elasticsearch : docker.elastic.co/kibana/kibana:8.19.11 +# - elasticsearch : docker.elastic.co/kibana/kibana:9.5.2 # - elasticsearch (custom cogstack image) : cogstacksystems/cogstack-kibana:latest # - opensearch : opensearchproject/opensearch-dashboards:3.8.0 # the custom cogstack image is always based on the last image of ES native @@ -219,7 +219,7 @@ ELASTICSEARCH_XPACK_SECURITY_REPORTING_ENCRYPTION_KEY="e0Y1gTxHWOopIWMTtpjQsDS6K ######################################################################### METRICBEAT Env vars ########################################################################## -METRICBEAT_IMAGE="docker.elastic.co/beats/metricbeat:8.19.11" +METRICBEAT_IMAGE="docker.elastic.co/beats/metricbeat:9.5.2" METRICBEAT_DOCKER_SHM=512m METRICBEAT_DOCKER_CPU_MIN=1 @@ -236,7 +236,7 @@ FILEBEAT_STARTUP_COMMAND="-e --strict.perms=false" FILEBEAT_HOST="https://elasticsearch-1:9200" -FILEBEAT_IMAGE="docker.elastic.co/beats/filebeat:8.19.11" +FILEBEAT_IMAGE="docker.elastic.co/beats/filebeat:9.5.2" FILEBEAT_DOCKER_SHM=512m From 7703e191f25811fc4cbee3039151e105a7cccf3e Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Wed, 2 Sep 2026 19:29:11 +0100 Subject: [PATCH 29/30] Updated GHAs. --- .github/dependabot.yml | 10 ++- .github/workflows/codeql.yml | 4 ++ .github/workflows/compose_config.yml | 4 ++ .github/workflows/dependency_hygiene.yml | 4 ++ .github/workflows/doc_build.yml | 4 ++ .github/workflows/python_quality.yml | 4 ++ .../shell_script_enforce_exec_check.yml | 4 ++ .github/workflows/smoke_elastic_services.yml | 4 ++ .github/workflows/smoke_gitea_service.yml | 4 ++ .github/workflows/smoke_nifi_services.yml | 5 +- .github/workflows/smoke_postgres_services.yml | 4 ++ .github/workflows/submodule_sync.yml | 4 ++ deploy/Makefile | 12 +++- docs/nifi/development_guide.md | 2 +- docs/nifi/main.md | 62 ++----------------- nifi/recreate_nifi_docker_image.sh | 23 ------- 16 files changed, 67 insertions(+), 87 deletions(-) delete mode 100755 nifi/recreate_nifi_docker_image.sh diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 324d7a47d..7e5fc93ed 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,9 +6,9 @@ updates: schedule: interval: "weekly" - # Keep Dockerfile base images (in repo root) up to date + # Keep the owned NiFi Dockerfile base image up to date. - package-ecosystem: "docker" - directory: "/" + directory: "/nifi" schedule: interval: "weekly" registries: @@ -20,6 +20,12 @@ updates: schedule: interval: "weekly" + # Keep the documentation project and lock file up to date. + - package-ecosystem: "uv" + directory: "/docs" + schedule: + interval: "weekly" + registries: dockerhub: type: "docker-registry" diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 77a66ce6c..f89ee3d9f 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -19,6 +19,10 @@ on: schedule: - cron: '35 5 * * 4' +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: analyze: name: Analyze (${{ matrix.language }}) diff --git a/.github/workflows/compose_config.yml b/.github/workflows/compose_config.yml index fad705f39..62827643a 100644 --- a/.github/workflows/compose_config.yml +++ b/.github/workflows/compose_config.yml @@ -18,6 +18,10 @@ on: - ".github/workflows/compose_config.yml" workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read diff --git a/.github/workflows/dependency_hygiene.yml b/.github/workflows/dependency_hygiene.yml index 11e27b9af..de5183535 100644 --- a/.github/workflows/dependency_hygiene.yml +++ b/.github/workflows/dependency_hygiene.yml @@ -22,6 +22,10 @@ on: - "scripts/maintenance/audit_pip_dependency.sh" - ".github/workflows/dependency_hygiene.yml" +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read diff --git a/.github/workflows/doc_build.yml b/.github/workflows/doc_build.yml index a2b2514be..401f27272 100644 --- a/.github/workflows/doc_build.yml +++ b/.github/workflows/doc_build.yml @@ -10,6 +10,10 @@ on: workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read diff --git a/.github/workflows/python_quality.yml b/.github/workflows/python_quality.yml index 6649e271a..eeb555a3f 100644 --- a/.github/workflows/python_quality.yml +++ b/.github/workflows/python_quality.yml @@ -20,6 +20,10 @@ on: - ".github/workflows/python_quality.yml" workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read diff --git a/.github/workflows/shell_script_enforce_exec_check.yml b/.github/workflows/shell_script_enforce_exec_check.yml index e8deb62eb..35b145e2f 100644 --- a/.github/workflows/shell_script_enforce_exec_check.yml +++ b/.github/workflows/shell_script_enforce_exec_check.yml @@ -5,6 +5,10 @@ on: push: branches: ['**'] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read diff --git a/.github/workflows/smoke_elastic_services.yml b/.github/workflows/smoke_elastic_services.yml index 5b72592c6..59bbd8367 100644 --- a/.github/workflows/smoke_elastic_services.yml +++ b/.github/workflows/smoke_elastic_services.yml @@ -6,6 +6,10 @@ on: branches: ['**'] workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read diff --git a/.github/workflows/smoke_gitea_service.yml b/.github/workflows/smoke_gitea_service.yml index 6ae1069a3..157277cca 100644 --- a/.github/workflows/smoke_gitea_service.yml +++ b/.github/workflows/smoke_gitea_service.yml @@ -6,6 +6,10 @@ on: branches: ['**'] workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read diff --git a/.github/workflows/smoke_nifi_services.yml b/.github/workflows/smoke_nifi_services.yml index 8bcd3827a..63386c5c6 100644 --- a/.github/workflows/smoke_nifi_services.yml +++ b/.github/workflows/smoke_nifi_services.yml @@ -6,6 +6,10 @@ on: branches: ['**'] workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read @@ -51,4 +55,3 @@ jobs: source deploy/export_env_vars.sh set -euo pipefail docker compose -f deploy/services.dev.yml down -v - diff --git a/.github/workflows/smoke_postgres_services.yml b/.github/workflows/smoke_postgres_services.yml index d8d3e2bbf..54bdbad7d 100644 --- a/.github/workflows/smoke_postgres_services.yml +++ b/.github/workflows/smoke_postgres_services.yml @@ -6,6 +6,10 @@ on: branches: ['**'] workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read diff --git a/.github/workflows/submodule_sync.yml b/.github/workflows/submodule_sync.yml index 7420a3142..090c7c938 100644 --- a/.github/workflows/submodule_sync.yml +++ b/.github/workflows/submodule_sync.yml @@ -9,6 +9,10 @@ on: types: [published] workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: write diff --git a/deploy/Makefile b/deploy/Makefile index 7f15dd42d..bcbf31beb 100644 --- a/deploy/Makefile +++ b/deploy/Makefile @@ -307,6 +307,14 @@ start-nifi-dev: ## Start NiFi and NiFi nginx (services.dev.yml) start-nifi-dev-build: ## Build and start NiFi dev services $(WITH_ENV) docker compose -f services.dev.yml up -d --build nifi nifi-nginx +build-nifi-image: ## Build the local NiFi image without starting services + $(WITH_ENV) docker build \ + --build-arg NIFI_UID="$${NIFI_UID:-1000}" \ + --build-arg NIFI_GID="$${NIFI_GID:-1000}" \ + --tag "$${NIFI_DOCKER_IMAGE:-cogstacksystems/cogstack-nifi:latest}" \ + --file ../nifi/Dockerfile \ + .. + start-elastic: ## Start elasticsearch-1, elasticsearch-2 and kibana $(WITH_ENV) docker compose -f services.yml $(DC_START_CMD) elasticsearch-1 elasticsearch-2 kibana @@ -369,9 +377,9 @@ start-git-ea: start-data-infra: start-nifi start-elastic start-samples ## Start core data infrastructure -start-all: start-data-infra start-jupyter start-medcat-service start-ocr-services ## Start all major services +start-all: start-data-infra start-medcat-service start-ocr-services ## Start all major services -.PHONY: start-all start-data-infra start-nifi start-nifi-dev start-nifi-dev-build start-elastic start-samples start-jupyter +.PHONY: start-all start-data-infra start-nifi start-nifi-dev start-nifi-dev-build build-nifi-image start-elastic start-samples start-jupyter # stop services diff --git a/docs/nifi/development_guide.md b/docs/nifi/development_guide.md index 177c728cb..0a723c770 100644 --- a/docs/nifi/development_guide.md +++ b/docs/nifi/development_guide.md @@ -78,7 +78,7 @@ If dependencies changed: 3. Rebuild the NiFi image: ```bash -bash nifi/recreate_nifi_docker_image.sh +make -C deploy build-nifi-image ``` ## Quality checks diff --git a/docs/nifi/main.md b/docs/nifi/main.md index 223fc500a..9d8d98230 100644 --- a/docs/nifi/main.md +++ b/docs/nifi/main.md @@ -144,69 +144,15 @@ If you enable content archive, keep retention short and monitor disk usage close On Linux, this file is modified at runtime because NiFi updates properties such as `nifi.cluster.node.address`. Permission errors can occur when the host directory UID/GID differs from the container user, which defaults to UID 1000 and GID 1000 in the `Dockerfile` and `deploy/services.yml`. To avoid these errors, create a host group with GID 1000 and add the user running Docker to it. -Recommendation: If the account/group creation is not possible, you will need to build your own docker image on NiFi, but before you do this, you need to get hold of your group id and user id of the account you are logged in with. -To find out your GID and UID, you must do the following commands in terminal: +Ensure the host-mounted `nifi/conf` directory is writable by the container user. Rebuilding the image with a different UID or GID does not change ownership of existing bind-mounted host files. -```bash -echo "user id (UID):"$(id -u $USER) -echo "group id (GID):"$(id -g $USER) -``` - -You'd need to export your ENV vars: - -```bash -export NIFI_UID=$(id -u $USER) -export NIFI_GID=$(id -g $USER) -``` - -A better way is to also manually edit the `./deploy/nifi.env` file and change the default NIFI_UID and NIFI_GID variables there, after which you must execute the `export_env_vars.sh` script. - -```bash -cd ./deploy/ -source export_env_vars.sh -cd ../ -``` - -You should check if the env vars have been set after running the script: - -```bash -echo $NIFI_UID -echo $NIFI_GID -``` - -If the above command prints some numbers then it means that the `export_env_vars.sh` script worked. Otherwise, if you don't see anything, or just blank lines, then you need to execute the following: - -```bash -set -o allexport -source nifi.env -set +o allexport -``` - -or, on Windows, via `git bash` terminal: - -```bash -set -a -source nifi.env -set +a -``` - -Make sure to execute the above commands in the order they are mentioned. - - -Delete the older docker image from the nifi repo: - -```bash -docker image rm cogstacksystems/cogstack-nifi:latest -f -``` - -Then execute the `recreate_nifi_docker_image.sh` script located in the `./nifi` folder. +To build the NiFi image without starting services, run this command from the repository root: ```bash -cd ./nifi -bash recreate_nifi_docker_image.sh +make -C deploy build-nifi-image ``` -Remember that the above export script and/or command are only visible in the current shell, so every time you restart your shell terminal you must `source ./deploy/export_env_vars.sh` so the variables are visible to Docker at runtime. If you're using the `deploy/Makefile` targets, it handles this for you. +The Make target loads the deployment environment and tags the image using `NIFI_DOCKER_IMAGE` from `deploy/nifi.env`. ### `{bootstrap.conf}` diff --git a/nifi/recreate_nifi_docker_image.sh b/nifi/recreate_nifi_docker_image.sh deleted file mode 100755 index e2bdcb233..000000000 --- a/nifi/recreate_nifi_docker_image.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -set -e - -NIFI_GID=${NIFI_GID:-1000} -NIFI_UID=${NIFI_UID:-1000} - -if [[ $NIFI_UID == 1000 ]]; then - NIFI_UID=$(id -u) -fi - -if [[ $NIFI_GID == 1000 ]]; then - NIFI_GID=$(id -g) -fi - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" - -docker build --build-arg GID="${NIFI_GID}" \ - --build-arg UID="${NIFI_UID}" \ - -t cogstacksystems/cogstack-nifi:latest \ - -f "$SCRIPT_DIR/Dockerfile" \ - "$REPO_ROOT" From e70e502da019f534c2f2f03110772f85a823f86c Mon Sep 17 00:00:00 2001 From: vladd-bit Date: Wed, 2 Sep 2026 19:39:49 +0100 Subject: [PATCH 30/30] GHA updates + NiFi docker build updates(NAR step) --- .github/workflows/dependency_hygiene.yml | 2 +- .github/workflows/doc_build.yml | 2 +- .github/workflows/python_quality.yml | 2 +- nifi/Dockerfile | 7 ++++++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dependency_hygiene.yml b/.github/workflows/dependency_hygiene.yml index de5183535..e9f86ce45 100644 --- a/.github/workflows/dependency_hygiene.yml +++ b/.github/workflows/dependency_hygiene.yml @@ -49,7 +49,7 @@ jobs: python-version: "3.11" - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v10.0.1 with: version-file: "pyproject.toml" diff --git a/.github/workflows/doc_build.yml b/.github/workflows/doc_build.yml index 401f27272..f1425f3bb 100644 --- a/.github/workflows/doc_build.yml +++ b/.github/workflows/doc_build.yml @@ -25,7 +25,7 @@ jobs: - uses: actions/checkout@v7 - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v10.0.1 with: version-file: "pyproject.toml" python-version: "3.12" diff --git a/.github/workflows/python_quality.yml b/.github/workflows/python_quality.yml index eeb555a3f..b045ed988 100644 --- a/.github/workflows/python_quality.yml +++ b/.github/workflows/python_quality.yml @@ -41,7 +41,7 @@ jobs: python-version: "3.11" - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v10.0.1 with: version-file: "pyproject.toml" diff --git a/nifi/Dockerfile b/nifi/Dockerfile index d76b27bad..a9063517b 100644 --- a/nifi/Dockerfile +++ b/nifi/Dockerfile @@ -234,7 +234,12 @@ RUN set -eux; \ for a in "${nars[@]}"; do \ url="${base}/${a}/${NIFI_VERSION}/${a}-${NIFI_VERSION}.nar"; \ echo "Downloading $a"; \ - if ! curl -fsSL --retry 5 --retry-delay 2 \ + if ! curl -fsSL \ + --connect-timeout 20 \ + --retry 5 \ + --retry-connrefused \ + --retry-delay 3 \ + --retry-max-time 120 \ -o "${a}-${NIFI_VERSION}.nar" \ "$url"; then \ echo "WARNING: NAR unavailable: $a @ ${NIFI_VERSION}"; \