From 45089646120e0369c4deae1beaec35dc5203f8d1 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Wed, 29 Jul 2026 13:36:30 -0400 Subject: [PATCH 01/28] Brute-force DNS through blastdns instead of massdns Replaces the massdns subprocess in the brute helper with a dedicated blastdns client. It gets its own client rather than sharing the one behind normal resolution, because brute-forcing runs against a large public resolver list instead of the system resolvers and needs its own limits. Uses resolve_batch_full rather than resolve_batch so unanswered queries stay visible and get reported: a query that runs out of retries is a silently missed subdomain, which is the one failure brute-forcing must not hide. Retires dns.brute_threads, which was a massdns passthrough, in favor of brute_concurrency, brute_inflight_per_resolver, and brute_rate_limit. Enables the startup resolver probe so dead entries in the public list are dropped once instead of costing queries all scan. Drops the now-unused module argument from helpers.dns.brute(). Tests move off the run_live massdns monkeypatch: mock_dns now drives brute-forcing directly, since _mock_dns swaps the brute client too. Assertions are unchanged, and the wildcard canary case uses a regex mock key. --- bbot/core/config/models.py | 4 +- bbot/core/helpers/dns/brute.py | 166 +++++++++++------- bbot/core/helpers/dns/dns.py | 14 +- bbot/defaults.yml | 11 +- bbot/modules/dnsbrute.py | 2 +- bbot/modules/dnsbrute_mutations.py | 2 +- bbot/modules/dnscommonsrv.py | 2 +- .../module_tests/test_module_dnsbrute.py | 55 +----- .../test_module_dnsbrute_mutations.py | 17 -- .../module_tests/test_module_dnscommonsrv.py | 21 --- 10 files changed, 126 insertions(+), 168 deletions(-) diff --git a/bbot/core/config/models.py b/bbot/core/config/models.py index 3f3e85105d..97a67bf362 100644 --- a/bbot/core/config/models.py +++ b/bbot/core/config/models.py @@ -246,7 +246,9 @@ class DnsConfig(BaseModel): minimal: Optional[bool] = None threads: Optional[int] = None cache_size: Optional[int] = None - brute_threads: Optional[int] = None + brute_concurrency: Optional[int] = None + brute_inflight_per_resolver: Optional[int] = None + brute_rate_limit: Optional[float] = None brute_nameservers: Optional[str] = None search_distance: Optional[int] = None runaway_limit: Optional[int] = None diff --git a/bbot/core/helpers/dns/brute.py b/bbot/core/helpers/dns/brute.py index d243073a18..ffb05c5e39 100644 --- a/bbot/core/helpers/dns/brute.py +++ b/bbot/core/helpers/dns/brute.py @@ -1,18 +1,22 @@ -import json import random import asyncio import logging -import subprocess + +from blastdns import Client, ClientConfig, DNSError class DNSBrute: """ Helper for DNS brute-forcing. + Uses its own blastdns client, separate from the one backing normal + resolution: brute-forcing runs against a large public resolver list rather + than the system resolvers, and needs its own concurrency and rate limits. + Examples: >>> domain = "evilcorp.com" >>> subdomains = ["www", "mail"] - >>> results = await self.helpers.dns.brute(self, domain, subdomains) + >>> results = await self.helpers.dns.brute(domain, subdomains) """ _nameservers_url = ( @@ -24,11 +28,15 @@ def __init__(self, parent_helper): self.log = logging.getLogger("bbot.helper.dns.brute") self.dns_config = self.parent_helper.config.get("dns", {}) self.num_canaries = 100 - self.max_resolvers = self.dns_config.get("brute_threads", 1000) + self.concurrency = self.dns_config.get("brute_concurrency", 1000) + self.inflight_per_resolver = self.dns_config.get("brute_inflight_per_resolver", 2) + self.rate_limit = self.dns_config.get("brute_rate_limit", 0) self.nameservers_url = self.dns_config.get("brute_nameservers", self._nameservers_url) self.devops_mutations = list(self.parent_helper.word_cloud.devops_mutations) self.digit_regex = self.parent_helper.re.compile(r"\d+") self._resolver_file = None + self._client = None + self._client_lock = None self._dnsbrute_lock = None async def __call__(self, *args, **kwargs): @@ -40,7 +48,42 @@ def dnsbrute_lock(self): self._dnsbrute_lock = asyncio.Lock() return self._dnsbrute_lock - async def dnsbrute(self, module, domain, subdomains, type=None): + @property + def client_lock(self): + if self._client_lock is None: + self._client_lock = asyncio.Lock() + return self._client_lock + + async def client(self): + """The blastdns client used for brute-forcing, built on first use. + + Construction is deferred because the resolver list has to be downloaded + first, and blastdns takes its resolvers at construction time. + """ + async with self.client_lock: + if self._client is None: + resolver_file = await self.resolver_file() + resolvers = list(self.parent_helper.read_file(resolver_file)) + self.log.verbose(f"Starting brute-force DNS client with {len(resolvers):,} resolvers") + self._client = Client( + resolvers, + ClientConfig( + max_concurrency=self.concurrency, + max_inflight_per_resolver=self.inflight_per_resolver, + rate_limit=self.rate_limit or None, + # A public resolver list carries a lot of dead entries; + # drop them up front instead of paying for them all scan. + resolver_probe=True, + # Brute-force queries are unique by construction, so a + # cache would only consume memory. + cache_capacity=0, + request_timeout_ms=self.parent_helper.dns.timeout * 1000, + max_retries=self.parent_helper.dns.retries, + ), + ) + return self._client + + async def dnsbrute(self, domain, subdomains, type=None): subdomains = list(subdomains) if type is None: @@ -53,7 +96,7 @@ async def dnsbrute(self, module, domain, subdomains, type=None): wildcard_rdtypes.update(rdtypes) if wildcard_domains: self.log.hugewarning( - f"Aborting massdns on {domain} because it's a wildcard domain ({','.join(sorted(wildcard_rdtypes))})" + f"Aborting brute-force of {domain} because it's a wildcard domain ({','.join(sorted(wildcard_rdtypes))})" ) return [] @@ -66,7 +109,7 @@ async def dnsbrute(self, module, domain, subdomains, type=None): results = [] canaries_triggered = [] - async for hostname, ip, rdtype in self._massdns(module, domain, subdomains, rdtype=type): + async for hostname in self._resolve_subdomains(domain, subdomains, rdtype=type): sub = hostname.split(domain)[0].rstrip(".") if sub in canary_set: canaries_triggered.append(sub) @@ -75,77 +118,64 @@ async def dnsbrute(self, module, domain, subdomains, type=None): if len(canaries_triggered) > 5: self.log.info( - f"Aborting massdns on {domain} due to false positive: ({len(canaries_triggered):,} canaries triggered - {','.join(canaries_triggered)})" + f"Aborting brute-force of {domain} due to false positive: ({len(canaries_triggered):,} canaries triggered - {','.join(canaries_triggered)})" ) return [] # everything checks out return results - async def _massdns(self, module, domain, subdomains, rdtype): - """ - { - "name": "www.blacklanternsecurity.com.", - "type": "A", - "class": "IN", - "status": "NOERROR", - "data": { - "answers": [ - { - "ttl": 3600, - "type": "CNAME", - "class": "IN", - "name": "www.blacklanternsecurity.com.", - "data": "blacklanternsecurity.github.io." - }, - { - "ttl": 3600, - "type": "A", - "class": "IN", - "name": "blacklanternsecurity.github.io.", - "data": "185.199.108.153" - } - ] - }, - "resolver": "168.215.165.186:53" - } + async def _resolve_subdomains(self, domain, subdomains, rdtype): + """Resolve each candidate under ``domain``, yielding the ones that exist. + + Uses ``resolve_batch_full`` rather than ``resolve_batch`` so failures stay + visible: a query that ran out of retries is a silently missed subdomain, + which is the one error brute-forcing must not hide. """ - resolver_file = await self.resolver_file() - command = ( - "massdns", - "-r", - resolver_file, - "-s", - self.max_resolvers, - "-t", - rdtype, - "-o", - "J", - "-q", - ) - subdomains = self.gen_subdomains(subdomains, domain) + client = await self.client() + queries = self.gen_subdomains(subdomains, domain) + suffix = f".{domain}" hosts_yielded = set() + answered = 0 + empty = 0 + failed = 0 + async with self.dnsbrute_lock: - async for line in module.run_process_live(*command, stderr=subprocess.DEVNULL, input=subdomains): - try: - j = json.loads(line) - except json.decoder.JSONDecodeError: - self.log.debug(f"Failed to decode line: {line}") + async for host, result in client.resolve_batch_full(queries, rdtype): + if isinstance(result, DNSError): + failed += 1 + continue + if not result.response.answers: + empty += 1 + continue + answered += 1 + + # A CNAME can point anywhere; only names under the domain we + # asked about are subdomains of it. + hostname = host.strip(".").lower() + if not hostname.endswith(suffix) or hostname in hosts_yielded: continue - answers = j.get("data", {}).get("answers", []) - if type(answers) == list and len(answers) > 0: - answer = answers[0] - hostname = answer.get("name", "").strip(".").lower() - if hostname.endswith(f".{domain}"): - data = answer.get("data", "") - rdtype = answer.get("type", "").upper() - if data and rdtype: - hostname_hash = hash(hostname) - if hostname_hash not in hosts_yielded: - hosts_yielded.add(hostname_hash) - yield hostname, data, rdtype - - async def gen_subdomains(self, prefixes, domain): + hosts_yielded.add(hostname) + yield hostname + + self._log_delivery(domain, answered, empty, failed) + + def _log_delivery(self, domain, answered, empty, failed): + """Report how much of the wordlist actually got an answer. + + A run that silently drops queries looks identical to one that found + nothing, so unanswered queries are worth surfacing. + """ + total = answered + empty + failed + if not total: + return + message = f"Brute-force of {domain}: {answered:,} resolved, {empty:,} no record, {failed:,} unanswered" + if failed / total > 0.05: + self.log.warning(f"{message} ({failed / total:.0%} unanswered, results may be incomplete)") + else: + self.log.verbose(message) + + def gen_subdomains(self, prefixes, domain): for p in prefixes: if domain: p = f"{p}.{domain}" diff --git a/bbot/core/helpers/dns/dns.py b/bbot/core/helpers/dns/dns.py index c9b59e6cc3..4f699f8754 100644 --- a/bbot/core/helpers/dns/dns.py +++ b/bbot/core/helpers/dns/dns.py @@ -53,7 +53,7 @@ def __init__(self, parent_helper): # blastdns client self.system_resolvers = get_system_resolvers() self.log.debug( - f"Starting BlastDNS client with {self.threads} threads per resolver, " + f"Starting BlastDNS client with {self.threads} queries in flight per resolver, " f"{self.retries} retries, {self.cache_size} cache size, " f"and {self.timeout} second timeout" ) @@ -62,7 +62,7 @@ def __init__(self, parent_helper): ClientConfig( request_timeout_ms=self.timeout * 1000, max_retries=self.retries, - threads_per_resolver=self.threads, + max_inflight_per_resolver=self.threads, cache_capacity=self.cache_size, ), ) @@ -430,11 +430,19 @@ def brute(self): return self._brute async def _mock_dns(self, mock_data): - """Swap the underlying client for a ``MockClient`` configured with ``mock_data``.""" + """Swap the underlying clients for ``MockClient``s configured with ``mock_data``. + + The brute-force helper has its own client, so it has to be mocked too or + brute-forcing modules would reach the network during tests. + """ mock_client = MockClient() mock_client.mock_dns(mock_data) self.blastdns = mock_client + brute_mock = MockClient() + brute_mock.mock_dns(mock_data) + self.brute._client = brute_mock + @staticmethod def _empty_result(host=""): """Build a minimal ``DNSResult`` with no answers, for use as a safe fallback.""" diff --git a/bbot/defaults.yml b/bbot/defaults.yml index 3a3d53a55c..582d3546e1 100644 --- a/bbot/defaults.yml +++ b/bbot/defaults.yml @@ -47,13 +47,16 @@ dns: disable: false # Speed up scan by not creating any new DNS events, and only resolving A and AAAA records minimal: false - # How many threads to use per resolver (best way to increase speed is to put more resolvers in /etc/resolv.conf) + # How many queries to keep in flight per resolver (best way to increase speed is to put more resolvers in /etc/resolv.conf) threads: 10 # How many DNS records to cache cache_size: 100000 - # How many concurrent DNS resolvers to use when brute-forcing - # (under the hood this is passed through directly to massdns -s) - brute_threads: 1000 + # How many queries to keep in flight in total when brute-forcing + brute_concurrency: 1000 + # How many brute-force queries to keep in flight per resolver (the politeness bound) + brute_inflight_per_resolver: 2 + # Hard ceiling on brute-force DNS queries per second (0 = unlimited; backoff is automatic regardless) + brute_rate_limit: 0 # nameservers to use for DNS brute-forcing # default is updated weekly and contains ~10K high-quality public servers brute_nameservers: https://raw.githubusercontent.com/blacklanternsecurity/public-dns-servers/master/nameservers.txt diff --git a/bbot/modules/dnsbrute.py b/bbot/modules/dnsbrute.py index 7b56ae1408..13c965bc48 100644 --- a/bbot/modules/dnsbrute.py +++ b/bbot/modules/dnsbrute.py @@ -62,7 +62,7 @@ async def filter_event(self, event): async def handle_event(self, event): query = self.make_query(event) self.info(f"Brute-forcing {self.wordlist_size:,} subdomains for {query} (source: {event.pretty_string})") - for hostname in await self.helpers.dns.brute(self, query, self.subdomain_list): + for hostname in await self.helpers.dns.brute(query, self.subdomain_list): await self.emit_event( hostname, "DNS_NAME", diff --git a/bbot/modules/dnsbrute_mutations.py b/bbot/modules/dnsbrute_mutations.py index b4784f6ea6..10d33fdfbd 100644 --- a/bbot/modules/dnsbrute_mutations.py +++ b/bbot/modules/dnsbrute_mutations.py @@ -123,7 +123,7 @@ def add_mutation(m): self.info( f"Trying {len(mutations):,} mutations against {domain} ({i + 1}/{len(trimmed_found)})" ) - results = await self.helpers.dns.brute(self, query, mutations) + results = await self.helpers.dns.brute(query, mutations) try: mutation_run = self._mutation_run_counter[domain] except KeyError: diff --git a/bbot/modules/dnscommonsrv.py b/bbot/modules/dnscommonsrv.py index 36ce8fb89b..c4f59ede31 100644 --- a/bbot/modules/dnscommonsrv.py +++ b/bbot/modules/dnscommonsrv.py @@ -34,7 +34,7 @@ async def filter_event(self, event): async def handle_event(self, event): query = self.make_query(event) self.verbose(f'Brute-forcing {self.num_srvs:,} SRV records for "{query}"') - for hostname in await self.helpers.dns.brute(self, query, common_srvs, type="SRV"): + for hostname in await self.helpers.dns.brute(query, common_srvs, type="SRV"): await self.emit_event( hostname, "DNS_NAME", diff --git a/bbot/test/test_step_2/module_tests/test_module_dnsbrute.py b/bbot/test/test_step_2/module_tests/test_module_dnsbrute.py index 3ecbf4dceb..3a05a92de8 100644 --- a/bbot/test/test_step_2/module_tests/test_module_dnsbrute.py +++ b/bbot/test/test_step_2/module_tests/test_module_dnsbrute.py @@ -7,19 +7,6 @@ class TestDnsbrute(ModuleTestBase): config_overrides = {"modules": {"dnsbrute": {"wordlist": str(subdomain_wordlist), "max_depth": 3}}} async def setup_after_prep(self, module_test): - old_run_live = module_test.scan.helpers.run_live - - async def new_run_live(*command, check=False, text=True, **kwargs): - if "massdns" in command[:2]: - _input = [l async for l in kwargs["input"]] - if "asdf.blacklanternsecurity.com" in _input: - yield """{"name": "asdf.blacklanternsecurity.com.", "type": "A", "class": "IN", "status": "NOERROR", "rx_ts": 1713974911725326170, "data": {"answers": [{"ttl": 86400, "type": "A", "class": "IN", "name": "asdf.blacklanternsecurity.com.", "data": "1.2.3.4."}]}, "flags": ["rd", "ra"], "resolver": "195.226.187.130:53", "proto": "UDP"}""" - else: - async for _ in old_run_live(*command, check=False, text=True, **kwargs): - yield _ - - module_test.monkeypatch.setattr(module_test.scan.helpers, "run_live", new_run_live) - await module_test.mock_dns( { "blacklanternsecurity.com": {"A": ["4.3.2.1"]}, @@ -149,19 +136,6 @@ class TestDnsbruteMultiWordlist(ModuleTestBase): config_overrides = {"modules": {"dnsbrute": {"wordlist": [str(wordlist_1), str(wordlist_2)], "max_depth": 3}}} async def setup_after_prep(self, module_test): - old_run_live = module_test.scan.helpers.run_live - - async def new_run_live(*command, check=False, text=True, **kwargs): - if "massdns" in command[:2]: - _input = [l async for l in kwargs["input"]] - if "asdf.blacklanternsecurity.com" in _input: - yield """{"name": "asdf.blacklanternsecurity.com.", "type": "A", "class": "IN", "status": "NOERROR", "rx_ts": 1713974911725326170, "data": {"answers": [{"ttl": 86400, "type": "A", "class": "IN", "name": "asdf.blacklanternsecurity.com.", "data": "1.2.3.4."}]}, "flags": ["rd", "ra"], "resolver": "195.226.187.130:53", "proto": "UDP"}""" - else: - async for _ in old_run_live(*command, check=False, text=True, **kwargs): - yield _ - - module_test.monkeypatch.setattr(module_test.scan.helpers, "run_live", new_run_live) - await module_test.mock_dns( { "blacklanternsecurity.com": {"A": ["4.3.2.1"]}, @@ -183,9 +157,8 @@ def check(self, module_test, events): class TestDnsbruteCanaryCheck(ModuleTestBase): """Test that the canary check correctly aborts brute-forcing on wildcard domains. - Simulates a wildcard domain by making massdns return a result for every input - subdomain, including the canary subdomains. The canary check should detect - this and return no results. + Simulates a wildcard domain by resolving every name under it, canaries + included. The canary check should detect this and return no results. """ module_name = "dnsbrute" @@ -193,31 +166,11 @@ class TestDnsbruteCanaryCheck(ModuleTestBase): config_overrides = {"modules": {"dnsbrute": {"wordlist": str(subdomain_wordlist)}}} async def setup_after_prep(self, module_test): - old_run_live = module_test.scan.helpers.run_live - - async def new_run_live(*command, check=False, text=True, **kwargs): - if "massdns" in command[:2]: - # simulate a wildcard domain: return a result for EVERY input subdomain - _input = [l async for l in kwargs["input"]] - for subdomain in _input: - hostname = subdomain.strip() - if hostname: - yield ( - '{"name": "' - + hostname - + '.", "type": "A", "class": "IN", "status": "NOERROR", "data": {"answers": [{"ttl": 86400, "type": "A", "class": "IN", "name": "' - + hostname - + '.", "data": "1.2.3.4"}]}, "resolver": "195.226.187.130:53", "proto": "UDP"}' - ) - else: - async for _ in old_run_live(*command, check=False, text=True, **kwargs): - yield _ - - module_test.monkeypatch.setattr(module_test.scan.helpers, "run_live", new_run_live) - await module_test.mock_dns( { "blacklanternsecurity.com": {"A": ["4.3.2.1"]}, + # Resolve anything under the domain, so the random canaries hit too. + "regex:.*\\.blacklanternsecurity\\.com": {"A": ["1.2.3.4"]}, } ) diff --git a/bbot/test/test_step_2/module_tests/test_module_dnsbrute_mutations.py b/bbot/test/test_step_2/module_tests/test_module_dnsbrute_mutations.py index 4f4009825f..dee3858c34 100644 --- a/bbot/test/test_step_2/module_tests/test_module_dnsbrute_mutations.py +++ b/bbot/test/test_step_2/module_tests/test_module_dnsbrute_mutations.py @@ -11,23 +11,6 @@ class TestDnsbrute_mutations(ModuleTestBase): ] async def setup_after_prep(self, module_test): - old_run_live = module_test.scan.helpers.run_live - - async def new_run_live(*command, check=False, text=True, **kwargs): - if "massdns" in command[:2]: - _input = [l async for l in kwargs["input"]] - if "rrrr-test.blacklanternsecurity.com" in _input: - yield """{"name": "rrrr-test.blacklanternsecurity.com.", "type": "A", "class": "IN", "status": "NOERROR", "rx_ts": 1713974911725326170, "data": {"answers": [{"ttl": 86400, "type": "A", "class": "IN", "name": "rrrr-test.blacklanternsecurity.com.", "data": "1.2.3.4."}]}, "flags": ["rd", "ra"], "resolver": "195.226.187.130:53", "proto": "UDP"}""" - if "rrrr-ffdsa.blacklanternsecurity.com" in _input: - yield """{"name": "rrrr-ffdsa.blacklanternsecurity.com.", "type": "A", "class": "IN", "status": "NOERROR", "rx_ts": 1713974911725326170, "data": {"answers": [{"ttl": 86400, "type": "A", "class": "IN", "name": "rrrr-ffdsa.blacklanternsecurity.com.", "data": "1.2.3.4."}]}, "flags": ["rd", "ra"], "resolver": "195.226.187.130:53", "proto": "UDP"}""" - if "hmmmm.test2.blacklanternsecurity.com" in _input: - yield """{"name": "hmmmm.test2.blacklanternsecurity.com.", "type": "A", "class": "IN", "status": "NOERROR", "rx_ts": 1713974911725326170, "data": {"answers": [{"ttl": 86400, "type": "A", "class": "IN", "name": "hmmmm.test2.blacklanternsecurity.com.", "data": "1.2.3.4."}]}, "flags": ["rd", "ra"], "resolver": "195.226.187.130:53", "proto": "UDP"}""" - else: - async for _ in old_run_live(*command, check=False, text=True, **kwargs): - yield _ - - module_test.monkeypatch.setattr(module_test.scan.helpers, "run_live", new_run_live) - await module_test.mock_dns( { "blacklanternsecurity.com": {"A": ["1.2.3.4"]}, diff --git a/bbot/test/test_step_2/module_tests/test_module_dnscommonsrv.py b/bbot/test/test_step_2/module_tests/test_module_dnscommonsrv.py index b8b1255a55..4ac7d5bd82 100644 --- a/bbot/test/test_step_2/module_tests/test_module_dnscommonsrv.py +++ b/bbot/test/test_step_2/module_tests/test_module_dnscommonsrv.py @@ -8,27 +8,6 @@ class TestDNSCommonSRV(ModuleTestBase): config_overrides = {"dns": {"minimal": False}} async def setup_after_prep(self, module_test): - old_run_live = module_test.scan.helpers.run_live - - async def new_run_live(*command, check=False, text=True, **kwargs): - if "massdns" in command[:2]: - _input = [l async for l in kwargs["input"]] - if "_ldap._tcp.gc._msdcs.blacklanternsecurity.com" in _input: - yield """{"name":"_ldap._tcp.gc._msdcs.blacklanternsecurity.com.","type":"SRV","class":"IN","status":"NOERROR","rx_ts":1713974911725326170,"data":{"answers":[{"ttl":86400,"type":"SRV","class":"IN","name":"_ldap._tcp.gc._msdcs.blacklanternsecurity.com.","data":"10 10 1720 asdf.blacklanternsecurity.com."},{"ttl":86400,"type":"SRV","class":"IN","name":"_ldap._tcp.gc._msdcs.blacklanternsecurity.com.","data":"10 10 1720 asdf.blacklanternsecurity.com."}]},"flags":["rd","ra"],"resolver":"195.226.187.130:53","proto":"UDP"}""" - if "_ldap._tcp.gc._msdcs.api.blacklanternsecurity.com" in _input: - yield """{"name":"_ldap._tcp.gc._msdcs.api.blacklanternsecurity.com.","type":"SRV","class":"IN","status":"NOERROR","rx_ts":1713974911725326170,"data":{"answers":[{"ttl":86400,"type":"SRV","class":"IN","name":"_ldap._tcp.gc._msdcs.api.blacklanternsecurity.com.","data":"10 10 1720 asdf.blacklanternsecurity.com."},{"ttl":86400,"type":"SRV","class":"IN","name":"_ldap._tcp.gc._msdcs.blacklanternsecurity.com.","data":"10 10 1720 asdf.blacklanternsecurity.com."}]},"flags":["rd","ra"],"resolver":"195.226.187.130:53","proto":"UDP"}""" - if "_ldap._tcp.gc._msdcs.test.api.blacklanternsecurity.com" in _input: - yield """{"name":"_ldap._tcp.gc._msdcs.test.api.blacklanternsecurity.com.","type":"SRV","class":"IN","status":"NOERROR","rx_ts":1713974911725326170,"data":{"answers":[{"ttl":86400,"type":"SRV","class":"IN","name":"_ldap._tcp.gc._msdcs.test.api.blacklanternsecurity.com.","data":"10 10 1720 asdf.blacklanternsecurity.com."},{"ttl":86400,"type":"SRV","class":"IN","name":"_ldap._tcp.gc._msdcs.blacklanternsecurity.com.","data":"10 10 1720 asdf.blacklanternsecurity.com."}]},"flags":["rd","ra"],"resolver":"195.226.187.130:53","proto":"UDP"}""" - if "_ldap._tcp.gc._msdcs.www.test.api.blacklanternsecurity.com" in _input: - yield """{"name":"_ldap._tcp.gc._msdcs.www.test.api.blacklanternsecurity.com.","type":"SRV","class":"IN","status":"NOERROR","rx_ts":1713974911725326170,"data":{"answers":[{"ttl":86400,"type":"SRV","class":"IN","name":"_ldap._tcp.gc._msdcs.www.test.api.blacklanternsecurity.com.","data":"10 10 1720 asdf.blacklanternsecurity.com."},{"ttl":86400,"type":"SRV","class":"IN","name":"_ldap._tcp.gc._msdcs.blacklanternsecurity.com.","data":"10 10 1720 asdf.blacklanternsecurity.com."}]},"flags":["rd","ra"],"resolver":"195.226.187.130:53","proto":"UDP"}""" - if "_ldap._tcp.gc._msdcs.media.www.test.api.blacklanternsecurity.com" in _input: - yield """{"name":"_ldap._tcp.gc._msdcs.www.test.api.blacklanternsecurity.com.","type":"SRV","class":"IN","status":"NOERROR","rx_ts":1713974911725326170,"data":{"answers":[{"ttl":86400,"type":"SRV","class":"IN","name":"_ldap._tcp.gc._msdcs.media.www.test.api.blacklanternsecurity.com.","data":"10 10 1720 asdf.blacklanternsecurity.com."},{"ttl":86400,"type":"SRV","class":"IN","name":"_ldap._tcp.gc._msdcs.blacklanternsecurity.com.","data":"10 10 1720 asdf.blacklanternsecurity.com."}]},"flags":["rd","ra"],"resolver":"195.226.187.130:53","proto":"UDP"}""" - else: - async for _ in old_run_live(*command, check=False, text=True, **kwargs): - yield _ - - module_test.monkeypatch.setattr(module_test.scan.helpers, "run_live", new_run_live) - await module_test.mock_dns( { "blacklanternsecurity.com": {"A": ["1.2.3.4"]}, From 5d129d5b3442d842eba90af6f386a23f80e72b78 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Wed, 29 Jul 2026 13:55:53 -0400 Subject: [PATCH 02/28] Remove massdns dependency and references Deletes DEP_MASSDNS and the deps_common entries that pulled it in, so BBOT no longer builds massdns from source at install time. Documents the new brute-force knobs in place of dns.brute_threads, and swaps the deps_ansible example in the module howto to masscan, which BBOT still builds the same way. --- bbot/core/shared_deps.py | 38 +----------------------------- bbot/modules/dnsbrute.py | 3 +-- bbot/modules/dnsbrute_mutations.py | 3 +-- bbot/modules/dnscommonsrv.py | 1 - docs/dev/module_howto.md | 14 +++++------ docs/modules/list_of_modules.md | 4 ++-- docs/scanning/configuration.md | 11 +++++---- docs/scanning/tips_and_tricks.md | 12 ++++++---- 8 files changed, 27 insertions(+), 59 deletions(-) diff --git a/bbot/core/shared_deps.py b/bbot/core/shared_deps.py index 49fa2d69cf..31f622ce88 100644 --- a/bbot/core/shared_deps.py +++ b/bbot/core/shared_deps.py @@ -22,42 +22,6 @@ }, ] -DEP_MASSDNS = [ - { - "name": "install dev tools", - "package": {"name": ["gcc", "git", "make"], "state": "present"}, - "become": True, - "ignore_errors": True, - }, - { - "name": "Download massdns source code", - "git": { - "repo": "https://github.com/blechschmidt/massdns.git", - "dest": "#{BBOT_TEMP}/massdns", - "single_branch": True, - "version": "master", - }, - }, - { - "name": "Build massdns (Linux)", - "command": {"chdir": "#{BBOT_TEMP}/massdns", "cmd": "make", "creates": "#{BBOT_TEMP}/massdns/bin/massdns"}, - "when": "ansible_facts['system'] == 'Linux'", - }, - { - "name": "Build massdns (non-Linux)", - "command": { - "chdir": "#{BBOT_TEMP}/massdns", - "cmd": "make nolinux", - "creates": "#{BBOT_TEMP}/massdns/bin/massdns", - }, - "when": "ansible_facts['system'] != 'Linux'", - }, - { - "name": "Install massdns", - "copy": {"src": "#{BBOT_TEMP}/massdns/bin/massdns", "dest": "#{BBOT_TOOLS}/", "mode": "u+x,g+x,o+x"}, - }, -] - DEP_CHROMIUM = [ { "name": "Install Chromium (Non-Debian)", @@ -232,7 +196,7 @@ }, ] -# shared module dependencies -- massdns, chromium, etc. +# shared module dependencies -- chromium, java, etc. SHARED_DEPS = {} for var, val in list(locals().items()): if var.startswith("DEP_") and isinstance(val, list): diff --git a/bbot/modules/dnsbrute.py b/bbot/modules/dnsbrute.py index 13c965bc48..a300b7745b 100644 --- a/bbot/modules/dnsbrute.py +++ b/bbot/modules/dnsbrute.py @@ -9,7 +9,7 @@ class dnsbrute(subdomain_enum): watched_events = ["DNS_NAME"] produced_events = ["DNS_NAME"] meta = { - "description": "Brute-force subdomains with massdns + static wordlist", + "description": "Brute-force subdomains with a static wordlist", "author": "@TheTechromancer", "created_date": "2024-04-24", } @@ -25,7 +25,6 @@ class Config(BaseModuleConfig): description="If True, brute-force hosts discovered by dnsbrute_mutations. The default (False) skips them because the static wordlist heavily overlaps with the mutation algorithm's own output.", ) - deps_common = ["massdns"] reject_wildcards = "strict" dedup_strategy = "lowest_parent" _qsize = 10000 diff --git a/bbot/modules/dnsbrute_mutations.py b/bbot/modules/dnsbrute_mutations.py index 10d33fdfbd..8121388daa 100644 --- a/bbot/modules/dnsbrute_mutations.py +++ b/bbot/modules/dnsbrute_mutations.py @@ -9,7 +9,7 @@ class dnsbrute_mutations(BaseModule): watched_events = ["DNS_NAME"] produced_events = ["DNS_NAME"] meta = { - "description": "Brute-force subdomains with massdns + target-specific mutations", + "description": "Brute-force subdomains with target-specific mutations", "author": "@TheTechromancer", "created_date": "2024-04-25", } @@ -17,7 +17,6 @@ class dnsbrute_mutations(BaseModule): class Config(BaseModuleConfig): max_mutations: int = Field(100, description="Maximum number of target-specific mutations to try per subdomain") - deps_common = ["massdns"] _qsize = 10000 async def setup(self): diff --git a/bbot/modules/dnscommonsrv.py b/bbot/modules/dnscommonsrv.py index c4f59ede31..300a503c5b 100644 --- a/bbot/modules/dnscommonsrv.py +++ b/bbot/modules/dnscommonsrv.py @@ -9,7 +9,6 @@ class dnscommonsrv(subdomain_enum): flags = ["safe", "subdomain-enum", "active"] meta = {"description": "Check for common SRV records", "created_date": "2022-05-15", "author": "@TheTechromancer"} dedup_strategy = "lowest_parent" - deps_common = ["massdns"] class Config(BaseModuleConfig): max_depth: int = Field(2, description="The maximum subdomain depth to brute-force SRV records") diff --git a/docs/dev/module_howto.md b/docs/dev/module_howto.md index 9554466aeb..32f20a22b1 100644 --- a/docs/dev/module_howto.md +++ b/docs/dev/module_howto.md @@ -182,21 +182,21 @@ class MyModule(BaseModule): "ignore_errors": True, }, { - "name": "Download massdns source code", + "name": "Download masscan source code", "git": { - "repo": "https://github.com/blechschmidt/massdns.git", - "dest": "#{BBOT_TEMP}/massdns", + "repo": "https://github.com/robertdavidgraham/masscan.git", + "dest": "#{BBOT_TEMP}/masscan", "single_branch": True, "version": "master", }, }, { - "name": "Build massdns", - "command": {"chdir": "#{BBOT_TEMP}/massdns", "cmd": "make", "creates": "#{BBOT_TEMP}/massdns/bin/massdns"}, + "name": "Build masscan", + "command": {"chdir": "#{BBOT_TEMP}/masscan", "cmd": "make -j", "creates": "#{BBOT_TEMP}/masscan/bin/masscan"}, }, { - "name": "Install massdns", - "copy": {"src": "#{BBOT_TEMP}/massdns/bin/massdns", "dest": "#{BBOT_TOOLS}/", "mode": "u+x,g+x,o+x"}, + "name": "Install masscan", + "copy": {"src": "#{BBOT_TEMP}/masscan/bin/masscan", "dest": "#{BBOT_TOOLS}/", "mode": "u+x,g+x,o+x"}, }, ] ``` diff --git a/docs/modules/list_of_modules.md b/docs/modules/list_of_modules.md index 7c71adaf4b..2cd2e027ae 100644 --- a/docs/modules/list_of_modules.md +++ b/docs/modules/list_of_modules.md @@ -16,8 +16,8 @@ | bucket_hetzner | scan | No | Check for Hetzner Object Storage buckets related to target | active, cloud-enum, safe, slow, web-heavy | DNS_NAME, STORAGE_BUCKET | FINDING, STORAGE_BUCKET | @ChrisJr404 | 2026-05-04 | | bucket_microsoft | scan | No | Check for Azure storage blobs related to target | active, cloud-enum, safe, web | DNS_NAME, STORAGE_BUCKET | FINDING, STORAGE_BUCKET | @TheTechromancer | 2022-11-04 | | bypass403 | scan | No | Check 403 pages for common bypasses | active, loud, web-heavy | URL | FINDING | @liquidsec | 2022-07-05 | -| dnsbrute | scan | No | Brute-force subdomains with massdns + static wordlist | active, loud, subdomain-enum | DNS_NAME | DNS_NAME | @TheTechromancer | 2024-04-24 | -| dnsbrute_mutations | scan | No | Brute-force subdomains with massdns + target-specific mutations | active, loud, slow, subdomain-enum | DNS_NAME | DNS_NAME | @TheTechromancer | 2024-04-25 | +| dnsbrute | scan | No | Brute-force subdomains with a static wordlist | active, loud, subdomain-enum | DNS_NAME | DNS_NAME | @TheTechromancer | 2024-04-24 | +| dnsbrute_mutations | scan | No | Brute-force subdomains with target-specific mutations | active, loud, slow, subdomain-enum | DNS_NAME | DNS_NAME | @TheTechromancer | 2024-04-25 | | dnscommonsrv | scan | No | Check for common SRV records | active, safe, subdomain-enum | DNS_NAME | DNS_NAME | @TheTechromancer | 2022-05-15 | | dotnetnuke | scan | No | Scan for critical DotNetNuke (DNN) vulnerabilities | active, invasive, loud, web-heavy | HTTP_RESPONSE | FINDING, TECHNOLOGY | @liquidsec | 2023-11-21 | | filedownload | scan | No | Download common filetypes such as PDF, DOCX, PPTX, etc. | active, download, safe, web | HTTP_RESPONSE, URL_UNVERIFIED | FILESYSTEM | @TheTechromancer | 2023-10-11 | diff --git a/docs/scanning/configuration.md b/docs/scanning/configuration.md index ce5e3ec29c..975120b714 100644 --- a/docs/scanning/configuration.md +++ b/docs/scanning/configuration.md @@ -107,13 +107,16 @@ dns: disable: false # Speed up scan by not creating any new DNS events, and only resolving A and AAAA records minimal: false - # How many threads to use per resolver (best way to increase speed is to put more resolvers in /etc/resolv.conf) + # How many queries to keep in flight per resolver (best way to increase speed is to put more resolvers in /etc/resolv.conf) threads: 10 # How many DNS records to cache cache_size: 100000 - # How many concurrent DNS resolvers to use when brute-forcing - # (under the hood this is passed through directly to massdns -s) - brute_threads: 1000 + # How many queries to keep in flight in total when brute-forcing + brute_concurrency: 1000 + # How many brute-force queries to keep in flight per resolver (the politeness bound) + brute_inflight_per_resolver: 2 + # Hard ceiling on brute-force DNS queries per second (0 = unlimited; backoff is automatic regardless) + brute_rate_limit: 0 # nameservers to use for DNS brute-forcing # default is updated weekly and contains ~10K high-quality public servers brute_nameservers: https://raw.githubusercontent.com/blacklanternsecurity/public-dns-servers/master/nameservers.txt diff --git a/docs/scanning/tips_and_tricks.md b/docs/scanning/tips_and_tricks.md index 9bae563a51..f5f42dc14d 100644 --- a/docs/scanning/tips_and_tricks.md +++ b/docs/scanning/tips_and_tricks.md @@ -38,16 +38,20 @@ bbot -t evilcorp.com -m baddns -c modules.baddns.module_threads=20 ### Boost DNS Brute-force Speed -If you have a fast internet connection or are running BBOT from a cloud VM, you can speed up subdomain enumeration by cranking the threads for `massdns`. The default is `1000`, which is about 1MB/s of DNS traffic: +If you have a fast internet connection or are running BBOT from a cloud VM, you can speed up subdomain enumeration by raising how many brute-force queries stay in flight. The default is `1000`, which is roughly 1MB/s of DNS traffic: ```bash -# massdns with 5000 resolvers, about 5MB/s -bbot -t evilcorp.com -f subdomain-enum -c dns.brute_threads=5000 +# about 5MB/s +bbot -t evilcorp.com -f subdomain-enum -c dns.brute_concurrency=5000 ``` +Brute-forcing backs off on its own when resolvers start dropping queries, so raising this sets how fast BBOT will go when the resolvers can keep up, not how hard it will push regardless. If you need a firm ceiling as well, set `dns.brute_rate_limit` (queries per second, `0` for unlimited). + +To be gentler on individual resolvers rather than faster, lower `dns.brute_inflight_per_resolver` (default `2`). No resolver ever receives more than this at once, however large the resolver list. + ### Speed Up Scans with More DNS Resolvers -By far the most effective way to speed up a BBOT scan is to **add more resolvers to `/etc/resolv.conf`**. BBOT's DNS resolver (blastdns) spins up multiple threads per resolver (default: `10`, configurable via `dns.threads`), so more resolvers = more parallelism = faster scans. +By far the most effective way to speed up a BBOT scan is to **add more resolvers to `/etc/resolv.conf`**. BBOT's DNS resolver (blastdns) keeps multiple queries in flight per resolver (default: `10`, configurable via `dns.threads`), so more resolvers = more parallelism = faster scans. For OSINT, it's critical that every resolver is **unfiltered**. Specialized resolvers that try to block ads, malicious domains, etc. will intentionally omit results. Below is a sample `/etc/resolv.conf` with 11 unfiltered public resolvers: From a2a7be93e8072d808892ea48971a8236bca13000 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Wed, 29 Jul 2026 14:00:28 -0400 Subject: [PATCH 03/28] Require blastdns 2.0 uv.lock still pins 1.9.1 and cannot be regenerated until 2.0.0 is published, so dependency resolution will fail until then. Regenerate the lock once the release is out. --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index fca08c78dd..b5e44355a4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,7 +49,7 @@ dependencies = [ "tldextract>=5.3.0,<6", "cloudcheck>=11.1.0,<12", "blasthttp>=0.9.0", - "blastdns>=1.9.0,<2", + "blastdns>=2.0.0,<3", "zstandard>=0.22,<1", ] From 2bfe5b6ba0ad0587955e6833033549a194973bd4 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Wed, 29 Jul 2026 15:57:57 -0400 Subject: [PATCH 04/28] Add --custom-nameserver Supplied nameservers replace the OS-detected ones for normal resolution. DNSHelper.system_resolvers keeps meaning "what the OS reported" and the new DNSHelper.resolvers is what actually gets queried. resolver_file follows the effective set, so external tools pointed at it (nuclei) honor the setting too. The brute-force pool likewise excludes the effective set rather than the system one, preserving the reason that exclusion exists: brute traffic must not rate-limit our own resolution. Brute-forcing is unaffected and keeps its own dns.brute_nameservers list. Validation is blastdns's, so an unusable address is reported once, from one place, rather than reimplementing resolver parsing in Python. --- bbot/core/config/models.py | 1 + bbot/core/helpers/dns/brute.py | 4 ++-- bbot/core/helpers/dns/dns.py | 39 +++++++++++++++++++++---------- bbot/defaults.yml | 2 ++ bbot/modules/nuclei.py | 2 +- bbot/scanner/preset/args.py | 10 ++++++++ bbot/test/test_step_1/test_cli.py | 8 +++++++ bbot/test/test_step_1/test_dns.py | 29 +++++++++++++++++++++-- docs/scanning/configuration.md | 2 ++ 9 files changed, 80 insertions(+), 17 deletions(-) diff --git a/bbot/core/config/models.py b/bbot/core/config/models.py index 97a67bf362..6cc7b8862b 100644 --- a/bbot/core/config/models.py +++ b/bbot/core/config/models.py @@ -244,6 +244,7 @@ class DnsConfig(BaseModel): disable: Optional[bool] = None minimal: Optional[bool] = None + nameservers: Optional[list[str]] = None threads: Optional[int] = None cache_size: Optional[int] = None brute_concurrency: Optional[int] = None diff --git a/bbot/core/helpers/dns/brute.py b/bbot/core/helpers/dns/brute.py index ffb05c5e39..e4fc0a44b0 100644 --- a/bbot/core/helpers/dns/brute.py +++ b/bbot/core/helpers/dns/brute.py @@ -188,9 +188,9 @@ async def resolver_file(self): cache_hrs=24 * 7, ) nameservers = set(self.parent_helper.read_file(self._resolver_file_original)) - nameservers.difference_update(self.parent_helper.dns.system_resolvers) - # exclude system nameservers from brute-force + # exclude whatever the main DNS path is using, custom or system # this helps prevent rate-limiting which might cause BBOT's main dns queries to fail + nameservers.difference_update(self.parent_helper.dns.resolvers) self._resolver_file = self.parent_helper.tempfile(nameservers, pipe=False) return self._resolver_file diff --git a/bbot/core/helpers/dns/dns.py b/bbot/core/helpers/dns/dns.py index 4f699f8754..ecf1268a7f 100644 --- a/bbot/core/helpers/dns/dns.py +++ b/bbot/core/helpers/dns/dns.py @@ -10,6 +10,7 @@ from blastdns.exceptions import BlastDNSError from bbot.core.helpers.async_helpers import NamedLock, async_cachedmethod +from bbot.errors import ValidationError from .helpers import all_rdtypes, extract_targets, record_to_text from ..misc import clean_dns_record, domain_parents, is_dns_name, is_domain, is_ip, parent_domain, rand_string @@ -50,22 +51,36 @@ def __init__(self, parent_helper): # how many consecutive DNS resolution hops we allow before tagging an event as runaway self.runaway_limit = self.dns_config.get("runaway_limit", 5) - # blastdns client + # resolvers: operator-supplied nameservers replace the OS ones entirely. + # system_resolvers keeps meaning "what the OS reported"; self.resolvers is + # what we actually query. self.system_resolvers = get_system_resolvers() + custom_nameservers = self.dns_config.get("nameservers", None) or [] + if custom_nameservers: + self.resolvers = list(custom_nameservers) + self.log.info(f"Using {len(self.resolvers):,} custom nameserver(s) instead of system resolvers") + else: + self.resolvers = list(self.system_resolvers) + self.log.debug( f"Starting BlastDNS client with {self.threads} queries in flight per resolver, " f"{self.retries} retries, {self.cache_size} cache size, " f"and {self.timeout} second timeout" ) - self.blastdns = Client( - self.system_resolvers, - ClientConfig( - request_timeout_ms=self.timeout * 1000, - max_retries=self.retries, - max_inflight_per_resolver=self.threads, - cache_capacity=self.cache_size, - ), - ) + try: + self.blastdns = Client( + self.resolvers, + ClientConfig( + request_timeout_ms=self.timeout * 1000, + max_retries=self.retries, + max_inflight_per_resolver=self.threads, + cache_capacity=self.cache_size, + ), + ) + except BlastDNSError as e: + # blastdns validates resolver addresses; surface which setting is at fault + source = "dns.nameservers" if custom_nameservers else "system resolvers" + raise ValidationError(f"Error in {source}: {e}") from e # parse dns.omit_queries (e.g. "A:internal.bad.com") into {rdtype: {host, ...}} self.dns_omit_queries = {} @@ -91,8 +106,8 @@ def __init__(self, parent_helper): self._last_dns_success = None self._last_connectivity_warning = time.time() - # copy the system's current resolvers to a text file for tool use - self.resolver_file = self.parent_helper.tempfile(self.system_resolvers, pipe=False) + # copy the resolvers we're using to a text file for tool use + self.resolver_file = self.parent_helper.tempfile(self.resolvers, pipe=False) # brute force helper self._brute = None diff --git a/bbot/defaults.yml b/bbot/defaults.yml index 582d3546e1..35d5053319 100644 --- a/bbot/defaults.yml +++ b/bbot/defaults.yml @@ -47,6 +47,8 @@ dns: disable: false # Speed up scan by not creating any new DNS events, and only resolving A and AAAA records minimal: false + # Nameservers to use instead of the system ones (empty = use system resolvers) + nameservers: [] # How many queries to keep in flight per resolver (best way to increase speed is to put more resolvers in /etc/resolv.conf) threads: 10 # How many DNS records to cache diff --git a/bbot/modules/nuclei.py b/bbot/modules/nuclei.py index 2a979a4bcf..ec8da876d0 100644 --- a/bbot/modules/nuclei.py +++ b/bbot/modules/nuclei.py @@ -227,7 +227,7 @@ async def execute_nuclei(self, nuclei_input): self.retries, ] - if self.helpers.system_resolvers: + if self.helpers.dns.resolvers: command += ["-r", self.helpers.resolver_file] for hk, hv in self.scan.custom_http_headers.items(): diff --git a/bbot/scanner/preset/args.py b/bbot/scanner/preset/args.py index b5a242e6bb..2204274872 100644 --- a/bbot/scanner/preset/args.py +++ b/bbot/scanner/preset/args.py @@ -207,6 +207,9 @@ def preset_from_args(self): if self.parsed.no_proxy: args_preset.core.merge_custom({"web": {"http_proxy_exclude": self.parsed.no_proxy}}) + if self.parsed.custom_nameserver: + args_preset.core.merge_custom({"dns": {"nameservers": self.parsed.custom_nameserver}}) + if self.parsed.custom_headers: args_preset.core.merge_custom({"web": {"http_headers": self.parsed.custom_headers}}) @@ -429,6 +432,13 @@ def create_parser(self, *args, **kwargs): help="Exclude these hosts from proxy (e.g. localhost *.internal.corp 10.0.0.0/8)", metavar="HOST", ) + misc.add_argument( + "--custom-nameserver", + nargs="+", + default=[], + help="Use these nameservers instead of the system ones (e.g. 1.1.1.1 8.8.8.8:53)", + metavar="NAMESERVER", + ) misc.add_argument( "-H", "--custom-headers", diff --git a/bbot/test/test_step_1/test_cli.py b/bbot/test/test_step_1/test_cli.py index c8321283cd..71d8a12b8c 100644 --- a/bbot/test/test_step_1/test_cli.py +++ b/bbot/test/test_step_1/test_cli.py @@ -828,6 +828,14 @@ def test_cli_presets(monkeypatch, capsys, caplog, clean_default_config): stdout_preset.pop("description") assert stdout_preset == {"config": {"web": {"http_proxy": "http://127.0.0.1:8080"}}} + # --custom-nameserver + monkeypatch.setattr("sys.argv", ["bbot", "--custom-nameserver", "1.1.1.1", "8.8.8.8:53", "--current-preset"]) + cli.main() + captured = capsys.readouterr() + stdout_preset = yaml.safe_load(captured.out) + stdout_preset.pop("description") + assert stdout_preset == {"config": {"dns": {"nameservers": ["1.1.1.1", "8.8.8.8:53"]}}} + # cli config overrides all presets monkeypatch.setattr( "sys.argv", diff --git a/bbot/test/test_step_1/test_dns.py b/bbot/test/test_step_1/test_dns.py index 55a964e253..62d79bb42e 100644 --- a/bbot/test/test_step_1/test_dns.py +++ b/bbot/test/test_step_1/test_dns.py @@ -902,11 +902,36 @@ async def test_dns_helpers(bbot_scanner): # all_rdtypes is the canonical list -- make sure it's not empty and contains the basics assert "A" in all_rdtypes and "AAAA" in all_rdtypes and "CNAME" in all_rdtypes - # make sure system nameservers are excluded from use by DNS brute force + # make sure the resolvers used for normal resolution are excluded from brute-forcing brute_nameservers = tempwordlist(["1.2.3.4", "8.8.4.4", "4.3.2.1", "8.8.8.8"]) scan = bbot_scanner(config={"dns": {"brute_nameservers": brute_nameservers}}) await scan._prep() - scan.helpers.dns.system_resolvers = ["8.8.8.8", "8.8.4.4"] + scan.helpers.dns.resolvers = ["8.8.8.8", "8.8.4.4"] resolver_file = await scan.helpers.dns.brute.resolver_file() resolvers = set(scan.helpers.read_file(resolver_file)) assert resolvers == {"1.2.3.4", "4.3.2.1"} + + # custom nameservers replace the system ones, and are likewise kept out of + # the brute-force pool so brute traffic can't rate-limit our own queries + scan = bbot_scanner( + config={"dns": {"nameservers": ["8.8.8.8", "8.8.4.4"], "brute_nameservers": brute_nameservers}} + ) + await scan._prep() + assert scan.helpers.dns.resolvers == ["8.8.8.8", "8.8.4.4"] + assert scan.helpers.dns.blastdns.resolvers == ["8.8.8.8:53", "8.8.4.4:53"] + # resolver_file is what external tools (e.g. nuclei) are pointed at + assert set(scan.helpers.read_file(scan.helpers.dns.resolver_file)) == {"8.8.8.8", "8.8.4.4"} + resolver_file = await scan.helpers.dns.brute.resolver_file() + assert set(scan.helpers.read_file(resolver_file)) == {"1.2.3.4", "4.3.2.1"} + + # with no custom nameservers, the system ones are used + scan = bbot_scanner() + await scan._prep() + assert scan.helpers.dns.resolvers == list(scan.helpers.dns.system_resolvers) + + # An unusable nameserver fails loudly instead of being silently ignored. + # Validation is blastdns's, so it happens when the client is built on first + # DNS use rather than at config-parse time. + scan = bbot_scanner(config={"dns": {"nameservers": ["not-an-ip"]}}) + with pytest.raises(ValidationError, match="dns.nameservers"): + _ = scan.helpers.dns.resolvers diff --git a/docs/scanning/configuration.md b/docs/scanning/configuration.md index 975120b714..b41b287579 100644 --- a/docs/scanning/configuration.md +++ b/docs/scanning/configuration.md @@ -107,6 +107,8 @@ dns: disable: false # Speed up scan by not creating any new DNS events, and only resolving A and AAAA records minimal: false + # Nameservers to use instead of the system ones (empty = use system resolvers) + nameservers: [] # How many queries to keep in flight per resolver (best way to increase speed is to put more resolvers in /etc/resolv.conf) threads: 10 # How many DNS records to cache From 9dc85f07cccccafee3aff15520c7329e263a1743 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Wed, 29 Jul 2026 19:34:41 -0400 Subject: [PATCH 05/28] Report resolver diagnostics when brute-force delivery drops --- bbot/core/helpers/dns/brute.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/bbot/core/helpers/dns/brute.py b/bbot/core/helpers/dns/brute.py index e4fc0a44b0..b055fc8376 100644 --- a/bbot/core/helpers/dns/brute.py +++ b/bbot/core/helpers/dns/brute.py @@ -140,7 +140,10 @@ async def _resolve_subdomains(self, domain, subdomains, rdtype): empty = 0 failed = 0 + # Runs are serialized by dnsbrute_lock, so a stats snapshot taken here + # describes this run and no other. async with self.dnsbrute_lock: + before = {s.resolver: s for s in client.stats()} async for host, result in client.resolve_batch_full(queries, rdtype): if isinstance(result, DNSError): failed += 1 @@ -157,23 +160,40 @@ async def _resolve_subdomains(self, domain, subdomains, rdtype): continue hosts_yielded.add(hostname) yield hostname + after = client.stats() - self._log_delivery(domain, answered, empty, failed) + self._log_delivery(domain, answered, empty, failed, before, after) - def _log_delivery(self, domain, answered, empty, failed): + def _log_delivery(self, domain, answered, empty, failed, before, after): """Report how much of the wordlist actually got an answer. A run that silently drops queries looks identical to one that found - nothing, so unanswered queries are worth surfacing. + nothing, so unanswered queries are worth surfacing. When a meaningful + share went unanswered, also report the resolver-side picture, since + otherwise there's no way to tell rate-limiting apart from backoff. """ total = answered + empty + failed if not total: return message = f"Brute-force of {domain}: {answered:,} resolved, {empty:,} no record, {failed:,} unanswered" - if failed / total > 0.05: - self.log.warning(f"{message} ({failed / total:.0%} unanswered, results may be incomplete)") - else: + if failed / total <= 0.05: self.log.verbose(message) + return + + used = 0 + timeouts = 0 + paced = 0 + for stats in after: + previous = before.get(stats.resolver) + if stats.attempted - (previous.attempted if previous else 0): + used += 1 + timeouts += stats.timeout - (previous.timeout if previous else 0) + if stats.rate_qps is not None: + paced += 1 + self.log.warning( + f"{message} ({failed / total:.0%} unanswered, results may be incomplete). " + f"{used:,} resolvers used, {paced:,} throttled by backoff, {timeouts:,} timeouts" + ) def gen_subdomains(self, prefixes, domain): for p in prefixes: From e76f24efcbeb92785d2d71d204149dc4b8473bc3 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Thu, 30 Jul 2026 08:53:44 -0400 Subject: [PATCH 06/28] Give brute-force its own retry budget --- bbot/core/config/models.py | 1 + bbot/core/helpers/dns/brute.py | 3 ++- bbot/defaults.yml | 3 +++ docs/scanning/configuration.md | 3 +++ 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/bbot/core/config/models.py b/bbot/core/config/models.py index 6cc7b8862b..a3db29629c 100644 --- a/bbot/core/config/models.py +++ b/bbot/core/config/models.py @@ -250,6 +250,7 @@ class DnsConfig(BaseModel): brute_concurrency: Optional[int] = None brute_inflight_per_resolver: Optional[int] = None brute_rate_limit: Optional[float] = None + brute_retries: Optional[int] = None brute_nameservers: Optional[str] = None search_distance: Optional[int] = None runaway_limit: Optional[int] = None diff --git a/bbot/core/helpers/dns/brute.py b/bbot/core/helpers/dns/brute.py index b055fc8376..d36baf2724 100644 --- a/bbot/core/helpers/dns/brute.py +++ b/bbot/core/helpers/dns/brute.py @@ -31,6 +31,7 @@ def __init__(self, parent_helper): self.concurrency = self.dns_config.get("brute_concurrency", 1000) self.inflight_per_resolver = self.dns_config.get("brute_inflight_per_resolver", 2) self.rate_limit = self.dns_config.get("brute_rate_limit", 0) + self.retries = self.dns_config.get("brute_retries", 20) self.nameservers_url = self.dns_config.get("brute_nameservers", self._nameservers_url) self.devops_mutations = list(self.parent_helper.word_cloud.devops_mutations) self.digit_regex = self.parent_helper.re.compile(r"\d+") @@ -78,7 +79,7 @@ async def client(self): # cache would only consume memory. cache_capacity=0, request_timeout_ms=self.parent_helper.dns.timeout * 1000, - max_retries=self.parent_helper.dns.retries, + max_retries=self.retries, ), ) return self._client diff --git a/bbot/defaults.yml b/bbot/defaults.yml index 35d5053319..82635eeca8 100644 --- a/bbot/defaults.yml +++ b/bbot/defaults.yml @@ -59,6 +59,9 @@ dns: brute_inflight_per_resolver: 2 # Hard ceiling on brute-force DNS queries per second (0 = unlimited; backoff is automatic regardless) brute_rate_limit: 0 + # Attempts per brute-force name before giving up (each retry lands on a different resolver) + # Only timeouts retry, not NXDOMAIN, so this costs traffic proportional to the failure rate + brute_retries: 20 # nameservers to use for DNS brute-forcing # default is updated weekly and contains ~10K high-quality public servers brute_nameservers: https://raw.githubusercontent.com/blacklanternsecurity/public-dns-servers/master/nameservers.txt diff --git a/docs/scanning/configuration.md b/docs/scanning/configuration.md index b41b287579..46311def0a 100644 --- a/docs/scanning/configuration.md +++ b/docs/scanning/configuration.md @@ -119,6 +119,9 @@ dns: brute_inflight_per_resolver: 2 # Hard ceiling on brute-force DNS queries per second (0 = unlimited; backoff is automatic regardless) brute_rate_limit: 0 + # Attempts per brute-force name before giving up (each retry lands on a different resolver) + # Only timeouts retry, not NXDOMAIN, so this costs traffic proportional to the failure rate + brute_retries: 20 # nameservers to use for DNS brute-forcing # default is updated weekly and contains ~10K high-quality public servers brute_nameservers: https://raw.githubusercontent.com/blacklanternsecurity/public-dns-servers/master/nameservers.txt From a3e1f2e5a64d16b5c74b49bc590990e82a7d600f Mon Sep 17 00:00:00 2001 From: liquidsec Date: Thu, 30 Jul 2026 10:28:44 -0400 Subject: [PATCH 07/28] Give brute-force its own short query timeout Brute-forcing inherited dns.timeout (5s), which is right for careful resolution of in-scope hosts but wrong here: blastdns abandons an attempt when the timeout expires rather than overlapping retransmissions, so retries x timeout serializes. At 20 retries that meant up to 100s on a single stubborn name, and measured out at 2.4x slower than a 1-retry run. massdns re-asks every 500ms for up to 50 tries, a 25s budget per name. A 1s timeout with 20 retries gives a comparable 20s budget without the serialization cost. Not shorter than 1s, since blastdns discards late answers that massdns would still accept. --- bbot/core/config/models.py | 1 + bbot/core/helpers/dns/brute.py | 3 ++- bbot/defaults.yml | 4 ++++ docs/scanning/configuration.md | 4 ++++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/bbot/core/config/models.py b/bbot/core/config/models.py index a3db29629c..a1ff54db87 100644 --- a/bbot/core/config/models.py +++ b/bbot/core/config/models.py @@ -251,6 +251,7 @@ class DnsConfig(BaseModel): brute_inflight_per_resolver: Optional[int] = None brute_rate_limit: Optional[float] = None brute_retries: Optional[int] = None + brute_timeout: Optional[float] = None brute_nameservers: Optional[str] = None search_distance: Optional[int] = None runaway_limit: Optional[int] = None diff --git a/bbot/core/helpers/dns/brute.py b/bbot/core/helpers/dns/brute.py index d36baf2724..ce3b20921d 100644 --- a/bbot/core/helpers/dns/brute.py +++ b/bbot/core/helpers/dns/brute.py @@ -32,6 +32,7 @@ def __init__(self, parent_helper): self.inflight_per_resolver = self.dns_config.get("brute_inflight_per_resolver", 2) self.rate_limit = self.dns_config.get("brute_rate_limit", 0) self.retries = self.dns_config.get("brute_retries", 20) + self.timeout = self.dns_config.get("brute_timeout", 1) self.nameservers_url = self.dns_config.get("brute_nameservers", self._nameservers_url) self.devops_mutations = list(self.parent_helper.word_cloud.devops_mutations) self.digit_regex = self.parent_helper.re.compile(r"\d+") @@ -78,7 +79,7 @@ async def client(self): # Brute-force queries are unique by construction, so a # cache would only consume memory. cache_capacity=0, - request_timeout_ms=self.parent_helper.dns.timeout * 1000, + request_timeout_ms=int(self.timeout * 1000), max_retries=self.retries, ), ) diff --git a/bbot/defaults.yml b/bbot/defaults.yml index 82635eeca8..1c1fb65bdb 100644 --- a/bbot/defaults.yml +++ b/bbot/defaults.yml @@ -62,6 +62,10 @@ dns: # Attempts per brute-force name before giving up (each retry lands on a different resolver) # Only timeouts retry, not NXDOMAIN, so this costs traffic proportional to the failure rate brute_retries: 20 + # Per-query timeout in seconds when brute-forcing. Deliberately much shorter than + # dns.timeout: a public resolver that hasn't answered by now won't, and retrying + # elsewhere is cheaper than waiting. + brute_timeout: 1 # nameservers to use for DNS brute-forcing # default is updated weekly and contains ~10K high-quality public servers brute_nameservers: https://raw.githubusercontent.com/blacklanternsecurity/public-dns-servers/master/nameservers.txt diff --git a/docs/scanning/configuration.md b/docs/scanning/configuration.md index 46311def0a..b3e2c3b36a 100644 --- a/docs/scanning/configuration.md +++ b/docs/scanning/configuration.md @@ -122,6 +122,10 @@ dns: # Attempts per brute-force name before giving up (each retry lands on a different resolver) # Only timeouts retry, not NXDOMAIN, so this costs traffic proportional to the failure rate brute_retries: 20 + # Per-query timeout in seconds when brute-forcing. Deliberately much shorter than + # dns.timeout: a public resolver that hasn't answered by now won't, and retrying + # elsewhere is cheaper than waiting. + brute_timeout: 1 # nameservers to use for DNS brute-forcing # default is updated weekly and contains ~10K high-quality public servers brute_nameservers: https://raw.githubusercontent.com/blacklanternsecurity/public-dns-servers/master/nameservers.txt From b6671bb6d8161b07c41af71d76b7449197098b0f Mon Sep 17 00:00:00 2001 From: liquidsec Date: Fri, 31 Jul 2026 16:22:43 -0400 Subject: [PATCH 08/28] Halve the brute-force query timeout and expose persistent sockets A brute run ends when its slowest query ends, and stragglers burned timeout x retries serially: the last 1% of queries took a quarter of each run's wall clock, paid 43 times per scan. Dropping the timeout to 0.5s cuts per-run time 32% (3.26s -> 2.23s over 5 interleaved reps) with the resolved set unchanged, because retries recover anything abandoned early. Going lower shrinks the usable resolver pool by half. Also exposes blastdns's persistent_socket, which trades most of that throughput for ~4x less connection-tracking state, for networks with a small NAT table. --- bbot/core/config/models.py | 1 + bbot/core/helpers/dns/brute.py | 4 ++- bbot/defaults.yml | 10 +++--- bbot/test/test_step_1/test_dns.py | 55 +++++++++++++++++++++++++++++++ 4 files changed, 65 insertions(+), 5 deletions(-) diff --git a/bbot/core/config/models.py b/bbot/core/config/models.py index a1ff54db87..99cf1e94b8 100644 --- a/bbot/core/config/models.py +++ b/bbot/core/config/models.py @@ -252,6 +252,7 @@ class DnsConfig(BaseModel): brute_rate_limit: Optional[float] = None brute_retries: Optional[int] = None brute_timeout: Optional[float] = None + brute_persistent_socket: Optional[bool] = None brute_nameservers: Optional[str] = None search_distance: Optional[int] = None runaway_limit: Optional[int] = None diff --git a/bbot/core/helpers/dns/brute.py b/bbot/core/helpers/dns/brute.py index ce3b20921d..2a16fb27cd 100644 --- a/bbot/core/helpers/dns/brute.py +++ b/bbot/core/helpers/dns/brute.py @@ -32,7 +32,8 @@ def __init__(self, parent_helper): self.inflight_per_resolver = self.dns_config.get("brute_inflight_per_resolver", 2) self.rate_limit = self.dns_config.get("brute_rate_limit", 0) self.retries = self.dns_config.get("brute_retries", 20) - self.timeout = self.dns_config.get("brute_timeout", 1) + self.timeout = self.dns_config.get("brute_timeout", 0.5) + self.persistent_socket = self.dns_config.get("brute_persistent_socket", False) self.nameservers_url = self.dns_config.get("brute_nameservers", self._nameservers_url) self.devops_mutations = list(self.parent_helper.word_cloud.devops_mutations) self.digit_regex = self.parent_helper.re.compile(r"\d+") @@ -81,6 +82,7 @@ async def client(self): cache_capacity=0, request_timeout_ms=int(self.timeout * 1000), max_retries=self.retries, + persistent_socket=self.persistent_socket, ), ) return self._client diff --git a/bbot/defaults.yml b/bbot/defaults.yml index 1c1fb65bdb..7a00786bce 100644 --- a/bbot/defaults.yml +++ b/bbot/defaults.yml @@ -62,10 +62,12 @@ dns: # Attempts per brute-force name before giving up (each retry lands on a different resolver) # Only timeouts retry, not NXDOMAIN, so this costs traffic proportional to the failure rate brute_retries: 20 - # Per-query timeout in seconds when brute-forcing. Deliberately much shorter than - # dns.timeout: a public resolver that hasn't answered by now won't, and retrying - # elsewhere is cheaper than waiting. - brute_timeout: 1 + # Per-query timeout in seconds when brute-forcing, deliberately much shorter than dns.timeout + # Retrying elsewhere is cheaper than waiting; going below this starts shrinking the resolver pool + brute_timeout: 0.5 + # Reuse one socket per resolver instead of one per query, for networks with a small + # NAT/conntrack table. Cuts connection-tracking state ~4x at a large throughput cost + brute_persistent_socket: false # nameservers to use for DNS brute-forcing # default is updated weekly and contains ~10K high-quality public servers brute_nameservers: https://raw.githubusercontent.com/blacklanternsecurity/public-dns-servers/master/nameservers.txt diff --git a/bbot/test/test_step_1/test_dns.py b/bbot/test/test_step_1/test_dns.py index 62d79bb42e..6ded7fbcb7 100644 --- a/bbot/test/test_step_1/test_dns.py +++ b/bbot/test/test_step_1/test_dns.py @@ -929,6 +929,61 @@ async def test_dns_helpers(bbot_scanner): await scan._prep() assert scan.helpers.dns.resolvers == list(scan.helpers.dns.system_resolvers) + +@pytest.mark.asyncio +async def test_dns_brute_client_config(bbot_scanner, monkeypatch): + """Every dns.brute_* option has to reach the blastdns client. + + blastdns rejects unknown ClientConfig keys, but a value BBOT never passes + fails silently as a default, which is invisible in scan output. + """ + from bbot.core.helpers.dns import brute as brute_module + + captured = {} + + class FakeClient: + def __init__(self, resolvers, config): + captured["resolvers"] = resolvers + captured["config"] = config + + monkeypatch.setattr(brute_module, "Client", FakeClient) + + brute_nameservers = tempwordlist(["1.2.3.4", "4.3.2.1"]) + scan = bbot_scanner( + config={ + "dns": { + "brute_nameservers": brute_nameservers, + "brute_concurrency": 123, + "brute_inflight_per_resolver": 7, + "brute_rate_limit": 456, + "brute_retries": 9, + "brute_timeout": 0.25, + "brute_persistent_socket": True, + } + } + ) + await scan._prep() + await scan.helpers.dns.brute.client() + + config = captured["config"] + assert config.max_concurrency == 123 + assert config.max_inflight_per_resolver == 7 + assert config.rate_limit == 456 + assert config.max_retries == 9 + assert config.request_timeout_ms == 250 + assert config.persistent_socket is True + # brute-force names are unique by construction, so a cache is pure overhead + assert config.cache_capacity == 0 + + # a rate limit of 0 means unlimited, which blastdns spells as None + scan = bbot_scanner(config={"dns": {"brute_nameservers": brute_nameservers, "brute_rate_limit": 0}}) + await scan._prep() + await scan.helpers.dns.brute.client() + assert captured["config"].rate_limit is None + # the shipped default must not silently drift back to a slow tail + assert captured["config"].request_timeout_ms == 500 + assert captured["config"].persistent_socket is False + # An unusable nameserver fails loudly instead of being silently ignored. # Validation is blastdns's, so it happens when the client is built on first # DNS use rather than at config-parse time. From 6a250a6b3ab693097239e3b704e4514272accfe8 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Fri, 31 Jul 2026 23:40:48 -0400 Subject: [PATCH 09/28] Default brute-force to one socket per resolver Per-query sockets bind a fresh source port each time, so connection-tracking state grows with query volume: a single-domain scan peaked at 114,342 conntrack entries, 44% of a stock Linux table and several times over what a consumer router holds. One socket per resolver bounds that by the resolver count instead -- same scan peaked at 6,974, and found the identical 154 subdomains in 158s against 168s. --- bbot/core/helpers/dns/brute.py | 2 +- bbot/defaults.yml | 6 +++--- bbot/test/test_step_1/test_dns.py | 8 ++++++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/bbot/core/helpers/dns/brute.py b/bbot/core/helpers/dns/brute.py index 2a16fb27cd..04bfc1597f 100644 --- a/bbot/core/helpers/dns/brute.py +++ b/bbot/core/helpers/dns/brute.py @@ -33,7 +33,7 @@ def __init__(self, parent_helper): self.rate_limit = self.dns_config.get("brute_rate_limit", 0) self.retries = self.dns_config.get("brute_retries", 20) self.timeout = self.dns_config.get("brute_timeout", 0.5) - self.persistent_socket = self.dns_config.get("brute_persistent_socket", False) + self.persistent_socket = self.dns_config.get("brute_persistent_socket", True) self.nameservers_url = self.dns_config.get("brute_nameservers", self._nameservers_url) self.devops_mutations = list(self.parent_helper.word_cloud.devops_mutations) self.digit_regex = self.parent_helper.re.compile(r"\d+") diff --git a/bbot/defaults.yml b/bbot/defaults.yml index 7a00786bce..7d7228ed2c 100644 --- a/bbot/defaults.yml +++ b/bbot/defaults.yml @@ -65,9 +65,9 @@ dns: # Per-query timeout in seconds when brute-forcing, deliberately much shorter than dns.timeout # Retrying elsewhere is cheaper than waiting; going below this starts shrinking the resolver pool brute_timeout: 0.5 - # Reuse one socket per resolver instead of one per query, for networks with a small - # NAT/conntrack table. Cuts connection-tracking state ~4x at a large throughput cost - brute_persistent_socket: false + # Reuse one socket per resolver instead of binding one per query, which keeps NAT/conntrack + # state bounded by the resolver count rather than growing with query volume + brute_persistent_socket: true # nameservers to use for DNS brute-forcing # default is updated weekly and contains ~10K high-quality public servers brute_nameservers: https://raw.githubusercontent.com/blacklanternsecurity/public-dns-servers/master/nameservers.txt diff --git a/bbot/test/test_step_1/test_dns.py b/bbot/test/test_step_1/test_dns.py index 6ded7fbcb7..e9503daec0 100644 --- a/bbot/test/test_step_1/test_dns.py +++ b/bbot/test/test_step_1/test_dns.py @@ -982,6 +982,14 @@ def __init__(self, resolvers, config): assert captured["config"].rate_limit is None # the shipped default must not silently drift back to a slow tail assert captured["config"].request_timeout_ms == 500 + # one socket per resolver keeps NAT state bounded by the resolver count instead + # of growing with query volume, so it has to stay on by default + assert captured["config"].persistent_socket is True + + # and it stays overridable, for anywhere the extra sockets are the tighter bound + scan = bbot_scanner(config={"dns": {"brute_nameservers": brute_nameservers, "brute_persistent_socket": False}}) + await scan._prep() + await scan.helpers.dns.brute.client() assert captured["config"].persistent_socket is False # An unusable nameserver fails loudly instead of being silently ignored. From 57497152341415300ce08b3e385e9ba68771d7d4 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Mon, 3 Aug 2026 13:23:24 -0400 Subject: [PATCH 10/28] Finish retiring dns.brute_threads The subdomain-enum preset still set it, so every bundled-preset validation failed and took test_python_api and test_modules_basic_checks with it. dnsbrute also no longer has common deps now that massdns is gone, so the preload assertion moves to portscan, which still uses them. --- README.md | 2 +- bbot/presets/subdomain-enum.yml | 2 +- bbot/test/test_step_1/test_modules_basic.py | 2 +- docs/scanning/scan_sanity.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5d5b5be444..322798f824 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ output_modules: config: dns: threads: 25 - brute_threads: 1000 + brute_concurrency: 1000 # put your API keys here # modules: # github: diff --git a/bbot/presets/subdomain-enum.yml b/bbot/presets/subdomain-enum.yml index d4230c3fc6..d0d6491e5f 100644 --- a/bbot/presets/subdomain-enum.yml +++ b/bbot/presets/subdomain-enum.yml @@ -11,7 +11,7 @@ output_modules: config: dns: threads: 25 - brute_threads: 1000 + brute_concurrency: 1000 # put your API keys here # modules: # github: diff --git a/bbot/test/test_step_1/test_modules_basic.py b/bbot/test/test_step_1/test_modules_basic.py index 60e4080714..e95bea7567 100644 --- a/bbot/test/test_step_1/test_modules_basic.py +++ b/bbot/test/test_step_1/test_modules_basic.py @@ -163,7 +163,7 @@ async def test_modules_basic_checks(events, blasthttp_mock): assert "wordlist" in all_preloaded["dnsbrute"]["config"] assert type(all_preloaded["dnsbrute"]["config"]["max_depth"]) == int assert all_preloaded["baddns"]["deps"]["pip"] - assert all_preloaded["dnsbrute"]["deps"]["common"] + assert all_preloaded["portscan"]["deps"]["common"] assert all_preloaded["gowitness"]["deps"]["ansible"] all_flags = set() diff --git a/docs/scanning/scan_sanity.md b/docs/scanning/scan_sanity.md index 46e5e1fffc..814105e605 100644 --- a/docs/scanning/scan_sanity.md +++ b/docs/scanning/scan_sanity.md @@ -42,7 +42,7 @@ If you truly just want the "throw everything at it" experience, we do have a pre - **`scope.search_distance`** (default `0`) is the big one. It controls how many hops out from your target BBOT is allowed to explore. At `0`, modules only act on in-scope events. Raise it and a single certificate full of affiliate names pulls in those hosts, then *their* subdomains, then *their* infrastructure, and scope balloons outward hop by hop until there's no natural stopping point. The config comment says it outright: don't change this unless you know what you're doing. (This is *not* the same as `dns.search_distance`, which only governs DNS resolution and is safer to adjust.) - **`web.spider_distance`** / **`web.spider_depth`** (default `0` / `1`). A `spider_distance` of `0` means no spidering at all. Raise it and the crawler follows links from links from links, and every URL it turns up feeds webbrute and lightfuzz. On a large site that loop is effectively unbounded. -- **`dns.threads`** / **`dns.brute_threads`** (default `10` / `1000`) control DNS concurrency. Cranking them won't make your scan meaningfully faster (the real lever is adding more resolvers to `/etc/resolv.conf`); it'll just flood your nameservers and get you rate-limited. +- **`dns.threads`** / **`dns.brute_concurrency`** (default `10` / `1000`) control DNS concurrency. Cranking them won't make your scan meaningfully faster (the real lever is adding more resolvers to `/etc/resolv.conf`); it'll just flood your nameservers and get you rate-limited. - **`dns.runaway_limit`** (default `5`) and **`dns.wildcard_disable`** (default `false`) are guardrails. `runaway_limit` stops BBOT from chasing a malicious chain of DNS records forever, and wildcard detection is the only thing keeping a `*.example.com` wildcard from spawning infinite bogus subdomains. Turning either off removes a safety net that's there for a reason. ## Scan Target From 821bd660ee5e034b6f99df3072d18c8321f52315 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Tue, 22 Sep 2026 16:36:35 -0400 Subject: [PATCH 11/28] Build the DNS helper during scan prep --- bbot/scanner/scanner.py | 6 ++++++ bbot/test/test_step_1/test_dns.py | 13 +++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/bbot/scanner/scanner.py b/bbot/scanner/scanner.py index 2379dcd940..b0df3682cb 100644 --- a/bbot/scanner/scanner.py +++ b/bbot/scanner/scanner.py @@ -326,6 +326,12 @@ async def _prep(self): Expands async seed types (e.g. ASN → IP ranges), evaluates preset conditions, creates the scan's output folder, loads its modules, and calls their .setup() methods. """ + # build the DNS helper up front: blastdns validates dns.nameservers when the + # client is constructed, and a bad value should abort the scan here rather than + # surface later as a per-event error inside dnsresolve + if not self.config.get("dns", {}).get("disable", False): + self.helpers.dns + # expand async seed types (e.g. ASN -> IP ranges) try: await self.preset.target.generate_children(helpers=self.helpers) diff --git a/bbot/test/test_step_1/test_dns.py b/bbot/test/test_step_1/test_dns.py index e9503daec0..2f062d8019 100644 --- a/bbot/test/test_step_1/test_dns.py +++ b/bbot/test/test_step_1/test_dns.py @@ -993,8 +993,17 @@ def __init__(self, resolvers, config): assert captured["config"].persistent_socket is False # An unusable nameserver fails loudly instead of being silently ignored. - # Validation is blastdns's, so it happens when the client is built on first - # DNS use rather than at config-parse time. + # Validation is blastdns's, so it happens when the client is built. scan = bbot_scanner(config={"dns": {"nameservers": ["not-an-ip"]}}) with pytest.raises(ValidationError, match="dns.nameservers"): _ = scan.helpers.dns.resolvers + + # _prep() builds the client up front, so a bad nameserver aborts the scan there + # instead of surfacing once per event inside dnsresolve + scan = bbot_scanner(config={"dns": {"nameservers": ["not-an-ip"]}}) + with pytest.raises(ValidationError, match="dns.nameservers"): + await scan._prep() + + # a DNS-disabled scan never resolves, so it must not be blocked by that check + scan = bbot_scanner(config={"dns": {"nameservers": ["not-an-ip"], "disable": True}}) + await scan._prep() From b1333c33ac9fdc49de8c76675ec1dc05cff5ba27 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Tue, 22 Sep 2026 16:36:35 -0400 Subject: [PATCH 12/28] Pin blastdns 2.0 --- pyproject.toml | 4 ++ uv.lock | 185 ++++++++++++++++++++++++------------------------- 2 files changed, 95 insertions(+), 94 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b5e44355a4..65493d6cfb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -96,6 +96,10 @@ docs = [ "pymdown-extensions>=10.20.1,<12", ] +[tool.uv] +# baddns still declares blastdns<1.10; override until it ships a 2.x-compatible release +override-dependencies = ["blastdns>=2.0.0,<3"] + [build-system] requires = ["hatchling"] build-backend = "hatchling.build" diff --git a/uv.lock b/uv.lock index 170b6c7077..0cd49cda7b 100644 --- a/uv.lock +++ b/uv.lock @@ -7,6 +7,9 @@ resolution-markers = [ "python_full_version < '3.11'", ] +[manifest] +overrides = [{ name = "blastdns", specifier = ">=2.0.0,<3" }] + [[package]] name = "annotated-doc" version = "0.0.4" @@ -262,7 +265,7 @@ requires-dist = [ { name = "ansible-runner", specifier = ">=2.3.2,<3" }, { name = "asndb", specifier = ">=1.1.0" }, { name = "beautifulsoup4", specifier = ">=4.12.2,<5" }, - { name = "blastdns", specifier = ">=1.9.0,<2" }, + { name = "blastdns", specifier = ">=2.0.0,<3" }, { name = "blasthttp", specifier = ">=0.9.0" }, { name = "cachetools", specifier = ">=5.3.2,<8.0.0" }, { name = "cloudcheck", specifier = ">=11.1.0,<12" }, @@ -344,104 +347,98 @@ wheels = [ [[package]] name = "blastdns" -version = "1.9.1" +version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "orjson" }, { name = "pydantic" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a0/63/5ad427bd5e23780961ba4f183a85d8428d961feabcfaf237347801dd00a0/blastdns-1.9.1.tar.gz", hash = "sha256:e0ea09a9f0199a64aad8a6abe54e0f0de523a12e6f96da71e79af7fea9d12f2f", size = 114292, upload-time = "2026-04-15T20:33:18.661Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/87/89/c606bd3d9e50771e168ad64745e4b9ef28fa511533d225735178eddab5c7/blastdns-1.9.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:fc9a0c8808b90748dadc224e86a21fed75c1ccfa7df682906401790069262816", size = 2449222, upload-time = "2026-04-15T20:30:51.744Z" }, - { url = "https://files.pythonhosted.org/packages/56/97/8e10f45144e7644c6f9e7a9f96eb7e433ef34bc5e6e84ae3e50581ae24d1/blastdns-1.9.1-cp310-cp310-manylinux_2_28_armv7l.whl", hash = "sha256:077dfd2eb020ea7d120c18263a3f646bcd8dfe1e0d6d1c1f604d5034892d3404", size = 2321373, upload-time = "2026-04-15T20:31:06.388Z" }, - { url = "https://files.pythonhosted.org/packages/47/80/31f3383453114beeade87d99058e1513dd82dafd67002d09ee9337fa886c/blastdns-1.9.1-cp310-cp310-manylinux_2_28_i686.whl", hash = "sha256:eb7833f85bbb8ac246ec55ca5aa9bf622f18d61f6566b4fbc6b3c42e99eae5a7", size = 2546563, upload-time = "2026-04-15T20:31:49.596Z" }, - { url = "https://files.pythonhosted.org/packages/45/76/eefa2fbe0be7781d33baf0b4670bc9d2db6aff0d94aeec1dd8d54c389683/blastdns-1.9.1-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:911516924ff9652cae0905ba218cd58f03d6e4c4d8972d8c00a3540496a15dad", size = 3519094, upload-time = "2026-04-15T20:31:20.464Z" }, - { url = "https://files.pythonhosted.org/packages/62/57/bbef43cfb51ed61977ac2e9d378d5e82ccf541ae3e4f1d318acd25ec6100/blastdns-1.9.1-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:693ba5b6820c6ab8cfd37202babeef354a2fca45ce51afcd8ffa912f2a50e82e", size = 2506642, upload-time = "2026-04-15T20:31:35.818Z" }, - { url = "https://files.pythonhosted.org/packages/e2/25/811477849e41c66e85047133ee4af7ecbd320c5b251988fee94c97c426f8/blastdns-1.9.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:06ebb94fbcc130acfc73356b36f135f9ca655a5ced9780c3ff9bee6394c91639", size = 2439602, upload-time = "2026-04-15T20:31:59.906Z" }, - { url = "https://files.pythonhosted.org/packages/a5/9f/c592c221970f278822f2f8bcefc2422eebf6cced23268d3fda7daec24e01/blastdns-1.9.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:99966441bfed1f5b45abf6c736be5d9bc141946ffe7582a1fbfd90386b16d4af", size = 2627363, upload-time = "2026-04-15T20:32:23.893Z" }, - { url = "https://files.pythonhosted.org/packages/74/41/9a3b74481259f76ce863a6d883779766970007952ceedd469a2d903421f7/blastdns-1.9.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:dd587b057bebdf2797cafa69923425312a038a56b4f48e740db1ce9584d4169a", size = 2594515, upload-time = "2026-04-15T20:32:37.097Z" }, - { url = "https://files.pythonhosted.org/packages/a7/41/23f2ab8eda0f31bf85b1f1aaa41dc2205c224f7032ba431434d78cfc0625/blastdns-1.9.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f45a4fb8dc5d84bc94b266230329ca4e14ae1e43a65f45e1ba52c1ab8509964b", size = 2671944, upload-time = "2026-04-15T20:32:50.331Z" }, - { url = "https://files.pythonhosted.org/packages/85/2a/4149667e1245c80cd501bad55bed7cdb42190c3d727eb742566e65f61041/blastdns-1.9.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:98b9ea17704491fd6d1e40a183222439403433ab2046f8e323ed10dcac5ab214", size = 2689118, upload-time = "2026-04-15T20:33:04.593Z" }, - { url = "https://files.pythonhosted.org/packages/8d/04/8af93946ac6a53f981356e13ddd2eda5c8b76ab355054731e8704c2f4a59/blastdns-1.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:8581a729dd9f32cca8edef0fd8c0529be81fe8ca7faef497f1712b5277c0b896", size = 2657117, upload-time = "2026-04-15T20:33:20.027Z" }, - { url = "https://files.pythonhosted.org/packages/5b/d7/b4a757c662a45f82dc32fe916151caef24763f06ddf1d7ac571ff6f0ac51/blastdns-1.9.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:67f52aa4880bed47da178065c8b2935cc41f526a340e0a1dae90f2eb641f99f8", size = 2655899, upload-time = "2026-04-15T20:32:17.262Z" }, - { url = "https://files.pythonhosted.org/packages/98/16/5fbb3f57e2a2da7b1ea954c4a7576a0216b8b6f45714cedc0da92c933183/blastdns-1.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9dda8352acba5c9b7e498c61f73f28120e312e441a37d26d8912ddb8c8876b11", size = 2522537, upload-time = "2026-04-15T20:32:10.658Z" }, - { url = "https://files.pythonhosted.org/packages/ab/7c/974f4a6f021fcf5a172dc9e6ab508527e5554576eb08f057f4d6345dca79/blastdns-1.9.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:b967cba75fd757b0e954cf4fb3d69c9fb39d95871316a9cf0bb0c2dc5e720077", size = 2450776, upload-time = "2026-04-15T20:30:53.403Z" }, - { url = "https://files.pythonhosted.org/packages/ad/a3/dc118d2a4be9efc933b29add465451537e10de53ee59e08bc6bf34de85f9/blastdns-1.9.1-cp311-cp311-manylinux_2_28_armv7l.whl", hash = "sha256:7a51dce160ffee92b548553b8c01d50ffa6d1f4c16d153df6ec36cc04e4ce8cc", size = 2321089, upload-time = "2026-04-15T20:31:07.684Z" }, - { url = "https://files.pythonhosted.org/packages/79/e9/47ae75a10808c166c38cd989fc7b65b5e31755985030e30ae3535a0abaad/blastdns-1.9.1-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:f9fb56f9f8a672518968f7a4d882718c75b4b42629baa76f55c8bb4f60c6d8d1", size = 2551494, upload-time = "2026-04-15T20:31:50.955Z" }, - { url = "https://files.pythonhosted.org/packages/6d/2f/f2f8f5b40c83b868a807c1e8dbeafb930a0568c96ba53e95cd5e5b6b345b/blastdns-1.9.1-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:d0d23e22bdbf4fc8f4c32ff073603c56c6efb9f4911a168d9f004de664a5b13f", size = 3520728, upload-time = "2026-04-15T20:31:22.339Z" }, - { url = "https://files.pythonhosted.org/packages/69/81/af8964cd04f861077d2e99698b62d7cf01d5c5c193d8a815f3970dcdc0e6/blastdns-1.9.1-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:0e7603dc7e5fef925d03b5f28d75164e634ef2d6fc5b960671d0cf88380d7b70", size = 2507167, upload-time = "2026-04-15T20:31:37.313Z" }, - { url = "https://files.pythonhosted.org/packages/b4/8b/6326da63ad387377c0dd94f52426b276273f8cdf32eab17e4b3ba0ec4c0f/blastdns-1.9.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d2cc4189b98fd6d2ca2b41043f0a501455e8043562f9086fafb25c93ef053ad", size = 2438814, upload-time = "2026-04-15T20:32:01.274Z" }, - { url = "https://files.pythonhosted.org/packages/d5/30/d94d844101d7650982c6a686b41ba65fae84692f6a65147aea9756a4d09c/blastdns-1.9.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6e31c987da6b52c1194ec057c932400b72f729922fa18737b68a868df5911d27", size = 2628570, upload-time = "2026-04-15T20:32:25.287Z" }, - { url = "https://files.pythonhosted.org/packages/63/a0/c2d1d9d6bcf20836b66b06c970e2674e5d531c98f5f8a5d8b80a2c31e413/blastdns-1.9.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:da747e424bea405fc11ad7cb71ea36a082c100e40c0fc18855e209104f4e08d6", size = 2595745, upload-time = "2026-04-15T20:32:38.459Z" }, - { url = "https://files.pythonhosted.org/packages/e9/f6/0c0e8a070cce991ba16227a3a1e8602f76a84db783cd2f3f170b2250a373/blastdns-1.9.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:801224d7006b61789378addae8751aeb7c7877c8ecf19b515f4a856230fc68bc", size = 2671215, upload-time = "2026-04-15T20:32:51.674Z" }, - { url = "https://files.pythonhosted.org/packages/ee/4a/b2cfbb5cbede71ba5c116bea8bd68222e9ab5bef49b4cd1312954978c99f/blastdns-1.9.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1ce70a659667f3adc7c0eac7d4b2c6f4c9f8429367254ec5308d04f36213f935", size = 2689185, upload-time = "2026-04-15T20:33:06.529Z" }, - { url = "https://files.pythonhosted.org/packages/b3/34/ca482b1f59520b6c5b3fa50b253bd009e6e636541cf238788e34b81e5352/blastdns-1.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ab93ca714cb913423e2780b2c3881a1303fa21948c5602795262c9bd51c702b", size = 2658811, upload-time = "2026-04-15T20:33:21.347Z" }, - { url = "https://files.pythonhosted.org/packages/a9/f7/82d6bc99f2c3c65ee7d1c87627c9451ccb3c6dd1e21d1afb7caed4761c20/blastdns-1.9.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e46c938ce8eec89384c82b68fd62fa2f76935d4d68d1ba51f199008c1a8b056b", size = 2649921, upload-time = "2026-04-15T20:32:18.725Z" }, - { url = "https://files.pythonhosted.org/packages/96/c4/6f1b04ee737feeac6b78459708b6b6b5e4215b8a443945bbb5078a1dba0b/blastdns-1.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b1eead79b192af541f4e89328aaed7e675254a56583d406dcc5cc527b1ed0662", size = 2510639, upload-time = "2026-04-15T20:32:12.531Z" }, - { url = "https://files.pythonhosted.org/packages/b0/b4/80cc72f8e94a46743bc400d2336506388fcbffe0feeaeaec03410d451db6/blastdns-1.9.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d0d6a6d4654032b2fc1a1df1bb145afb83989c23160da5b629c64e797a6f3027", size = 2449415, upload-time = "2026-04-15T20:30:55.661Z" }, - { url = "https://files.pythonhosted.org/packages/f5/d6/459997181a1a0c8bd162c6f3b830732f49f39fd9e62d77dc1fde2b9fb953/blastdns-1.9.1-cp312-cp312-manylinux_2_28_armv7l.whl", hash = "sha256:cb5745b8f4ea3929d090dfa18126b9094986ea2e5808a54cdb58a355e1360a82", size = 2319087, upload-time = "2026-04-15T20:31:09.425Z" }, - { url = "https://files.pythonhosted.org/packages/10/a8/d67e9a0212005a178ab1a5fa3ea7cd280fb00b981a1020b15a7cf87ea244/blastdns-1.9.1-cp312-cp312-manylinux_2_28_i686.whl", hash = "sha256:7bd6bfc82e08624d1b40f1e4822b548f63829351e7f72080d69099b32fdb8361", size = 2549284, upload-time = "2026-04-15T20:31:52.737Z" }, - { url = "https://files.pythonhosted.org/packages/0a/e9/667b14a3cda6cd1bb31838c2769ec8533ce32aa5a3a905acc5db6e687851/blastdns-1.9.1-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:e23dc048586e8b20523ecbc4c5931d8bc5485e79200207c4c6f91ad4b5ea980f", size = 3516061, upload-time = "2026-04-15T20:31:24.299Z" }, - { url = "https://files.pythonhosted.org/packages/ee/f7/8b756e8a2dd781007763318b11fb2fb8f233dfb86f10409a69abc9b03c29/blastdns-1.9.1-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:6c0472de6616e7ed20b5fb3784c41b52e64a0ff1079106be0140c6f00e19f6c6", size = 2503102, upload-time = "2026-04-15T20:31:38.968Z" }, - { url = "https://files.pythonhosted.org/packages/91/c8/6f689dc1491c13ebe1275943995c3376644e26c130fd0e30dae538477996/blastdns-1.9.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:775dbd6b7d1eccb3375a9f17f43723ddf79a1d12ae1d202d3f587101aff21db1", size = 2436641, upload-time = "2026-04-15T20:32:02.719Z" }, - { url = "https://files.pythonhosted.org/packages/d1/52/5376331c9278f5334b76dd48210e1fb10a83f4920516c7060ccde56ec6da/blastdns-1.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:40bff362bd9be708197d5c548ad7f006688d763cada1faee44ae1e7d2acb06ef", size = 2625799, upload-time = "2026-04-15T20:32:26.823Z" }, - { url = "https://files.pythonhosted.org/packages/e4/d1/622c75809c143d51037daa8af9f3477e6e4606a12d58f5189b4da81e6511/blastdns-1.9.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:408c30d61126c1cc0ecacb1011ed6ef2f34840e937e2def22f3ed943ad6ba8f4", size = 2593888, upload-time = "2026-04-15T20:32:39.932Z" }, - { url = "https://files.pythonhosted.org/packages/11/a0/0a8dc041ccb68720dbe44ce36c10404d904b0572c0589987c5618c1c109d/blastdns-1.9.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9af85ef741d4f230ea55f12d4876b1123562f51ce9b9f7d58b6f52d3d84395c1", size = 2670025, upload-time = "2026-04-15T20:32:53.153Z" }, - { url = "https://files.pythonhosted.org/packages/72/33/b5d69a9a719b3ec354fd938769f95697e17e4c1011b97aa5f424d2a7be77/blastdns-1.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3339b69fc959292a66ea724b0d5e9563c4ca0be7dd48fc78adb8914a3c82ab57", size = 2685562, upload-time = "2026-04-15T20:33:08.351Z" }, - { url = "https://files.pythonhosted.org/packages/c6/d5/36c430234203e7f4c2719b321ee316c4ac82db2541761ecff6035445fbec/blastdns-1.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:074b0ffe33ed57d6bef65d0120fa508d855f49910a1ed51ee6c3920e6ffc73bf", size = 2657744, upload-time = "2026-04-15T20:33:22.771Z" }, - { url = "https://files.pythonhosted.org/packages/09/a2/ed3363e3cbc5d10fc2301fc0651bb316f203a287a331eb65ce0f0c0726d1/blastdns-1.9.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3fe8fecc19fdb3ee6bcfcd4242c9e2433254c8c40d1b57fa40d6190eadd73da7", size = 2649286, upload-time = "2026-04-15T20:32:20.42Z" }, - { url = "https://files.pythonhosted.org/packages/db/15/1e37003ef21f8777b51f1abc85edae818358743a74b0a836a8a409383f91/blastdns-1.9.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b84013fc47cebeac3093f4feaeed3a4d5f45d82eebdffb73bde610e8e30f3399", size = 2510656, upload-time = "2026-04-15T20:32:14.308Z" }, - { url = "https://files.pythonhosted.org/packages/03/4e/b7f055bbe93b4201738c284482cd94d76b8f148381daa6774ddf509533f5/blastdns-1.9.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:7e2f7b28bff77a5c5627f1f85069309e3c4039d4d277756e84d2d5c229716c16", size = 2447985, upload-time = "2026-04-15T20:30:57.312Z" }, - { url = "https://files.pythonhosted.org/packages/14/d4/05a0eb6ce69da50e1a20a4374e685b54cafcf2550aa544280f77a56e7c88/blastdns-1.9.1-cp313-cp313-manylinux_2_28_armv7l.whl", hash = "sha256:4668ccfde0215c685a81e3e121ef5d0eafccdb940bb7f9d3f7b8ffb004955b51", size = 2319178, upload-time = "2026-04-15T20:31:11.009Z" }, - { url = "https://files.pythonhosted.org/packages/9d/a7/d483bf6db4762f9ac2772cac722659334cf704316bf8e1c190af5b2fd430/blastdns-1.9.1-cp313-cp313-manylinux_2_28_i686.whl", hash = "sha256:9f4b05ba48357b70f0ee9ff6dfc581aa3af55040e4b0db4e43c53e4c3d5c8e58", size = 2549530, upload-time = "2026-04-15T20:31:54.377Z" }, - { url = "https://files.pythonhosted.org/packages/77/c1/bc1eb90bb9fda8a354ffda502da723afa4aeaf7e7538ac94dea3e922dc4d/blastdns-1.9.1-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:6da53361836a9b6d05daf391d8ce8f765de881e394827d5314021cb4c013eec7", size = 3515285, upload-time = "2026-04-15T20:31:26.049Z" }, - { url = "https://files.pythonhosted.org/packages/2c/2e/6dd47138c57efa03ef848f40c0ee5686f69fba028b72f8683173af7e44a2/blastdns-1.9.1-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:a10dbdcda0ab8c9cf641163cb568d820d51282d848bdd0c8627a51f3f6038163", size = 2501978, upload-time = "2026-04-15T20:31:40.265Z" }, - { url = "https://files.pythonhosted.org/packages/8c/95/cc06697ddb03d03fb6a171b337c9c649cd5bc3493b4e8c83e185eeef1dad/blastdns-1.9.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1f3400075b16905fd6837902511fed9c4b98b13de3cad8e3a78cf6d0e78f8124", size = 2435831, upload-time = "2026-04-15T20:32:04.657Z" }, - { url = "https://files.pythonhosted.org/packages/9c/26/6a702d559328213e0e3e7bb3a7c8788031c42b0613ae363cfd5ee33d130d/blastdns-1.9.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a32a1e51d34b9e926a9c218c166a254d57c120a2f7b963f04fe81fd3d45f35ed", size = 2625279, upload-time = "2026-04-15T20:32:28.256Z" }, - { url = "https://files.pythonhosted.org/packages/25/e4/fc227358013e8bce5896d4405ecc882520d4480da1c30efb6c0950e526ac/blastdns-1.9.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:fbd5f5cd402b3075254e03b608c48e25825ea806421437e74c5fc833716a86a6", size = 2593895, upload-time = "2026-04-15T20:32:41.373Z" }, - { url = "https://files.pythonhosted.org/packages/62/8d/45e3c76947052ce2c60d58944f40178ded356b4440f83007a159ab095bef/blastdns-1.9.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3c398d2c3780e50e1a12515e0ada2eb7c510e6d699ad60d6c6382352ba4a5db5", size = 2670367, upload-time = "2026-04-15T20:32:54.542Z" }, - { url = "https://files.pythonhosted.org/packages/77/ac/482fd604a13e05ab3e0efa84336fa39c5c391addf8308b16ee9109f67fd0/blastdns-1.9.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11057e252c5545f1f89a4f5413a396366686799dd48b11e7c6dcad44d05df47e", size = 2684704, upload-time = "2026-04-15T20:33:09.845Z" }, - { url = "https://files.pythonhosted.org/packages/fc/67/2998dd8a5239a7afc223f4ec270048d47af5e10bb996d045c3e6e5580433/blastdns-1.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:a0dc5dd486fec357fbcde1ff2f4dd3bcc4baa02323d46cc749c9a8f0fa810435", size = 2657425, upload-time = "2026-04-15T20:33:24.357Z" }, - { url = "https://files.pythonhosted.org/packages/47/49/2b51f2ba622a1723b75411fd2384d26a4d55576e0f642019fcba1ea5498a/blastdns-1.9.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:5bf0c8445d9d4cc0ce7668ddb2358e5c90ce711eb2001d5fd742fc30bdf6b9ff", size = 2443445, upload-time = "2026-04-15T20:30:59.07Z" }, - { url = "https://files.pythonhosted.org/packages/f7/60/490cd9f4b40cc9ee0de49252f278798e0d020f002f2c3bd93669096050f5/blastdns-1.9.1-cp313-cp313t-manylinux_2_28_armv7l.whl", hash = "sha256:0d3f1498eb37543ecbf92719aae8eda22c4cabbf14e1a1ba6c6a3e5a9157b2df", size = 2319663, upload-time = "2026-04-15T20:31:12.808Z" }, - { url = "https://files.pythonhosted.org/packages/d1/6c/b801b2706677a62cdac1c3dd46d618f3b1b18bd26b21a2df3531ab559ff4/blastdns-1.9.1-cp313-cp313t-manylinux_2_28_ppc64le.whl", hash = "sha256:1be2eb559002355311fd9f584a3ed4dc4b9b5fa4255864f39779203ad3d71228", size = 3521129, upload-time = "2026-04-15T20:31:27.637Z" }, - { url = "https://files.pythonhosted.org/packages/71/83/81f22f8b06fe06e7cc1021d6d84a1f570300c7d3f7f1e8da94617d68aba6/blastdns-1.9.1-cp313-cp313t-manylinux_2_28_s390x.whl", hash = "sha256:8b207ea568b9dfc62e0fc5a848afa15448311ec3f2dbcc519327399f6604f087", size = 2512375, upload-time = "2026-04-15T20:31:41.616Z" }, - { url = "https://files.pythonhosted.org/packages/59/6c/ff24de4e418c1b683db47975af30ea600deb96c6e8ea2163470b57d8ad85/blastdns-1.9.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4f4f11a2fa4b9aa7d735252e4cfa515e51330d019065ed575a71ceb645a7fc13", size = 2621796, upload-time = "2026-04-15T20:32:29.51Z" }, - { url = "https://files.pythonhosted.org/packages/52/53/60620d5ecab72926afcb197476c765f10d690b574786c1be8d3b8f5465a0/blastdns-1.9.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:072b0f20ed5a23ce9a69d93fc0f4f840ca03e92a02290640c32c08e51e85e09a", size = 2591749, upload-time = "2026-04-15T20:32:43.158Z" }, - { url = "https://files.pythonhosted.org/packages/6e/2a/d0fe319e0aa0a79346b0107a339724489feaedd266fd209374f4731f6abe/blastdns-1.9.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8985b6a5d88c57d9d3b566551b37a09349c0a30234167148c3d80423abbe9c8c", size = 2668454, upload-time = "2026-04-15T20:32:55.824Z" }, - { url = "https://files.pythonhosted.org/packages/f7/19/541a831d645ecede4f91fa6441e2eef23fbc3e0c7c51830f2f0a40bee609/blastdns-1.9.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:306e7ba2b9a0a3a9a38086ee8d187a33aae5979b588ad80bfb5ecd01633c298b", size = 2687970, upload-time = "2026-04-15T20:33:11.578Z" }, - { url = "https://files.pythonhosted.org/packages/85/c8/d784d1df9d930183b991822954dc31aeae2b3947147ce9d53d12eb7a3822/blastdns-1.9.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:337771fc54faafbdda2206426c362839961253a4959135767e9014ff4db879ca", size = 2650821, upload-time = "2026-04-15T20:32:21.943Z" }, - { url = "https://files.pythonhosted.org/packages/b8/98/0b3d1d6b5ff0cf1c404a9b8c7948102d724e767cf22ddedf9a3bd239a1ec/blastdns-1.9.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6015697b4fe9dc4ff2bc397367ae726c6e6cd87bdb86e1d6b5c6856d0914beb7", size = 2517319, upload-time = "2026-04-15T20:32:15.85Z" }, - { url = "https://files.pythonhosted.org/packages/b8/8b/ecc1e80fe8aa9ac5677c62d9c6d7bb6c2c68025d99f2ff81dc6be5eb907f/blastdns-1.9.1-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:01b2f1da7fe1fb44fd1af52c337979bb7284b727f971d83aa761a4887a22adb2", size = 2446094, upload-time = "2026-04-15T20:31:00.43Z" }, - { url = "https://files.pythonhosted.org/packages/1d/9e/0ac6101f9b597c61d3997623c0a3e5e7be4071461c8a2986851f3739da32/blastdns-1.9.1-cp314-cp314-manylinux_2_28_armv7l.whl", hash = "sha256:147d815a686771709c96803319233218310efb0247644df4f0d6958cb4f9b65c", size = 2320171, upload-time = "2026-04-15T20:31:14.233Z" }, - { url = "https://files.pythonhosted.org/packages/10/e4/d195149ab6402b157474ee93212b393a644eedea5f005a2aa0e650c3e4bb/blastdns-1.9.1-cp314-cp314-manylinux_2_28_i686.whl", hash = "sha256:ad4d1bb7b9fa57a7aec368a84d6830663b8f16550769edf273cf21e992425824", size = 2551099, upload-time = "2026-04-15T20:31:55.683Z" }, - { url = "https://files.pythonhosted.org/packages/c8/b0/c711045dd0ba9f15938930f75c66e57c6ae4962c821f6b0f43364d3799ff/blastdns-1.9.1-cp314-cp314-manylinux_2_28_ppc64le.whl", hash = "sha256:f2af21539691a44409020ef2260b63ac8f4ae0ee838a8e21ba51d3d480c2015c", size = 3519937, upload-time = "2026-04-15T20:31:29.379Z" }, - { url = "https://files.pythonhosted.org/packages/4c/72/2a0d2f09018e3461b16c5d64a72b7660dad97cc2eb1e0479f11a705f1db9/blastdns-1.9.1-cp314-cp314-manylinux_2_28_s390x.whl", hash = "sha256:c110f4de3839e204dc0ec97da33d01cdc78c9ffde991f583b735bf9df4c90b8d", size = 2508859, upload-time = "2026-04-15T20:31:42.963Z" }, - { url = "https://files.pythonhosted.org/packages/26/f6/5c1d954dfc4d6f420dea661dc7eb228f2fd6d31954e3d492888be426f97c/blastdns-1.9.1-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:743b1501d9a625f6d0dd8ed668fd96241646bd6f70399992af43f8fef5fc42d9", size = 2439876, upload-time = "2026-04-15T20:32:06.166Z" }, - { url = "https://files.pythonhosted.org/packages/1f/71/c5a3837136449a1f5f3f14fb251fb318d48d5611755fc972fc2868473fbb/blastdns-1.9.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4c4b0b8ca367405807b14d63f57805ca2af21c651afd07feae5db32fbaaa63f7", size = 2624052, upload-time = "2026-04-15T20:32:30.895Z" }, - { url = "https://files.pythonhosted.org/packages/59/e5/9ee26448806cc548d147a32811b406646c1530bdf66f9ef42bd232b95dfe/blastdns-1.9.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:8f4141a04a887e45f77e92fe5ae290c017275985b96455c2aa05084220b12423", size = 2594969, upload-time = "2026-04-15T20:32:44.441Z" }, - { url = "https://files.pythonhosted.org/packages/48/81/e9c759fc353a17b3256994f23b08d5c4f147bd0eab2e8522434548abd50c/blastdns-1.9.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c0247ea74dcb9cb22fc319ab15518a6b2cd8e147b560e6908acaa97f4eb9912b", size = 2671068, upload-time = "2026-04-15T20:32:57.332Z" }, - { url = "https://files.pythonhosted.org/packages/10/9a/5dd9a17edbee1bfb996d289e5b1bbd2e1446644c02da8fe71925c4a6c828/blastdns-1.9.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9131f9c496a6e67b46b5184fc49dc691340c1267982808460d3fdc9fbf00fc0d", size = 2689854, upload-time = "2026-04-15T20:33:12.962Z" }, - { url = "https://files.pythonhosted.org/packages/2a/82/62f420b248e485b222a7ad714d94d814e9d8ad90f4112fbbdf4d31d5f557/blastdns-1.9.1-cp314-cp314-win32.whl", hash = "sha256:f13198d57ac8606a542f273ffbeec0cf4d1b97ec5c367d217fdb7b25715888a6", size = 2206019, upload-time = "2026-04-15T20:33:27.428Z" }, - { url = "https://files.pythonhosted.org/packages/41/0b/6db2d905fce282e099b43a93f4ed7bdf586d55f9c79a6e8cf446364981d3/blastdns-1.9.1-cp314-cp314-win_amd64.whl", hash = "sha256:b1301428a30b6ad1137f47470f882da604329d6a566708045106e06c3cc5b13b", size = 2656519, upload-time = "2026-04-15T20:33:26.101Z" }, - { url = "https://files.pythonhosted.org/packages/53/ea/b5ac534f37548ae80edfb915c7a1cbd764fb92ab62cc87d360b8f951d11e/blastdns-1.9.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:e5d4e64d0cdfef7e31d1e4c9124cc901d801fd1925c0add743dd4b5dac5ab48d", size = 2445855, upload-time = "2026-04-15T20:31:02.055Z" }, - { url = "https://files.pythonhosted.org/packages/53/15/43ce6b8ef5ba5e5d1ffb9ad4dbf9148ea2356e556cb1d3925ffc35fcd4d9/blastdns-1.9.1-cp314-cp314t-manylinux_2_28_armv7l.whl", hash = "sha256:9078d39a13c467185dbe205b3121ef6667b452612e64a9a83670d38a4ff8f280", size = 2320251, upload-time = "2026-04-15T20:31:16.119Z" }, - { url = "https://files.pythonhosted.org/packages/a9/e8/52dc13fd874bc0cc02b850ae87781bd53b1bdb6f6efa2b6b769a4bd16106/blastdns-1.9.1-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:712ff165713d9624a0811d94e2a555af15339f11df7fae9535aebd0de3577730", size = 3523183, upload-time = "2026-04-15T20:31:31.017Z" }, - { url = "https://files.pythonhosted.org/packages/fc/be/f129125b775e40c17624fb97550393528fa69dbb945f56fa01ba4cde797e/blastdns-1.9.1-cp314-cp314t-manylinux_2_28_s390x.whl", hash = "sha256:c31fb423922e491d87435d497a3ad571fdd1200b9d9a51322fbee2aff0275d15", size = 2512967, upload-time = "2026-04-15T20:31:44.564Z" }, - { url = "https://files.pythonhosted.org/packages/5b/fd/38b3d4986f984eb9f61987f312fb851c3c7943678f7685ff1803ac061eb8/blastdns-1.9.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:269e2f84e83c5a4c48e05c8222670289935ef9504184f6742e8049ded205d67f", size = 2622821, upload-time = "2026-04-15T20:32:32.222Z" }, - { url = "https://files.pythonhosted.org/packages/a3/84/0f0a9d767389b43edeae21f2665c5c745e2e4a056c697515962a7b4fe463/blastdns-1.9.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:b2c751284fe68dcf70e3f9de11c6c7cbe228473c152563ad0a781fc4a95ed484", size = 2593955, upload-time = "2026-04-15T20:32:45.822Z" }, - { url = "https://files.pythonhosted.org/packages/8d/53/04ece144df58ae2af74607fa63f38d3345f56ab32e3fce31e99d2b358019/blastdns-1.9.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:c3925dfff6f2fb7dcaa514ee3730a55d0824dce0023038cabf69f9e341d5a632", size = 2670065, upload-time = "2026-04-15T20:32:59.942Z" }, - { url = "https://files.pythonhosted.org/packages/bd/92/6ae1976ec0a8d1b4b7946c3203cda4637bb5a261126eb8f46004d2af0297/blastdns-1.9.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e163cd43d5206e224e8e5ef5b18af634e97d5e90f535f0906af783e13b7fcec5", size = 2688595, upload-time = "2026-04-15T20:33:14.533Z" }, - { url = "https://files.pythonhosted.org/packages/88/f0/c44a8092fae154af9fc74d21ae3639a1544500c0a0516dc31a8a086d3ad4/blastdns-1.9.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:03f5dd6a4dfa45d5972a3be01f704264b43bb6d02b86b7eba132070c9f18f286", size = 2452601, upload-time = "2026-04-15T20:31:04.974Z" }, - { url = "https://files.pythonhosted.org/packages/08/3c/d3136a70d9b8dc3349a3a11753b5cd459168fe244ae983d0d5ba81e2d6be/blastdns-1.9.1-pp311-pypy311_pp73-manylinux_2_28_armv7l.whl", hash = "sha256:1e2621a878baa1be84b910fb2b7d492184f484988f5d572746b2e555c89926d7", size = 2322996, upload-time = "2026-04-15T20:31:19.091Z" }, - { url = "https://files.pythonhosted.org/packages/64/a1/3dea21c2a56f85e9ca11b97cef0282b40737c9c1f35769ace9c4501aa790/blastdns-1.9.1-pp311-pypy311_pp73-manylinux_2_28_i686.whl", hash = "sha256:356fde1c078710dd93d627282c18945390d74cca7cad7c334a50624ebb7c9f9d", size = 2560325, upload-time = "2026-04-15T20:31:58.318Z" }, - { url = "https://files.pythonhosted.org/packages/4a/9f/46ba0541a4f2c9f473b6841983a5760dd18462ddcf702f6569328aa9de01/blastdns-1.9.1-pp311-pypy311_pp73-manylinux_2_28_ppc64le.whl", hash = "sha256:7d189845c2982e354127426923fdda4342cf083ce5b75b4f8276ca7d9bfc196a", size = 3522302, upload-time = "2026-04-15T20:31:34.43Z" }, - { url = "https://files.pythonhosted.org/packages/b9/9d/e2fdd3f5bfddf50b37d243fcfced48a3352d1e573c7f025229c67e3bbf00/blastdns-1.9.1-pp311-pypy311_pp73-manylinux_2_28_s390x.whl", hash = "sha256:1b41c108de569a822697dab53e15e2bc30fb59d3546c172903f9e66c19826282", size = 2510299, upload-time = "2026-04-15T20:31:47.831Z" }, - { url = "https://files.pythonhosted.org/packages/fc/10/a981c619876586b6b4a9763e80eea405ff7f3917ab3b5d35bc9db2565123/blastdns-1.9.1-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fbab1fe79723547ee03c861368769e38605e87cfb8be2858f60ad497aaca2520", size = 2444480, upload-time = "2026-04-15T20:32:09.231Z" }, - { url = "https://files.pythonhosted.org/packages/45/0d/7451f1a7bea17f39b25fe3ddbc74271c31c0b8b81b84cf5fb5b8f01ba1ed/blastdns-1.9.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:378e95b2723eabf23ffb04ed0bd326aa5661d4ae3396a8326ad2ffcc324d4bff", size = 2629253, upload-time = "2026-04-15T20:32:35.696Z" }, - { url = "https://files.pythonhosted.org/packages/b7/a1/ef1c8049ada69185f6276e42c33e50d18cea464037195bbf9260a3da8d64/blastdns-1.9.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:e4facab544265314dbf212ee015138ec823529e006b306e030ad5a4c2d4a6ec3", size = 2598351, upload-time = "2026-04-15T20:32:48.896Z" }, - { url = "https://files.pythonhosted.org/packages/d9/b4/dbc258187d079a86487f9b26761430f8f4ff531814d710caab66b388f402/blastdns-1.9.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:62269fee131b31f401dabe16f427dedf4ac6c0c5d7a302a52a7d685456772385", size = 2679763, upload-time = "2026-04-15T20:33:02.936Z" }, - { url = "https://files.pythonhosted.org/packages/1e/01/480f3c5e54abf85b6accdc25635a10428720f9f2fa6b95c89d59e35f2912/blastdns-1.9.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:64581573a438d95f51e297aa6790a85f49ed00fcb2afdf5a459b911dce970619", size = 2694305, upload-time = "2026-04-15T20:33:17.253Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/b3/e7/bbb86377c300f03e40ecebc8fcd01c2510ffde5127f3713ca08a681d1570/blastdns-2.0.0.tar.gz", hash = "sha256:b1155d642a67a468b313f493ee337a7655c2f190adc1c25dad174555012ac213", size = 168985, upload-time = "2026-09-22T15:09:43.345Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/fb/d22c181bf6019998d4485e90b392c585fd050befea52ae4d9887a9d1ddb3/blastdns-2.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:fad0755c2e9586873ddb63221e3c3bfa892c130f154e45ccbbda0b72563ba5b2", size = 2718601, upload-time = "2026-09-22T15:07:19.157Z" }, + { url = "https://files.pythonhosted.org/packages/59/72/b70ba280a300c6c168558a6a743b76dc9169baa42a2257737300b873c2b8/blastdns-2.0.0-cp310-cp310-manylinux_2_28_armv7l.whl", hash = "sha256:ad1fea0165732ac8d7b06db29ef80c817753ea6ba3fc592e40d9ee412044a4d1", size = 2604121, upload-time = "2026-09-22T15:07:31.944Z" }, + { url = "https://files.pythonhosted.org/packages/7b/6b/db1f1b3c85859a54349806b8fcdd99c4539ec6319a84ecb4cf315f981941/blastdns-2.0.0-cp310-cp310-manylinux_2_28_i686.whl", hash = "sha256:c176755e9b1bdbe5a35bd88a5fc5dc96e92778ed53fa4cee3dc8b5f15125c3f9", size = 2854822, upload-time = "2026-09-22T15:08:12.185Z" }, + { url = "https://files.pythonhosted.org/packages/06/73/486cd65fd61e3ab3c8308c56188ccd0bd8e473d2e9149281b03d47d61f12/blastdns-2.0.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:6826b3cb252de74f1f2b9aba810e8c9adb48e12d31aa89e31c2df6809b0a0fca", size = 3871364, upload-time = "2026-09-22T15:07:44.423Z" }, + { url = "https://files.pythonhosted.org/packages/3b/81/cc06edaf6f3576275d428c3bfb73099a6c8e73c7cf48bcadbabb456e8f6c/blastdns-2.0.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:142e898d56b4fff83fa7c72e93d251c0d28d1f07ae1fab40cf3b1286efe7c980", size = 2781192, upload-time = "2026-09-22T15:07:59.078Z" }, + { url = "https://files.pythonhosted.org/packages/b6/b5/aeab817311a16be5558af6d3d787c605775f7ccaaf761b8bc5f5b22f564e/blastdns-2.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:c50f2bb010807d91fe1cd7fde26a0f304e71e19ed86c95500cc9d067cc60e861", size = 2648527, upload-time = "2026-09-22T15:08:25.548Z" }, + { url = "https://files.pythonhosted.org/packages/8a/d1/50e9bd6b42b05ad9dfb1531972aabb20157329fa89507cf59264f1963040/blastdns-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3bfe7263ba7a0fd0755fc7b66fd4982bb13984ef25f3a41e98b7c9b286c25006", size = 2900456, upload-time = "2026-09-22T15:08:51.424Z" }, + { url = "https://files.pythonhosted.org/packages/c1/0e/6e709d5013948000341e5c36bbc56ee74d097560a036279d490f22b90445/blastdns-2.0.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:b974a43a8bd36751d1ed381ec9ef2bdfca99a88c7beca06adddf0d7854de9a10", size = 2876959, upload-time = "2026-09-22T15:09:04.375Z" }, + { url = "https://files.pythonhosted.org/packages/21/b3/b86c2e00f916674a3e5540bcf03231c503a6ac039dff34f03c599c447a80/blastdns-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4edf4a8ba91bb8561dc4c643cbb667d0a97cf6fd9d944be2dfe1eda5859beaa9", size = 2968009, upload-time = "2026-09-22T15:09:17.618Z" }, + { url = "https://files.pythonhosted.org/packages/e9/01/8ad0f68020adbe7b83e47352a7ed4476e54231e66ea809cf1b2bb240a9af/blastdns-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7d467720a373d8f7f575b0527bad703024ca9e4f0f10af76e4f5584eec56cd86", size = 2965991, upload-time = "2026-09-22T15:09:31.163Z" }, + { url = "https://files.pythonhosted.org/packages/57/66/ba1c821659c0b243845372988db3367c7bf5344c3719e30d03c793898998/blastdns-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:838358819ceaa1766e92135cca04e15c615ba6495ad8769d77d31a1156144220", size = 2896002, upload-time = "2026-09-22T15:09:44.507Z" }, + { url = "https://files.pythonhosted.org/packages/e5/46/7f577bcd9147c92d9d96879da0574333e34998166d1869167a02b1e4dd8e/blastdns-2.0.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8351ace2db652948ee353f258918b938b173333aba31c595107ce29b441a0847", size = 2842785, upload-time = "2026-09-22T15:08:44.963Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fd/198a90e03539291cd2439724fbdcde77887f46d7165afe037f592a2555f2/blastdns-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e81f8e11b73f4f1a909169f24b3026e11ad8bbad808b067663f1dfec8677dc0d", size = 2702746, upload-time = "2026-09-22T15:08:38.516Z" }, + { url = "https://files.pythonhosted.org/packages/8e/98/3c85b5061d904e731fb9a8927db98090961ffacd1d3ded77a2350b9c6c6b/blastdns-2.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2d507c48d8d237f693af9af17694e65a4fdc14e559c45364e3467174c9dbce8d", size = 2718100, upload-time = "2026-09-22T15:07:20.844Z" }, + { url = "https://files.pythonhosted.org/packages/64/e7/dd5b5bcb300ec1f5c388a57ba1cb3258be505099bab1f2740faf37d9747c/blastdns-2.0.0-cp311-cp311-manylinux_2_28_armv7l.whl", hash = "sha256:73bc4fd4dfe1f9c8b64a0166c678b945118402b9cda6da7d238454b893f2db16", size = 2603842, upload-time = "2026-09-22T15:07:33.306Z" }, + { url = "https://files.pythonhosted.org/packages/65/c8/96d27e9800b921b9e952d4e54de0f7441ee585c92bf0644ac1373104ecbe/blastdns-2.0.0-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:eeb819c1819a864ed806d9b3aebf574aa53a0cad14f3ba395c6d295e5eff076c", size = 2855081, upload-time = "2026-09-22T15:08:13.764Z" }, + { url = "https://files.pythonhosted.org/packages/7e/57/fa450c448b7bb1336ea1d5bdf2b36cecbe5f0301b924f035e5c9a7df12dc/blastdns-2.0.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:09deaaf5f9d9beb76db637b76ef0f27695108cd17aeab6fd79311005cea90dc2", size = 3869873, upload-time = "2026-09-22T15:07:46.037Z" }, + { url = "https://files.pythonhosted.org/packages/20/7a/1cb6410739801a4beb543137cafff3bb4270ac1e508c4839dd6432987699/blastdns-2.0.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:43514aed8c933d553a1ead0b5d53b258fe99ba8409d898b6d50569362e44b2a8", size = 2781417, upload-time = "2026-09-22T15:08:00.736Z" }, + { url = "https://files.pythonhosted.org/packages/d7/d4/317a1adcd9d752fb54621cebe5ceff0b27d9cd8a9315be8ff7d931566e9b/blastdns-2.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:51b4692987c15d0d1884b682e9ba8b2f285abc5248e0b953cee506e9416f054b", size = 2648170, upload-time = "2026-09-22T15:08:27.048Z" }, + { url = "https://files.pythonhosted.org/packages/67/7c/ce4eedbcdc8a32193780b575705fce72de34a5aa987c0e96887a5a1644b8/blastdns-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a7e051d4d6b3ae09a17af99b31a21f702c6fe3a10bc39dc029f7a5ec57e1ce84", size = 2899444, upload-time = "2026-09-22T15:08:53.022Z" }, + { url = "https://files.pythonhosted.org/packages/b9/ba/01340b06e3f67bfbcecbed80af3a04a38d136f886d327241adbe7c3f57dd/blastdns-2.0.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:b327ee5564166eae8ce6d4af25330cd2345001702d65addb6a2ec5ca51f8da2f", size = 2876108, upload-time = "2026-09-22T15:09:06.132Z" }, + { url = "https://files.pythonhosted.org/packages/fe/63/f43585828d0d632953957a7931222bd24f564019aa63839bd0d93236a3db/blastdns-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:14cdf1c18d1f8030c2dcf9a45ab7afea738de99f9da53a1de6de058e8138a5cf", size = 2967997, upload-time = "2026-09-22T15:09:19.468Z" }, + { url = "https://files.pythonhosted.org/packages/9f/9b/b94f746d2e4a584d4b6f28a917ba302763fc9c80b408e2d47d1049666860/blastdns-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:97c7de160c0d9da917cde3a6329202804b61e895c4dd0b24141cb0de1f61bee0", size = 2965137, upload-time = "2026-09-22T15:09:32.611Z" }, + { url = "https://files.pythonhosted.org/packages/96/60/58693d07f674ad550c9cf06f12db1de2efa31efa6371d4de30abfdc180e5/blastdns-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:2810a6f6464130d6a8dbc8b7e97f7d8c58faf3e1880dc36202a54265827fb8ac", size = 2896519, upload-time = "2026-09-22T15:09:46.218Z" }, + { url = "https://files.pythonhosted.org/packages/f9/96/476d0428662b4c858ccc358b5fa460d3aeccab2ee6d53452f185ecb1a588/blastdns-2.0.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:310b0841bed2408fe5572da3d7cc31121ebd143540b8d4eee7d2e72379093db1", size = 2835448, upload-time = "2026-09-22T15:08:46.526Z" }, + { url = "https://files.pythonhosted.org/packages/d4/11/d01a7d84d31c6118b517ce95711605aed53a11b432258607113b420a7f7e/blastdns-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dc84ea39d619d2500f16ff922a0c29d2be6733750532a878037540a5611f149c", size = 2693129, upload-time = "2026-09-22T15:08:40.261Z" }, + { url = "https://files.pythonhosted.org/packages/98/f8/1738e7c407c4fff4b5f060105249a3db5b14fc5f9a545399cc9881d3a97a/blastdns-2.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:571defd1b5e2df3a503d8662a48bb06694d8e67ac8d45d1cb041f99ce6ad6a3f", size = 2709065, upload-time = "2026-09-22T15:07:22.258Z" }, + { url = "https://files.pythonhosted.org/packages/2f/8d/d799e607f84f3c4b889fe981fdb10bfc2b061fec700eee5e5e21e5b0c6eb/blastdns-2.0.0-cp312-cp312-manylinux_2_28_armv7l.whl", hash = "sha256:14b6a580c1ddc60a92631d66949d87ce2a73fe757e6397996f947f1a6ac767f2", size = 2602900, upload-time = "2026-09-22T15:07:35.027Z" }, + { url = "https://files.pythonhosted.org/packages/29/74/cc681a2e562ae0493cb80cb1330d7e88c65a00264900509bdb8a0f87a90d/blastdns-2.0.0-cp312-cp312-manylinux_2_28_i686.whl", hash = "sha256:c4be35b13ca6c55181a970a80a9c479143bf836f383e9ac9d836e0b4b11d3a8b", size = 2852808, upload-time = "2026-09-22T15:08:15.227Z" }, + { url = "https://files.pythonhosted.org/packages/19/c9/57eaa902fc0c658c274e9a230ac9dd948586ca7404885fe3e831d2928b07/blastdns-2.0.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:50d109ee31b02fcd5cb2eb3fb15f18e023e7eaaae33b8ec16a2c00dc6282faa5", size = 3864668, upload-time = "2026-09-22T15:07:47.626Z" }, + { url = "https://files.pythonhosted.org/packages/ed/74/26cf55a0b277f886315a4bdec91ed27d8644363f3152b7b8eb8f31749e08/blastdns-2.0.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:e0d44c234e8a248039d236ec50a93510929119bca956ebf99e5711394c7d30bb", size = 2777770, upload-time = "2026-09-22T15:08:02.317Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ea/b4a90807a17738c9d2090017e48ed4c80713f37d3704ae6601f79ceb65ce/blastdns-2.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:519d854a18987bc5d9c27b250cef80927ba6424751e20bf3f70e9eceb62a5793", size = 2644016, upload-time = "2026-09-22T15:08:28.446Z" }, + { url = "https://files.pythonhosted.org/packages/65/45/4ddda1c1227f42480308571afd0f0db1da6a3fda7340872c888833e9a4e3/blastdns-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8eefe01153faa9e5eaea0b20177a1f93664c08b74204430b11c7a649df5d674c", size = 2889039, upload-time = "2026-09-22T15:08:54.62Z" }, + { url = "https://files.pythonhosted.org/packages/9b/a3/38fe980be309143fa70c0e04a1555812977a394deb4f62f04c3c849a2d89/blastdns-2.0.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b00c58ae5a34348e4abe9c2a5ec7ca2f57a1f606f1d530fc8f086e89989df651", size = 2876735, upload-time = "2026-09-22T15:09:07.75Z" }, + { url = "https://files.pythonhosted.org/packages/a3/80/f769f46e4e9e7287d5c2635921bede6c1facd59ddbf0a6e49ba1fdd7db57/blastdns-2.0.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9b4fe18afb843d53415a6d29e9ca2a18826b5b99976cb26e8bcd47e827101a1d", size = 2960507, upload-time = "2026-09-22T15:09:20.971Z" }, + { url = "https://files.pythonhosted.org/packages/a1/bd/9309e53b152ed2828a0c78272aeb65a0919e69537565d07d0e0649c01371/blastdns-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:570c37c519c08a2dcf4d3a5e79146be6e266c89984b3f090f6950ba9dd15ccea", size = 2959800, upload-time = "2026-09-22T15:09:33.995Z" }, + { url = "https://files.pythonhosted.org/packages/20/1e/72843915ed817d0e82cf6e9130227beafeab39e4ae8ddb7aec774c4cd560/blastdns-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:ca4e0eb101eae9dee771c041db9e9101c8f0611f3d6cd58da35afbea3862a3f6", size = 2893234, upload-time = "2026-09-22T15:09:47.903Z" }, + { url = "https://files.pythonhosted.org/packages/f8/39/a5db8864bb6229a1e93e570e7360eb5457660a3dfb8c17dcbc6bd48683f1/blastdns-2.0.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ce92a5a7145348a20e3337ed6a6dc80ca296d7ba087927c6bec0ed97673f236e", size = 2835533, upload-time = "2026-09-22T15:08:48.212Z" }, + { url = "https://files.pythonhosted.org/packages/44/b0/a85efee02d4722ac41edf1998a2c6034a63ac43682692efa0a88ee3e2a72/blastdns-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:13b2e161f1f99f4fa73e1df4ec16b7cd86b29a5f5e20fbf368849381753132cb", size = 2693063, upload-time = "2026-09-22T15:08:41.623Z" }, + { url = "https://files.pythonhosted.org/packages/85/67/74bdf494f48c2f6bc256a199ac5823267da495cb99e6c22b8491f8df6c11/blastdns-2.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:6d087c8352c31a25adcf11d1e3a3ea50289513560ca5807af8cb00dff4ff3430", size = 2708994, upload-time = "2026-09-22T15:07:23.729Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c4/7a6579d6cd9851eb07fb86b706dfa83d26d42128e6fe45541343dc63147f/blastdns-2.0.0-cp313-cp313-manylinux_2_28_armv7l.whl", hash = "sha256:1f464664df7e8f924ee486b6a1ab50bcf720a902010f140938f84d518d92820f", size = 2603021, upload-time = "2026-09-22T15:07:36.747Z" }, + { url = "https://files.pythonhosted.org/packages/2f/21/a32d9b19857f5ce1b0714a4c740146b4e93cfec09d741a58d057764b7d01/blastdns-2.0.0-cp313-cp313-manylinux_2_28_i686.whl", hash = "sha256:a036964128a1b30ab0594978c9acb13e431b6e6df5f04270497cc34be607f9c3", size = 2853115, upload-time = "2026-09-22T15:08:17.537Z" }, + { url = "https://files.pythonhosted.org/packages/33/06/5b2705ac73a09c4d5150c4577b828cd45e4031de2da50c8c41f400550319/blastdns-2.0.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:ed6fabb7ce356056899ab820786bcc9bb28e023d0af9ecf11e12bd3dafb9cfc5", size = 3864541, upload-time = "2026-09-22T15:07:49.339Z" }, + { url = "https://files.pythonhosted.org/packages/a4/59/864b59824c63cab452b92dedb826459861ff70409485973ff6760ed42b63/blastdns-2.0.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:8db531d4abe616a58a466f022990c67b056b0a37e7489eb43fcccfd2d886f9a6", size = 2776027, upload-time = "2026-09-22T15:08:03.944Z" }, + { url = "https://files.pythonhosted.org/packages/fa/f2/c61d995b71506596b771b8b664db4d69a57e59b6e0fe52b71bcebfd428b3/blastdns-2.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:60197e85dd2eba9edbf3d0e55894d1d65bc5236c7558497b0881da0dc6e48211", size = 2643639, upload-time = "2026-09-22T15:08:30.125Z" }, + { url = "https://files.pythonhosted.org/packages/eb/e9/10ab9b68e74922bd05d8637984f83ce80615850edc779863b27adb6875c7/blastdns-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5a38290f6003cb883d91378cfe6ac5ac0e3b9d9fb13f94d70e92eca209f82dfe", size = 2888146, upload-time = "2026-09-22T15:08:56.314Z" }, + { url = "https://files.pythonhosted.org/packages/27/d1/256835b30033bcf2ae761b20b6522a9923382acd4baf97bf8c09cb56f300/blastdns-2.0.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c3b020008641e5047aad39b434ac6921022cd7c089ed110ab85bfbe271f9665d", size = 2876899, upload-time = "2026-09-22T15:09:09.429Z" }, + { url = "https://files.pythonhosted.org/packages/44/e9/ac0434e31af4300395ae6b00d88f88cdcf73c15ac227e6a5b856c00289d3/blastdns-2.0.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5c996778b8a70169071e3110087ce6111bcb4816c9fbf1b51c16287a85333c13", size = 2961010, upload-time = "2026-09-22T15:09:22.529Z" }, + { url = "https://files.pythonhosted.org/packages/51/e6/93fc905327e850d163df1b0bba77dd59732721a11d5932ec45233a145047/blastdns-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dbe8e011c0f05930e5c24b16835bc67423d1f9d41f087b81bbc90e55920bcf19", size = 2959561, upload-time = "2026-09-22T15:09:35.626Z" }, + { url = "https://files.pythonhosted.org/packages/9e/eb/ba7d52bff317d26c197d2e4c9eb59ceb5c81c0554787f6bf89b67364bac8/blastdns-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c16298df3453f4f09cf5cba415c698178875710cd8fa0fe08a1826b5048ec5e", size = 2892801, upload-time = "2026-09-22T15:09:49.607Z" }, + { url = "https://files.pythonhosted.org/packages/2a/11/6b3fb5929c85041a0f76920504318c193189d468b2f7fcd4ff79c4fa0aa5/blastdns-2.0.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:01cf4b75298504d189d6a679e3d275c4d9028a7fffac5f6221734cd0af0d6c3b", size = 2835360, upload-time = "2026-09-22T15:08:49.91Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/6a54cf27db17576216fd80bc2b9f4b48b019293351a9554700501152ef8c/blastdns-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:705df149f190d22b0e1cca9277e99da262f27ef6838d8342d60c679be400a101", size = 2699592, upload-time = "2026-09-22T15:08:43.383Z" }, + { url = "https://files.pythonhosted.org/packages/75/7a/fa5f6bbbff97c3d95774ed1caf28117c3d5b35480fff2e4640bf9c702852/blastdns-2.0.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:c78f43fb9fd4d976d481917b1ff245126f0de679032c87eef4ee68ced2b792bd", size = 2712167, upload-time = "2026-09-22T15:07:25.407Z" }, + { url = "https://files.pythonhosted.org/packages/67/3f/1bcb164095cd9996df84f10b3da52d2e1f3bcc1620ed00262c7b7df2745b/blastdns-2.0.0-cp314-cp314-manylinux_2_28_armv7l.whl", hash = "sha256:5b369fedffb6d723912ba052b4d0400f7facf54d4db217bd9d26c738a7f6009a", size = 2603483, upload-time = "2026-09-22T15:07:38.392Z" }, + { url = "https://files.pythonhosted.org/packages/02/7c/ed7d1056edb3a242ece4e88c21eac107ebfb19d441171fc2b7b7d7b09ae2/blastdns-2.0.0-cp314-cp314-manylinux_2_28_i686.whl", hash = "sha256:24dfe8f9521d31e5b0ff4c676c611b0917bd2f002b246501556082b404842aea", size = 2853477, upload-time = "2026-09-22T15:08:19.144Z" }, + { url = "https://files.pythonhosted.org/packages/32/1d/9780aafd6dfe2bb52babf2007e83f0752559a668dfcfd71632e0d73a7615/blastdns-2.0.0-cp314-cp314-manylinux_2_28_ppc64le.whl", hash = "sha256:ac0d40ca563958ca3ddb3082058854b2e327d9b404eede5958c43e32418cf2be", size = 3864263, upload-time = "2026-09-22T15:07:51.096Z" }, + { url = "https://files.pythonhosted.org/packages/1c/d8/46767fdf13e0a9e6bf295a948b99480810f61c09608b303293df7b7ef456/blastdns-2.0.0-cp314-cp314-manylinux_2_28_s390x.whl", hash = "sha256:fd94b8f168f4023b6181e75a22874d53c38ae6cc9a56675e7b576234fa943e3b", size = 2777474, upload-time = "2026-09-22T15:08:05.558Z" }, + { url = "https://files.pythonhosted.org/packages/5d/52/b88f641f3ea172b999934dd19d8df3df14797ee7be047c528de773c879c9/blastdns-2.0.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:4e5f97cd6d704e5b92c583c6827a35d1f15166916fb60a65af9c1964239a8604", size = 2647384, upload-time = "2026-09-22T15:08:31.746Z" }, + { url = "https://files.pythonhosted.org/packages/89/d3/657f45d789ff685395b3c3370a3b8a51dc47a4ca9767ce71ec9c36d515e3/blastdns-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7d581b80ad528df9e2b7404102c5412aec8741da0d204e0d9adc7f61c72b61fa", size = 2891111, upload-time = "2026-09-22T15:08:58.046Z" }, + { url = "https://files.pythonhosted.org/packages/20/b1/32072d3e10c9fd85c00f720b43f1950447fbd86af616a056448bbe8b8e3e/blastdns-2.0.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:3a560128f38616cb47ec3330a11f3884f64e534188f6213195cd7e128913b0cb", size = 2878358, upload-time = "2026-09-22T15:09:10.963Z" }, + { url = "https://files.pythonhosted.org/packages/59/21/71fc77bd93672cababdd1027fe6c813823e3f1026b37d4ebf62b962fa766/blastdns-2.0.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:490c05c290d5156e8fadb870a6ad5794675c9f6de33f9633bd31dbe9bef7797c", size = 2961662, upload-time = "2026-09-22T15:09:24.328Z" }, + { url = "https://files.pythonhosted.org/packages/fe/64/c0f11dde18808af3cf18a6222ae58bbb25ea169cf47570bac9b85f1246b2/blastdns-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:fa43e94b57f2976de36f7b9f24de35cd7c0f6a246cbedb44511664b0e687c4e8", size = 2963656, upload-time = "2026-09-22T15:09:37.075Z" }, + { url = "https://files.pythonhosted.org/packages/c8/cf/4c8a373573d6687d5821cb9c9c175ec9004f130b1c85cb6eda78db428154/blastdns-2.0.0-cp314-cp314-win32.whl", hash = "sha256:327e67116350cc3766d15dc0807ef07a625eb3ae4bd0dd3da765d8210323ed48", size = 2396906, upload-time = "2026-09-22T15:09:52.88Z" }, + { url = "https://files.pythonhosted.org/packages/f4/22/10baffe980ef65e2ad1a6eb45545fc8a61cf412234b23259eeb809644811/blastdns-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:cffa9bb9500c8b488d8715b9ba09f6fe36b90fc83618932ad86f3fb563d5b559", size = 2898488, upload-time = "2026-09-22T15:09:51.419Z" }, + { url = "https://files.pythonhosted.org/packages/8d/82/bb64585c2938d81ea603735d90e2428f6c6b22a4d98c28c3d4af3b8547b7/blastdns-2.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:e4e557fe609bf57ca1252c86cddf410fc6b6a1fcf45f847bff798b82138cef71", size = 2719362, upload-time = "2026-09-22T15:07:27.478Z" }, + { url = "https://files.pythonhosted.org/packages/94/85/3953b5307aeaaaaaa132127c2538762131b0759a5ef36ae717492fb7c03d/blastdns-2.0.0-cp314-cp314t-manylinux_2_28_armv7l.whl", hash = "sha256:9006871ad8efa6d2054e7271ef08448dd3694241a7ecf36bdb65b06d2d986729", size = 2604717, upload-time = "2026-09-22T15:07:39.774Z" }, + { url = "https://files.pythonhosted.org/packages/95/ab/dbc3ab471ddd5aefea282af8589d4b9a390db42c42615968e7cd1d469905/blastdns-2.0.0-cp314-cp314t-manylinux_2_28_i686.whl", hash = "sha256:6a21aef4fd2e796ae4c954cab8e4fcad53fbc99f6073716be52166932a32b1fd", size = 2850986, upload-time = "2026-09-22T15:08:20.896Z" }, + { url = "https://files.pythonhosted.org/packages/c7/ad/737406e036cd1bc45a77d8ae8c32c3c29c4c3c28577136505706e6e01b44/blastdns-2.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:ffab9216b35af99483e8a2605925b97cbe57c7e7d362a9442df519f6a491ecce", size = 3872080, upload-time = "2026-09-22T15:07:52.761Z" }, + { url = "https://files.pythonhosted.org/packages/d0/a8/cbc40c1237222f8e11a0971a50d57b1b549dfe220717758eefac5728584f/blastdns-2.0.0-cp314-cp314t-manylinux_2_28_s390x.whl", hash = "sha256:72bfc9333131e3faff4e4d641549958a1f3a374e3c89610fc24ecff3a985edbd", size = 2784031, upload-time = "2026-09-22T15:08:07.051Z" }, + { url = "https://files.pythonhosted.org/packages/a2/14/c3e23a8c6cd4b09e8e1cc407b3d633bbfb261400f710e23f9a45f06f75b5/blastdns-2.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:5d7bb3c48ee3463ff06245ea34b6bb55bd4d9e21e48b9d7b250f67f329110817", size = 2649945, upload-time = "2026-09-22T15:08:33.933Z" }, + { url = "https://files.pythonhosted.org/packages/0e/98/c48494da5609525487fff8558d934b429b47df088c465d989419436fd0d1/blastdns-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:06e821966692495bfec0487c84da85178551958ca7dd8c2bc8007dfcffa476c0", size = 2897452, upload-time = "2026-09-22T15:08:59.613Z" }, + { url = "https://files.pythonhosted.org/packages/de/48/ec4b6367c776bf5517c9576f54f466d135cf9deee62a9ce2a5c59057db23/blastdns-2.0.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:fe50df4344c7a351652e854d2029bf6de74dd1a2c4b56fb4fe4a8d843b50007c", size = 2877475, upload-time = "2026-09-22T15:09:12.869Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/1158d43293a8238f166b1924d7a57a99a3d081853d486c15f2c2bf971b67/blastdns-2.0.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:138d9909f8a4c752ca7adc8617977ba24ef924ba4efd9a619be49adc6659c773", size = 2957210, upload-time = "2026-09-22T15:09:25.977Z" }, + { url = "https://files.pythonhosted.org/packages/51/e1/e09fd5b0a87742c72ba0628e1f55bf32423176311ce9467ee5d501e01c7b/blastdns-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:497358e7f978e3a43e0066d3a4e8987d70a238b7b9ad74315f26e9de2eaaa969", size = 2967979, upload-time = "2026-09-22T15:09:38.78Z" }, + { url = "https://files.pythonhosted.org/packages/81/59/9538910312e62a2cd624a301e85a67826d07ba7a3ce6a640f2165388c47c/blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:1f4d5889044de0d58e9f00a6e1049903083006f98feb57e5fd69f9ad1bf7c313", size = 2718275, upload-time = "2026-09-22T15:07:30.438Z" }, + { url = "https://files.pythonhosted.org/packages/58/eb/672e2448f77dd37b8a74c7d288e2c20a594bac00da31aff0b15587242d09/blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_armv7l.whl", hash = "sha256:7b8fa648c98e3cba68a88ec4705e3a3b7ced4363b9c7c79edc5f854b52f45c1e", size = 2603987, upload-time = "2026-09-22T15:07:42.755Z" }, + { url = "https://files.pythonhosted.org/packages/77/70/4ca1228e934041d003c121f316caa41b5a63f6a6080a179f77b18f24f5f9/blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_i686.whl", hash = "sha256:8061d1c164b7d640723802bcfe7d1802b8dc3dc00380f74ba22db9cc7de32e02", size = 2859104, upload-time = "2026-09-22T15:08:24.012Z" }, + { url = "https://files.pythonhosted.org/packages/0c/c9/0c6cb5420b860415e67bd8572b511f3573348f19b2a54f95ac96c184a773/blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_ppc64le.whl", hash = "sha256:9f6b0ae5df01ddb04893f39831c438588c075f77d2c56b7bfa26bff5a182e698", size = 3870589, upload-time = "2026-09-22T15:07:56.827Z" }, + { url = "https://files.pythonhosted.org/packages/82/a7/bfaee0af734f1752fd326f9d8be65cb1faac2822c8c032b481721b3419ed/blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_s390x.whl", hash = "sha256:97a007c61e1c76834edb439c0bca19fba88f4bf15bc7f04012fa4888ede05b2f", size = 2782517, upload-time = "2026-09-22T15:08:10.165Z" }, + { url = "https://files.pythonhosted.org/packages/3b/8c/ffd1dd369bfd2d86b51251c73b86a3f2fed675405e2d9a2bd850d120042e/blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c9b13c9347402f615597a6bf9e4add05b753f7bb24b344568ea83653a8c27b5d", size = 2649931, upload-time = "2026-09-22T15:08:36.826Z" }, + { url = "https://files.pythonhosted.org/packages/94/03/41545c2b853489ae08c5b1e9d543ca0db699544fa5f34ef46f19bca8f028/blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ebc1481d4f7d3472f9b704adbec97260a877943a34df3902f54f1dbcd0007a55", size = 2897847, upload-time = "2026-09-22T15:09:02.61Z" }, + { url = "https://files.pythonhosted.org/packages/8f/2f/983fbbb9552cf5ff77cbe0137b1e33c6dd27179556942a4bb981f554ed3b/blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:890bbf43f7f03e3fecab89f73dc4b0e787e15763c1ce3b1dd4cc41d450950be8", size = 2878200, upload-time = "2026-09-22T15:09:15.917Z" }, + { url = "https://files.pythonhosted.org/packages/c1/c5/679df448cb7495bb299e0c0d1ff01586a7696c8b60826d75d5ec3efeb977/blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:d6450e293fc1e7aa7ef6d0457a9d5bde609736215ef24c213dd6d73251b6f73a", size = 2970379, upload-time = "2026-09-22T15:09:29.58Z" }, + { url = "https://files.pythonhosted.org/packages/6b/5d/a85a96975a713264a588d1364882240c010ac8fce8537e7fd2f4da48e4f9/blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6afa71169e23fb47a179420af05d6dfd51c7062130e11a16e0ade1d302fcf45b", size = 2965229, upload-time = "2026-09-22T15:09:41.993Z" }, ] [[package]] From 3375824b0c63b0579c37fc6e4f5bb6458d09f403 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Thu, 24 Sep 2026 15:56:08 -0400 Subject: [PATCH 13/28] Format module_howto code block --- docs/dev/module_howto.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/dev/module_howto.md b/docs/dev/module_howto.md index 2c20253dd1..fb91c1b1fb 100644 --- a/docs/dev/module_howto.md +++ b/docs/dev/module_howto.md @@ -196,7 +196,11 @@ class MyModule(BaseModule): }, { "name": "Build masscan", - "command": {"chdir": "#{BBOT_TEMP}/masscan", "cmd": "make -j", "creates": "#{BBOT_TEMP}/masscan/bin/masscan"}, + "command": { + "chdir": "#{BBOT_TEMP}/masscan", + "cmd": "make -j", + "creates": "#{BBOT_TEMP}/masscan/bin/masscan", + }, }, { "name": "Install masscan", From 24bfa48cd5ab04065935f00e1e70addbefacbfd4 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Thu, 24 Sep 2026 16:28:00 -0400 Subject: [PATCH 14/28] Rename --custom-nameserver to --custom-nameservers --- bbot/scanner/preset/args.py | 6 +++--- bbot/test/test_step_1/test_cli.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bbot/scanner/preset/args.py b/bbot/scanner/preset/args.py index 2204274872..733ce14756 100644 --- a/bbot/scanner/preset/args.py +++ b/bbot/scanner/preset/args.py @@ -207,8 +207,8 @@ def preset_from_args(self): if self.parsed.no_proxy: args_preset.core.merge_custom({"web": {"http_proxy_exclude": self.parsed.no_proxy}}) - if self.parsed.custom_nameserver: - args_preset.core.merge_custom({"dns": {"nameservers": self.parsed.custom_nameserver}}) + if self.parsed.custom_nameservers: + args_preset.core.merge_custom({"dns": {"nameservers": self.parsed.custom_nameservers}}) if self.parsed.custom_headers: args_preset.core.merge_custom({"web": {"http_headers": self.parsed.custom_headers}}) @@ -433,7 +433,7 @@ def create_parser(self, *args, **kwargs): metavar="HOST", ) misc.add_argument( - "--custom-nameserver", + "--custom-nameservers", nargs="+", default=[], help="Use these nameservers instead of the system ones (e.g. 1.1.1.1 8.8.8.8:53)", diff --git a/bbot/test/test_step_1/test_cli.py b/bbot/test/test_step_1/test_cli.py index 1a2f09193c..8d9f673934 100644 --- a/bbot/test/test_step_1/test_cli.py +++ b/bbot/test/test_step_1/test_cli.py @@ -828,8 +828,8 @@ def test_cli_presets(monkeypatch, capsys, caplog, clean_default_config): stdout_preset.pop("description") assert stdout_preset == {"config": {"web": {"http_proxy": "http://127.0.0.1:8080"}}} - # --custom-nameserver - monkeypatch.setattr("sys.argv", ["bbot", "--custom-nameserver", "1.1.1.1", "8.8.8.8:53", "--current-preset"]) + # --custom-nameservers + monkeypatch.setattr("sys.argv", ["bbot", "--custom-nameservers", "1.1.1.1", "8.8.8.8:53", "--current-preset"]) cli.main() captured = capsys.readouterr() stdout_preset = yaml.safe_load(captured.out) From ace0370159a94aa43425c86142330c0d6688a023 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Thu, 24 Sep 2026 18:45:58 -0400 Subject: [PATCH 15/28] Restore dns.brute_threads name --- README.md | 2 +- bbot/core/config/models.py | 2 +- bbot/core/helpers/dns/brute.py | 2 +- bbot/defaults.yml | 4 ++-- bbot/presets/subdomain-enum.yml | 2 +- bbot/test/test_step_1/test_dns.py | 2 +- docs/scanning/configuration.md | 4 ++-- docs/scanning/scan_sanity.md | 2 +- docs/scanning/tips_and_tricks.md | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index f27d43b6c1..6df88e3771 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ output_modules: config: dns: threads: 25 - brute_concurrency: 1000 + brute_threads: 1000 # put your API keys here # modules: # github: diff --git a/bbot/core/config/models.py b/bbot/core/config/models.py index 62655ae60f..250f459666 100644 --- a/bbot/core/config/models.py +++ b/bbot/core/config/models.py @@ -247,7 +247,7 @@ class DnsConfig(BaseModel): nameservers: Optional[list[str]] = None threads: Optional[int] = None cache_size: Optional[int] = None - brute_concurrency: Optional[int] = None + brute_threads: Optional[int] = None brute_inflight_per_resolver: Optional[int] = None brute_rate_limit: Optional[float] = None brute_retries: Optional[int] = None diff --git a/bbot/core/helpers/dns/brute.py b/bbot/core/helpers/dns/brute.py index 04bfc1597f..32b7811023 100644 --- a/bbot/core/helpers/dns/brute.py +++ b/bbot/core/helpers/dns/brute.py @@ -28,7 +28,7 @@ def __init__(self, parent_helper): self.log = logging.getLogger("bbot.helper.dns.brute") self.dns_config = self.parent_helper.config.get("dns", {}) self.num_canaries = 100 - self.concurrency = self.dns_config.get("brute_concurrency", 1000) + self.concurrency = self.dns_config.get("brute_threads", 1000) self.inflight_per_resolver = self.dns_config.get("brute_inflight_per_resolver", 2) self.rate_limit = self.dns_config.get("brute_rate_limit", 0) self.retries = self.dns_config.get("brute_retries", 20) diff --git a/bbot/defaults.yml b/bbot/defaults.yml index df1e8e86c2..ec032f08aa 100644 --- a/bbot/defaults.yml +++ b/bbot/defaults.yml @@ -53,8 +53,8 @@ dns: threads: 10 # How many DNS records to cache cache_size: 100000 - # How many queries to keep in flight in total when brute-forcing - brute_concurrency: 1000 + # How many brute-force DNS queries to keep in flight at once + brute_threads: 1000 # How many brute-force queries to keep in flight per resolver (the politeness bound) brute_inflight_per_resolver: 2 # Hard ceiling on brute-force DNS queries per second (0 = unlimited; backoff is automatic regardless) diff --git a/bbot/presets/subdomain-enum.yml b/bbot/presets/subdomain-enum.yml index d0d6491e5f..d4230c3fc6 100644 --- a/bbot/presets/subdomain-enum.yml +++ b/bbot/presets/subdomain-enum.yml @@ -11,7 +11,7 @@ output_modules: config: dns: threads: 25 - brute_concurrency: 1000 + brute_threads: 1000 # put your API keys here # modules: # github: diff --git a/bbot/test/test_step_1/test_dns.py b/bbot/test/test_step_1/test_dns.py index 2f062d8019..aa5ac4524c 100644 --- a/bbot/test/test_step_1/test_dns.py +++ b/bbot/test/test_step_1/test_dns.py @@ -953,7 +953,7 @@ def __init__(self, resolvers, config): config={ "dns": { "brute_nameservers": brute_nameservers, - "brute_concurrency": 123, + "brute_threads": 123, "brute_inflight_per_resolver": 7, "brute_rate_limit": 456, "brute_retries": 9, diff --git a/docs/scanning/configuration.md b/docs/scanning/configuration.md index 2372295314..1bb3b62f70 100644 --- a/docs/scanning/configuration.md +++ b/docs/scanning/configuration.md @@ -113,8 +113,8 @@ dns: threads: 10 # How many DNS records to cache cache_size: 100000 - # How many queries to keep in flight in total when brute-forcing - brute_concurrency: 1000 + # How many brute-force DNS queries to keep in flight at once + brute_threads: 1000 # How many brute-force queries to keep in flight per resolver (the politeness bound) brute_inflight_per_resolver: 2 # Hard ceiling on brute-force DNS queries per second (0 = unlimited; backoff is automatic regardless) diff --git a/docs/scanning/scan_sanity.md b/docs/scanning/scan_sanity.md index 814105e605..46e5e1fffc 100644 --- a/docs/scanning/scan_sanity.md +++ b/docs/scanning/scan_sanity.md @@ -42,7 +42,7 @@ If you truly just want the "throw everything at it" experience, we do have a pre - **`scope.search_distance`** (default `0`) is the big one. It controls how many hops out from your target BBOT is allowed to explore. At `0`, modules only act on in-scope events. Raise it and a single certificate full of affiliate names pulls in those hosts, then *their* subdomains, then *their* infrastructure, and scope balloons outward hop by hop until there's no natural stopping point. The config comment says it outright: don't change this unless you know what you're doing. (This is *not* the same as `dns.search_distance`, which only governs DNS resolution and is safer to adjust.) - **`web.spider_distance`** / **`web.spider_depth`** (default `0` / `1`). A `spider_distance` of `0` means no spidering at all. Raise it and the crawler follows links from links from links, and every URL it turns up feeds webbrute and lightfuzz. On a large site that loop is effectively unbounded. -- **`dns.threads`** / **`dns.brute_concurrency`** (default `10` / `1000`) control DNS concurrency. Cranking them won't make your scan meaningfully faster (the real lever is adding more resolvers to `/etc/resolv.conf`); it'll just flood your nameservers and get you rate-limited. +- **`dns.threads`** / **`dns.brute_threads`** (default `10` / `1000`) control DNS concurrency. Cranking them won't make your scan meaningfully faster (the real lever is adding more resolvers to `/etc/resolv.conf`); it'll just flood your nameservers and get you rate-limited. - **`dns.runaway_limit`** (default `5`) and **`dns.wildcard_disable`** (default `false`) are guardrails. `runaway_limit` stops BBOT from chasing a malicious chain of DNS records forever, and wildcard detection is the only thing keeping a `*.example.com` wildcard from spawning infinite bogus subdomains. Turning either off removes a safety net that's there for a reason. ## Scan Target diff --git a/docs/scanning/tips_and_tricks.md b/docs/scanning/tips_and_tricks.md index f5f42dc14d..c9cd5e8777 100644 --- a/docs/scanning/tips_and_tricks.md +++ b/docs/scanning/tips_and_tricks.md @@ -42,7 +42,7 @@ If you have a fast internet connection or are running BBOT from a cloud VM, you ```bash # about 5MB/s -bbot -t evilcorp.com -f subdomain-enum -c dns.brute_concurrency=5000 +bbot -t evilcorp.com -f subdomain-enum -c dns.brute_threads=5000 ``` Brute-forcing backs off on its own when resolvers start dropping queries, so raising this sets how fast BBOT will go when the resolvers can keep up, not how hard it will push regardless. If you need a firm ceiling as well, set `dns.brute_rate_limit` (queries per second, `0` for unlimited). From b2e54a8ae1cf727657a3908307f1b6940acb9cc1 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Mon, 28 Sep 2026 16:53:26 -0400 Subject: [PATCH 16/28] Drop Python 3.10, add Python 3.15 --- .github/workflows/tests.yml | 2 +- AGENTS.md | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d81333f76b..085b9d5f3a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,7 +17,7 @@ jobs: # if one python version fails, let the others finish fail-fast: false matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python-version: ["3.11", "3.12", "3.13", "3.14", "3.15"] steps: - uses: actions/checkout@v7 - name: Set up Python diff --git a/AGENTS.md b/AGENTS.md index 639171da86..cc3cc07e04 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -21,7 +21,7 @@ BBOT has extremely thorough tests, including **one or more individual tests for - **Package manager**: [uv](https://docs.astral.sh/uv/) - **Linter/formatter**: [ruff](https://docs.astral.sh/ruff/) (pinned to 0.15.10) - **Test framework**: [pytest](https://docs.pytest.org/) with pytest-asyncio -- **Python**: 3.10 - 3.14 +- **Python**: 3.11 - 3.15 --- diff --git a/pyproject.toml b/pyproject.toml index 37597ba560..aee64312e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ version = "3.0.2" description = "OSINT automation for hackers." readme = "README.md" license = "AGPL-3.0" -requires-python = ">=3.10,<3.15" +requires-python = ">=3.11,<3.16" authors = [ { name = "TheTechromancer" }, { name = "Paul Mueller" }, From cebc4631aa58aa50277fffc2303704bbeb66ca6b Mon Sep 17 00:00:00 2001 From: liquidsec Date: Fri, 9 Oct 2026 14:55:02 -0400 Subject: [PATCH 17/28] baddns: update to 2.5.0 - Require baddns ~=2.5.0 and cap blastdns at <2.1 to match baddns's own ceiling; drop the temporary uv override-dependencies block - NS is now HIGH/CONFIRMED, and the new DELEGATION submodule is added to the severity/confidence tables - Enable DELEGATION by default, in the module and both presets - Pass baddns's batched YARA word matcher - Update fixtures for the rewritten bigcartel and aws-bucket signatures - Add DELEGATION module tests --- bbot/modules/baddns.py | 16 +++- bbot/modules/baddns_direct.py | 2 +- bbot/modules/baddns_zone.py | 2 +- bbot/presets/baddns-heavy.yml | 2 +- bbot/presets/baddns.yml | 2 +- .../module_tests/test_module_baddns.py | 95 ++++++++++++++++++- .../module_tests/test_module_baddns_direct.py | 8 +- docs/scanning/configuration.md | 12 ++- docs/scanning/presets_list.md | 4 +- pyproject.toml | 8 +- uv.lock | 14 ++- 11 files changed, 129 insertions(+), 36 deletions(-) diff --git a/bbot/modules/baddns.py b/bbot/modules/baddns.py index ddc86ab3a4..e650dacafc 100644 --- a/bbot/modules/baddns.py +++ b/bbot/modules/baddns.py @@ -1,5 +1,6 @@ from baddns.base import get_all_modules from baddns.lib.loader import load_signatures +from baddns.lib.matcher import WordMatcher from .base import BaseModule import logging @@ -11,7 +12,7 @@ SUBMODULE_MAX_SEVERITY = { "CNAME": "MEDIUM", - "NS": "MEDIUM", + "NS": "HIGH", "MX": "MEDIUM", "TXT": "LOW", "references": "MEDIUM", @@ -21,11 +22,12 @@ "SPF": "MEDIUM", "MTA-STS": "HIGH", "WILDCARD": "HIGH", + "DELEGATION": "HIGH", } SUBMODULE_MAX_CONFIDENCE = { "CNAME": "CONFIRMED", - "NS": "HIGH", + "NS": "CONFIRMED", "MX": "CONFIRMED", "TXT": "CONFIRMED", "references": "CONFIRMED", @@ -35,6 +37,7 @@ "SPF": "CONFIRMED", "MTA-STS": "CONFIRMED", "WILDCARD": "CONFIRMED", + "DELEGATION": "CONFIRMED", } @@ -56,11 +59,11 @@ class Config(BaseModuleConfig): min_confidence: ConfidenceLiteral = Field("MEDIUM", description="Minimum confidence to emit") enabled_submodules: list[str] = Field( default_factory=list, - description="A list of submodules to enable. Empty list (default) enables CNAME, TXT and MX Only", + description="A list of submodules to enable. Empty list (default) enables CNAME, MX, TXT and DELEGATION Only", ) module_threads = 8 - deps_pip = ["baddns~=2.4.0"] + deps_pip = ["baddns~=2.5.0"] def select_modules(self): selected_submodules = [] @@ -72,7 +75,7 @@ def select_modules(self): def set_modules(self): self.enabled_submodules = self.config.get("enabled_submodules", []) if self.enabled_submodules == []: - self.enabled_submodules = ["CNAME", "MX", "TXT"] + self.enabled_submodules = ["CNAME", "MX", "TXT", "DELEGATION"] def _filter_submodules(self): filtered = [] @@ -112,6 +115,8 @@ async def setup(self): self._min_sev_idx = SEVERITY_LEVELS.index(min_severity) self._min_conf_idx = CONFIDENCE_LEVELS.index(min_confidence) self.signatures = load_signatures() + # one batched YARA pass per response instead of each signature's words in turn + self.word_matcher = WordMatcher(self.signatures) self.set_modules() self.enabled_submodules = self._filter_submodules() if not self.enabled_submodules: @@ -144,6 +149,7 @@ async def handle_event(self, event): "dns_client": self.scan.helpers.dns.blastdns, "custom_nameservers": self.custom_nameservers, "signatures": self.signatures, + "word_matcher": self.word_matcher, } if ModuleClass.name == "NS": diff --git a/bbot/modules/baddns_direct.py b/bbot/modules/baddns_direct.py index 584d3f7763..73d36f0322 100644 --- a/bbot/modules/baddns_direct.py +++ b/bbot/modules/baddns_direct.py @@ -22,7 +22,7 @@ class Config(BaseModuleConfig): ) module_threads = 8 - deps_pip = ["baddns~=2.4.0"] + deps_pip = ["baddns~=2.5.0"] scope_distance_modifier = 1 diff --git a/bbot/modules/baddns_zone.py b/bbot/modules/baddns_zone.py index 9277be5e1e..081dc10fb7 100644 --- a/bbot/modules/baddns_zone.py +++ b/bbot/modules/baddns_zone.py @@ -22,7 +22,7 @@ class Config(BaseModuleConfig): ) module_threads = 8 - deps_pip = ["baddns~=2.4.0"] + deps_pip = ["baddns~=2.5.0"] def set_modules(self): self.enabled_submodules = ["NSEC", "zonetransfer"] diff --git a/bbot/presets/baddns-heavy.yml b/bbot/presets/baddns-heavy.yml index bb683a9d0a..5e23fb39d5 100644 --- a/bbot/presets/baddns-heavy.yml +++ b/bbot/presets/baddns-heavy.yml @@ -10,7 +10,7 @@ modules: config: modules: baddns: - enabled_submodules: [CNAME, NS, MX, TXT, references, DMARC, SPF, MTA-STS, WILDCARD] + enabled_submodules: [CNAME, NS, MX, TXT, references, DMARC, SPF, MTA-STS, WILDCARD, DELEGATION] min_severity: INFO min_confidence: UNKNOWN baddns_zone: diff --git a/bbot/presets/baddns.yml b/bbot/presets/baddns.yml index d6e0cf76aa..723c7582e7 100644 --- a/bbot/presets/baddns.yml +++ b/bbot/presets/baddns.yml @@ -6,6 +6,6 @@ modules: config: modules: baddns: - enabled_submodules: [CNAME, MX, TXT] + enabled_submodules: [CNAME, MX, TXT, DELEGATION] min_severity: LOW min_confidence: MEDIUM diff --git a/bbot/test/test_step_2/module_tests/test_module_baddns.py b/bbot/test/test_step_2/module_tests/test_module_baddns.py index 2ef77da8df..958245d72a 100644 --- a/bbot/test/test_step_2/module_tests/test_module_baddns.py +++ b/bbot/test/test_step_2/module_tests/test_module_baddns.py @@ -66,7 +66,7 @@ def _max_level(values, levels): # Modules that wrap CNAME findings and may use variables for severity/confidence. # When a field uses a variable instead of a literal, its max is bounded by # CNAME's max for that field. -CNAME_DERIVED_MODULES = {"references", "txt", "wildcard", "mtasts"} +CNAME_DERIVED_MODULES = {"references", "txt", "wildcard", "mtasts", "delegation"} def test_baddns_max_severity_confidence(): @@ -196,7 +196,7 @@ def set_target(self, target): return HTTPSERVER_HOSTPORT expect_args = {"method": "GET", "uri": "/"} - respond_args = {"response_data": "

Oops! We couldn’t find that page.

", "status": 200} + respond_args = {"response_data": "error code: 1001", "status": 409} module_test.set_expect_requests(expect_args=expect_args, respond_args=respond_args) await module_test.mock_dns( @@ -212,3 +212,94 @@ def check(self, module_test, events): "Failed to emit FINDING" ) assert any("baddns-cname" in e.tags for e in events), "Failed to add baddns tag" + + +class BaseTestBaddnsDelegation(ModuleTestBase): + module_name = "baddns" + modules_overrides = ["baddns"] + targets = ["bad.dns"] + config_overrides = { + "dns": {"minimal": False}, + "modules": {"baddns": {"enabled_submodules": ["DELEGATION"]}}, + } + + async def dispatchWHOIS(x): + return None + + async def setup_after_prep(self, module_test): + from baddns.lib.whoismanager import WhoisManager + + await module_test.mock_dns(self.mock_data) + module_test.monkeypatch.setattr(WhoisManager, "dispatchWHOIS", self.dispatchWHOIS) + + +class TestBaddns_delegation(BaseTestBaddnsDelegation): + mock_data = { + "bad.dns": {"A": ["127.0.0.1"]}, + "_acme-challenge.bad.dns": {"CNAME": ["baddns.azurewebsites.net."]}, + "_dmarc.bad.dns": {"CNAME": ["baddns.trydiscourse.com."]}, + "selector1._domainkey.bad.dns": {"CNAME": ["baddns.us-east-1.elasticbeanstalk.com."]}, + "_NXDOMAIN": [ + "baddns.azurewebsites.net", + "baddns.trydiscourse.com", + "baddns.us-east-1.elasticbeanstalk.com", + ], + } + + def check(self, module_test, events): + findings = [e for e in events if e.type == "FINDING"] + descriptions = [e.data["description"] for e in findings] + assert any("Dangling ACME delegation [_acme-challenge.bad.dns]" in d for d in descriptions), ( + "Failed to emit ACME delegation FINDING" + ) + assert any("Dangling DMARC delegation [_dmarc.bad.dns]" in d for d in descriptions), ( + "Failed to emit DMARC delegation FINDING" + ) + assert any("Dangling DKIM delegation [selector1._domainkey.bad.dns]" in d for d in descriptions), ( + "Failed to emit DKIM delegation FINDING" + ) + assert all(e.data["severity"] == "HIGH" for e in findings), "Delegation findings must be HIGH severity" + assert all("baddns-delegation" in e.tags for e in findings), "Failed to add baddns tag" + + +class TestBaddns_delegation_wildcard(BaseTestBaddnsDelegation): + """A wildcard answers for every probed label, so only a label pointing somewhere else is a real delegation.""" + + mock_data = { + "bad.dns": {"A": ["127.0.0.1"]}, + "_acme-challenge.bad.dns": {"CNAME": ["baddns.trydiscourse.com."]}, + r"regex:.*\.bad\.dns$": {"CNAME": ["wildcard.azurewebsites.net."]}, + "_NXDOMAIN": ["baddns.trydiscourse.com", "wildcard.azurewebsites.net"], + } + + def check(self, module_test, events): + findings = [e for e in events if e.type == "FINDING"] + descriptions = [e.data["description"] for e in findings] + assert any("Dangling ACME delegation [_acme-challenge.bad.dns]" in d for d in descriptions), ( + "Label pointing off the wildcard must still be reported" + ) + assert not any("Dangling DMARC delegation" in d for d in descriptions), ( + "Wildcard-covered labels must not be reported" + ) + assert not any("Dangling DKIM delegation" in d for d in descriptions), ( + "Wildcard-covered labels must not be reported" + ) + + +class TestBaddns_delegation_generic(BaseTestBaddnsDelegation): + """A CNAME to a name that simply doesn't exist is routine here, so only claimable outcomes count.""" + + mock_data = { + "bad.dns": {"A": ["127.0.0.1"]}, + "_acme-challenge.bad.dns": {"CNAME": ["baddns.azurewebsites.net."]}, + "_dmarc.bad.dns": {"CNAME": ["gone.unknown-vendor.net."]}, + "_NXDOMAIN": ["baddns.azurewebsites.net", "gone.unknown-vendor.net"], + } + + def check(self, module_test, events): + findings = [e for e in events if e.type == "FINDING"] + descriptions = [e.data["description"] for e in findings] + assert any("Dangling ACME delegation [_acme-challenge.bad.dns]" in d for d in descriptions), ( + "Label matching a service signature must be reported" + ) + assert not any("DMARC" in d for d in descriptions), "GENERIC delegation findings must be suppressed" diff --git a/bbot/test/test_step_2/module_tests/test_module_baddns_direct.py b/bbot/test/test_step_2/module_tests/test_module_baddns_direct.py index d99f39c00a..84926445a0 100644 --- a/bbot/test/test_step_2/module_tests/test_module_baddns_direct.py +++ b/bbot/test/test_step_2/module_tests/test_module_baddns_direct.py @@ -27,7 +27,7 @@ async def handle_event(self, event): self.events_seen.append(event.data) url = f"http://bad.dns:{HTTPSERVER_PORT}/" url_event = self.scan.make_event( - url, "URL", parent=self.scan.root_event, tags=["cloudflare", "in-scope", "status-401"] + url, "URL", parent=self.scan.root_event, tags=["cloudflare", "in-scope", "status-404"] ) if url_event is not None: await self.emit_event(url_event) @@ -46,8 +46,8 @@ def set_target(self, target): expect_args = {"method": "GET", "uri": "/"} respond_args = { - "response_data": "NoSuchBucketThe specified bucket does not existbad.dns", - "status": 401, + "response_data": "

Error 404 - AnnounceKit

", + "status": 404, } module_test.set_expect_requests(expect_args=expect_args, respond_args=respond_args) @@ -59,7 +59,7 @@ def set_target(self, target): def check(self, module_test, events): assert any( e.type == "FINDING" - and "Possible [AWS Bucket Takeover Detection] via direct BadDNS analysis. Indicator: [[Words: The specified bucket does not exist, BucketName | Condition: and | Part: body] Matchers-Condition: and] Trigger: [self] baddns Module: [CNAME]" + and "Possible [Announcekit Takeover Detection] via direct BadDNS analysis. Indicator: [[Words: Error 404 - AnnounceKit | Condition: and | Part: body] Matchers-Condition: and] Trigger: [self] baddns Module: [CNAME]" in e.data["description"] for e in events ), "Failed to emit FINDING" diff --git a/docs/scanning/configuration.md b/docs/scanning/configuration.md index 26dd34f8f0..aa3f18f76e 100644 --- a/docs/scanning/configuration.md +++ b/docs/scanning/configuration.md @@ -122,10 +122,12 @@ dns: # Attempts per brute-force name before giving up (each retry lands on a different resolver) # Only timeouts retry, not NXDOMAIN, so this costs traffic proportional to the failure rate brute_retries: 20 - # Per-query timeout in seconds when brute-forcing. Deliberately much shorter than - # dns.timeout: a public resolver that hasn't answered by now won't, and retrying - # elsewhere is cheaper than waiting. - brute_timeout: 1 + # Per-query timeout in seconds when brute-forcing, deliberately much shorter than dns.timeout + # Retrying elsewhere is cheaper than waiting; going below this starts shrinking the resolver pool + brute_timeout: 0.5 + # Reuse one socket per resolver instead of binding one per query, which keeps NAT/conntrack + # state bounded by the resolver count rather than growing with query volume + brute_persistent_socket: true # nameservers to use for DNS brute-forcing # default is updated weekly and contains ~10K high-quality public servers brute_nameservers: https://raw.githubusercontent.com/blacklanternsecurity/public-dns-servers/master/nameservers.txt @@ -463,7 +465,7 @@ In addition to the stated options for each module, the following universal optio | Config Option | Type | Description | Default | |--------------------------------------------------------|------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | modules.baddns.custom_nameservers | list[str] | Force BadDNS to use a list of custom nameservers | [] | -| modules.baddns.enabled_submodules | list[str] | A list of submodules to enable. Empty list (default) enables CNAME, TXT and MX Only | [] | +| modules.baddns.enabled_submodules | list[str] | A list of submodules to enable. Empty list (default) enables CNAME, MX, TXT and DELEGATION Only | [] | | modules.baddns.min_confidence | ConfidenceLiteral | Minimum confidence to emit | MEDIUM | | modules.baddns.min_severity | SeverityLiteral | Minimum severity to emit | LOW | | modules.baddns_direct.custom_nameservers | list | Force BadDNS to use a list of custom nameservers | [] | diff --git a/docs/scanning/presets_list.md b/docs/scanning/presets_list.md index d2190f5d2d..fbacea28d5 100644 --- a/docs/scanning/presets_list.md +++ b/docs/scanning/presets_list.md @@ -15,7 +15,7 @@ Check for subdomain takeovers and other DNS issues. config: modules: baddns: - enabled_submodules: [CNAME, MX, TXT] + enabled_submodules: [CNAME, MX, TXT, DELEGATION] min_severity: LOW min_confidence: MEDIUM ``` @@ -42,7 +42,7 @@ Run all baddns modules and submodules. config: modules: baddns: - enabled_submodules: [CNAME, NS, MX, TXT, references, DMARC, SPF, MTA-STS, WILDCARD] + enabled_submodules: [CNAME, NS, MX, TXT, references, DMARC, SPF, MTA-STS, WILDCARD, DELEGATION] min_severity: INFO min_confidence: UNKNOWN baddns_zone: diff --git a/pyproject.toml b/pyproject.toml index aa1196af11..5bc3e0288b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,7 +49,7 @@ dependencies = [ "tldextract>=5.3.0,<6", "cloudcheck>=11.1.0,<12", "blasthttp>=0.10.0,<0.11", - "blastdns>=2.0.0,<3", + "blastdns>=2.0.0,<2.1", "zstandard>=0.22,<1", "packaging>=23.0", ] @@ -81,7 +81,7 @@ dev = [ "pytest-httpx>=0.35", "pytest-benchmark>=4,<6", "pytest-xdist>=3.6,<4", - "baddns~=2.4.1", + "baddns~=2.5.0", "ruff==0.16.9", "maturin>=1.4,<2", ] @@ -98,10 +98,6 @@ docs = [ "pymdown-extensions>=10.20.1,<13", ] -[tool.uv] -# baddns still declares blastdns<1.10; override until it ships a 2.x-compatible release -override-dependencies = ["blastdns>=2.0.0,<3"] - [build-system] requires = ["hatchling"] build-backend = "hatchling.build" diff --git a/uv.lock b/uv.lock index 4440d96e25..86cd184e7e 100644 --- a/uv.lock +++ b/uv.lock @@ -7,9 +7,6 @@ resolution-markers = [ "python_full_version < '3.11'", ] -[manifest] -overrides = [{ name = "blastdns", specifier = ">=2.0.0,<3" }] - [[package]] name = "annotated-doc" version = "0.0.4" @@ -163,7 +160,7 @@ wheels = [ [[package]] name = "baddns" -version = "2.4.1" +version = "2.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "blastdns" }, @@ -175,10 +172,11 @@ dependencies = [ { name = "python-whois" }, { name = "pyyaml" }, { name = "tldextract" }, + { name = "yara-python" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1d/91/62cef471fba0201e38d1d3cca0170ca0dd25c5417c7f2f2b495dc3903b3e/baddns-2.4.1.tar.gz", hash = "sha256:022e66a7d04ccbf239ba0a012c505dcc8d4246d240817c16802d1c833f1765fa", size = 62730, upload-time = "2026-06-17T23:12:10.841Z" } +sdist = { url = "https://files.pythonhosted.org/packages/07/38/2adf163056db50f943a838fb3602463762fc523d3f6a9147fd0a2bea631f/baddns-2.5.0.tar.gz", hash = "sha256:8f2f87dc2be54a5a74aea350cf4b079fcafbe31b811951ac940952ad29c2e96a", size = 80403, upload-time = "2026-10-09T15:27:29.881Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8c/d1/f7cc99fbf5146becdefc01b68917f4de8b5d32b355fe8be42e4ae12e5538/baddns-2.4.1-py3-none-any.whl", hash = "sha256:bda752ecdb31fe27c753516ab476f0371d128fe5c7f1c8a677ba49ad9348d8e3", size = 121104, upload-time = "2026-06-17T23:12:09.661Z" }, + { url = "https://files.pythonhosted.org/packages/16/5a/1e0479d06fcb17e8310383b58be8c4aad5e17f8d781b9ed785b70b6eed3f/baddns-2.5.0-py3-none-any.whl", hash = "sha256:b8d6d04f75cb47cf261c21708ea41ec89111b447844e458337604a702b717b5a", size = 134089, upload-time = "2026-10-09T15:27:28.823Z" }, ] [[package]] @@ -267,7 +265,7 @@ requires-dist = [ { name = "ansible-runner", specifier = ">=2.3.2,<3" }, { name = "asndb", specifier = ">=1.1.0" }, { name = "beautifulsoup4", specifier = ">=4.12.2,<5" }, - { name = "blastdns", specifier = ">=2.0.0,<3" }, + { name = "blastdns", specifier = ">=2.0.0,<2.1" }, { name = "blasthttp", specifier = ">=0.10.0,<0.11" }, { name = "cachetools", specifier = ">=5.3.2,<8.0.0" }, { name = "cloudcheck", specifier = ">=11.1.0,<12" }, @@ -304,7 +302,7 @@ requires-dist = [ [package.metadata.requires-dev] dev = [ - { name = "baddns", specifier = "~=2.4.1" }, + { name = "baddns", specifier = "~=2.5.0" }, { name = "fastapi", specifier = ">=0.115.5,<0.143.0" }, { name = "maturin", specifier = ">=1.4,<2" }, { name = "pre-commit", specifier = ">=3.4,<5.0" }, From 87ebd0da0f510b5a264a4f64d6d71ba49dd931db Mon Sep 17 00:00:00 2001 From: liquidsec Date: Tue, 13 Oct 2026 13:42:35 -0400 Subject: [PATCH 18/28] events: show host in FINDING text output when not otherwise present --- bbot/core/event/base.py | 3 +++ bbot/test/test_step_1/test_events.py | 29 +++++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/bbot/core/event/base.py b/bbot/core/event/base.py index f3e3f2b13a..3f8b9aab78 100644 --- a/bbot/core/event/base.py +++ b/bbot/core/event/base.py @@ -2020,8 +2020,11 @@ def _data_human(self): parts.append(f"Confidence: [{self.data['confidence']}]") parts.append(self.data["description"]) url = self.data.get("url", "") + host = self.data.get("host", "") if url and url not in self.data["description"]: parts.append(f"({url})") + elif host and not url and host not in self.data["description"]: + parts.append(f"Host: [{host}]") cves = self.data.get("cves", []) if cves: parts.append(f"[{', '.join(cves)}]") diff --git a/bbot/test/test_step_1/test_events.py b/bbot/test/test_step_1/test_events.py index a331172182..cc353ff72c 100644 --- a/bbot/test/test_step_1/test_events.py +++ b/bbot/test/test_step_1/test_events.py @@ -417,8 +417,35 @@ def _http_response(url): "FINDING", dummy=True, ) - assert test_vuln2.data_human == "Severity: [INFO] Confidence: [HIGH] asdf" + assert test_vuln2.data_human == "Severity: [INFO] Confidence: [HIGH] asdf Host: [192.168.1.1]" assert test_vuln2.host.is_private + # host is not repeated when the description already contains it + test_vuln3 = scan.make_event( + { + "host": "www.evilcorp.com", + "severity": "INFO", + "confidence": "HIGH", + "description": "Something found on www.evilcorp.com", + "name": "Test Finding", + }, + "FINDING", + dummy=True, + ) + assert test_vuln3.data_human == "Severity: [INFO] Confidence: [HIGH] Something found on www.evilcorp.com" + # url takes the place of host when present + test_vuln4 = scan.make_event( + { + "host": "www.evilcorp.com", + "url": "http://www.evilcorp.com/admin", + "severity": "INFO", + "confidence": "HIGH", + "description": "asdf", + "name": "Test Finding", + }, + "FINDING", + dummy=True, + ) + assert test_vuln4.data_human == "Severity: [INFO] Confidence: [HIGH] asdf (http://www.evilcorp.com/admin)" # must have severity with pytest.raises(ValidationError, match=".*validation error.*\nseverity\n.*Field required.*"): test_vuln = scan.make_event({"host": "evilcorp.com", "description": "asdf"}, "FINDING", dummy=True) From ad38cdf0d269e8d4df731f72380415512cee504e Mon Sep 17 00:00:00 2001 From: liquidsec Date: Wed, 14 Oct 2026 15:54:23 -0400 Subject: [PATCH 19/28] bump blastdns to 2.0.1 --- pyproject.toml | 2 +- uv.lock | 153 +++++++++++++++++++++---------------------------- 2 files changed, 66 insertions(+), 89 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 5bc3e0288b..d180674257 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,7 +49,7 @@ dependencies = [ "tldextract>=5.3.0,<6", "cloudcheck>=11.1.0,<12", "blasthttp>=0.10.0,<0.11", - "blastdns>=2.0.0,<2.1", + "blastdns>=2.0.1,<2.1", "zstandard>=0.22,<1", "packaging>=23.0", ] diff --git a/uv.lock b/uv.lock index 86cd184e7e..31df05ce1c 100644 --- a/uv.lock +++ b/uv.lock @@ -265,7 +265,7 @@ requires-dist = [ { name = "ansible-runner", specifier = ">=2.3.2,<3" }, { name = "asndb", specifier = ">=1.1.0" }, { name = "beautifulsoup4", specifier = ">=4.12.2,<5" }, - { name = "blastdns", specifier = ">=2.0.0,<2.1" }, + { name = "blastdns", specifier = ">=2.0.1,<2.1" }, { name = "blasthttp", specifier = ">=0.10.0,<0.11" }, { name = "cachetools", specifier = ">=5.3.2,<8.0.0" }, { name = "cloudcheck", specifier = ">=11.1.0,<12" }, @@ -349,98 +349,75 @@ wheels = [ [[package]] name = "blastdns" -version = "2.0.0" +version = "2.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "orjson" }, { name = "pydantic" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b3/e7/bbb86377c300f03e40ecebc8fcd01c2510ffde5127f3713ca08a681d1570/blastdns-2.0.0.tar.gz", hash = "sha256:b1155d642a67a468b313f493ee337a7655c2f190adc1c25dad174555012ac213", size = 168985, upload-time = "2026-09-22T15:09:43.345Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/fb/d22c181bf6019998d4485e90b392c585fd050befea52ae4d9887a9d1ddb3/blastdns-2.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:fad0755c2e9586873ddb63221e3c3bfa892c130f154e45ccbbda0b72563ba5b2", size = 2718601, upload-time = "2026-09-22T15:07:19.157Z" }, - { url = "https://files.pythonhosted.org/packages/59/72/b70ba280a300c6c168558a6a743b76dc9169baa42a2257737300b873c2b8/blastdns-2.0.0-cp310-cp310-manylinux_2_28_armv7l.whl", hash = "sha256:ad1fea0165732ac8d7b06db29ef80c817753ea6ba3fc592e40d9ee412044a4d1", size = 2604121, upload-time = "2026-09-22T15:07:31.944Z" }, - { url = "https://files.pythonhosted.org/packages/7b/6b/db1f1b3c85859a54349806b8fcdd99c4539ec6319a84ecb4cf315f981941/blastdns-2.0.0-cp310-cp310-manylinux_2_28_i686.whl", hash = "sha256:c176755e9b1bdbe5a35bd88a5fc5dc96e92778ed53fa4cee3dc8b5f15125c3f9", size = 2854822, upload-time = "2026-09-22T15:08:12.185Z" }, - { url = "https://files.pythonhosted.org/packages/06/73/486cd65fd61e3ab3c8308c56188ccd0bd8e473d2e9149281b03d47d61f12/blastdns-2.0.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:6826b3cb252de74f1f2b9aba810e8c9adb48e12d31aa89e31c2df6809b0a0fca", size = 3871364, upload-time = "2026-09-22T15:07:44.423Z" }, - { url = "https://files.pythonhosted.org/packages/3b/81/cc06edaf6f3576275d428c3bfb73099a6c8e73c7cf48bcadbabb456e8f6c/blastdns-2.0.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:142e898d56b4fff83fa7c72e93d251c0d28d1f07ae1fab40cf3b1286efe7c980", size = 2781192, upload-time = "2026-09-22T15:07:59.078Z" }, - { url = "https://files.pythonhosted.org/packages/b6/b5/aeab817311a16be5558af6d3d787c605775f7ccaaf761b8bc5f5b22f564e/blastdns-2.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:c50f2bb010807d91fe1cd7fde26a0f304e71e19ed86c95500cc9d067cc60e861", size = 2648527, upload-time = "2026-09-22T15:08:25.548Z" }, - { url = "https://files.pythonhosted.org/packages/8a/d1/50e9bd6b42b05ad9dfb1531972aabb20157329fa89507cf59264f1963040/blastdns-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3bfe7263ba7a0fd0755fc7b66fd4982bb13984ef25f3a41e98b7c9b286c25006", size = 2900456, upload-time = "2026-09-22T15:08:51.424Z" }, - { url = "https://files.pythonhosted.org/packages/c1/0e/6e709d5013948000341e5c36bbc56ee74d097560a036279d490f22b90445/blastdns-2.0.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:b974a43a8bd36751d1ed381ec9ef2bdfca99a88c7beca06adddf0d7854de9a10", size = 2876959, upload-time = "2026-09-22T15:09:04.375Z" }, - { url = "https://files.pythonhosted.org/packages/21/b3/b86c2e00f916674a3e5540bcf03231c503a6ac039dff34f03c599c447a80/blastdns-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4edf4a8ba91bb8561dc4c643cbb667d0a97cf6fd9d944be2dfe1eda5859beaa9", size = 2968009, upload-time = "2026-09-22T15:09:17.618Z" }, - { url = "https://files.pythonhosted.org/packages/e9/01/8ad0f68020adbe7b83e47352a7ed4476e54231e66ea809cf1b2bb240a9af/blastdns-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7d467720a373d8f7f575b0527bad703024ca9e4f0f10af76e4f5584eec56cd86", size = 2965991, upload-time = "2026-09-22T15:09:31.163Z" }, - { url = "https://files.pythonhosted.org/packages/57/66/ba1c821659c0b243845372988db3367c7bf5344c3719e30d03c793898998/blastdns-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:838358819ceaa1766e92135cca04e15c615ba6495ad8769d77d31a1156144220", size = 2896002, upload-time = "2026-09-22T15:09:44.507Z" }, - { url = "https://files.pythonhosted.org/packages/e5/46/7f577bcd9147c92d9d96879da0574333e34998166d1869167a02b1e4dd8e/blastdns-2.0.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8351ace2db652948ee353f258918b938b173333aba31c595107ce29b441a0847", size = 2842785, upload-time = "2026-09-22T15:08:44.963Z" }, - { url = "https://files.pythonhosted.org/packages/3c/fd/198a90e03539291cd2439724fbdcde77887f46d7165afe037f592a2555f2/blastdns-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e81f8e11b73f4f1a909169f24b3026e11ad8bbad808b067663f1dfec8677dc0d", size = 2702746, upload-time = "2026-09-22T15:08:38.516Z" }, - { url = "https://files.pythonhosted.org/packages/8e/98/3c85b5061d904e731fb9a8927db98090961ffacd1d3ded77a2350b9c6c6b/blastdns-2.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2d507c48d8d237f693af9af17694e65a4fdc14e559c45364e3467174c9dbce8d", size = 2718100, upload-time = "2026-09-22T15:07:20.844Z" }, - { url = "https://files.pythonhosted.org/packages/64/e7/dd5b5bcb300ec1f5c388a57ba1cb3258be505099bab1f2740faf37d9747c/blastdns-2.0.0-cp311-cp311-manylinux_2_28_armv7l.whl", hash = "sha256:73bc4fd4dfe1f9c8b64a0166c678b945118402b9cda6da7d238454b893f2db16", size = 2603842, upload-time = "2026-09-22T15:07:33.306Z" }, - { url = "https://files.pythonhosted.org/packages/65/c8/96d27e9800b921b9e952d4e54de0f7441ee585c92bf0644ac1373104ecbe/blastdns-2.0.0-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:eeb819c1819a864ed806d9b3aebf574aa53a0cad14f3ba395c6d295e5eff076c", size = 2855081, upload-time = "2026-09-22T15:08:13.764Z" }, - { url = "https://files.pythonhosted.org/packages/7e/57/fa450c448b7bb1336ea1d5bdf2b36cecbe5f0301b924f035e5c9a7df12dc/blastdns-2.0.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:09deaaf5f9d9beb76db637b76ef0f27695108cd17aeab6fd79311005cea90dc2", size = 3869873, upload-time = "2026-09-22T15:07:46.037Z" }, - { url = "https://files.pythonhosted.org/packages/20/7a/1cb6410739801a4beb543137cafff3bb4270ac1e508c4839dd6432987699/blastdns-2.0.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:43514aed8c933d553a1ead0b5d53b258fe99ba8409d898b6d50569362e44b2a8", size = 2781417, upload-time = "2026-09-22T15:08:00.736Z" }, - { url = "https://files.pythonhosted.org/packages/d7/d4/317a1adcd9d752fb54621cebe5ceff0b27d9cd8a9315be8ff7d931566e9b/blastdns-2.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:51b4692987c15d0d1884b682e9ba8b2f285abc5248e0b953cee506e9416f054b", size = 2648170, upload-time = "2026-09-22T15:08:27.048Z" }, - { url = "https://files.pythonhosted.org/packages/67/7c/ce4eedbcdc8a32193780b575705fce72de34a5aa987c0e96887a5a1644b8/blastdns-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a7e051d4d6b3ae09a17af99b31a21f702c6fe3a10bc39dc029f7a5ec57e1ce84", size = 2899444, upload-time = "2026-09-22T15:08:53.022Z" }, - { url = "https://files.pythonhosted.org/packages/b9/ba/01340b06e3f67bfbcecbed80af3a04a38d136f886d327241adbe7c3f57dd/blastdns-2.0.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:b327ee5564166eae8ce6d4af25330cd2345001702d65addb6a2ec5ca51f8da2f", size = 2876108, upload-time = "2026-09-22T15:09:06.132Z" }, - { url = "https://files.pythonhosted.org/packages/fe/63/f43585828d0d632953957a7931222bd24f564019aa63839bd0d93236a3db/blastdns-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:14cdf1c18d1f8030c2dcf9a45ab7afea738de99f9da53a1de6de058e8138a5cf", size = 2967997, upload-time = "2026-09-22T15:09:19.468Z" }, - { url = "https://files.pythonhosted.org/packages/9f/9b/b94f746d2e4a584d4b6f28a917ba302763fc9c80b408e2d47d1049666860/blastdns-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:97c7de160c0d9da917cde3a6329202804b61e895c4dd0b24141cb0de1f61bee0", size = 2965137, upload-time = "2026-09-22T15:09:32.611Z" }, - { url = "https://files.pythonhosted.org/packages/96/60/58693d07f674ad550c9cf06f12db1de2efa31efa6371d4de30abfdc180e5/blastdns-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:2810a6f6464130d6a8dbc8b7e97f7d8c58faf3e1880dc36202a54265827fb8ac", size = 2896519, upload-time = "2026-09-22T15:09:46.218Z" }, - { url = "https://files.pythonhosted.org/packages/f9/96/476d0428662b4c858ccc358b5fa460d3aeccab2ee6d53452f185ecb1a588/blastdns-2.0.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:310b0841bed2408fe5572da3d7cc31121ebd143540b8d4eee7d2e72379093db1", size = 2835448, upload-time = "2026-09-22T15:08:46.526Z" }, - { url = "https://files.pythonhosted.org/packages/d4/11/d01a7d84d31c6118b517ce95711605aed53a11b432258607113b420a7f7e/blastdns-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dc84ea39d619d2500f16ff922a0c29d2be6733750532a878037540a5611f149c", size = 2693129, upload-time = "2026-09-22T15:08:40.261Z" }, - { url = "https://files.pythonhosted.org/packages/98/f8/1738e7c407c4fff4b5f060105249a3db5b14fc5f9a545399cc9881d3a97a/blastdns-2.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:571defd1b5e2df3a503d8662a48bb06694d8e67ac8d45d1cb041f99ce6ad6a3f", size = 2709065, upload-time = "2026-09-22T15:07:22.258Z" }, - { url = "https://files.pythonhosted.org/packages/2f/8d/d799e607f84f3c4b889fe981fdb10bfc2b061fec700eee5e5e21e5b0c6eb/blastdns-2.0.0-cp312-cp312-manylinux_2_28_armv7l.whl", hash = "sha256:14b6a580c1ddc60a92631d66949d87ce2a73fe757e6397996f947f1a6ac767f2", size = 2602900, upload-time = "2026-09-22T15:07:35.027Z" }, - { url = "https://files.pythonhosted.org/packages/29/74/cc681a2e562ae0493cb80cb1330d7e88c65a00264900509bdb8a0f87a90d/blastdns-2.0.0-cp312-cp312-manylinux_2_28_i686.whl", hash = "sha256:c4be35b13ca6c55181a970a80a9c479143bf836f383e9ac9d836e0b4b11d3a8b", size = 2852808, upload-time = "2026-09-22T15:08:15.227Z" }, - { url = "https://files.pythonhosted.org/packages/19/c9/57eaa902fc0c658c274e9a230ac9dd948586ca7404885fe3e831d2928b07/blastdns-2.0.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:50d109ee31b02fcd5cb2eb3fb15f18e023e7eaaae33b8ec16a2c00dc6282faa5", size = 3864668, upload-time = "2026-09-22T15:07:47.626Z" }, - { url = "https://files.pythonhosted.org/packages/ed/74/26cf55a0b277f886315a4bdec91ed27d8644363f3152b7b8eb8f31749e08/blastdns-2.0.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:e0d44c234e8a248039d236ec50a93510929119bca956ebf99e5711394c7d30bb", size = 2777770, upload-time = "2026-09-22T15:08:02.317Z" }, - { url = "https://files.pythonhosted.org/packages/1c/ea/b4a90807a17738c9d2090017e48ed4c80713f37d3704ae6601f79ceb65ce/blastdns-2.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:519d854a18987bc5d9c27b250cef80927ba6424751e20bf3f70e9eceb62a5793", size = 2644016, upload-time = "2026-09-22T15:08:28.446Z" }, - { url = "https://files.pythonhosted.org/packages/65/45/4ddda1c1227f42480308571afd0f0db1da6a3fda7340872c888833e9a4e3/blastdns-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8eefe01153faa9e5eaea0b20177a1f93664c08b74204430b11c7a649df5d674c", size = 2889039, upload-time = "2026-09-22T15:08:54.62Z" }, - { url = "https://files.pythonhosted.org/packages/9b/a3/38fe980be309143fa70c0e04a1555812977a394deb4f62f04c3c849a2d89/blastdns-2.0.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b00c58ae5a34348e4abe9c2a5ec7ca2f57a1f606f1d530fc8f086e89989df651", size = 2876735, upload-time = "2026-09-22T15:09:07.75Z" }, - { url = "https://files.pythonhosted.org/packages/a3/80/f769f46e4e9e7287d5c2635921bede6c1facd59ddbf0a6e49ba1fdd7db57/blastdns-2.0.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9b4fe18afb843d53415a6d29e9ca2a18826b5b99976cb26e8bcd47e827101a1d", size = 2960507, upload-time = "2026-09-22T15:09:20.971Z" }, - { url = "https://files.pythonhosted.org/packages/a1/bd/9309e53b152ed2828a0c78272aeb65a0919e69537565d07d0e0649c01371/blastdns-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:570c37c519c08a2dcf4d3a5e79146be6e266c89984b3f090f6950ba9dd15ccea", size = 2959800, upload-time = "2026-09-22T15:09:33.995Z" }, - { url = "https://files.pythonhosted.org/packages/20/1e/72843915ed817d0e82cf6e9130227beafeab39e4ae8ddb7aec774c4cd560/blastdns-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:ca4e0eb101eae9dee771c041db9e9101c8f0611f3d6cd58da35afbea3862a3f6", size = 2893234, upload-time = "2026-09-22T15:09:47.903Z" }, - { url = "https://files.pythonhosted.org/packages/f8/39/a5db8864bb6229a1e93e570e7360eb5457660a3dfb8c17dcbc6bd48683f1/blastdns-2.0.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ce92a5a7145348a20e3337ed6a6dc80ca296d7ba087927c6bec0ed97673f236e", size = 2835533, upload-time = "2026-09-22T15:08:48.212Z" }, - { url = "https://files.pythonhosted.org/packages/44/b0/a85efee02d4722ac41edf1998a2c6034a63ac43682692efa0a88ee3e2a72/blastdns-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:13b2e161f1f99f4fa73e1df4ec16b7cd86b29a5f5e20fbf368849381753132cb", size = 2693063, upload-time = "2026-09-22T15:08:41.623Z" }, - { url = "https://files.pythonhosted.org/packages/85/67/74bdf494f48c2f6bc256a199ac5823267da495cb99e6c22b8491f8df6c11/blastdns-2.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:6d087c8352c31a25adcf11d1e3a3ea50289513560ca5807af8cb00dff4ff3430", size = 2708994, upload-time = "2026-09-22T15:07:23.729Z" }, - { url = "https://files.pythonhosted.org/packages/b4/c4/7a6579d6cd9851eb07fb86b706dfa83d26d42128e6fe45541343dc63147f/blastdns-2.0.0-cp313-cp313-manylinux_2_28_armv7l.whl", hash = "sha256:1f464664df7e8f924ee486b6a1ab50bcf720a902010f140938f84d518d92820f", size = 2603021, upload-time = "2026-09-22T15:07:36.747Z" }, - { url = "https://files.pythonhosted.org/packages/2f/21/a32d9b19857f5ce1b0714a4c740146b4e93cfec09d741a58d057764b7d01/blastdns-2.0.0-cp313-cp313-manylinux_2_28_i686.whl", hash = "sha256:a036964128a1b30ab0594978c9acb13e431b6e6df5f04270497cc34be607f9c3", size = 2853115, upload-time = "2026-09-22T15:08:17.537Z" }, - { url = "https://files.pythonhosted.org/packages/33/06/5b2705ac73a09c4d5150c4577b828cd45e4031de2da50c8c41f400550319/blastdns-2.0.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:ed6fabb7ce356056899ab820786bcc9bb28e023d0af9ecf11e12bd3dafb9cfc5", size = 3864541, upload-time = "2026-09-22T15:07:49.339Z" }, - { url = "https://files.pythonhosted.org/packages/a4/59/864b59824c63cab452b92dedb826459861ff70409485973ff6760ed42b63/blastdns-2.0.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:8db531d4abe616a58a466f022990c67b056b0a37e7489eb43fcccfd2d886f9a6", size = 2776027, upload-time = "2026-09-22T15:08:03.944Z" }, - { url = "https://files.pythonhosted.org/packages/fa/f2/c61d995b71506596b771b8b664db4d69a57e59b6e0fe52b71bcebfd428b3/blastdns-2.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:60197e85dd2eba9edbf3d0e55894d1d65bc5236c7558497b0881da0dc6e48211", size = 2643639, upload-time = "2026-09-22T15:08:30.125Z" }, - { url = "https://files.pythonhosted.org/packages/eb/e9/10ab9b68e74922bd05d8637984f83ce80615850edc779863b27adb6875c7/blastdns-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5a38290f6003cb883d91378cfe6ac5ac0e3b9d9fb13f94d70e92eca209f82dfe", size = 2888146, upload-time = "2026-09-22T15:08:56.314Z" }, - { url = "https://files.pythonhosted.org/packages/27/d1/256835b30033bcf2ae761b20b6522a9923382acd4baf97bf8c09cb56f300/blastdns-2.0.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c3b020008641e5047aad39b434ac6921022cd7c089ed110ab85bfbe271f9665d", size = 2876899, upload-time = "2026-09-22T15:09:09.429Z" }, - { url = "https://files.pythonhosted.org/packages/44/e9/ac0434e31af4300395ae6b00d88f88cdcf73c15ac227e6a5b856c00289d3/blastdns-2.0.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5c996778b8a70169071e3110087ce6111bcb4816c9fbf1b51c16287a85333c13", size = 2961010, upload-time = "2026-09-22T15:09:22.529Z" }, - { url = "https://files.pythonhosted.org/packages/51/e6/93fc905327e850d163df1b0bba77dd59732721a11d5932ec45233a145047/blastdns-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dbe8e011c0f05930e5c24b16835bc67423d1f9d41f087b81bbc90e55920bcf19", size = 2959561, upload-time = "2026-09-22T15:09:35.626Z" }, - { url = "https://files.pythonhosted.org/packages/9e/eb/ba7d52bff317d26c197d2e4c9eb59ceb5c81c0554787f6bf89b67364bac8/blastdns-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c16298df3453f4f09cf5cba415c698178875710cd8fa0fe08a1826b5048ec5e", size = 2892801, upload-time = "2026-09-22T15:09:49.607Z" }, - { url = "https://files.pythonhosted.org/packages/2a/11/6b3fb5929c85041a0f76920504318c193189d468b2f7fcd4ff79c4fa0aa5/blastdns-2.0.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:01cf4b75298504d189d6a679e3d275c4d9028a7fffac5f6221734cd0af0d6c3b", size = 2835360, upload-time = "2026-09-22T15:08:49.91Z" }, - { url = "https://files.pythonhosted.org/packages/80/c4/6a54cf27db17576216fd80bc2b9f4b48b019293351a9554700501152ef8c/blastdns-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:705df149f190d22b0e1cca9277e99da262f27ef6838d8342d60c679be400a101", size = 2699592, upload-time = "2026-09-22T15:08:43.383Z" }, - { url = "https://files.pythonhosted.org/packages/75/7a/fa5f6bbbff97c3d95774ed1caf28117c3d5b35480fff2e4640bf9c702852/blastdns-2.0.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:c78f43fb9fd4d976d481917b1ff245126f0de679032c87eef4ee68ced2b792bd", size = 2712167, upload-time = "2026-09-22T15:07:25.407Z" }, - { url = "https://files.pythonhosted.org/packages/67/3f/1bcb164095cd9996df84f10b3da52d2e1f3bcc1620ed00262c7b7df2745b/blastdns-2.0.0-cp314-cp314-manylinux_2_28_armv7l.whl", hash = "sha256:5b369fedffb6d723912ba052b4d0400f7facf54d4db217bd9d26c738a7f6009a", size = 2603483, upload-time = "2026-09-22T15:07:38.392Z" }, - { url = "https://files.pythonhosted.org/packages/02/7c/ed7d1056edb3a242ece4e88c21eac107ebfb19d441171fc2b7b7d7b09ae2/blastdns-2.0.0-cp314-cp314-manylinux_2_28_i686.whl", hash = "sha256:24dfe8f9521d31e5b0ff4c676c611b0917bd2f002b246501556082b404842aea", size = 2853477, upload-time = "2026-09-22T15:08:19.144Z" }, - { url = "https://files.pythonhosted.org/packages/32/1d/9780aafd6dfe2bb52babf2007e83f0752559a668dfcfd71632e0d73a7615/blastdns-2.0.0-cp314-cp314-manylinux_2_28_ppc64le.whl", hash = "sha256:ac0d40ca563958ca3ddb3082058854b2e327d9b404eede5958c43e32418cf2be", size = 3864263, upload-time = "2026-09-22T15:07:51.096Z" }, - { url = "https://files.pythonhosted.org/packages/1c/d8/46767fdf13e0a9e6bf295a948b99480810f61c09608b303293df7b7ef456/blastdns-2.0.0-cp314-cp314-manylinux_2_28_s390x.whl", hash = "sha256:fd94b8f168f4023b6181e75a22874d53c38ae6cc9a56675e7b576234fa943e3b", size = 2777474, upload-time = "2026-09-22T15:08:05.558Z" }, - { url = "https://files.pythonhosted.org/packages/5d/52/b88f641f3ea172b999934dd19d8df3df14797ee7be047c528de773c879c9/blastdns-2.0.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:4e5f97cd6d704e5b92c583c6827a35d1f15166916fb60a65af9c1964239a8604", size = 2647384, upload-time = "2026-09-22T15:08:31.746Z" }, - { url = "https://files.pythonhosted.org/packages/89/d3/657f45d789ff685395b3c3370a3b8a51dc47a4ca9767ce71ec9c36d515e3/blastdns-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7d581b80ad528df9e2b7404102c5412aec8741da0d204e0d9adc7f61c72b61fa", size = 2891111, upload-time = "2026-09-22T15:08:58.046Z" }, - { url = "https://files.pythonhosted.org/packages/20/b1/32072d3e10c9fd85c00f720b43f1950447fbd86af616a056448bbe8b8e3e/blastdns-2.0.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:3a560128f38616cb47ec3330a11f3884f64e534188f6213195cd7e128913b0cb", size = 2878358, upload-time = "2026-09-22T15:09:10.963Z" }, - { url = "https://files.pythonhosted.org/packages/59/21/71fc77bd93672cababdd1027fe6c813823e3f1026b37d4ebf62b962fa766/blastdns-2.0.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:490c05c290d5156e8fadb870a6ad5794675c9f6de33f9633bd31dbe9bef7797c", size = 2961662, upload-time = "2026-09-22T15:09:24.328Z" }, - { url = "https://files.pythonhosted.org/packages/fe/64/c0f11dde18808af3cf18a6222ae58bbb25ea169cf47570bac9b85f1246b2/blastdns-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:fa43e94b57f2976de36f7b9f24de35cd7c0f6a246cbedb44511664b0e687c4e8", size = 2963656, upload-time = "2026-09-22T15:09:37.075Z" }, - { url = "https://files.pythonhosted.org/packages/c8/cf/4c8a373573d6687d5821cb9c9c175ec9004f130b1c85cb6eda78db428154/blastdns-2.0.0-cp314-cp314-win32.whl", hash = "sha256:327e67116350cc3766d15dc0807ef07a625eb3ae4bd0dd3da765d8210323ed48", size = 2396906, upload-time = "2026-09-22T15:09:52.88Z" }, - { url = "https://files.pythonhosted.org/packages/f4/22/10baffe980ef65e2ad1a6eb45545fc8a61cf412234b23259eeb809644811/blastdns-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:cffa9bb9500c8b488d8715b9ba09f6fe36b90fc83618932ad86f3fb563d5b559", size = 2898488, upload-time = "2026-09-22T15:09:51.419Z" }, - { url = "https://files.pythonhosted.org/packages/8d/82/bb64585c2938d81ea603735d90e2428f6c6b22a4d98c28c3d4af3b8547b7/blastdns-2.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:e4e557fe609bf57ca1252c86cddf410fc6b6a1fcf45f847bff798b82138cef71", size = 2719362, upload-time = "2026-09-22T15:07:27.478Z" }, - { url = "https://files.pythonhosted.org/packages/94/85/3953b5307aeaaaaaa132127c2538762131b0759a5ef36ae717492fb7c03d/blastdns-2.0.0-cp314-cp314t-manylinux_2_28_armv7l.whl", hash = "sha256:9006871ad8efa6d2054e7271ef08448dd3694241a7ecf36bdb65b06d2d986729", size = 2604717, upload-time = "2026-09-22T15:07:39.774Z" }, - { url = "https://files.pythonhosted.org/packages/95/ab/dbc3ab471ddd5aefea282af8589d4b9a390db42c42615968e7cd1d469905/blastdns-2.0.0-cp314-cp314t-manylinux_2_28_i686.whl", hash = "sha256:6a21aef4fd2e796ae4c954cab8e4fcad53fbc99f6073716be52166932a32b1fd", size = 2850986, upload-time = "2026-09-22T15:08:20.896Z" }, - { url = "https://files.pythonhosted.org/packages/c7/ad/737406e036cd1bc45a77d8ae8c32c3c29c4c3c28577136505706e6e01b44/blastdns-2.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:ffab9216b35af99483e8a2605925b97cbe57c7e7d362a9442df519f6a491ecce", size = 3872080, upload-time = "2026-09-22T15:07:52.761Z" }, - { url = "https://files.pythonhosted.org/packages/d0/a8/cbc40c1237222f8e11a0971a50d57b1b549dfe220717758eefac5728584f/blastdns-2.0.0-cp314-cp314t-manylinux_2_28_s390x.whl", hash = "sha256:72bfc9333131e3faff4e4d641549958a1f3a374e3c89610fc24ecff3a985edbd", size = 2784031, upload-time = "2026-09-22T15:08:07.051Z" }, - { url = "https://files.pythonhosted.org/packages/a2/14/c3e23a8c6cd4b09e8e1cc407b3d633bbfb261400f710e23f9a45f06f75b5/blastdns-2.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:5d7bb3c48ee3463ff06245ea34b6bb55bd4d9e21e48b9d7b250f67f329110817", size = 2649945, upload-time = "2026-09-22T15:08:33.933Z" }, - { url = "https://files.pythonhosted.org/packages/0e/98/c48494da5609525487fff8558d934b429b47df088c465d989419436fd0d1/blastdns-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:06e821966692495bfec0487c84da85178551958ca7dd8c2bc8007dfcffa476c0", size = 2897452, upload-time = "2026-09-22T15:08:59.613Z" }, - { url = "https://files.pythonhosted.org/packages/de/48/ec4b6367c776bf5517c9576f54f466d135cf9deee62a9ce2a5c59057db23/blastdns-2.0.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:fe50df4344c7a351652e854d2029bf6de74dd1a2c4b56fb4fe4a8d843b50007c", size = 2877475, upload-time = "2026-09-22T15:09:12.869Z" }, - { url = "https://files.pythonhosted.org/packages/9c/d9/1158d43293a8238f166b1924d7a57a99a3d081853d486c15f2c2bf971b67/blastdns-2.0.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:138d9909f8a4c752ca7adc8617977ba24ef924ba4efd9a619be49adc6659c773", size = 2957210, upload-time = "2026-09-22T15:09:25.977Z" }, - { url = "https://files.pythonhosted.org/packages/51/e1/e09fd5b0a87742c72ba0628e1f55bf32423176311ce9467ee5d501e01c7b/blastdns-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:497358e7f978e3a43e0066d3a4e8987d70a238b7b9ad74315f26e9de2eaaa969", size = 2967979, upload-time = "2026-09-22T15:09:38.78Z" }, - { url = "https://files.pythonhosted.org/packages/81/59/9538910312e62a2cd624a301e85a67826d07ba7a3ce6a640f2165388c47c/blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:1f4d5889044de0d58e9f00a6e1049903083006f98feb57e5fd69f9ad1bf7c313", size = 2718275, upload-time = "2026-09-22T15:07:30.438Z" }, - { url = "https://files.pythonhosted.org/packages/58/eb/672e2448f77dd37b8a74c7d288e2c20a594bac00da31aff0b15587242d09/blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_armv7l.whl", hash = "sha256:7b8fa648c98e3cba68a88ec4705e3a3b7ced4363b9c7c79edc5f854b52f45c1e", size = 2603987, upload-time = "2026-09-22T15:07:42.755Z" }, - { url = "https://files.pythonhosted.org/packages/77/70/4ca1228e934041d003c121f316caa41b5a63f6a6080a179f77b18f24f5f9/blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_i686.whl", hash = "sha256:8061d1c164b7d640723802bcfe7d1802b8dc3dc00380f74ba22db9cc7de32e02", size = 2859104, upload-time = "2026-09-22T15:08:24.012Z" }, - { url = "https://files.pythonhosted.org/packages/0c/c9/0c6cb5420b860415e67bd8572b511f3573348f19b2a54f95ac96c184a773/blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_ppc64le.whl", hash = "sha256:9f6b0ae5df01ddb04893f39831c438588c075f77d2c56b7bfa26bff5a182e698", size = 3870589, upload-time = "2026-09-22T15:07:56.827Z" }, - { url = "https://files.pythonhosted.org/packages/82/a7/bfaee0af734f1752fd326f9d8be65cb1faac2822c8c032b481721b3419ed/blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_s390x.whl", hash = "sha256:97a007c61e1c76834edb439c0bca19fba88f4bf15bc7f04012fa4888ede05b2f", size = 2782517, upload-time = "2026-09-22T15:08:10.165Z" }, - { url = "https://files.pythonhosted.org/packages/3b/8c/ffd1dd369bfd2d86b51251c73b86a3f2fed675405e2d9a2bd850d120042e/blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c9b13c9347402f615597a6bf9e4add05b753f7bb24b344568ea83653a8c27b5d", size = 2649931, upload-time = "2026-09-22T15:08:36.826Z" }, - { url = "https://files.pythonhosted.org/packages/94/03/41545c2b853489ae08c5b1e9d543ca0db699544fa5f34ef46f19bca8f028/blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ebc1481d4f7d3472f9b704adbec97260a877943a34df3902f54f1dbcd0007a55", size = 2897847, upload-time = "2026-09-22T15:09:02.61Z" }, - { url = "https://files.pythonhosted.org/packages/8f/2f/983fbbb9552cf5ff77cbe0137b1e33c6dd27179556942a4bb981f554ed3b/blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:890bbf43f7f03e3fecab89f73dc4b0e787e15763c1ce3b1dd4cc41d450950be8", size = 2878200, upload-time = "2026-09-22T15:09:15.917Z" }, - { url = "https://files.pythonhosted.org/packages/c1/c5/679df448cb7495bb299e0c0d1ff01586a7696c8b60826d75d5ec3efeb977/blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:d6450e293fc1e7aa7ef6d0457a9d5bde609736215ef24c213dd6d73251b6f73a", size = 2970379, upload-time = "2026-09-22T15:09:29.58Z" }, - { url = "https://files.pythonhosted.org/packages/6b/5d/a85a96975a713264a588d1364882240c010ac8fce8537e7fd2f4da48e4f9/blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6afa71169e23fb47a179420af05d6dfd51c7062130e11a16e0ade1d302fcf45b", size = 2965229, upload-time = "2026-09-22T15:09:41.993Z" }, +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/0f/3824ed4d20bd01d5e06361c121ee96ec10e1f974ebf42126f64aa13d64de/blastdns-2.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:07dfd241715bf5ce2a84d77278e3dc93f801f5ba3e70adb4471b5fa7d453e1c2", size = 2722739, upload-time = "2026-10-14T19:32:32.348Z" }, + { url = "https://files.pythonhosted.org/packages/60/b9/6f338072236d73111ecbadb3f543a0c795dc82fe2a52225a0fbabfa563c0/blastdns-2.0.1-cp310-cp310-manylinux_2_28_armv7l.whl", hash = "sha256:105f51b1c36bdc3dcaff23f73d2859e8b46c9363d8b9576de542c3df8ead5a28", size = 2607280, upload-time = "2026-10-14T19:32:47.171Z" }, + { url = "https://files.pythonhosted.org/packages/00/9a/872fbb6848a17ba179257009f8c0316d8867bc1e62d26eab938581ecfeef/blastdns-2.0.1-cp310-cp310-manylinux_2_28_i686.whl", hash = "sha256:14d21b20e6d9b5c0601df966280130d0a3f462c08c7054aaae25bc507c1e28a0", size = 2853594, upload-time = "2026-10-14T19:33:32.628Z" }, + { url = "https://files.pythonhosted.org/packages/80/67/cdc76bce53fd6cdef3c18f10e96d12aa38e7daa589e645877f399affcc4a/blastdns-2.0.1-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:aecd8655f3e431f1592c91655ece7e1fcbf81f0f81802d88860e6fbdc503b044", size = 3852656, upload-time = "2026-10-14T19:33:01.913Z" }, + { url = "https://files.pythonhosted.org/packages/cf/b4/11560b17d3ac6debd34f5681c84155b1a7a33ece19a49155dde695657f92/blastdns-2.0.1-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:b9c2df6d199399e982323b951f92c21c5cba2e9183e3033498ff48374c0daa71", size = 2793628, upload-time = "2026-10-14T19:33:17.379Z" }, + { url = "https://files.pythonhosted.org/packages/f4/3d/bc3b5f76262668d354e3d623285962957b446808821decba616484e4439a/blastdns-2.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:410354828c932110cd75cad7fdc7b4cdfd8aee41f7a4c62762f904230d463805", size = 2649743, upload-time = "2026-10-14T19:33:47.364Z" }, + { url = "https://files.pythonhosted.org/packages/39/c4/ef6d35685ec64d06444ed1d714b90c479532f3427c023762bb3712403938/blastdns-2.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:540bcffd739c24b16e7815be16142bc524c5fd2e287056b376d7f946f2d79d8f", size = 2900724, upload-time = "2026-10-14T19:34:17.617Z" }, + { url = "https://files.pythonhosted.org/packages/66/e2/9ad7db1a4f380219ab13c6be7a2bff62a6e1b7e4c47f39d3abc146a91040/blastdns-2.0.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:fcf2d2240b943afb04ccbc666d69902c43ae984156da2447e54ce9f63dc9fa2c", size = 2882928, upload-time = "2026-10-14T19:34:32.026Z" }, + { url = "https://files.pythonhosted.org/packages/22/1f/031ad4c7dc1a876a3a8d59b24ed3519560d5cf6ae87e104bedac197bfd75/blastdns-2.0.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:bc0de2ab9ea9c368d1a20539ff0cbaeabd508d7523e5c33adc4ed348accbaadc", size = 2841858, upload-time = "2026-10-14T19:34:10.087Z" }, + { url = "https://files.pythonhosted.org/packages/84/3b/82317fe3f279d3f001bb8995a7e4687f3651bbf69e1e14248f8929e79e73/blastdns-2.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5d9d91e512b3349cc077a341e864061c5ca2cae148b89688596f1ad90629e634", size = 2704757, upload-time = "2026-10-14T19:34:02.305Z" }, + { url = "https://files.pythonhosted.org/packages/1b/a2/48d0429936f135896394e855a12c95dff3cdb62a25abcc00f01574b70680/blastdns-2.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:d598cd7f7c0d25afc56b922159bed6a9f87073171fcc4e564e72697c68225324", size = 2724339, upload-time = "2026-10-14T19:32:34.535Z" }, + { url = "https://files.pythonhosted.org/packages/2c/dd/dd0f0631b7cd132175604222c26f45cebf71b98289c48c76d023be98995d/blastdns-2.0.1-cp311-cp311-manylinux_2_28_armv7l.whl", hash = "sha256:61cd04cd508bd8a6dab4032373126f9f7d7a87483356737d05ed0aa6df66895b", size = 2607074, upload-time = "2026-10-14T19:32:49.269Z" }, + { url = "https://files.pythonhosted.org/packages/95/59/753d15749ae35097d7912e1373ef2aac6b1b6316e8f5e5e9405896039f68/blastdns-2.0.1-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:fa12551916611eee927e84416e3307fc7788ff18ddb5f97838ec7cac659e7daf", size = 2853417, upload-time = "2026-10-14T19:33:34.325Z" }, + { url = "https://files.pythonhosted.org/packages/77/ac/7531cab453719637dea2aa3abf69ffa8221e03c934bb429ab89c8443c8d8/blastdns-2.0.1-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:51f79347461b255ead65d63f3eba241a6daa0586f12e942d443ee9e5a24af9c0", size = 3853940, upload-time = "2026-10-14T19:33:03.842Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/88016061db6fcd1eafb25c9d2319fe69d71d9fe3a2c1411254b04d45a0b0/blastdns-2.0.1-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:a773ee95532a63d6d732dd4e49bae8cbc0542cf611f39e488fdade314c8ce6fc", size = 2798193, upload-time = "2026-10-14T19:33:19.14Z" }, + { url = "https://files.pythonhosted.org/packages/29/16/3b7f930a2d0ff6a1d0c25b4f4268756318ab23c678447b6eb35928567b81/blastdns-2.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:890fb0133a3d9846c3982bf93c6e50dfd6c7e2f17b58a56d374da27b3e00aa4f", size = 2650250, upload-time = "2026-10-14T19:33:49.131Z" }, + { url = "https://files.pythonhosted.org/packages/c5/12/f6ce1b38a038e128ee3aec880e3fc81f47b6f868c4c8075f346a72d4b921/blastdns-2.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2687a4d6ef56ae6a840a0f68c93f2e3d5f3d5539a09fd4a878e58a3368f61e4c", size = 2903109, upload-time = "2026-10-14T19:34:19.345Z" }, + { url = "https://files.pythonhosted.org/packages/0e/70/d21f5de0b44b1ff9ff609093d5aa7264947aec45417c0087acb9c1fde864/blastdns-2.0.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:95ff91257d453661233ee36c22649e3e86ef33fbd215c1884f481ef0cff90352", size = 2882194, upload-time = "2026-10-14T19:34:33.861Z" }, + { url = "https://files.pythonhosted.org/packages/c5/38/e73fb34ac0722755509a3cba8c269bee72203447648862fd051620891d0d/blastdns-2.0.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:dc4c5d3700ceec5329737570f6a7bb356cf949f4fc058ffdff665f2cda790c52", size = 2838408, upload-time = "2026-10-14T19:34:11.979Z" }, + { url = "https://files.pythonhosted.org/packages/bb/91/21bbbe492b280f703e42ee875a28e07b55d512686df1b8f143cd9b0aadef/blastdns-2.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bee27cd2b86b0ff72c871d3dc04ab11fc823da22ffc4db92ecd90102bfcc58d", size = 2700287, upload-time = "2026-10-14T19:34:04.415Z" }, + { url = "https://files.pythonhosted.org/packages/af/6c/8402cfa3fe51d76a2de5cacc37c6c3c1c9cf2fd245ee3ae069a60677f118/blastdns-2.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a0a43bc214fd8624e1c0131c4dca9ff739fec48ad500ae315b7675ad5c8b5baa", size = 2725366, upload-time = "2026-10-14T19:32:36.525Z" }, + { url = "https://files.pythonhosted.org/packages/50/1a/469df4e1e604abf77afba76e046aedef802e9801e1b4a6dcc1aa5140cfd9/blastdns-2.0.1-cp312-cp312-manylinux_2_28_armv7l.whl", hash = "sha256:b532a852bb7077eb202557e2349df05bbd2bdf58b3ed0f221a50da354dd86bc1", size = 2601866, upload-time = "2026-10-14T19:32:50.868Z" }, + { url = "https://files.pythonhosted.org/packages/06/11/572a65cd94998cf11a2d3495e9aa3a4e555b2f86442f5ae1db3326627c84/blastdns-2.0.1-cp312-cp312-manylinux_2_28_i686.whl", hash = "sha256:c412813cb402b540e29f9006571e0f5e6cd707f78613bfe87493df52af247821", size = 2850832, upload-time = "2026-10-14T19:33:36.136Z" }, + { url = "https://files.pythonhosted.org/packages/ee/c1/120e4e02e502ddb8e11ed149a1caf240fbab4b2273abbfcea3a642873e5d/blastdns-2.0.1-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:7415435442b011c0c4ef355ee2b8a738d8c4742d6da456df298489e14db6be4e", size = 3846483, upload-time = "2026-10-14T19:33:06.009Z" }, + { url = "https://files.pythonhosted.org/packages/97/52/36d8a53b55e68061b626ec1f70c34ee82b1c923879e6f5545496efd86258/blastdns-2.0.1-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:b0e1529e15ad1ab690104bf07791a56514d4dc40d05f4700dee70db941e5e8df", size = 2801449, upload-time = "2026-10-14T19:33:21.485Z" }, + { url = "https://files.pythonhosted.org/packages/9d/39/e0e534787d103b9222a61e109ebe081fab03c7954ec0c716f976f83ff91c/blastdns-2.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5228323877d02be0bac4bab6a629bb7e1f6b1691ff67634e61a3e9cf0ff38a9b", size = 2647687, upload-time = "2026-10-14T19:33:51.202Z" }, + { url = "https://files.pythonhosted.org/packages/f6/a9/d543b16bf519c6745f08d8099f3c5ee96e509e23cbc480c2d4213b96c6bd/blastdns-2.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:feade09262e8be3d34493deac122e7cab2cd1a64b981d5427b97a4fe4335638f", size = 2903264, upload-time = "2026-10-14T19:34:21.474Z" }, + { url = "https://files.pythonhosted.org/packages/69/23/6cef28afe657c27d1a154b7ee1a0e3b98798b993a1d656922c73e896c02e/blastdns-2.0.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:8a5a8f0a1c468526a6d7cbce9c68be74d3163a39a9ec8a882442459b94a1d4fc", size = 2877291, upload-time = "2026-10-14T19:34:35.697Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d7/1c82b8bfe49de1a52b67014cc184a38b01a7b5b8e6885ee46958188cdc5b/blastdns-2.0.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5228f822c749c840bf1e7a0503aecc89248eec2d74687d436733e2041e076948", size = 2837821, upload-time = "2026-10-14T19:34:13.906Z" }, + { url = "https://files.pythonhosted.org/packages/17/19/5a858cd40aba9d31213b20199497cec0bc20cac59f4ebdb2373e88d5422b/blastdns-2.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:edcc6352a744ac43eee2ec344c62ef446260ff6a42831b00a7e3f7098e2926c3", size = 2701174, upload-time = "2026-10-14T19:34:06.235Z" }, + { url = "https://files.pythonhosted.org/packages/d6/61/c36a7911ead8b12954542c7b196f368f373a5f3f6dc125e2bda0c850df23/blastdns-2.0.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:8073ae2689bab4b3a8527af7e984932e92f863e259ba68db282bca7977cbab53", size = 2724578, upload-time = "2026-10-14T19:32:38.423Z" }, + { url = "https://files.pythonhosted.org/packages/08/2c/94c9d5f3354b68049663d39e8e910b549fcf16dcadb5fb6b04a30322f705/blastdns-2.0.1-cp313-cp313-manylinux_2_28_armv7l.whl", hash = "sha256:26c7fef34db297625531d9e6f50f341406ee05101db771d099ce17d2d105f069", size = 2601827, upload-time = "2026-10-14T19:32:52.569Z" }, + { url = "https://files.pythonhosted.org/packages/18/a8/79126785836c6f62616ff6d6146d1a3fa10b1a4cd3be79d426ab3922f372/blastdns-2.0.1-cp313-cp313-manylinux_2_28_i686.whl", hash = "sha256:10aee634be393f03b5e2da991f18290cbd27323d294c041c4d769c07fad1d4a8", size = 2850609, upload-time = "2026-10-14T19:33:37.907Z" }, + { url = "https://files.pythonhosted.org/packages/82/c7/29e25f9b57c7a290d7afbd39ff6099035c056040f89988e5e32b4708ae17/blastdns-2.0.1-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:e6db4defebfe0a10485092e98c8ed353325edd6c7c1312b0581282c837f9f276", size = 3849230, upload-time = "2026-10-14T19:33:08.029Z" }, + { url = "https://files.pythonhosted.org/packages/ca/b5/1321b54fad20e1482abfdda4a83970c12afb3540a89b725a9e91d114011e/blastdns-2.0.1-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:8b47b7769b91733c9b877cd555e94685ecc0733c47c897f5620b43cbf82a516f", size = 2801072, upload-time = "2026-10-14T19:33:23.462Z" }, + { url = "https://files.pythonhosted.org/packages/ff/f1/62cfd6e72d7161265a28a46c97052746144de1ed1898caa3257f6c18862c/blastdns-2.0.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:0268a44e929b856ce7d0e6c25e037c5a345c399545988fbe5da92fab1e47b4e8", size = 2647579, upload-time = "2026-10-14T19:33:52.952Z" }, + { url = "https://files.pythonhosted.org/packages/e6/a5/46481683496cd7e0f21b9cb1d8395afffb064f66bdbc5b1ef7f24cb84612/blastdns-2.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a6d0cde06f96437c00f258a3c249fc02f8f3bb4afd84acd36e1152a62e984d9f", size = 2902959, upload-time = "2026-10-14T19:34:23.201Z" }, + { url = "https://files.pythonhosted.org/packages/f1/05/b4c35ca8002712e4fe254e630143765c42d51ee4ade4cc2b7e9ed3273bca/blastdns-2.0.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:1b283f3a8e72ef671d4ce22de006c25dc5fc6654231aa900a40c2d5bcd764a81", size = 2877558, upload-time = "2026-10-14T19:34:37.936Z" }, + { url = "https://files.pythonhosted.org/packages/a8/6e/f98f06dd84554331d19442b35f84321aff76aecf177ae836e0c65cc38f8c/blastdns-2.0.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:5818a5f88638ee861e3fbfb897b03e5d6dd2d0e0831231ded5a6680788f83e61", size = 2836938, upload-time = "2026-10-14T19:34:15.64Z" }, + { url = "https://files.pythonhosted.org/packages/62/82/3756411644c02e4633c7139f1bac26f9228fe2a7cecc1c930aa452122716/blastdns-2.0.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c89f9bb8721f9ff52b685510ffe0e8deec7b8c8c86b35801c3dd99823b47a5d5", size = 2699966, upload-time = "2026-10-14T19:34:08.35Z" }, + { url = "https://files.pythonhosted.org/packages/17/17/1dfd42fe304f9c7feaad39e284200951820e842a32d7dbe6eeebbbbea791/blastdns-2.0.1-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:1103e35d1f72c6611c00a1d68c788c13c83b9de74998d39bfcf580b57a8134dd", size = 2725335, upload-time = "2026-10-14T19:32:40.291Z" }, + { url = "https://files.pythonhosted.org/packages/f8/93/cb8e484bc81ed55c2f6664c7a1dbaf1b468befdfc3d53ad0deb1323ce1f8/blastdns-2.0.1-cp314-cp314-manylinux_2_28_armv7l.whl", hash = "sha256:3a17a15f64c159df3f505c19b7cd2efd7f25b9c3dd5c7a0148889e058e5ad55c", size = 2601818, upload-time = "2026-10-14T19:32:54.326Z" }, + { url = "https://files.pythonhosted.org/packages/ea/62/a079b58c3b4702686285ec490648878b3e823a8d3267d3fc369b7239fe7d/blastdns-2.0.1-cp314-cp314-manylinux_2_28_i686.whl", hash = "sha256:0c581d6d87bbe448c39fcefd2821a03c3d0c2650d05ee7af4bdaee6603eafab7", size = 2850932, upload-time = "2026-10-14T19:33:40.037Z" }, + { url = "https://files.pythonhosted.org/packages/25/33/d0163f53da5ae55edf08e02d9cd6ecd81bddf715ae716cd635f40b14ea3c/blastdns-2.0.1-cp314-cp314-manylinux_2_28_ppc64le.whl", hash = "sha256:b974cf568f3c818a1a960fd77a4a5b7b9b4e65275b14520d7bb1cb63328f9cf3", size = 3847012, upload-time = "2026-10-14T19:33:09.77Z" }, + { url = "https://files.pythonhosted.org/packages/dd/01/49a1ef5a740ccf667ffc0e9296f840e19443e933417253b22de5e0627cd9/blastdns-2.0.1-cp314-cp314-manylinux_2_28_s390x.whl", hash = "sha256:062f98af53c7ef19166ca754f7225bb17b4ee55ecaf80f6afbdec5e1c12baab3", size = 2792411, upload-time = "2026-10-14T19:33:25.189Z" }, + { url = "https://files.pythonhosted.org/packages/14/ba/ff23f164e643ac1eaeb3c6d52d4ee433ecb7315363dde8106f5db1a8a8da/blastdns-2.0.1-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:221dbb04e21bf4a8968beccdad17a62473fdd53af4cf4e68a40c7e9c8efe8eb6", size = 2649147, upload-time = "2026-10-14T19:33:54.798Z" }, + { url = "https://files.pythonhosted.org/packages/6a/49/8d0c8fcf2f07e8afbe36210cf2ff8843a8a69e8dc4344b08eb5107e672b8/blastdns-2.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1bfc2497c03bdba7170a4bbd17baf08b322af061c96b25ac0ea8673968ac28ec", size = 2904077, upload-time = "2026-10-14T19:34:24.97Z" }, + { url = "https://files.pythonhosted.org/packages/1b/82/31bd1ebbec9775990052c03a546a7dc564218fd67f1afa4b96ba7fd50d1f/blastdns-2.0.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:6c05416ce5e0caea2b4cf76f205878dfd49c33d2e2c034477c1a70c2759cfc42", size = 2878780, upload-time = "2026-10-14T19:34:39.724Z" }, + { url = "https://files.pythonhosted.org/packages/55/34/78c8ebca5399f116b9751a2e8cc31c71481ecebea98e42fc9e16042a1c46/blastdns-2.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:46374dbf26545642c4b7adec0e4018a799e10b242a36261b417393ee92d09200", size = 2734045, upload-time = "2026-10-14T19:32:42.039Z" }, + { url = "https://files.pythonhosted.org/packages/b3/f2/216e36248989640733aa8b682fbadc97384165b4ac6510e2b62c8a1713aa/blastdns-2.0.1-cp314-cp314t-manylinux_2_28_armv7l.whl", hash = "sha256:b9b7e3c536e7685f070c6aa7bbd66f1195d853bf397bf66ab926106f5245e717", size = 2601557, upload-time = "2026-10-14T19:32:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/5b/d1/385b2c09e900d89cab729fb0adce07f0fa16247ff49ddfa26efb59d2ea25/blastdns-2.0.1-cp314-cp314t-manylinux_2_28_i686.whl", hash = "sha256:1625a4f9e9425cd75234aa10e813e5db4760b39a28b42ebf4366dfe2d4a4b8f8", size = 2849252, upload-time = "2026-10-14T19:33:41.7Z" }, + { url = "https://files.pythonhosted.org/packages/b4/70/b5790ee82c008e98366a6ca5e6242596fc2e1e15b9cbfb2b1d4e67c2797b/blastdns-2.0.1-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:7a58abd0db0737c1912bd73827ee1523b862f398b086e1e3d1c6ee06b147abdd", size = 3859647, upload-time = "2026-10-14T19:33:11.741Z" }, + { url = "https://files.pythonhosted.org/packages/f0/38/fbadb3f3d92fefc6bbf9a34a9bfd4743b512d19c98ec67a4752411255937/blastdns-2.0.1-cp314-cp314t-manylinux_2_28_s390x.whl", hash = "sha256:231f90d0a4056edd676b29e8313e784573d423716e1228b59a3afc532b399032", size = 2807449, upload-time = "2026-10-14T19:33:26.925Z" }, + { url = "https://files.pythonhosted.org/packages/34/ca/ee1c4ac737bd994b0efc65cd3309fa2eea96f021e76ecaeb3a7436c567a6/blastdns-2.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:356c8fdba2f8352c34d078faa3427e80b02b05b1f90e81d652ef096b6e460a19", size = 2653226, upload-time = "2026-10-14T19:33:56.534Z" }, + { url = "https://files.pythonhosted.org/packages/47/bf/4b3c5dc378bd0c5236208132d8e33c1075890c98aabf0850d3e75515f71d/blastdns-2.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:cade407ee51bc10a5a151156b0f41c84fb3059205f120ff2f0cb5609e1e72dc3", size = 2911194, upload-time = "2026-10-14T19:34:26.651Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ac/3f81cf16aa4ead654aecb253190087b3ea2b718576b27e95b47ae1437983/blastdns-2.0.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ce1b86ddd1bf91adeba2983bce25716447dddd80d3c97bf0f8df76092b5e2314", size = 2721429, upload-time = "2026-10-14T19:32:45.511Z" }, + { url = "https://files.pythonhosted.org/packages/74/c4/786690c85d4562b86f3c2ea73e12dd0b0fb5f3468af7f3079801b018a46e/blastdns-2.0.1-pp311-pypy311_pp73-manylinux_2_28_armv7l.whl", hash = "sha256:c9e5ea7d1cdbe0af58a29cfca88409a3455c1387c74b80735dd9c35227abb5cf", size = 2607426, upload-time = "2026-10-14T19:32:59.733Z" }, + { url = "https://files.pythonhosted.org/packages/93/2f/0a8bbd5713333c3a64a542311f1a52454c3225aaa44435296bb58e78f30d/blastdns-2.0.1-pp311-pypy311_pp73-manylinux_2_28_i686.whl", hash = "sha256:2fd948e7323546dedc542a123d38b1d611ecb1e839947b6f5c7a408bf7987e78", size = 2854541, upload-time = "2026-10-14T19:33:45.446Z" }, + { url = "https://files.pythonhosted.org/packages/4e/76/73054f4bb94d1a1acd5b76a693a11954d247b72672a5d228648b1ffce545/blastdns-2.0.1-pp311-pypy311_pp73-manylinux_2_28_ppc64le.whl", hash = "sha256:69c9efe33d1c495ff6320992587faa3f1378ab1a804fd10700f9e71392daf063", size = 3851080, upload-time = "2026-10-14T19:33:15.467Z" }, + { url = "https://files.pythonhosted.org/packages/f3/b1/cebcc3d46870d9d71aa1e91be4206989e1d76c7f4020ecb7287dfa912f91/blastdns-2.0.1-pp311-pypy311_pp73-manylinux_2_28_s390x.whl", hash = "sha256:48ec433e49d8cdeefabbe47b4fe9fce9e3c4ee0d3a290ce24842e5dd23a2e0f4", size = 2794605, upload-time = "2026-10-14T19:33:30.618Z" }, + { url = "https://files.pythonhosted.org/packages/13/a6/8ffdeb39439fa2b9874d25e43295864d71cfcbd7ce6140527cc5dc774335/blastdns-2.0.1-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:669436c92b5c01cc3f8069130145709c449eeda47f50dc80a2c64f4d07507db9", size = 2648824, upload-time = "2026-10-14T19:34:00.514Z" }, + { url = "https://files.pythonhosted.org/packages/d2/cd/a61cf2afd869460ec4f95bcc040d02a652bf3b64b41bdd3564e0e61bd56e/blastdns-2.0.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:40728d970b417a25c9bfac24d7d2598ead027781309e18004f5061bdb4ca9dc3", size = 2900864, upload-time = "2026-10-14T19:34:30.346Z" }, ] [[package]] From 72a52bbc771a3952fc3e797fb83dda3456cd5505 Mon Sep 17 00:00:00 2001 From: Paul Mueller Date: Tue, 20 Oct 2026 17:55:17 -0400 Subject: [PATCH 20/28] Bump radixtarget to 4.3.0 (#3558) --- pyproject.toml | 2 +- uv.lock | 805 ++++++++++++++++++++----------------------------- 2 files changed, 330 insertions(+), 477 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index abdfbbd7a9..29f56b363b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,7 +42,7 @@ dependencies = [ "puremagic>=1.28,<2", "pydantic>=2.12.2,<3", "pyyaml>=6.0.0,<7", - "radixtarget>=4.0.1,<5", + "radixtarget>=4.3.0,<5", "asndb>=1.1.0", "orjson>=3.10.12,<4", "ansible-core>=2.17,<3", diff --git a/uv.lock b/uv.lock index a0e7e71949..080e9a0a09 100644 --- a/uv.lock +++ b/uv.lock @@ -1,10 +1,9 @@ version = 1 revision = 3 -requires-python = ">=3.10, <3.15" +requires-python = ">=3.11, <3.16" resolution-markers = [ "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", - "python_full_version < '3.11'", + "python_full_version < '3.12'", ] [[package]] @@ -25,38 +24,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, ] -[[package]] -name = "ansible-core" -version = "2.17.14" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11'", -] -dependencies = [ - { name = "cryptography" }, - { name = "jinja2" }, - { name = "packaging" }, - { name = "pyyaml" }, - { name = "resolvelib", version = "1.0.1", source = { registry = "https://pypi.org/simple" } }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ff/80/2925a0564f6f99a8002c3be3885b83c3a1dc5f57ebf00163f528889865f5/ansible_core-2.17.14.tar.gz", hash = "sha256:7c17fee39f8c29d70e3282a7e9c10bd70d5cd4fd13ddffc5dcaa52adbd142ff8", size = 3119687, upload-time = "2025-09-08T18:28:03.158Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/29/d694562f1a875b50aa74f691521fe493704f79cf1938cd58f28f7e2327d2/ansible_core-2.17.14-py3-none-any.whl", hash = "sha256:34a49582a57c2f2af17ede2cefd3b3602a2d55d22089f3928570d52030cafa35", size = 2189656, upload-time = "2025-09-08T18:28:00.375Z" }, -] - [[package]] name = "ansible-core" version = "2.19.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version == '3.11.*'", + "python_full_version < '3.12'", ] dependencies = [ - { name = "cryptography" }, - { name = "jinja2" }, - { name = "packaging" }, - { name = "pyyaml" }, - { name = "resolvelib", version = "1.2.1", source = { registry = "https://pypi.org/simple" } }, + { name = "cryptography", marker = "python_full_version < '3.12'" }, + { name = "jinja2", marker = "python_full_version < '3.12'" }, + { name = "packaging", marker = "python_full_version < '3.12'" }, + { name = "pyyaml", marker = "python_full_version < '3.12'" }, + { name = "resolvelib", marker = "python_full_version < '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/8b/98/ca1135c50aa3004367ff1f66c101a565ac17b4bfa1c9f9a2d8e395e06775/ansible_core-2.19.6.tar.gz", hash = "sha256:1e6b711e357901422592a1d1e4a076eee918497587646a5843fa61536ede1990", size = 3414480, upload-time = "2026-01-29T19:24:10.09Z" } wheels = [ @@ -71,11 +51,11 @@ resolution-markers = [ "python_full_version >= '3.12'", ] dependencies = [ - { name = "cryptography" }, - { name = "jinja2" }, - { name = "packaging" }, - { name = "pyyaml" }, - { name = "resolvelib", version = "1.2.1", source = { registry = "https://pypi.org/simple" } }, + { name = "cryptography", marker = "python_full_version >= '3.12'" }, + { name = "jinja2", marker = "python_full_version >= '3.12'" }, + { name = "packaging", marker = "python_full_version >= '3.12'" }, + { name = "pyyaml", marker = "python_full_version >= '3.12'" }, + { name = "resolvelib", marker = "python_full_version >= '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/22/56/a76adc20dee854b52a3e20fcb9c01280bbac52ef54308e5b1c7bc67ade76/ansible_core-2.20.2.tar.gz", hash = "sha256:75e19a3ad8cf659579ea182cdf948ee0900d700e564802e92876de53dbd9715d", size = 3317427, upload-time = "2026-01-29T19:25:04.814Z" } wheels = [ @@ -102,7 +82,6 @@ name = "anyio" version = "4.12.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "idna" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] @@ -135,15 +114,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" }, ] -[[package]] -name = "backports-asyncio-runner" -version = "1.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size = 69893, upload-time = "2025-07-02T02:27:15.685Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size = 12313, upload-time = "2025-07-02T02:27:14.263Z" }, -] - [[package]] name = "backrefs" version = "6.1" @@ -183,8 +153,7 @@ name = "bbot" version = "3.0.2" source = { editable = "." } dependencies = [ - { name = "ansible-core", version = "2.17.14", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "ansible-core", version = "2.19.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "ansible-core", version = "2.19.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, { name = "ansible-core", version = "2.20.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "ansible-runner" }, { name = "asndb" }, @@ -284,7 +253,7 @@ requires-dist = [ { name = "pyjwt", specifier = ">=2.7.0,<3" }, { name = "pyyaml", specifier = ">=6.0.0,<7" }, { name = "pyzmq", specifier = ">=26.0.3,<28.0.0" }, - { name = "radixtarget", specifier = ">=4.0.1,<5" }, + { name = "radixtarget", specifier = ">=4.3.0,<5" }, { name = "regex", specifier = ">=2024.4.16,<2027.0.0" }, { name = "setproctitle", specifier = ">=1.3.3,<2" }, { name = "socksio", specifier = ">=1.0.0,<2" }, @@ -356,17 +325,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/a0/63/5ad427bd5e23780961ba4f183a85d8428d961feabcfaf237347801dd00a0/blastdns-1.9.1.tar.gz", hash = "sha256:e0ea09a9f0199a64aad8a6abe54e0f0de523a12e6f96da71e79af7fea9d12f2f", size = 114292, upload-time = "2026-04-15T20:33:18.661Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/87/89/c606bd3d9e50771e168ad64745e4b9ef28fa511533d225735178eddab5c7/blastdns-1.9.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:fc9a0c8808b90748dadc224e86a21fed75c1ccfa7df682906401790069262816", size = 2449222, upload-time = "2026-04-15T20:30:51.744Z" }, - { url = "https://files.pythonhosted.org/packages/56/97/8e10f45144e7644c6f9e7a9f96eb7e433ef34bc5e6e84ae3e50581ae24d1/blastdns-1.9.1-cp310-cp310-manylinux_2_28_armv7l.whl", hash = "sha256:077dfd2eb020ea7d120c18263a3f646bcd8dfe1e0d6d1c1f604d5034892d3404", size = 2321373, upload-time = "2026-04-15T20:31:06.388Z" }, - { url = "https://files.pythonhosted.org/packages/47/80/31f3383453114beeade87d99058e1513dd82dafd67002d09ee9337fa886c/blastdns-1.9.1-cp310-cp310-manylinux_2_28_i686.whl", hash = "sha256:eb7833f85bbb8ac246ec55ca5aa9bf622f18d61f6566b4fbc6b3c42e99eae5a7", size = 2546563, upload-time = "2026-04-15T20:31:49.596Z" }, - { url = "https://files.pythonhosted.org/packages/45/76/eefa2fbe0be7781d33baf0b4670bc9d2db6aff0d94aeec1dd8d54c389683/blastdns-1.9.1-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:911516924ff9652cae0905ba218cd58f03d6e4c4d8972d8c00a3540496a15dad", size = 3519094, upload-time = "2026-04-15T20:31:20.464Z" }, - { url = "https://files.pythonhosted.org/packages/62/57/bbef43cfb51ed61977ac2e9d378d5e82ccf541ae3e4f1d318acd25ec6100/blastdns-1.9.1-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:693ba5b6820c6ab8cfd37202babeef354a2fca45ce51afcd8ffa912f2a50e82e", size = 2506642, upload-time = "2026-04-15T20:31:35.818Z" }, - { url = "https://files.pythonhosted.org/packages/e2/25/811477849e41c66e85047133ee4af7ecbd320c5b251988fee94c97c426f8/blastdns-1.9.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:06ebb94fbcc130acfc73356b36f135f9ca655a5ced9780c3ff9bee6394c91639", size = 2439602, upload-time = "2026-04-15T20:31:59.906Z" }, - { url = "https://files.pythonhosted.org/packages/a5/9f/c592c221970f278822f2f8bcefc2422eebf6cced23268d3fda7daec24e01/blastdns-1.9.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:99966441bfed1f5b45abf6c736be5d9bc141946ffe7582a1fbfd90386b16d4af", size = 2627363, upload-time = "2026-04-15T20:32:23.893Z" }, - { url = "https://files.pythonhosted.org/packages/74/41/9a3b74481259f76ce863a6d883779766970007952ceedd469a2d903421f7/blastdns-1.9.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:dd587b057bebdf2797cafa69923425312a038a56b4f48e740db1ce9584d4169a", size = 2594515, upload-time = "2026-04-15T20:32:37.097Z" }, - { url = "https://files.pythonhosted.org/packages/a7/41/23f2ab8eda0f31bf85b1f1aaa41dc2205c224f7032ba431434d78cfc0625/blastdns-1.9.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f45a4fb8dc5d84bc94b266230329ca4e14ae1e43a65f45e1ba52c1ab8509964b", size = 2671944, upload-time = "2026-04-15T20:32:50.331Z" }, - { url = "https://files.pythonhosted.org/packages/85/2a/4149667e1245c80cd501bad55bed7cdb42190c3d727eb742566e65f61041/blastdns-1.9.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:98b9ea17704491fd6d1e40a183222439403433ab2046f8e323ed10dcac5ab214", size = 2689118, upload-time = "2026-04-15T20:33:04.593Z" }, - { url = "https://files.pythonhosted.org/packages/8d/04/8af93946ac6a53f981356e13ddd2eda5c8b76ab355054731e8704c2f4a59/blastdns-1.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:8581a729dd9f32cca8edef0fd8c0529be81fe8ca7faef497f1712b5277c0b896", size = 2657117, upload-time = "2026-04-15T20:33:20.027Z" }, { url = "https://files.pythonhosted.org/packages/5b/d7/b4a757c662a45f82dc32fe916151caef24763f06ddf1d7ac571ff6f0ac51/blastdns-1.9.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:67f52aa4880bed47da178065c8b2935cc41f526a340e0a1dae90f2eb641f99f8", size = 2655899, upload-time = "2026-04-15T20:32:17.262Z" }, { url = "https://files.pythonhosted.org/packages/98/16/5fbb3f57e2a2da7b1ea954c4a7576a0216b8b6f45714cedc0da92c933183/blastdns-1.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9dda8352acba5c9b7e498c61f73f28120e312e441a37d26d8912ddb8c8876b11", size = 2522537, upload-time = "2026-04-15T20:32:10.658Z" }, { url = "https://files.pythonhosted.org/packages/ab/7c/974f4a6f021fcf5a172dc9e6ab508527e5554576eb08f057f4d6345dca79/blastdns-1.9.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:b967cba75fd757b0e954cf4fb3d69c9fb39d95871316a9cf0bb0c2dc5e720077", size = 2450776, upload-time = "2026-04-15T20:30:53.403Z" }, @@ -454,16 +412,6 @@ version = "0.10.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d6/ed/69b881bd12b81db517d0b0483a89827a656165c854bed80dc6a35fb9d3f7/blasthttp-0.10.0.tar.gz", hash = "sha256:5034eac464c5306695f54a43468eb93aaa9abd366ae142320b72b9b7e7bd5bdb", size = 197871, upload-time = "2026-08-21T01:13:33.23Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/99/fd/0bb881534e98cc23ad48142de9b7809de277ac3f2408a82cfa8fac3f1802/blasthttp-0.10.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:795043ed1d05d82efaea83fb99df8e088001ab1c7a0e330a36dd043b09c640d8", size = 5180452, upload-time = "2026-08-21T01:12:00.997Z" }, - { url = "https://files.pythonhosted.org/packages/01/6e/0ef864d61f28d8ecb21119b37fd53c2c549be1eff3f0e66a88d90be46b24/blasthttp-0.10.0-cp310-cp310-manylinux_2_28_armv7l.whl", hash = "sha256:27c4aca2815780d9729c06206ea262ad220d01fc55c4850bf56438b443563a09", size = 4453694, upload-time = "2026-08-21T01:12:10.227Z" }, - { url = "https://files.pythonhosted.org/packages/9e/9a/c97c82a9bc874dc411ee08f7c356e0b2f6ce4a749c6001653cb71bf3e109/blasthttp-0.10.0-cp310-cp310-manylinux_2_28_i686.whl", hash = "sha256:8ee7b571fe653e1dfb9171924bd9cbd40f60d3866b8ffb1a2df8ac265db281d6", size = 5113660, upload-time = "2026-08-21T01:12:37.52Z" }, - { url = "https://files.pythonhosted.org/packages/c8/87/488c6510babc6bb114c2818f7cfe5995d558e6e32611c55005adc542770d/blasthttp-0.10.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:7db11e0b6d6798ab0b8592493018dce1fcedb6e560329ed2546dc18bd99576e5", size = 5116953, upload-time = "2026-08-21T01:12:19.938Z" }, - { url = "https://files.pythonhosted.org/packages/87/6f/4bd88dfe34c17d7d1ea9252d5bb86931ea5585fe9a0b17fce255099cdd7a/blasthttp-0.10.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:abd4a3fd3b4e1a4da533ffcb1ac5902d202ab7338e2f2daa78e673b74b32a634", size = 4702585, upload-time = "2026-08-21T01:12:28.821Z" }, - { url = "https://files.pythonhosted.org/packages/ab/45/ba7bf4b29f7c0a9f440c89cd2400ecff27470569c72560389e05f528e008/blasthttp-0.10.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:e2b86eaac153015cadaf09e0f6343cb1e9bb81d937b739aba80bd21b8fb2d492", size = 4776884, upload-time = "2026-08-21T01:12:46.823Z" }, - { url = "https://files.pythonhosted.org/packages/21/9f/986454aa812aadc37647b999fb01404b3c1eb497088da82372ba535762c4/blasthttp-0.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91a84b2ef79b92f0fe845d2d21faef28c2e65144b25b05065a20c5d767bfa1f0", size = 5469484, upload-time = "2026-08-21T01:12:55.822Z" }, - { url = "https://files.pythonhosted.org/packages/4d/b7/5792e51ea9fbdc30a83777cfc3b2381b644ce6511b1792dcd726f8de8647/blasthttp-0.10.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1ec041e171778d4fb4958a9de93333708a830353082aa0346bc7cff5f5c015d2", size = 4756525, upload-time = "2026-08-21T01:13:05.616Z" }, - { url = "https://files.pythonhosted.org/packages/59/a0/81e6f40a31f8e846622650e46f62b96a4b188d5227ac7b80964e9b504aba/blasthttp-0.10.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cdd484ae9380c0c18184ab035c4b0a174d760170af3bab264af05c35f58254c0", size = 5244388, upload-time = "2026-08-21T01:13:14.66Z" }, - { url = "https://files.pythonhosted.org/packages/27/79/0c286b784170cf297c3e7ed3e287e9298d27aaa38acbdc1a1e210f09661b/blasthttp-0.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d639241a6a5f9b345af96c481fefee77a6bab4b6c240dd8984bfef059c325522", size = 5178642, upload-time = "2026-08-21T01:13:24.251Z" }, { url = "https://files.pythonhosted.org/packages/f0/e8/814691f977367025a05dde70bca48350d19d036842c6d65b5dd4b53b2822/blasthttp-0.10.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:3c8ef6fbc65ae4244cdaf486d0f8db8da038b295f059c6b3d46a81e02b99f55c", size = 5177417, upload-time = "2026-08-21T01:12:02.752Z" }, { url = "https://files.pythonhosted.org/packages/d1/de/e88eb7bdbb124e66c946059995511d99e00f8124ec97ec910353b6213b70/blasthttp-0.10.0-cp311-cp311-manylinux_2_28_armv7l.whl", hash = "sha256:c66cc2457bdf3baa2386ef707dfea9f82e59b38aa48813caab68d6aef2a4f731", size = 4451480, upload-time = "2026-08-21T01:12:11.824Z" }, { url = "https://files.pythonhosted.org/packages/80/a0/f2e41f2621e5887bca46cac8436d70d4b0aa7ef38d73ccff349e448f7012/blasthttp-0.10.0-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:0c3fe2cfcd779bf9c18343802fce7099c4eefd45114c5521d9109f96b021fee1", size = 5111096, upload-time = "2026-08-21T01:12:39.351Z" }, @@ -512,20 +460,6 @@ version = "5.2.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/36/f6/85f176d2518cf1d1be5f981fc2dadf6b131e33fefd721f36b330e3434d6c/cachebox-5.2.3.tar.gz", hash = "sha256:b1f68246685aa739bbbd2734befb1465363a1e1042407c154feadb065f17a099", size = 63686, upload-time = "2026-04-10T12:21:35.028Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/9e/88193fcb7a2a43fe8ed9d9888374d43fa5c7176aa802651e68b28f1aee4a/cachebox-5.2.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c2c89720547271d36e10cad2c7302bbe11f46eb39eead0a2c321c2d371b8f8b6", size = 374393, upload-time = "2026-04-10T12:20:20.424Z" }, - { url = "https://files.pythonhosted.org/packages/98/8d/e0b13d9bfd43f295cce7824ebaac1970f818a7027c16f290de404934cafe/cachebox-5.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e7f33d24e90dc8aa26762e25898c91a1223b66685420a28a3628fa2e006924f5", size = 356318, upload-time = "2026-04-10T12:20:07.518Z" }, - { url = "https://files.pythonhosted.org/packages/bc/02/8ae1b63dbdebb2ebf600523f48b54e9bfb10db5a28551c3432346f49e1dd/cachebox-5.2.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56cb03ec6289a2ac5daf7422d755683324f02d821bfa796087100df2a7ebd5de", size = 395782, upload-time = "2026-04-10T12:18:50.054Z" }, - { url = "https://files.pythonhosted.org/packages/e4/2f/79a8a0057f354581c25a1a00ddabbd5db4b8631d192670d7a0cc4271dbb7/cachebox-5.2.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a71a71df463ba4c86bc843fa01c3a2a721033adefad888af28c6b65e1915a75c", size = 353194, upload-time = "2026-04-10T12:19:03.083Z" }, - { url = "https://files.pythonhosted.org/packages/3b/57/a1fead35cf481432bd87def0653cd4a069b1ea5847589255795e49ae74b8/cachebox-5.2.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbe4655371d19fc9f4f5874312bcb6e5b5b6182989979ac33d93c34c8d10c012", size = 371090, upload-time = "2026-04-10T12:19:16.019Z" }, - { url = "https://files.pythonhosted.org/packages/8c/58/53f1fab8bcc3238fd6c533ef3ab146097986a8acb722863c688a2410c1b2/cachebox-5.2.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4974476d1779961df89d6e6f79e6103a1659289d3ee11c92adcb52e236a8aaeb", size = 390902, upload-time = "2026-04-10T12:19:28.258Z" }, - { url = "https://files.pythonhosted.org/packages/11/2f/5abff74666f8388d2c9516c265f99c33484c827f7fcb3cd703c2f3cbb17e/cachebox-5.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad16d733219f4cab3eec6533af30ab7b9c919c6e3e22ad1ef4eb82629a62edef", size = 395855, upload-time = "2026-04-10T12:19:54.207Z" }, - { url = "https://files.pythonhosted.org/packages/dd/11/30b429db12ab5df663aa108bcfac42805f733da65b0bf452f60bfaf4a530/cachebox-5.2.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:12a9e0a93774ca2b3a9fe8a2a0d0812e399fac4af0fce6246a5bca1e7009b8fc", size = 425760, upload-time = "2026-04-10T12:19:41.138Z" }, - { url = "https://files.pythonhosted.org/packages/cd/b4/fdac1bb902b954c03d23eb301d645a328c9664caff5898930fdbd92fde80/cachebox-5.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:be89497a011eb7a638d13cc520244d77579c0f515b95bf759b3de0b90a015203", size = 564988, upload-time = "2026-04-10T12:20:34.673Z" }, - { url = "https://files.pythonhosted.org/packages/4e/63/76cd5405b0339f15bf86593258bf9bc5608f10a5e0fa6f37a282b42a6caa/cachebox-5.2.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:dd01fc0c1934cccb76493eb4b149a9232d299e5e0275f557adf875c3d25cec81", size = 669110, upload-time = "2026-04-10T12:20:49.039Z" }, - { url = "https://files.pythonhosted.org/packages/d9/bc/52d154aa0407bafce94d1d8d3ff27ca5e842f8311be43cfabdefcbb0f6b7/cachebox-5.2.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a0dfd97b0968f8bd48c33098a03d10f797964559c3a437c84bf97a9973545714", size = 643768, upload-time = "2026-04-10T12:21:04.095Z" }, - { url = "https://files.pythonhosted.org/packages/51/d9/82627eb8cecaf5e7e601bbc65d474a1c3053a2fbc21618ddc6aac19c47dc/cachebox-5.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:223ccf7ac60f595def258e7bc74c0b1d6f43991c9cae6d06749c803d22786d99", size = 610047, upload-time = "2026-04-10T12:21:19.469Z" }, - { url = "https://files.pythonhosted.org/packages/6e/2e/cc5b303746418fde00c93ddbc295733b4e2d131d2e8f5afbc6f45f50454e/cachebox-5.2.3-cp310-cp310-win32.whl", hash = "sha256:745b805fdd99931c3ce1d87d2ee21ca3fb62cba6b4e1f674907af87aad73dce4", size = 275529, upload-time = "2026-04-10T12:21:49.84Z" }, - { url = "https://files.pythonhosted.org/packages/31/72/fb10d6f779d041f701b89f0b7830329f51d1846fbc600869f9f7d635b7b5/cachebox-5.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:a87b19c0a3d8d665a9805b5b4afd64b40082395b70ebe2756131ed1edb0c8f02", size = 287988, upload-time = "2026-04-10T12:21:36.41Z" }, { url = "https://files.pythonhosted.org/packages/81/88/154179d492f2c000fe6efab3c3ff6b8eb94fbfaa09efe47999bce6b1e29f/cachebox-5.2.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:996f49d04b234082530afcc650bdd00556afbebc19c6c0daaafb85950340cb3c", size = 374245, upload-time = "2026-04-10T12:20:22.042Z" }, { url = "https://files.pythonhosted.org/packages/7d/9d/3b03f2e063161bcb1a5e0969d521b5c622c2da02252a5c8bd4ef0e4f9914/cachebox-5.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23a3300ebbb526fa12ce6fa53699002f5fba6da23b4bbbaf8ba8b18a3f03e6b3", size = 356308, upload-time = "2026-04-10T12:20:09.149Z" }, { url = "https://files.pythonhosted.org/packages/bb/9b/8da38af731e3832e9f987548e4bfb610d7f3054019e12c44a94ba9272b37/cachebox-5.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79c63ee1589364caa04c018405e625d2e44e0bf9994f2715b2f322075d8c45b6", size = 395666, upload-time = "2026-04-10T12:18:51.89Z" }, @@ -652,18 +586,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, - { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, - { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, - { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, - { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, - { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, - { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, - { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, - { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, - { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, - { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, @@ -740,22 +662,6 @@ version = "3.4.4" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/b8/6d51fc1d52cbd52cd4ccedd5b5b2f0f6a11bbf6765c782298b0f3e808541/charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d", size = 209709, upload-time = "2025-10-14T04:40:11.385Z" }, - { url = "https://files.pythonhosted.org/packages/5c/af/1f9d7f7faafe2ddfb6f72a2e07a548a629c61ad510fe60f9630309908fef/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8", size = 148814, upload-time = "2025-10-14T04:40:13.135Z" }, - { url = "https://files.pythonhosted.org/packages/79/3d/f2e3ac2bbc056ca0c204298ea4e3d9db9b4afe437812638759db2c976b5f/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad", size = 144467, upload-time = "2025-10-14T04:40:14.728Z" }, - { url = "https://files.pythonhosted.org/packages/ec/85/1bf997003815e60d57de7bd972c57dc6950446a3e4ccac43bc3070721856/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8", size = 162280, upload-time = "2025-10-14T04:40:16.14Z" }, - { url = "https://files.pythonhosted.org/packages/3e/8e/6aa1952f56b192f54921c436b87f2aaf7c7a7c3d0d1a765547d64fd83c13/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d", size = 159454, upload-time = "2025-10-14T04:40:17.567Z" }, - { url = "https://files.pythonhosted.org/packages/36/3b/60cbd1f8e93aa25d1c669c649b7a655b0b5fb4c571858910ea9332678558/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313", size = 153609, upload-time = "2025-10-14T04:40:19.08Z" }, - { url = "https://files.pythonhosted.org/packages/64/91/6a13396948b8fd3c4b4fd5bc74d045f5637d78c9675585e8e9fbe5636554/charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e", size = 151849, upload-time = "2025-10-14T04:40:20.607Z" }, - { url = "https://files.pythonhosted.org/packages/b7/7a/59482e28b9981d105691e968c544cc0df3b7d6133152fb3dcdc8f135da7a/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93", size = 151586, upload-time = "2025-10-14T04:40:21.719Z" }, - { url = "https://files.pythonhosted.org/packages/92/59/f64ef6a1c4bdd2baf892b04cd78792ed8684fbc48d4c2afe467d96b4df57/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0", size = 145290, upload-time = "2025-10-14T04:40:23.069Z" }, - { url = "https://files.pythonhosted.org/packages/6b/63/3bf9f279ddfa641ffa1962b0db6a57a9c294361cc2f5fcac997049a00e9c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84", size = 163663, upload-time = "2025-10-14T04:40:24.17Z" }, - { url = "https://files.pythonhosted.org/packages/ed/09/c9e38fc8fa9e0849b172b581fd9803bdf6e694041127933934184e19f8c3/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e", size = 151964, upload-time = "2025-10-14T04:40:25.368Z" }, - { url = "https://files.pythonhosted.org/packages/d2/d1/d28b747e512d0da79d8b6a1ac18b7ab2ecfd81b2944c4c710e166d8dd09c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db", size = 161064, upload-time = "2025-10-14T04:40:26.806Z" }, - { url = "https://files.pythonhosted.org/packages/bb/9a/31d62b611d901c3b9e5500c36aab0ff5eb442043fb3a1c254200d3d397d9/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6", size = 155015, upload-time = "2025-10-14T04:40:28.284Z" }, - { url = "https://files.pythonhosted.org/packages/1f/f3/107e008fa2bff0c8b9319584174418e5e5285fef32f79d8ee6a430d0039c/charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f", size = 99792, upload-time = "2025-10-14T04:40:29.613Z" }, - { url = "https://files.pythonhosted.org/packages/eb/66/e396e8a408843337d7315bab30dbf106c38966f1819f123257f5520f8a96/charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d", size = 107198, upload-time = "2025-10-14T04:40:30.644Z" }, - { url = "https://files.pythonhosted.org/packages/b5/58/01b4f815bf0312704c267f2ccb6e5d42bcc7752340cd487bc9f8c3710597/charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69", size = 100262, upload-time = "2025-10-14T04:40:32.108Z" }, { url = "https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8", size = 206988, upload-time = "2025-10-14T04:40:33.79Z" }, { url = "https://files.pythonhosted.org/packages/94/59/2e87300fe67ab820b5428580a53cad894272dbb97f38a7a814a2a1ac1011/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0", size = 147324, upload-time = "2025-10-14T04:40:34.961Z" }, { url = "https://files.pythonhosted.org/packages/07/fb/0cf61dc84b2b088391830f6274cb57c82e4da8bbc2efeac8c025edb88772/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3", size = 142742, upload-time = "2025-10-14T04:40:36.105Z" }, @@ -841,16 +747,6 @@ version = "11.1.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b5/a7/ef40cc541c87615091321ac67042ce481e32215d93c37fd184fd999d2a0e/cloudcheck-11.1.0.tar.gz", hash = "sha256:6f6d7415fd62dd1dffeb171f603e4f25f451a856924f0b0e7d14851a2b888574", size = 4912429, upload-time = "2026-06-24T01:38:19.915Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f0/d1/1f68ac63c190a1f3abf1d0956ae397e7a55609c7e091e87ec4df1b782f64/cloudcheck-11.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f0381f12baa470b39b5754ff2103700ac08022b0d973b0a1ee88c581cd0b9e8", size = 4233583, upload-time = "2026-06-24T01:51:11.284Z" }, - { url = "https://files.pythonhosted.org/packages/9c/49/13874ca76de9ed7ff8073940875b56b73da51db5265d36853f4f92fa8ac8/cloudcheck-11.1.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e92a24c67864befc009d9ab6c87f3a78f827dc17eb72b45d8191f79d5378e624", size = 3585529, upload-time = "2026-06-24T01:51:24.341Z" }, - { url = "https://files.pythonhosted.org/packages/1e/d3/a21374abbc78539141830b63bffa68c7e08009722022b333868376a3d835/cloudcheck-11.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d0b542a401dc6defdc748f42abbf2a5aaf89de7c645c346e01f296dd7309458", size = 4169240, upload-time = "2026-06-24T01:51:49.462Z" }, - { url = "https://files.pythonhosted.org/packages/54/3f/3f14b8ba7cfa702d4561ec7288b5f314c93c182a67dd43f5ed5daad8f1be/cloudcheck-11.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f70749d0a0b8f72ef4c1141a0cb733f583e14be29731c7fcdf85d274d21c178", size = 4082231, upload-time = "2026-06-24T01:51:37.04Z" }, - { url = "https://files.pythonhosted.org/packages/68/2c/a52e04c8b7b7b6da8c20665b1b3a0e529e83d1c857eff07bb5b611dcee5e/cloudcheck-11.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cb52f4d6a7a19c78ad3c26c7f197fd08ff53d4c72382366d85b1ad3d8f380f6", size = 4029422, upload-time = "2026-06-24T01:52:02.106Z" }, - { url = "https://files.pythonhosted.org/packages/5d/36/1b089ed7e6810a6321139e60d1c8a8805128b136fff8cc9c09f80040fcea/cloudcheck-11.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f937b943508e085ea1310cde445c78e88a83a3298155df9ad6f903b4ae7163dc", size = 4637574, upload-time = "2026-06-24T01:52:28.815Z" }, - { url = "https://files.pythonhosted.org/packages/be/79/936692cfb53adc0d6f077940c0e6eeaba3266d6117894940a0ed7437ed60/cloudcheck-11.1.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:27c1c9bcadc00b38ef25ebd13cfbdd659c097eb63e737ed77f49375f51639db0", size = 3918053, upload-time = "2026-06-24T01:52:42.204Z" }, - { url = "https://files.pythonhosted.org/packages/0b/08/c515843e474916520c2f3000ad96d84bd57905718ad811ba817ed7e91ca0/cloudcheck-11.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:811ed6e39cbb9f4497de0cf924c50f3eb1244c6ecd5062a0e1a423d335f02990", size = 4262168, upload-time = "2026-06-24T01:52:55.955Z" }, - { url = "https://files.pythonhosted.org/packages/d7/f5/f71d03477412a8ed9689a5c1231fd8af6ea41498fdacce601ab8c5730f55/cloudcheck-11.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9c5e1eaa5758d8a6a10a8846478fe9813424e105c0fc742a47218dcddcb0d10f", size = 4291736, upload-time = "2026-06-24T01:53:09.554Z" }, - { url = "https://files.pythonhosted.org/packages/d8/36/26ece5eb37a656f79ae622c4d971d6861bd946b3e00939f93d7df62d1dec/cloudcheck-11.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:e969a8e7def6d1a15ec9e16e691886a6dad47b2179cf5a802dbe97aeb1e309a4", size = 1414797, upload-time = "2026-06-24T01:53:23.783Z" }, { url = "https://files.pythonhosted.org/packages/80/af/0ae5ef92b6cadfabc5a720e188538c87ca2f100ba9d0fd32acfa673ce8b6/cloudcheck-11.1.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0d46d045256dee4d6cdcd8ab318a23685198e48efb0ac90374d01117b4fe76fb", size = 1632427, upload-time = "2026-06-24T01:52:22.037Z" }, { url = "https://files.pythonhosted.org/packages/39/4a/d2ac4022927c021782146e6074ffb6956eb913c73522b4df2cc48f022f5f/cloudcheck-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0ed638c38fb92f5fd3418ddc7c4efa57acbe7be094913e892c5407f079e487c0", size = 1607813, upload-time = "2026-06-24T01:52:14.82Z" }, { url = "https://files.pythonhosted.org/packages/d1/33/e78b449dd12e5b9deaf24c81cd456439c61a78f7241dc53980ae97738c7f/cloudcheck-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e51567ec7e0fb2ec00767ce4d5960bfea7508e2a7930a1319ade023e780ac1b", size = 4235073, upload-time = "2026-06-24T01:51:13Z" }, @@ -936,20 +832,6 @@ version = "7.13.4" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/24/56/95b7e30fa389756cb56630faa728da46a27b8c6eb46f9d557c68fff12b65/coverage-7.13.4.tar.gz", hash = "sha256:e5c8f6ed1e61a8b2dcdf31eb0b9bbf0130750ca79c1c49eb898e2ad86f5ccc91", size = 827239, upload-time = "2026-02-09T12:59:03.86Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/d4/7827d9ffa34d5d4d752eec907022aa417120936282fc488306f5da08c292/coverage-7.13.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fc31c787a84f8cd6027eba44010517020e0d18487064cd3d8968941856d1415", size = 219152, upload-time = "2026-02-09T12:56:11.974Z" }, - { url = "https://files.pythonhosted.org/packages/35/b0/d69df26607c64043292644dbb9dc54b0856fabaa2cbb1eeee3331cc9e280/coverage-7.13.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a32ebc02a1805adf637fc8dec324b5cdacd2e493515424f70ee33799573d661b", size = 219667, upload-time = "2026-02-09T12:56:13.33Z" }, - { url = "https://files.pythonhosted.org/packages/82/a4/c1523f7c9e47b2271dbf8c2a097e7a1f89ef0d66f5840bb59b7e8814157b/coverage-7.13.4-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e24f9156097ff9dc286f2f913df3a7f63c0e333dcafa3c196f2c18b4175ca09a", size = 246425, upload-time = "2026-02-09T12:56:14.552Z" }, - { url = "https://files.pythonhosted.org/packages/f8/02/aa7ec01d1a5023c4b680ab7257f9bfde9defe8fdddfe40be096ac19e8177/coverage-7.13.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8041b6c5bfdc03257666e9881d33b1abc88daccaf73f7b6340fb7946655cd10f", size = 248229, upload-time = "2026-02-09T12:56:16.31Z" }, - { url = "https://files.pythonhosted.org/packages/35/98/85aba0aed5126d896162087ef3f0e789a225697245256fc6181b95f47207/coverage-7.13.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a09cfa6a5862bc2fc6ca7c3def5b2926194a56b8ab78ffcf617d28911123012", size = 250106, upload-time = "2026-02-09T12:56:18.024Z" }, - { url = "https://files.pythonhosted.org/packages/96/72/1db59bd67494bc162e3e4cd5fbc7edba2c7026b22f7c8ef1496d58c2b94c/coverage-7.13.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:296f8b0af861d3970c2a4d8c91d48eb4dd4771bcef9baedec6a9b515d7de3def", size = 252021, upload-time = "2026-02-09T12:56:19.272Z" }, - { url = "https://files.pythonhosted.org/packages/9d/97/72899c59c7066961de6e3daa142d459d47d104956db43e057e034f015c8a/coverage-7.13.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e101609bcbbfb04605ea1027b10dc3735c094d12d40826a60f897b98b1c30256", size = 247114, upload-time = "2026-02-09T12:56:21.051Z" }, - { url = "https://files.pythonhosted.org/packages/39/1f/f1885573b5970235e908da4389176936c8933e86cb316b9620aab1585fa2/coverage-7.13.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:aa3feb8db2e87ff5e6d00d7e1480ae241876286691265657b500886c98f38bda", size = 248143, upload-time = "2026-02-09T12:56:22.585Z" }, - { url = "https://files.pythonhosted.org/packages/a8/cf/e80390c5b7480b722fa3e994f8202807799b85bc562aa4f1dde209fbb7be/coverage-7.13.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4fc7fa81bbaf5a02801b65346c8b3e657f1d93763e58c0abdf7c992addd81a92", size = 246152, upload-time = "2026-02-09T12:56:23.748Z" }, - { url = "https://files.pythonhosted.org/packages/44/bf/f89a8350d85572f95412debb0fb9bb4795b1d5b5232bd652923c759e787b/coverage-7.13.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:33901f604424145c6e9c2398684b92e176c0b12df77d52db81c20abd48c3794c", size = 249959, upload-time = "2026-02-09T12:56:25.209Z" }, - { url = "https://files.pythonhosted.org/packages/f7/6e/612a02aece8178c818df273e8d1642190c4875402ca2ba74514394b27aba/coverage-7.13.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:bb28c0f2cf2782508a40cec377935829d5fcc3ad9a3681375af4e84eb34b6b58", size = 246416, upload-time = "2026-02-09T12:56:26.475Z" }, - { url = "https://files.pythonhosted.org/packages/cb/98/b5afc39af67c2fa6786b03c3a7091fc300947387ce8914b096db8a73d67a/coverage-7.13.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9d107aff57a83222ddbd8d9ee705ede2af2cc926608b57abed8ef96b50b7e8f9", size = 247025, upload-time = "2026-02-09T12:56:27.727Z" }, - { url = "https://files.pythonhosted.org/packages/51/30/2bba8ef0682d5bd210c38fe497e12a06c9f8d663f7025e9f5c2c31ce847d/coverage-7.13.4-cp310-cp310-win32.whl", hash = "sha256:a6f94a7d00eb18f1b6d403c91a88fd58cfc92d4b16080dfdb774afc8294469bf", size = 221758, upload-time = "2026-02-09T12:56:29.051Z" }, - { url = "https://files.pythonhosted.org/packages/78/13/331f94934cf6c092b8ea59ff868eb587bc8fe0893f02c55bc6c0183a192e/coverage-7.13.4-cp310-cp310-win_amd64.whl", hash = "sha256:2cb0f1e000ebc419632bbe04366a8990b6e32c4e0b51543a6484ffe15eaeda95", size = 222693, upload-time = "2026-02-09T12:56:30.366Z" }, { url = "https://files.pythonhosted.org/packages/b4/ad/b59e5b451cf7172b8d1043dc0fa718f23aab379bc1521ee13d4bd9bfa960/coverage-7.13.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d490ba50c3f35dd7c17953c68f3270e7ccd1c6642e2d2afe2d8e720b98f5a053", size = 219278, upload-time = "2026-02-09T12:56:31.673Z" }, { url = "https://files.pythonhosted.org/packages/f1/17/0cb7ca3de72e5f4ef2ec2fa0089beafbcaaaead1844e8b8a63d35173d77d/coverage-7.13.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:19bc3c88078789f8ef36acb014d7241961dbf883fd2533d18cb1e7a5b4e28b11", size = 219783, upload-time = "2026-02-09T12:56:33.104Z" }, { url = "https://files.pythonhosted.org/packages/ab/63/325d8e5b11e0eaf6d0f6a44fad444ae58820929a9b0de943fa377fe73e85/coverage-7.13.4-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3998e5a32e62fdf410c0dbd3115df86297995d6e3429af80b8798aad894ca7aa", size = 250200, upload-time = "2026-02-09T12:56:34.474Z" }, @@ -1054,7 +936,6 @@ version = "48.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/12/45/870e7f4bef50e5f53b9f51d4428aee5290eedf58ba443f16b1ebb7ab8e66/cryptography-48.0.1.tar.gz", hash = "sha256:266f4ee051abb2f725b74ef8072b521ce1feacf685a3364fa6a6b45548db791a", size = 832989, upload-time = "2026-06-09T22:32:31.8Z" } wheels = [ @@ -1139,18 +1020,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, ] -[[package]] -name = "exceptiongroup" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, -] - [[package]] name = "execnet" version = "2.1.2" @@ -1349,22 +1218,6 @@ version = "6.1.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/23/ad/28ecd7cb894d172f3c9c80a075eeeb2017ac62e3632cee05a5f9493547eb/lxml-6.1.3.tar.gz", hash = "sha256:45222d94ddd511536f3b2f7d9deae3b2339b4ce0f075f1ca25703b07cad9dd21", size = 4211198, upload-time = "2026-09-02T14:48:02.287Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/6b/a7d5c08e19a8e69887ed722fffaefdbaffc8959d5ef5c370a65e52c895ac/lxml-6.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:40bcbd9f94166ffe925811e730607385cec959f42fb1bb7dad83748680465221", size = 8575497, upload-time = "2026-09-02T14:46:05.131Z" }, - { url = "https://files.pythonhosted.org/packages/96/dd/c25a32f9f6039a96cfd52296a4630075868aa16e71858b3076699a059201/lxml-6.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:05f5bce9af14fd1506997594bd81cee6d9c6b58ea80a39c058327aa6371ed9e9", size = 4619233, upload-time = "2026-09-02T14:46:08.898Z" }, - { url = "https://files.pythonhosted.org/packages/3e/f0/d49375a47644369d84f90a9fe4ff1924faad58d4f95563831eca84ca29ae/lxml-6.1.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff88a92cafde90888511242d1c54afcc1a8adbb6dc0a88fa7f87e29e92400d4a", size = 5015387, upload-time = "2026-09-02T14:46:10.797Z" }, - { url = "https://files.pythonhosted.org/packages/76/0f/d1b1f52925442f7b4b1abd81a41905987322f6df6a5dd42fab8579415828/lxml-6.1.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c00e26288784460885fe76e4d4b293573e0f791f52e6d60e27b42edf005922eb", size = 5168571, upload-time = "2026-09-02T14:46:12.989Z" }, - { url = "https://files.pythonhosted.org/packages/b2/13/e5d8291a68a27e564e4e1eefba08c3844c6800bcb43f3e72a32b20971132/lxml-6.1.3-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:773062aec2f2e56b2b22d37054123f0de8a22a4688a0c3376c3fe42685f975cf", size = 5068024, upload-time = "2026-09-02T14:46:15.325Z" }, - { url = "https://files.pythonhosted.org/packages/a1/ce/dbea34cd115ae9b8ef53816daa912563615adf4daed42531878a2fb29c77/lxml-6.1.3-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f6449672f9c93316deb5e2839e18931f468670e44d5bd9b1301a5a9655d45c07", size = 5296830, upload-time = "2026-09-02T14:46:17.52Z" }, - { url = "https://files.pythonhosted.org/packages/20/f6/12a2ab6e8c8afecb82a3f0e9a518952b6a1cddf405ad8542883bd71e6096/lxml-6.1.3-cp310-cp310-manylinux_2_28_i686.whl", hash = "sha256:ec295280f4b37769256da025acf5890370355ac589c27e89caae0b5e9eedc702", size = 5424696, upload-time = "2026-09-02T14:46:19.706Z" }, - { url = "https://files.pythonhosted.org/packages/02/3f/5670e198266c764595687a234fdaed33837f487b95a596262b2548e48933/lxml-6.1.3-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:5929d9df5e7e3379183be0e21f7d559618a5b61cb63280df6164019242e337ed", size = 4783635, upload-time = "2026-09-02T14:46:21.63Z" }, - { url = "https://files.pythonhosted.org/packages/70/24/007ce6b7bffb61a6ca88c3a8f21b26f3f0aa3b3f6bb648a56e328c994a14/lxml-6.1.3-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6e1eb8a4cbffd5553680ad96be6680e364710656eced73d1dc90ec489df599a3", size = 5373212, upload-time = "2026-09-02T14:46:23.572Z" }, - { url = "https://files.pythonhosted.org/packages/4e/00/cf09f38cf9005bd5cfa4fd452b03b290b1c48c403fe0319a8013f4b3cae0/lxml-6.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:16148acd77ed1d8836a56db883af2f5eed720f9723088110b16a0d08582130a6", size = 5116476, upload-time = "2026-09-02T14:46:26.262Z" }, - { url = "https://files.pythonhosted.org/packages/15/83/eb021e5db4336f0bb1438cba6f053ea135aa00b9f4ef0439473d6b986308/lxml-6.1.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:23c366231259cd75ad06495174701afb3fcb36a92917fa47de2d1f1bd9d95739", size = 4814172, upload-time = "2026-09-02T14:46:28.3Z" }, - { url = "https://files.pythonhosted.org/packages/c8/4e/147b6f9088cc191713249ac547b0af2fece489c8cdff1f2801ab47dda8a9/lxml-6.1.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:da85db328e507da922d586c3c7416ec360ec22e9cd9e0700691afacde0c81f53", size = 5361711, upload-time = "2026-09-02T14:46:31.035Z" }, - { url = "https://files.pythonhosted.org/packages/b7/d9/8cfdac0d7d771e25af2c1f4bc874032f025a4b59e0b6917c3c7858070795/lxml-6.1.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0f17d83c48ee9dfd96abae3ac3e2108c76d2fc86ce96355e37b8da9f7f4ecc08", size = 5321598, upload-time = "2026-09-02T14:46:33.165Z" }, - { url = "https://files.pythonhosted.org/packages/f3/5b/d2413c71f312dccdd07ed985be356657fc624d822ba7e2c87e8722646156/lxml-6.1.3-cp310-cp310-win32.whl", hash = "sha256:7dd624c1eaa629ad44b59a1a0145fdf2d67895592dce94c9358b938b3d075e65", size = 3604471, upload-time = "2026-09-02T14:46:35.245Z" }, - { url = "https://files.pythonhosted.org/packages/7a/bf/74b6785beac6488fd395e78796339bc197fbad6fd6103b41b15a4009dc4b/lxml-6.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:18a4db52b5a7b53a3540b0b0f4123319334621ee8083d496de314d0bf06ff59a", size = 4029086, upload-time = "2026-09-02T14:46:37.744Z" }, - { url = "https://files.pythonhosted.org/packages/f9/a5/ddf6e1744cd76fc9f0ce11cb16b117d6eaac46ebaeca01968e9014e8770c/lxml-6.1.3-cp310-cp310-win_arm64.whl", hash = "sha256:0feebef8d0521188d0157f758356072e840173aa61ca45b8b3f87959ac283dd5", size = 3674608, upload-time = "2026-09-02T14:46:39.802Z" }, { url = "https://files.pythonhosted.org/packages/96/f1/95133bde7af7afb1f5ba6090b674d826b7a518318bba54bbbb633b27865a/lxml-6.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c66f858b82497173f73366795fc6ee8171620e75a338506d6b2e7bc16f5fca11", size = 8563141, upload-time = "2026-09-02T14:46:42.334Z" }, { url = "https://files.pythonhosted.org/packages/80/54/5a79ee2181ac773ee13e48205411845feec69e1c3d097e985c1343171712/lxml-6.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:032a0a97eed428bd143c75a11118238546424ceb2fa311cca5f073aa44658dc4", size = 4613690, upload-time = "2026-09-02T14:46:45.253Z" }, { url = "https://files.pythonhosted.org/packages/ab/29/8c24672f56807f119312f073f24204368574bd16b384ede861b5104b3a2b/lxml-6.1.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4a579dfb9c835f8ab47f4b8ed33440cbc75b806b73297208e6ec2a33e903740b", size = 4935630, upload-time = "2026-09-02T14:46:48.071Z" }, @@ -1453,12 +1306,36 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/48/a9/7f386c84c9fe2854e1ca6e231c285e1c8f392971ac353c6865e6ec49faff/lxml-6.1.3-cp314-cp314t-win32.whl", hash = "sha256:9efe56a68179f3adc4de41861c9358931db03837c48dd5e1c78077b84dd07f3a", size = 3902712, upload-time = "2026-09-02T14:50:16.171Z" }, { url = "https://files.pythonhosted.org/packages/82/a6/8a3eb793f7900ef01c7f99e6f5fcbcfbdff35251cfaef66b32a4c16352d6/lxml-6.1.3-cp314-cp314t-win_amd64.whl", hash = "sha256:c9389b3784b56c58d933b5e0aecdf28f901b073ff385358d8a7d40907f6e14b2", size = 4400979, upload-time = "2026-09-02T14:50:18.621Z" }, { url = "https://files.pythonhosted.org/packages/cc/c4/3807bea283b4fe9e9d9f5dde46a73df91178472b335d2778e10b2a37aa22/lxml-6.1.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32a409be3190b088f960ac92bfedfbef2f86c49ff940765e1548177592d20026", size = 3823401, upload-time = "2026-09-02T14:50:21.119Z" }, - { url = "https://files.pythonhosted.org/packages/ad/23/dc1fdf3a53f84ca88b6e942277ddb47954844a0ececea8cc5fa3c1324831/lxml-6.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4b061064b4a2fe8598a466d723d43dbcd5a610a5d5cfe02fb6226f5c17349f75", size = 3947704, upload-time = "2026-09-02T14:46:22.27Z" }, - { url = "https://files.pythonhosted.org/packages/f0/ed/e36d547d6c958b5693b873504735cb4d0388d545945d66a7aed8983a720b/lxml-6.1.3-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8499d464de86fab0f102313cce32a9bed9ab1f06ec813cf025cb790964fbb765", size = 4220149, upload-time = "2026-09-02T14:46:24.907Z" }, - { url = "https://files.pythonhosted.org/packages/98/54/7f51e6b6cc0755f9b5fc6637748279e9f48289d917b3a47ac9fedf3318d3/lxml-6.1.3-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9e67324961ac9bbe616cce5100514d2e34d88665aeb07071e8b16eac55d06d94", size = 4329391, upload-time = "2026-09-02T14:46:27.111Z" }, - { url = "https://files.pythonhosted.org/packages/eb/9e/840b0d2e25c10c491b010d555b46e6e5264d3ad73a91557405fceb738c35/lxml-6.1.3-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d12669a2c419b0e8dc423d23dea24bb82f6f9cb829f32e04674b0ba40322a7c", size = 4262125, upload-time = "2026-09-02T14:46:29.199Z" }, - { url = "https://files.pythonhosted.org/packages/69/8f/42a41571dfc772c12628747f883d24c978053856825b99d7a187117b8079/lxml-6.1.3-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:97acecb11cbc411473f15b8d780df06d7a9f3a2aad9aca78364f56640c8fb70e", size = 4410104, upload-time = "2026-09-02T14:46:32.102Z" }, - { url = "https://files.pythonhosted.org/packages/f3/aa/27d93812be916f1f674b2035edd86d41c77745ff2ad84f58c25a7445a397/lxml-6.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f8b9c8ceebae6387d0dc77f7f4dbbfbfc962dba2efbfe6877486075a480726b4", size = 3510724, upload-time = "2026-09-02T14:46:34.122Z" }, + { url = "https://files.pythonhosted.org/packages/e1/8e/4614fcd65496054cfb7172662f3576a59200278739506433b8c241ea422a/lxml-6.1.3-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:6ea2f13dce778ca072ccee598bca46a092ce192e8fd907b6c1f0e52c800529a0", size = 8609378, upload-time = "2026-09-02T14:50:31.772Z" }, + { url = "https://files.pythonhosted.org/packages/f2/51/2cdce3c65fa99a6195dd8fbd512d33407c1000ad99f63e0a285b63d7a8eb/lxml-6.1.3-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:c581b1d68b3845fb86c6b2983e755b29bf001461c59fa411d2c26a911b6559a9", size = 4640022, upload-time = "2026-09-02T14:50:34.41Z" }, + { url = "https://files.pythonhosted.org/packages/52/09/0b30084e9eb1c546a4be3d9c56df70058d116b1a320400a59b0f7da87bf0/lxml-6.1.3-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e01125896585139453cab8cb235893644d8815d7509520da95ae3ee8d1c1f79", size = 5037928, upload-time = "2026-09-02T14:50:37.007Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0e/5c37275a3e361f6138dc06db748ea565c1fe8a5f4ee5e2ddd80047c81a89/lxml-6.1.3-cp315-cp315-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:290f66b97ede0e552e1cb44a0fd8a74f9753ee635b50830a0b122fb72788d015", size = 5661932, upload-time = "2026-09-02T14:50:39.777Z" }, + { url = "https://files.pythonhosted.org/packages/70/c5/b71ffb289b15e2642e2a3cf6d468c44da39ea119061a99e5b05e3d10f217/lxml-6.1.3-cp315-cp315-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73fc05988ed20809450474ba760a87c8ad4e455fc09783c02195e56ec634b41a", size = 5249209, upload-time = "2026-09-02T14:50:42.141Z" }, + { url = "https://files.pythonhosted.org/packages/81/ea/9910da149a23932f9301652e57661cd9e42b0df18f12be21159b7255f92b/lxml-6.1.3-cp315-cp315-manylinux_2_31_armv7l.whl", hash = "sha256:dc3a44689eea43eab836e5c98a8ab015dc2419987d1ea6eafc7c590cdff86bed", size = 4704543, upload-time = "2026-09-02T14:50:44.634Z" }, + { url = "https://files.pythonhosted.org/packages/76/07/9290329cd188c62e22021f79df04ee0cc33d9a93b0d38bd65ccd452ad9d0/lxml-6.1.3-cp315-cp315-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:209c3ccbfe35a04ac6d24f0611f9d1cbf8025d49991b14acd935236234d6c156", size = 5261298, upload-time = "2026-09-02T14:50:47.301Z" }, + { url = "https://files.pythonhosted.org/packages/c9/0c/aba78bd3401cd99b73a0aed8e2b9b43e14be94fab3603d4bbc8a62365f2a/lxml-6.1.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:2f5b2a2b9811b853b39bfa41367c6d78747b8e3e80e07fc5a24aae295c1a4d7d", size = 5090453, upload-time = "2026-09-02T14:50:49.952Z" }, + { url = "https://files.pythonhosted.org/packages/8d/dc/fa4426c3355aa0216cbeb3911495b5f65a26e0df85859a89928fe28f0396/lxml-6.1.3-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:6a406d0b3cb207b0fa460ed4dc93e866f44f105da0169361cb18ff998a44c7f0", size = 4744709, upload-time = "2026-09-02T14:50:52.394Z" }, + { url = "https://files.pythonhosted.org/packages/be/2b/224fe7918658ab7c532ac2412f3c1eb28f71e6364fb07566262d0cc6a7b6/lxml-6.1.3-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:53258656846f5c48996b882fb4b135885e088a3ad3d96b4bc0530f95124d1f69", size = 5685802, upload-time = "2026-09-02T14:50:55.043Z" }, + { url = "https://files.pythonhosted.org/packages/21/44/7d480819b9adcae5f84dd8ac529132c6b7a578544398225cd20321adcd91/lxml-6.1.3-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:aa633613ff907ea91b9b0489a1f0da1b8725d8c6ccec6b77e8a1c9c235044bb0", size = 5249019, upload-time = "2026-09-02T14:50:57.985Z" }, + { url = "https://files.pythonhosted.org/packages/72/83/385a267ea1b6b283f2249dd827ef360a295e9db14e13ef4665a120c60d64/lxml-6.1.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:90f709b9accab6b2e4d14f5c8718203877a0486bcb3afd74d8b539ecd1e961d4", size = 5271886, upload-time = "2026-09-02T14:51:01.667Z" }, + { url = "https://files.pythonhosted.org/packages/d8/0d/f967b0eb172ae876855a402d6d9b11fa86e3e0c89ca9bbfeadf7ffbfa719/lxml-6.1.3-cp315-cp315-win32.whl", hash = "sha256:b4fc6b03b9d9d90557274f571ab30e7fbbfc527955536935d96f98b6817a86e4", size = 3662894, upload-time = "2026-09-02T14:51:45.173Z" }, + { url = "https://files.pythonhosted.org/packages/f4/48/d8a8c4160a29e663109ad520bac2deb37fcd014756d024561e8bc3e611ec/lxml-6.1.3-cp315-cp315-win_amd64.whl", hash = "sha256:33cadd956b667997e4de1635fce9541f2e8ede2038fcde8cf55aa14d571d1bad", size = 4074626, upload-time = "2026-09-02T14:51:47.77Z" }, + { url = "https://files.pythonhosted.org/packages/25/20/3e1395d34d19f9254625d0b567b81cf70d37d3417be074f4d63b94a2be3c/lxml-6.1.3-cp315-cp315-win_arm64.whl", hash = "sha256:8a330c0ee5fa318c7b5cbbaad882baeca3f570357e7eb25ab34bf31008150758", size = 3749495, upload-time = "2026-09-02T14:51:50.663Z" }, + { url = "https://files.pythonhosted.org/packages/8f/c6/7465ffd9c43883526a382df6fa4846c9d8d419214f7effbf65270e795471/lxml-6.1.3-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:0bf5a3e397df2ec4258eb5eea4c1ac6cf013ca1abd04a176903bff20a70021fe", size = 8857677, upload-time = "2026-09-02T14:51:05.109Z" }, + { url = "https://files.pythonhosted.org/packages/ed/eb/1f3a917e299df43c8162c3e6f64fc2cea3bcf277910f35bff5b8e5d39901/lxml-6.1.3-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:13d22c0d57355366b393936acf6b98a5e0edeadddd3fccbc6a846c50a76b8741", size = 4754522, upload-time = "2026-09-02T14:51:08.137Z" }, + { url = "https://files.pythonhosted.org/packages/d7/f9/f81b4bdb6efb7a596be29603d8758154d00a5f545db9f3cef9d9041c8f64/lxml-6.1.3-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cad7617727a96d189bd6f979d0fadf765198c7934e85f4edaba9bf3ad919a300", size = 5033744, upload-time = "2026-09-02T14:51:10.633Z" }, + { url = "https://files.pythonhosted.org/packages/c8/0f/26d9bfaacb319c86e0eca8a1a0bf1130d36a7afbd318883e23caea63763d/lxml-6.1.3-cp315-cp315t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cae82b5ca24b0c2beedb269f6e2a96f466acd926879ab00ae19f1a65cbf9ffb0", size = 5615269, upload-time = "2026-09-02T14:51:13.357Z" }, + { url = "https://files.pythonhosted.org/packages/5d/90/73675f3f4141350ed65d6fec533b107d4e802c5caa340cf111771edd86e0/lxml-6.1.3-cp315-cp315t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:69cafd61aea04ebb3502c93c2aaa568b12931ca0802231e0b5de76bf8b6e74bd", size = 5236280, upload-time = "2026-09-02T14:51:16.051Z" }, + { url = "https://files.pythonhosted.org/packages/fd/be/ed260767e7977de463a0f91f3f4fffcab85c0a2a024a21ffe1fa442c2c79/lxml-6.1.3-cp315-cp315t-manylinux_2_31_armv7l.whl", hash = "sha256:dc205732d593118cf701d986f40e9de7801bb2e371cb189ddbda9b7348f4d97e", size = 4650718, upload-time = "2026-09-02T14:51:19.102Z" }, + { url = "https://files.pythonhosted.org/packages/d0/fd/e9839d03b1e767f2725cf7d7d81b80d5f3f9fdc10ad8827e2479311b046e/lxml-6.1.3-cp315-cp315t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:88e719b9437f148f7e1465df845c758dd1598618cbea3a2fd1e61a715542f2b2", size = 5243376, upload-time = "2026-09-02T14:51:21.606Z" }, + { url = "https://files.pythonhosted.org/packages/34/a5/4606e347e2788c301f677004aa83e28d24da9fe663a24380122af57be6fc/lxml-6.1.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:40983eabefd13da003e68170928c7acc011f0d095eefce5871a3c71c9385fb9a", size = 5092340, upload-time = "2026-09-02T14:51:24.21Z" }, + { url = "https://files.pythonhosted.org/packages/ea/99/3314a8661cdf30f493c55a87db283961dfaae08451976a2ca418958e1804/lxml-6.1.3-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:fad67b12ffe0f71e02b4932b04883cbc76a9072bbd30731409d3523cf058b011", size = 4758768, upload-time = "2026-09-02T14:51:26.813Z" }, + { url = "https://files.pythonhosted.org/packages/30/58/3bdc577f78ea8b7d72d39a84506f7001d5b28728f43e5b84891e3b7d9a4a/lxml-6.1.3-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:6cd11e7550d89e551a87dcec30f04b1fca32e86b68708aa01a4daa455d8605e5", size = 5649546, upload-time = "2026-09-02T14:51:29.453Z" }, + { url = "https://files.pythonhosted.org/packages/6a/e4/652633de1a2395949ebb7a8fc7d089aba12a2b45f0fefbc9d29e3e3ab3cf/lxml-6.1.3-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:ca0ec532ad2f5ba1e5ec120ac157769c57f01855b3d8bf37213f5d88abd9ba0a", size = 5234874, upload-time = "2026-09-02T14:51:32.262Z" }, + { url = "https://files.pythonhosted.org/packages/65/a6/c4581d171de30449304b4859bbd3607e9b40da13c0f88b68e6097c8d785e/lxml-6.1.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:e99e09ab7741f1281e2677f4c0058c7f5267d182530b09c87e4f6aa26adf3887", size = 5260043, upload-time = "2026-09-02T14:51:34.841Z" }, + { url = "https://files.pythonhosted.org/packages/b8/d7/ed6ee6186a89e69ca4ea9658b2a278f46a5efe8b5d4db56c7197f18653fe/lxml-6.1.3-cp315-cp315t-win32.whl", hash = "sha256:ace1d2c83b2bd24db5940600541140e87a325e119cb32d5fa9ad720d7e76648e", size = 3901093, upload-time = "2026-09-02T14:51:37.234Z" }, + { url = "https://files.pythonhosted.org/packages/67/9d/11d10257a4a048d04195d638bb61f0246ce2448eb05f682bcbab25a257a8/lxml-6.1.3-cp315-cp315t-win_amd64.whl", hash = "sha256:b49638355ea3bebba70da783ccbc630fd72afa16bc46c54474bfa1f9a915bbc6", size = 4395446, upload-time = "2026-09-02T14:51:39.884Z" }, + { url = "https://files.pythonhosted.org/packages/f8/b7/44edd7de434181c582892e68d1ffe6775ca403ce14aea07cb5a218a936cf/lxml-6.1.3-cp315-cp315t-win_arm64.whl", hash = "sha256:5a721a98c649855963811b59b55755b30566e7f7fc40bdc9803d66dee9f811cf", size = 3822836, upload-time = "2026-09-02T14:51:42.471Z" }, { url = "https://files.pythonhosted.org/packages/ec/c1/2433176de263cc3f51fd2c303f993d5bb7f1da3139a0f7d168116c0bfa7a/lxml-6.1.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d2765c18ce303149ee804b1f3dad11232726dd0a702d73a15cf19179ac8cc962", size = 3942969, upload-time = "2026-09-02T14:46:36.55Z" }, { url = "https://files.pythonhosted.org/packages/7c/71/de7759096f480180fd9e43ff7c017860e2d2a9a43741ab093cbdf1820f07/lxml-6.1.3-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d5a748d12dd9b535e0a130f60dae9ddf0adafbabe61e7864f55c7436c84547a", size = 4213008, upload-time = "2026-09-02T14:46:38.784Z" }, { url = "https://files.pythonhosted.org/packages/b8/9b/c2d09af47a34fa6c0c27473083812b449a411680bd04bbe609cde291ddc8/lxml-6.1.3-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:41096ec0740a58dad03d3ae0c7486d306d20becefb13ceb1649835ab3eb64167", size = 4322012, upload-time = "2026-09-02T14:46:41.031Z" }, @@ -1494,17 +1371,6 @@ 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/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, - { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, - { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" }, - { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" }, - { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" }, - { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" }, - { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" }, - { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" }, - { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" }, - { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" }, - { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" }, { 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" }, @@ -1577,9 +1443,6 @@ wheels = [ name = "maturin" version = "1.15.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "tomli", marker = "python_full_version < '3.11'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/b9/c8/22e5e21b2679c9bce6415ca578034ca2cc9316be0642ae21e051a2d5198c/maturin-1.15.0.tar.gz", hash = "sha256:94b26cc8e8aba61a5f2099715fe640e18c5f678e9a500408b38761263954228a", size = 385504, upload-time = "2026-08-24T12:11:22.665Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/14/69/5c01b461044eb1f45ddcce006706eb88110c793cdb11c7ae0b5e08492e94/maturin-1.15.0-py3-none-linux_armv6l.whl", hash = "sha256:6bf6dc62e22d4dcfd5a51244ff0d58975fa4979c48209fe84159617648956d82", size = 10206220, upload-time = "2026-08-24T12:10:53.327Z" }, @@ -1754,7 +1617,6 @@ dependencies = [ { name = "griffelib" }, { name = "mkdocs-autorefs" }, { name = "mkdocstrings" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/96/11/640067d1ad713ea99c233e53e57a4c300d9885f904a61371d7ef90dea549/mkdocstrings_python-2.0.9.tar.gz", hash = "sha256:ae945637dc0618c6beedbee169f10c0234b77f322c53db3fc9fb4c29b3013038", size = 203006, upload-time = "2026-09-22T13:43:27.712Z" } wheels = [ @@ -1767,24 +1629,6 @@ version = "5.3.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/8d/3c/eb1d82a87c504259dac5ce1c7de7587b68ffac841b55d23f8ea2c9df8422/mmh3-5.3.1.tar.gz", hash = "sha256:bd86d0c86b52332319d981d03781ff77811a29db544a69902dc06b5506bb3e19", size = 33354, upload-time = "2026-09-30T17:38:09.577Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/a6/fcd38b51cd78f1195c262605f2235c3c473180421fa2383e29edde5f0b65/mmh3-5.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a0df74f1d6e1ee35561487e6ecb1d05e37a5d424cc74a2addff7181a0b7a3460", size = 55354, upload-time = "2026-09-30T17:34:35.133Z" }, - { url = "https://files.pythonhosted.org/packages/b1/e0/668a15dae1052062c8dac04a0b8a118876db12e0be813b7900456a0a1448/mmh3-5.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cbe3391ba8e58f06cdc93c2bcbffaf1bd339571b95a6f7ae5784c5cf6285a138", size = 39943, upload-time = "2026-09-30T17:34:36.462Z" }, - { url = "https://files.pythonhosted.org/packages/5c/19/b4282fe32d7e6852c3f79acf2a5075de7e2ac04efdc3f071a83e033a9dea/mmh3-5.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5640fc2f14406b7015aece7fba97868ae4017dc8c66c9d010ac725d77f0b7921", size = 39583, upload-time = "2026-09-30T17:34:37.823Z" }, - { url = "https://files.pythonhosted.org/packages/63/16/e4ad2cebff9d63d3b1ae93d9f570a76a2d603b86e764c051eb7d07ff778a/mmh3-5.3.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:eb19747a88d045411121e64b9ad2f6ca1e255cd11df40725decf80ed4cd031c0", size = 95122, upload-time = "2026-09-30T17:34:39.135Z" }, - { url = "https://files.pythonhosted.org/packages/a8/a0/4a85c58961a398f48d60d1d0b9758072d3a6af173febba1a11145c1017ff/mmh3-5.3.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8e11db3320f138efc34d18b3797f6c66f41bc465c722fa27ea6952e488a82181", size = 100998, upload-time = "2026-09-30T17:34:40.376Z" }, - { url = "https://files.pythonhosted.org/packages/b9/ae/3e35c36b2e4e5049ca982ad4f524d7c2d128d3e42db017fda8e3fb068abe/mmh3-5.3.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61faab401216923fdc943ec7e68f51c50100e9e30d9662ba64d91125bb0a08ea", size = 103792, upload-time = "2026-09-30T17:34:41.854Z" }, - { url = "https://files.pythonhosted.org/packages/89/75/b4d60ba44d3a0bc612e04ec02df14e46227d1d1fcdef284a11456d6cddaf/mmh3-5.3.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:64e9a4922f78352a7730900175557d8ad51fb45f6ea3308720734c9c2978a0fb", size = 110677, upload-time = "2026-09-30T17:34:43.035Z" }, - { url = "https://files.pythonhosted.org/packages/6c/06/2863a02fd23786185893498853903289eca202fe67500d716ff57a28fbc0/mmh3-5.3.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fc205e9f78224db7239d163b9b7cac35596aa615665135b0105beb8080e9ebc5", size = 118065, upload-time = "2026-09-30T17:34:44.545Z" }, - { url = "https://files.pythonhosted.org/packages/96/45/0c69f0652de49764120b7fca80ce9411755d1a70a47967c4fcfa71de2a5d/mmh3-5.3.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:292c1770e96fa583d6a4c5b38229ab52231794f8c2aafc279eda83449f306357", size = 101518, upload-time = "2026-09-30T17:34:45.856Z" }, - { url = "https://files.pythonhosted.org/packages/1b/9b/51054cd93ebd8480328105c955d4001c07f67efd0aaa56852dbb1fec5119/mmh3-5.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:12f63cecc74757adefe0c15655cd607898c068cc4f13f1d6944fe644ab6d68e5", size = 101498, upload-time = "2026-09-30T17:34:47Z" }, - { url = "https://files.pythonhosted.org/packages/a3/2b/4d6cb28d14c41db2c3aa511b4c70863287d56fe5504a4ef71a1c8e5e6e93/mmh3-5.3.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:57e06d35e8db0a8570c21d8f6681056aa84eb3bcb2bf4b886e4adb9d9be9e325", size = 96478, upload-time = "2026-09-30T17:34:48.159Z" }, - { url = "https://files.pythonhosted.org/packages/65/0d/008beb87bf1ef7af57f79e73ee50eb9a4bb7e1ed8ae75675672555b091d8/mmh3-5.3.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4c782a60a248eb0dcf776560d3226e1cf0681eaac2a118c0168822be932f3b9a", size = 110086, upload-time = "2026-09-30T17:34:49.341Z" }, - { url = "https://files.pythonhosted.org/packages/4a/70/e45069746f6a5c5172af11639a6e080f51a2e0cd130e1c9cf48e3d4e78fe/mmh3-5.3.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:8477b3b4e9714f1acd15fdc8923f59482068a1c1ec8629867d8c500825c3d9c1", size = 99299, upload-time = "2026-09-30T17:34:50.791Z" }, - { url = "https://files.pythonhosted.org/packages/74/29/5aee09721348c42de73b624a04133b172dd344717803d6dda59e9e86d518/mmh3-5.3.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:20fac8667cd63ca88bf8b3e6fc97c5e1188872e7b51ccd936cc8a40411cad089", size = 111647, upload-time = "2026-09-30T17:34:51.957Z" }, - { url = "https://files.pythonhosted.org/packages/90/db/81b388f3bb58c69c5229e2159612de2793f4fec8ea86a207d6fea9a87dfc/mmh3-5.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c130eced1b89220777013fcd16b3a8f7d4ee6055877a5c9ef552b4694d1dce99", size = 99881, upload-time = "2026-09-30T17:34:53.451Z" }, - { url = "https://files.pythonhosted.org/packages/de/b1/5a14d6c7fea4cceb6b0f2a9f184d9284fb40897c460af97a5ec6b8a33c3d/mmh3-5.3.1-cp310-cp310-win32.whl", hash = "sha256:68508d90c3c690cc3f603bbb0162f3749c30e470fdd55caaef130153f40e475e", size = 40318, upload-time = "2026-09-30T17:34:54.88Z" }, - { url = "https://files.pythonhosted.org/packages/26/f1/7864702203a83f931568125516ea1ed68b6dec0068d00b1e97cec24e4766/mmh3-5.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:c2d626c36cb3a91dcc244e235b9963df5b1be3274aae7d08f73de9126d2205ab", size = 41705, upload-time = "2026-09-30T17:34:56.155Z" }, - { url = "https://files.pythonhosted.org/packages/a9/42/d39170dc3ee7dcf0c1b1ef2bbfed07308f2954ecee78d3b5691971f192df/mmh3-5.3.1-cp310-cp310-win_arm64.whl", hash = "sha256:5375a10f50463bedbd858b8d876d3f56cdab3fd3fe6a0bfeb189d77e0b60ace9", size = 40089, upload-time = "2026-09-30T17:34:57.286Z" }, { url = "https://files.pythonhosted.org/packages/1d/2f/b6f34c372d68835ca89cb9d6f5c5166577472e13dae769d411496a106111/mmh3-5.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7e24c455cc6a4f30267a96c4f1fef85bfebffec5515ba6724e0ba88ac6baabaa", size = 55355, upload-time = "2026-09-30T17:34:58.391Z" }, { url = "https://files.pythonhosted.org/packages/09/52/dc370ebb3b7c056821f7093748dd23de096779cbec63f8825266c0f42aec/mmh3-5.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:86cee07b7e2767f2ea221f5a04a08e4dbd35363897231115a16365ca24641c57", size = 39950, upload-time = "2026-09-30T17:34:59.505Z" }, { url = "https://files.pythonhosted.org/packages/10/e9/f4c14e0ab768c4e2ba21cb0b212eedeb645459f3b5a353561a11f6f4a045/mmh3-5.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b07fe9ce79bf9b53b1117c0d4c03744eb4060526d82b39e64972e739467a5134", size = 39583, upload-time = "2026-09-30T17:35:00.617Z" }, @@ -1885,6 +1729,47 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/35/83/558d9c034a568f0edeee91b4f770d99eeee41300155e2be0eefef2466fcb/mmh3-5.3.1-cp314-cp314t-win32.whl", hash = "sha256:0fe225c870d34d08a0cebdddcb1c1062ecfb9655f1b844a76817ea17bcbc8316", size = 41326, upload-time = "2026-09-30T17:37:07.607Z" }, { url = "https://files.pythonhosted.org/packages/fb/ed/e76d25bcc95b3b8ef8df663c99542056c9cd393bd70a6723e5d4f2e13b1d/mmh3-5.3.1-cp314-cp314t-win_amd64.whl", hash = "sha256:52fbda3c48e74f7c533964d91610e512e1971d1e88a264e1024f710b3a990af8", size = 43270, upload-time = "2026-09-30T17:37:08.827Z" }, { url = "https://files.pythonhosted.org/packages/73/29/efd48025b974c588a5da623abc5916d3caba073fa7f658826c42dd673435/mmh3-5.3.1-cp314-cp314t-win_arm64.whl", hash = "sha256:d6d03f2e97225476a4ebacb7b26bdf58847f2879ed6f51c9aec296dd17a40537", size = 41270, upload-time = "2026-09-30T17:37:10.545Z" }, + { url = "https://files.pythonhosted.org/packages/74/44/7346139e65dcd6c0fb1fd810095311f3c83bfad406875db80b905dfe2795/mmh3-5.3.1-cp315-cp315-android_24_arm64_v8a.whl", hash = "sha256:8e9be3c05553ff265064c364e2f75c38a0a768c5e77378e68bba3cbdddbb3534", size = 40908, upload-time = "2026-09-30T17:37:11.848Z" }, + { url = "https://files.pythonhosted.org/packages/11/72/f310775faa92f81a8e4d33a57f8871df049d343b9ad85ebf9df65f2c32fa/mmh3-5.3.1-cp315-cp315-android_24_x86_64.whl", hash = "sha256:409ab810e88d94152e0e17f184c5c0a0cc9d5cbc35d0064117977360cdfaa6d5", size = 42038, upload-time = "2026-09-30T17:37:13.191Z" }, + { url = "https://files.pythonhosted.org/packages/d7/f5/5297ec53642c1f3783c8e9fdaec247b8a154189a4270591f34233caf25dd/mmh3-5.3.1-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:a564dcbacf2fa7fbab47a061c69dd8e21882de7a4e7a0d5c129c3e4853f528d0", size = 38709, upload-time = "2026-09-30T17:37:15.061Z" }, + { url = "https://files.pythonhosted.org/packages/d1/f1/51085537195290833f46be8f6b3dd2985ee4d15490eb18b537057216076a/mmh3-5.3.1-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:e7618907f87ce29af7da06e014f9acabb90de2dbe37b4c4a4c06ae6d2166caab", size = 39416, upload-time = "2026-09-30T17:37:16.444Z" }, + { url = "https://files.pythonhosted.org/packages/b0/cd/5a749d76cc15fee759a8fa0febd939167476db22165b27bb0eb82239e187/mmh3-5.3.1-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:50a62eec3de8a3f608f5531901b7d7106231a5cb6cd294bb5f7fbe9e89e71b7b", size = 39867, upload-time = "2026-09-30T17:37:17.808Z" }, + { url = "https://files.pythonhosted.org/packages/59/43/e0c704b08d4adbf22cd9e698f492fb7d4ad7e3a1c4aa5497d0b0da4d7027/mmh3-5.3.1-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:d227fe27ac054c3999793a6e79cb70d8698d575cbedff216656757b4bdf2513b", size = 55425, upload-time = "2026-09-30T17:37:19.154Z" }, + { url = "https://files.pythonhosted.org/packages/5a/59/ef17c22d2de4dce1a32e443e1de7a3cb8789f60459a45c130ba9794e67ab/mmh3-5.3.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:c97deaabf7d9d49c56433c4c52292fd03425c29589a4b71d3d5f905285ed4038", size = 40029, upload-time = "2026-09-30T17:37:20.64Z" }, + { url = "https://files.pythonhosted.org/packages/f9/a1/93c1f18d5105493f4e46259080441d6b7fde971d628fdc7965b586937440/mmh3-5.3.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:c6badf50b4fe0e001a2ab5f6a4347aad3d10ba182a3ef64eacfb8a6cb581393c", size = 39628, upload-time = "2026-09-30T17:37:22.029Z" }, + { url = "https://files.pythonhosted.org/packages/0f/b7/ce9c92967bb98c69856ed1c3a8af1b05e1a14fc44f9ff28a7f6a59a17b10/mmh3-5.3.1-cp315-cp315-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:08d59963e361381b8052f57f48607c695e4ecf15e1fedcd28e003fd7a189579b", size = 98463, upload-time = "2026-09-30T17:37:23.699Z" }, + { url = "https://files.pythonhosted.org/packages/69/a5/43e7fcca7b892649d060717c595095a80d6468afbb57bd554ec347fff766/mmh3-5.3.1-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:714e150e76987dedef08ee370c597c8aabc11b8ac7796bc43876a0b8830e1ffa", size = 103974, upload-time = "2026-09-30T17:37:25.591Z" }, + { url = "https://files.pythonhosted.org/packages/7c/b7/0573655c5b8cc2440ff6113f3dbdd7c196561612059720d20fa745b7b1e5/mmh3-5.3.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f2fe7c4fb48c7b69877ae28a1fe4df4e1bfb53fad467673c100035f0d4210d3e", size = 106431, upload-time = "2026-09-30T17:37:26.908Z" }, + { url = "https://files.pythonhosted.org/packages/b2/de/60b68e00b8675cd16117a3429342acdcafcc4ab26a061db9dfc8bfa36f71/mmh3-5.3.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a209b121065c821358e965f481eba1a0cde6172d9d982bae6bf7ad026498ad6e", size = 113141, upload-time = "2026-09-30T17:37:28.334Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b1/78be5bda72dcf0e2bc9920ae26b801e101eb68c7c0b62e75d1c301b6adbb/mmh3-5.3.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd0e2f3571fcf0b434929d28a2fc61e90215a03aa65368b70ca1faf89e36da25", size = 121217, upload-time = "2026-09-30T17:37:29.813Z" }, + { url = "https://files.pythonhosted.org/packages/dc/22/36c326cf3ed6350fdd9f9bd5261ff05e6c9d37fff2b9944f7d6c06054791/mmh3-5.3.1-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c2e6bd1b4757ee488283e035755da12da831509a2ff40fdd9733b0f34e9072da", size = 104071, upload-time = "2026-09-30T17:37:31.176Z" }, + { url = "https://files.pythonhosted.org/packages/41/30/70cb86cfde918fbcda9df7d6424963691a1978fef781b898d9c4d854c3d8/mmh3-5.3.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:53dde4944acc0be5198dfd0a1b2654db0b88ae82640f8299bf0f0414e075643d", size = 99434, upload-time = "2026-09-30T17:37:32.524Z" }, + { url = "https://files.pythonhosted.org/packages/a2/ab/f0b914fce03026c1c697a26b5cdfb012368f64fb1592744acfd191c76b07/mmh3-5.3.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:37d39bcc4a554d3f4c9868287686a0b342857ea6df01e532fa0fb722654be253", size = 99432, upload-time = "2026-09-30T17:37:33.954Z" }, + { url = "https://files.pythonhosted.org/packages/d8/c7/2673b90301ae8ebacc0785bd3a17ad47273ba170adff0398abf0505690a9/mmh3-5.3.1-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:b66b40b78a4dd5757ec2ce449db0d505f24ec6a901bffd6667dd60df0eb27a9e", size = 106446, upload-time = "2026-09-30T17:37:35.338Z" }, + { url = "https://files.pythonhosted.org/packages/e6/de/3d35d6a5cf606129c456f5fa250c5155f2c9b3e680e99243e13a9649f5a8/mmh3-5.3.1-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:429453058c769d9cffae36fcaa352241ca59f66aed41aa021bc66565213977f5", size = 102116, upload-time = "2026-09-30T17:37:36.838Z" }, + { url = "https://files.pythonhosted.org/packages/48/0d/73cc09401c50a3f04a79330bda8cabbac05ebd2655e8de785f3356339e42/mmh3-5.3.1-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:3b475f5b5a5f813a5f7c35f257b7c72b7a6f3da16fd564e8466c26bcbd4cacd7", size = 110094, upload-time = "2026-09-30T17:37:38.154Z" }, + { url = "https://files.pythonhosted.org/packages/9e/6c/95deb09624751abce5e60b119d0539314ec2b3536b54fc771a6d918322e9/mmh3-5.3.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:9184d09183b74a78815358c9dc5cc24cb94556779c279f6f2ce698da6a1766a8", size = 98065, upload-time = "2026-09-30T17:37:39.544Z" }, + { url = "https://files.pythonhosted.org/packages/0d/2a/b748aa5ab7a389b3720164f207edb2ec2d7eb21785ad7ec9aa9d55685bdc/mmh3-5.3.1-cp315-cp315-win32.whl", hash = "sha256:0cf5a30de9df754c6977bb90637510ce1c9a2039d4402e1226cf584ba82c367f", size = 40877, upload-time = "2026-09-30T17:37:41.048Z" }, + { url = "https://files.pythonhosted.org/packages/63/15/47f2945f6d4f23c5cf21937a6a818c33875ff0d52578437419d29712df6d/mmh3-5.3.1-cp315-cp315-win_amd64.whl", hash = "sha256:0d7953b08712fb5bb894757568d62692db2e7b235c921eab6471c728ad51a728", size = 42294, upload-time = "2026-09-30T17:37:42.481Z" }, + { url = "https://files.pythonhosted.org/packages/bd/79/5f349380e9cc4722eef51bd47da78fe7e71408a7cc670cce435eac0e1451/mmh3-5.3.1-cp315-cp315-win_arm64.whl", hash = "sha256:5e837386acd3387d67c6821b7fa584a197748ae74e336de15d9f731fb3d9c1e4", size = 40663, upload-time = "2026-09-30T17:37:43.709Z" }, + { url = "https://files.pythonhosted.org/packages/82/0c/1303c58d814ad868815a3a88f8e3719970c4b5acba549f556369d8b82a36/mmh3-5.3.1-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:245665a94be009e874a9d290ddebb67a253805a2b4d87c2e6e042e16a3d1c298", size = 57090, upload-time = "2026-09-30T17:37:44.971Z" }, + { url = "https://files.pythonhosted.org/packages/73/cf/ae0b095688d03c6c1ebc2f9319d393b80e7ef6fb896a47b8cc4b8ac3bd80/mmh3-5.3.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f4539cf0d522eb19c88c30a52ef4d1625840391dde7e07b3f69481b7c61cb6cc", size = 40831, upload-time = "2026-09-30T17:37:46.707Z" }, + { url = "https://files.pythonhosted.org/packages/34/c9/f2e2863e06f63024159cded330e4dc3df544179e45b7b31fc53071d010c4/mmh3-5.3.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:63a072d514e1762b823cb1129f826289839dd7d71d56cc81eb72223aeb730ce5", size = 40374, upload-time = "2026-09-30T17:37:47.905Z" }, + { url = "https://files.pythonhosted.org/packages/17/4c/1ccd1eadf3caa62b074005c31ad423a5d982f6b35e81305ea9ade8865a94/mmh3-5.3.1-cp315-cp315t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9358751ae6cd260e3595662e1503fa8791f31dfc69bfe3034c55a278cc5ab78b", size = 108164, upload-time = "2026-09-30T17:37:49.373Z" }, + { url = "https://files.pythonhosted.org/packages/f7/82/13305aaab0528f64204377db1ae4c5886a8b4bf1a3a032406a9d8d3c7798/mmh3-5.3.1-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6e9936eb3cef7e4fe7dc0c7fe51039da7ce12dc691b291ea4dc6d8ed28b9b990", size = 114119, upload-time = "2026-09-30T17:37:50.737Z" }, + { url = "https://files.pythonhosted.org/packages/4e/fc/97ab3b905aa27e2bd1886fc0c4ab5e6b05db697f2168300928d6b2184786/mmh3-5.3.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc25cc785743cdfc10b3f671fde6bea760689518372ffd355bda03f9c07dc9ec", size = 117054, upload-time = "2026-09-30T17:37:52.331Z" }, + { url = "https://files.pythonhosted.org/packages/3b/d7/911384e5a69b817074afa6a8e236a875e601c2b856f6ba520208f357401f/mmh3-5.3.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e885b5f0102899227456a6568585295e599f5f90872933a62274746e94c244dd", size = 122287, upload-time = "2026-09-30T17:37:53.683Z" }, + { url = "https://files.pythonhosted.org/packages/d2/8a/ec962c0bf2b720c2e1d8d2410e25f699df421ac8f77bbf4463068f103bc0/mmh3-5.3.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fc7a4ab919a66b9db72c1425d610f69a8480dce22aa4c6ad2218e4acf41f8c01", size = 130866, upload-time = "2026-09-30T17:37:54.951Z" }, + { url = "https://files.pythonhosted.org/packages/f4/a9/5dff431289844d190484a8dbb734320e1a19781a29c37372510e1d816799/mmh3-5.3.1-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0bd3b13c6ab9c851c6e74a06fde305c9661d985ceadf91ed60507a27ee1ab4cb", size = 110756, upload-time = "2026-09-30T17:37:56.459Z" }, + { url = "https://files.pythonhosted.org/packages/a0/74/15099e020e8d02e674078b1bdedf0db61f7f447dd684f004d59f5b250361/mmh3-5.3.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:bc3605b2db1dfcea3d0ea481ed32ac798753dd68e942fe3859374021d1668edb", size = 107650, upload-time = "2026-09-30T17:37:57.891Z" }, + { url = "https://files.pythonhosted.org/packages/7a/cb/f00da63de039f9891914d2969bae2d590a5f410c8a9ee93fe6e5ad7d35db/mmh3-5.3.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:ea031c00ffbfc38e54cc070426ec2d136e573cbae24cc34e7ee558399ac71ce0", size = 108729, upload-time = "2026-09-30T17:37:59.229Z" }, + { url = "https://files.pythonhosted.org/packages/17/7d/d6b33bb23a1c56d8af2571eaac999d526a09ac59e6eca35603d74bfe2c1a/mmh3-5.3.1-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:b4a40cd05113233d30b3035054f9d4939e25466bb63e75d158f116b030618e55", size = 114172, upload-time = "2026-09-30T17:38:00.596Z" }, + { url = "https://files.pythonhosted.org/packages/09/8d/bc670057ebd529792feebd6f8e6ac5463df3c8c9d8a4fd1530327d71a74f/mmh3-5.3.1-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:1c6593adfb734776dd93bd16b30512211be5d9a96aec0925b4a3f081edb6ad91", size = 109063, upload-time = "2026-09-30T17:38:01.947Z" }, + { url = "https://files.pythonhosted.org/packages/63/02/c9229c198ce251bbcdfd3ee96d35c711fc3dcb5d05b9330c55b2a63b5db7/mmh3-5.3.1-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:d3883cbc3da65076bf0972e7b76f4c972d9fe5810757030cd01c29cbe0ccde41", size = 119758, upload-time = "2026-09-30T17:38:03.264Z" }, + { url = "https://files.pythonhosted.org/packages/01/b9/25cde1ae2118d1962fb68bdf399d2676a242216a18cc9e89a8b34df19ba0/mmh3-5.3.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:5b5d7b1141ad7ad0091199f8440f3034ce775ea8c470a418bf6e2c371de08ec5", size = 107392, upload-time = "2026-09-30T17:38:04.611Z" }, + { url = "https://files.pythonhosted.org/packages/3b/93/ce57c57a62c97c4bceaafb4df29e5bfdc827f3cea08b27444dcf3f55ecb6/mmh3-5.3.1-cp315-cp315t-win32.whl", hash = "sha256:2d76a78ab3af4be19d31840ca4f69b429e602e719d0b351f20d96304dbfb155e", size = 41534, upload-time = "2026-09-30T17:38:05.901Z" }, + { url = "https://files.pythonhosted.org/packages/63/ea/fee223d57ef44e743e71216805b873fd452b1de034a5a6bf78011deb7e9d/mmh3-5.3.1-cp315-cp315t-win_amd64.whl", hash = "sha256:4c061c1072dc2f32ef7e6a57a92da3de217dc47114b2857da31b34bc79ac795b", size = 43019, upload-time = "2026-09-30T17:38:07.154Z" }, + { url = "https://files.pythonhosted.org/packages/c2/6f/727d4255c2ca4957f87400852449f22f148b4278529701c67c6c65dadafb/mmh3-5.3.1-cp315-cp315t-win_arm64.whl", hash = "sha256:c90b3503675892e7496bec63e2e18e413798a062e5d54e6cf220c2bf0bb7fe69", size = 41323, upload-time = "2026-09-30T17:38:08.405Z" }, ] [[package]] @@ -1923,14 +1808,6 @@ version = "3.13.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f2/72/380b97dc45bd162d23afe5194721ef678d9eac7cfaa549fe2873f7f0a518/orjson-3.13.0.tar.gz", hash = "sha256:d1de5eb04485110c5da4c657e49168995d55e076b1ce60f1a042e254f4186c4f", size = 2732604, upload-time = "2026-10-07T14:09:25.719Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/8c/25b6e2bd4f6b8e67a6b5acbc11a8cff4970e35c79837a24ec7db8732238d/orjson-3.13.0-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4f66eac85b072092e9941c3111882afd7527bf926cbc717038fa3654b582002b", size = 223510, upload-time = "2026-10-07T14:07:54.539Z" }, - { url = "https://files.pythonhosted.org/packages/32/4d/5772e32ebc19d0b76b957a48e69a09546400db35cebe76c21b2c341d1a30/orjson-3.13.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:efa160215c4630836d3b1250af4c7a305acd8239e0d75aff986b8088c2fcacb6", size = 113481, upload-time = "2026-10-07T14:07:56.229Z" }, - { url = "https://files.pythonhosted.org/packages/5a/6a/5ce6adad2c0cb734cb9d19b7b9d9c7bbdb16c136af453dd37adace806547/orjson-3.13.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:4e5c8175e1574dcbe446ee654275d353c1d78bbd9a0dc9f209bf35c9df72d171", size = 130791, upload-time = "2026-10-07T14:07:57.751Z" }, - { url = "https://files.pythonhosted.org/packages/96/49/d954f02229efb06850a5f9aaf06e77e03046a009d49eb78f499fbd798ded/orjson-3.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78a12d4f8d740cc9ae197f5223682e5e960ba61b4fb2ce5a6a3bb54e83fde28e", size = 129465, upload-time = "2026-10-07T14:07:59.143Z" }, - { url = "https://files.pythonhosted.org/packages/2f/a2/abcb0647268f334cb85768170b164e4c97f7a2ed5fddd146f79297494d9e/orjson-3.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93c70a5e22bbbbdeafc7b273441e8452a196041d67fd4d9a9c450c66370a8486", size = 130727, upload-time = "2026-10-07T14:08:00.659Z" }, - { url = "https://files.pythonhosted.org/packages/fa/b0/5672f0505e6cde410cc7916cc2fbf88d90216d667b37907df041a659db06/orjson-3.13.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7b3bc6b81835ce65f4729ae401607583d41139c6de95bc7453f450f1391d3e7b", size = 135280, upload-time = "2026-10-07T14:08:02.167Z" }, - { url = "https://files.pythonhosted.org/packages/d9/58/c223e3ac16193d00c1c3cbc786cb6db47158bff0558c52133e6dd0be7a12/orjson-3.13.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6d0684895b119ad167fb4ec05113639dc7f728022deec4756a710e838ed92e7a", size = 126844, upload-time = "2026-10-07T14:08:03.549Z" }, - { url = "https://files.pythonhosted.org/packages/49/a2/f6fd98acef1e36b8c8ae0275f0268a0f22bb6a1b436ee4536e1cdaf31b03/orjson-3.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:7991921c5da527a963b6d4cffd0e4ea89c7e71d4be0c8be1bfe6edb223ce7d96", size = 121455, upload-time = "2026-10-07T14:08:05.024Z" }, { url = "https://files.pythonhosted.org/packages/ce/a3/0be3b115907fea61ed340639fb0e1562cd18969bad5b3f486f808197aaff/orjson-3.13.0-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:948bad47f2e2e43527f14248364a0e5dee26dd3184691010ec4a1ebeb0fd6771", size = 223146, upload-time = "2026-10-07T14:08:06.474Z" }, { url = "https://files.pythonhosted.org/packages/9e/f7/665935edb16163f8b764182e29a30cf056947a66893ed032191e5f01eb3d/orjson-3.13.0-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:1807c2fa49d393c7ee95fd1ef1b39cbb24aa3ccd81f30b84503ba59407666960", size = 123546, upload-time = "2026-10-07T14:08:08.324Z" }, { url = "https://files.pythonhosted.org/packages/67/ec/e7cde480c0e212594d17ba2b2bd210c002052e9147fc1a1aeafaabe722fb/orjson-3.13.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:637dbca1fccffe83780e806fbc0f17427c0c59bf822528eb0acc8f0aa9f19acb", size = 113290, upload-time = "2026-10-07T14:08:09.816Z" }, @@ -1971,6 +1848,16 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/23/b3/12b1af9b87ff9fa0aaf4e5724c87672b30bb5de76f275f7fac64e8219c1b/orjson-3.13.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08bf722f923d2100bc5e5a5dcf72c656db557049c1bea26582fdd5dd9d5395a1", size = 126500, upload-time = "2026-10-07T14:09:03.863Z" }, { url = "https://files.pythonhosted.org/packages/ad/ea/cf257fc8a7f4b18f5677c22b3a9673a1b51d4b7161f25177ed389b76560e/orjson-3.13.0-cp314-cp314-win_amd64.whl", hash = "sha256:6adcaa85d79977659a448b4123a88eb33511a11ed2db243535ad7ea88a6668e0", size = 121378, upload-time = "2026-10-07T14:09:05.375Z" }, { url = "https://files.pythonhosted.org/packages/05/0a/9f4643f849e9918eab11983b83928af3aac14bedb04002e28e885ee1936f/orjson-3.13.0-cp314-cp314-win_arm64.whl", hash = "sha256:83705c12b4afde10c62a5dd3fe6fdb21b7900bd0dcd5af1c85612ae94d0ee590", size = 126123, upload-time = "2026-10-07T14:09:07.085Z" }, + { url = "https://files.pythonhosted.org/packages/8c/15/d265f2b556c0c7c0b30ea830316d6e5af5b85dde08f234a1ebed60fab386/orjson-3.13.0-cp315-cp315-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5ef4d4157392a0439b74f7e49e5636b4ea43d9616bd0884effc0195fffcaa2d5", size = 223305, upload-time = "2026-10-07T14:09:08.84Z" }, + { url = "https://files.pythonhosted.org/packages/0c/97/781be8b80a33b8171b3f5acea941af47182c8b4b5827c2b7c3fea706f21c/orjson-3.13.0-cp315-cp315-macosx_15_0_arm64.whl", hash = "sha256:84d87e322e1674408f85adea63f11aa19201eba082755aec20ebc217f493bbd2", size = 123515, upload-time = "2026-10-07T14:09:10.792Z" }, + { url = "https://files.pythonhosted.org/packages/20/68/011bb98fa7da7b430b363db1bb7ef9160c438fc5c43e7468fb593c220037/orjson-3.13.0-cp315-cp315-manylinux_2_39_aarch64.whl", hash = "sha256:8c2ac5c09b017c484df1b4c68b2cf250b4e8ba08204cb58e7cd6cbbc71a9c902", size = 129222, upload-time = "2026-10-07T14:09:12.542Z" }, + { url = "https://files.pythonhosted.org/packages/86/7f/d96fa2aedaaec14c095ea9cd48d2158fdf33c0f4fd6e7a598d899d536b03/orjson-3.13.0-cp315-cp315-manylinux_2_39_armv7l.whl", hash = "sha256:51d11525bc3ca736fa97ce4e4c7da9999cc00bf261522bede43b4e7531bd7965", size = 113152, upload-time = "2026-10-07T14:09:14.059Z" }, + { url = "https://files.pythonhosted.org/packages/e9/2d/ee77aa685c54bd920a1f0e2936986b46269adb0d72bf5098c2c694dbeb36/orjson-3.13.0-cp315-cp315-manylinux_2_39_i686.whl", hash = "sha256:ac81530647c3423107cf61c3481e91f57134e9ddfb6ef83f5150ccbdcbc3a3ee", size = 130749, upload-time = "2026-10-07T14:09:15.835Z" }, + { url = "https://files.pythonhosted.org/packages/48/eb/3411fbfdad61b3f3af22343b5af7ed5c8a1679e35f442e8f1b229b33040e/orjson-3.13.0-cp315-cp315-manylinux_2_39_x86_64.whl", hash = "sha256:0526a3456db67b264c6d661b5f090077f326b6cd074d0ef53a72763595dec5d7", size = 130471, upload-time = "2026-10-07T14:09:17.463Z" }, + { url = "https://files.pythonhosted.org/packages/87/71/abdc2b8c70b8d85a6cb22f404da0f52d7d712f9d49cda039a0cb1adcb973/orjson-3.13.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:dd61e64802d51d1e4f16531c64536354fc3bc67932dc0cff254044f72bf0f187", size = 134793, upload-time = "2026-10-07T14:09:19.084Z" }, + { url = "https://files.pythonhosted.org/packages/0a/2e/1c13552d8b0241083116de02b2f284ee38501ef06ebfb79893f741538168/orjson-3.13.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:c5e3ccaac3106e8fa6e2f2f6962449d7c757d7b067e41b395a19d6f0d6cec892", size = 126711, upload-time = "2026-10-07T14:09:20.645Z" }, + { url = "https://files.pythonhosted.org/packages/85/f8/d4ece953a519d064cf690adaa68cd389d5b64fd261726334841b32978d6a/orjson-3.13.0-cp315-cp315-win_amd64.whl", hash = "sha256:7804dd1d6161da0e53b284c2aebf20f23e78eaac617300803e1467d1828d987f", size = 121496, upload-time = "2026-10-07T14:09:22.359Z" }, + { url = "https://files.pythonhosted.org/packages/70/cf/f691388c4a9bc4af7dcc1648c4b40845869908b517d7c0009d005c7d1fa1/orjson-3.13.0-cp315-cp315-win_arm64.whl", hash = "sha256:f5c05a8fee59309f537590a1ff12d3c1009c485e96a50a9ac60dd085c09d0fc0", size = 126260, upload-time = "2026-10-07T14:09:23.928Z" }, ] [[package]] @@ -2152,10 +2039,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f3/fb/f19e1e34d86dbdb0c8cf52b317d02e3488ef129deda3d83a95db7fcb1b57/pycryptodome-3.24.0-cp37-abi3-win32.whl", hash = "sha256:b5c5fecc6232d71ea66a2d40db6b4169302f6f9f4803903809db1e2869977905", size = 1789157, upload-time = "2026-10-04T17:35:51.597Z" }, { url = "https://files.pythonhosted.org/packages/e6/b4/4cd7b5b7f3e4c7012cbffc2295af8982b11c9f649079d90a90525200b5c4/pycryptodome-3.24.0-cp37-abi3-win_amd64.whl", hash = "sha256:89a9c14b18f43491d7bec4440c7179eb51a56891c3070e41ae726cb3734c6b9b", size = 1822033, upload-time = "2026-10-04T17:35:54.364Z" }, { url = "https://files.pythonhosted.org/packages/f6/c7/d5a2f6fa5a39634fecc8ac79d321ae774172099b86392af6380671af1ce0/pycryptodome-3.24.0-cp37-abi3-win_arm64.whl", hash = "sha256:e6870f15ecbc61c25058bc5d163189af5c81a2ac42574bac4f2e927720b89c34", size = 1755935, upload-time = "2026-10-04T17:35:57.358Z" }, - { url = "https://files.pythonhosted.org/packages/1f/73/f9f337db60b5a4dc62fcc34360e131cbae894fe3abea2fcc3559c7a5a091/pycryptodome-3.24.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:27cb8fbe6ba84ba508b3e94ef22e3fd496d91be2e5f624fa8f827ff23d1f455c", size = 1622312, upload-time = "2026-10-04T17:36:05.459Z" }, - { url = "https://files.pythonhosted.org/packages/c6/8c/1855014371c957579ab603986bd5b183b6189267d66a2d3757d6c04c4bd9/pycryptodome-3.24.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:98d4efe5ee7fba703591b82b5c2c3f5f3b82a61c7807db4c7be2ab5ece07729c", size = 1677979, upload-time = "2026-10-04T17:36:08.434Z" }, - { url = "https://files.pythonhosted.org/packages/a6/6e/a03c73a9e4a9cb3ed5baefc5e0639109ac8ec6800e95d79645c252e5412c/pycryptodome-3.24.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f83fb5a5c95a888d0ee3542890a113b98fd871e45758902845721894c99ea028", size = 1670228, upload-time = "2026-10-04T17:36:10.849Z" }, - { url = "https://files.pythonhosted.org/packages/89/5f/f8e7c8e802700554d73ef4b3c16c79985ca98f43621819e16cfe74ccd513/pycryptodome-3.24.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e00162d4ae4c68d533294103ea3a60dee9c89d75a1281e0e4e3e064986cc7388", size = 1824973, upload-time = "2026-10-04T17:36:13.64Z" }, { url = "https://files.pythonhosted.org/packages/d5/e7/614c4ab80ff8bcbb31777083ac7f09680a24b1915061e60b5631ed6c81c8/pycryptodome-3.24.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:891a1eb7a31c6dd23b00d614ad9b5e978d17969cfab2abb8c974e83006ff876f", size = 1618674, upload-time = "2026-10-04T17:36:16.575Z" }, { url = "https://files.pythonhosted.org/packages/6b/b7/81cd3754cfada6abdaa42d7868ae3106d8711101c1642f854b067b2b2538/pycryptodome-3.24.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9d8c5a84de826bda6190d37d3a9f7ad404ea16c32718a5935a6d7cd1adbc6e6", size = 1677980, upload-time = "2026-10-04T17:36:19.241Z" }, { url = "https://files.pythonhosted.org/packages/82/86/eed7951535cc325f75661d387407e16c802419bad0aa957e696524bada27/pycryptodome-3.24.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9eacc321c920184b09558f1f0a0bbcf32849b94720c57b5b0d04b88ea7573f81", size = 1670228, upload-time = "2026-10-04T17:36:21.722Z" }, @@ -2186,20 +2069,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/a6/24/af4ec4be49fbc810f35b0bdcacc3d433b56bbfa469fd3bfd4ae116cd9bf1/pydantic_core-2.50.1.tar.gz", hash = "sha256:e50d7b94baac6c7d09927fa5ca5800a0c7ee5015c7fcff65beb3a1931b5a6e09", size = 513515, upload-time = "2026-10-11T18:35:44.82Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/09/db/c9cc34707ba2c23ce90d54e8a4ee9307583ad054b9df2ce570ba550cb576/pydantic_core-2.50.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b281a3b0f0822618fe5e3e0d8a2048b6356b14388505dc9374ccffeb69989713", size = 2154222, upload-time = "2026-10-11T18:31:38.345Z" }, - { url = "https://files.pythonhosted.org/packages/c1/17/6963f4ee55b7df7658f5c036c0f90baf8cd3d413f5d8b551f227e8467afc/pydantic_core-2.50.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fa4c8bc12c1354c5550c0c35c1852c8c1901e89e06561724e03f8d0342e1f87", size = 2048126, upload-time = "2026-10-11T18:31:41.061Z" }, - { url = "https://files.pythonhosted.org/packages/bf/be/f75637e222085d29a3076edbc5cfd0dd9b77d145e310ff7dc1150f07558a/pydantic_core-2.50.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3aa9de446b793de2beb6fa2d9d0961803126c4e2a99c2f25ab59b9fd6ea125c0", size = 2052460, upload-time = "2026-10-11T18:31:42.321Z" }, - { url = "https://files.pythonhosted.org/packages/7a/1e/3d192ffa39ce3bd0e98e988fb5c055cfbf4af6e6e155a4ca5baa86d1f2cc/pydantic_core-2.50.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:de531ce1e2a3364e8767878b58f4ff728a434b4fde089781fe30b1e08e2396e0", size = 2190750, upload-time = "2026-10-11T18:31:43.572Z" }, - { url = "https://files.pythonhosted.org/packages/b2/7e/12ea94df5220ab316ee5bb498ebcf710cff2db352653039fb6033f6997d1/pydantic_core-2.50.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7c58106de36ac6a56314182958de20db8d3a29dfd5db527192cc754e4f8e7fb", size = 2390043, upload-time = "2026-10-11T18:31:44.745Z" }, - { url = "https://files.pythonhosted.org/packages/f6/bc/4fbb6dc90af038628ec824434a9841be9d46854f9267bb658f09e315024d/pydantic_core-2.50.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8b4c3df25bd323bf1d36a648d563cf1fc69d717451569927151bdad7cad07a77", size = 2432397, upload-time = "2026-10-11T18:31:46.186Z" }, - { url = "https://files.pythonhosted.org/packages/1b/1a/21a58791021397d9ca35295e3f4291c16e319155c5904334b89eb07e97e1/pydantic_core-2.50.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f77ac30b19221cd9bd3fcfa3d4614eff93140d0572ab730cded17b64adca05f3", size = 2160719, upload-time = "2026-10-11T18:31:47.557Z" }, - { url = "https://files.pythonhosted.org/packages/73/6a/d5b2c5876162fd2c444eaed0064b5d9d9d0ef0d31530fc6a7997e8685ad8/pydantic_core-2.50.1-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:d939de9c82e2126f7f48a7e658f8a85ed46d57662d53f44c49b8895fe94a3eb7", size = 2256164, upload-time = "2026-10-11T18:31:48.797Z" }, - { url = "https://files.pythonhosted.org/packages/af/e8/1a6625d6e99250388dd0ae817c5d75839cd6103e7b790f59e0ffff74955d/pydantic_core-2.50.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:30ddf019d082c117b5d309e5b86710c2a78909907ec1a9381feec3eec02eca0b", size = 2271176, upload-time = "2026-10-11T18:31:49.987Z" }, - { url = "https://files.pythonhosted.org/packages/19/9f/bbdd137d7ec41284701dab4d1489ea597d401dff2f5f3e6b41ea872e0b12/pydantic_core-2.50.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2ab756b72bd5054e4c7ef3ded331b35786cbd3cf931531a508f79a9537517064", size = 2304637, upload-time = "2026-10-11T18:31:51.251Z" }, - { url = "https://files.pythonhosted.org/packages/49/5d/7bd322e649b41b45130bc00bfa34dc57498c853aa8e6fc9604e33bc7087c/pydantic_core-2.50.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:b087b1c5be7ac687cf22eabfe4b6b608d40df23610651e93611e1f49118baf84", size = 2467374, upload-time = "2026-10-11T18:31:52.587Z" }, - { url = "https://files.pythonhosted.org/packages/53/48/41a91111590eb7ba68a7c64c03139235a4b8349930abcb87931aa80da796/pydantic_core-2.50.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a44101320cfe99432db74237545a63057dc7a88dfe792cbcad0647f2af56cb81", size = 2480832, upload-time = "2026-10-11T18:31:54.06Z" }, - { url = "https://files.pythonhosted.org/packages/2a/02/4ac93a3d3f0ff412df1a36a9619743336fe6eec68c0df8a914163a3d22b4/pydantic_core-2.50.1-cp310-cp310-win32.whl", hash = "sha256:a4aaaa791bdae1c972a7e81765f4f3571c926b8e0b9b6e47346499fb80079665", size = 2123154, upload-time = "2026-10-11T18:31:55.396Z" }, - { url = "https://files.pythonhosted.org/packages/6d/ba/3a7af3dcd480c4739aa82cd9fedee79a5531a7c553346abcf095bd05f0de/pydantic_core-2.50.1-cp310-cp310-win_amd64.whl", hash = "sha256:2eedf82ee4753cdab8e50044c6bd569577eebc3859b11fecf4eb9223761ff966", size = 2179366, upload-time = "2026-10-11T18:31:56.697Z" }, { url = "https://files.pythonhosted.org/packages/45/1b/ca81811da3d2aea724fb3c4ba6b83f50ab8f210576306ccd601973142d35/pydantic_core-2.50.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c531166c42ea7bdfecc8c50049581f05dd1993b09cc7c52bb36a14e96deaec7d", size = 2152145, upload-time = "2026-10-11T18:31:58.046Z" }, { url = "https://files.pythonhosted.org/packages/59/20/938ef7e0541af0a314e2f9d63848dbd1656ba2ebfe5ca0469f7ebee00d5e/pydantic_core-2.50.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b6d0c2183008c188e19f4906d426b293bdc4f67ab17df8e180fe16cda208fa71", size = 2045761, upload-time = "2026-10-11T18:31:59.35Z" }, { url = "https://files.pythonhosted.org/packages/2f/4b/456497fe2affa18f49b226e89bde31e8a204751ee343dd9beaac5438123e/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94be440c03fede26969a5ce75468e0e6a9927a1b46d9b679ee8adc1b057b0350", size = 2049557, upload-time = "2026-10-11T18:32:01.121Z" }, @@ -2276,6 +2145,36 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4b/f2/773469b5a10a39116a2cb17edaf6d722f017dd8da07161b371465311c542/pydantic_core-2.50.1-cp314-cp314t-win32.whl", hash = "sha256:9d1bed94af6a63835461f3cf7502058eb166c58c4778e11d0f433cfb1bd69e19", size = 2098406, upload-time = "2026-10-11T18:33:58.043Z" }, { url = "https://files.pythonhosted.org/packages/ee/42/0bb74f8f25204b259b11ab7c12dc7f180893b6bd706118b385147fb6efd5/pydantic_core-2.50.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c8dce1f1e0e5358b682a6ad3fa5e31b31d4560997b8e61417e9217c8d60f8a0c", size = 2148481, upload-time = "2026-10-11T18:33:59.913Z" }, { url = "https://files.pythonhosted.org/packages/47/0d/d801646c9679a4e630e15cf521d4108b93854b42a6e6e02391bd4c6b1095/pydantic_core-2.50.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ceff0acc940be2715bd6ad17b24c0e5304abf44f6efd0f81ee8499e640f9dc86", size = 2174972, upload-time = "2026-10-11T18:34:01.875Z" }, + { url = "https://files.pythonhosted.org/packages/b2/84/23984b763d8862a02a13d27a44b6e8169428fd85ecfed88f54c29108604d/pydantic_core-2.50.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:8a6791afa2245e6c6b180122d105941644f5bd410bb18623b408808cc41a3102", size = 2224599, upload-time = "2026-10-11T18:34:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/4d/90/a63cf8586abc1d1a3f6d9b18f0224789ebf003851f092ebda3c7c863fd32/pydantic_core-2.50.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:84f34323a61a365b4e9295de6028474754829aaddd59c7bf1a040e7487ef8f3c", size = 2024191, upload-time = "2026-10-11T18:34:05.901Z" }, + { url = "https://files.pythonhosted.org/packages/a6/6a/f34bff9808ffb4907fbf5f5040457d253cacf2da7fce9efbc99ca1b1a44d/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23edad659e8dbd8ca7e4e877fe6c81573abbdf215bd25a68b53e1272f58b80c7", size = 2048252, upload-time = "2026-10-11T18:34:07.757Z" }, + { url = "https://files.pythonhosted.org/packages/b2/54/13f419bf1eb59852003818e25935aaf175687d978f4c4bca70e08fe40a3b/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a5fce22f1e87d181e924e12da7d81cfe031fb3881a5ddf26ad28f141756ca43", size = 2173376, upload-time = "2026-10-11T18:34:09.592Z" }, + { url = "https://files.pythonhosted.org/packages/6d/6c/b5a34d24cd0c81669d8f8339d74e6815abcf2f8fb48ab4b49b84c09be1d5/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c73622ef819328873b53109ee4f77ceb598bffedd02daf916102be3228866b78", size = 2364559, upload-time = "2026-10-11T18:34:11.534Z" }, + { url = "https://files.pythonhosted.org/packages/eb/8d/d64d6216a8df365082665927ff923f183056f9049fee08e9777c9ac05296/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce8c25ca38cc0e3d7753ba180808de2c0c8cb24eae0df64491e40921454e9831", size = 2444697, upload-time = "2026-10-11T18:34:13.535Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0d/1b1149f60a00ea21ba5f70e28acbd40feb4598af414f80f53c921fac07c9/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7689580e72a642ab5ec64d5f55b2e33636fa43b4ebe63c0c2c965ef307c7d1aa", size = 2159961, upload-time = "2026-10-11T18:34:15.56Z" }, + { url = "https://files.pythonhosted.org/packages/1e/35/f236549299dcc78e71e945495d7ec67e78d20844d0999c60601685003031/pydantic_core-2.50.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:d5c0e32fdbce7f1e8ef4d11f655694bf5f4175c757a9f1dc2be09b8864e5bcf5", size = 2234581, upload-time = "2026-10-11T18:34:17.502Z" }, + { url = "https://files.pythonhosted.org/packages/6a/85/26901a490522b7f75ef9bb9a7afb73e5bb550f0e1cb5b99a0069183e2eb9/pydantic_core-2.50.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40f523349960fa30f3ea51404308ff50f9997a90df639590f47a057c1f32b415", size = 2244090, upload-time = "2026-10-11T18:34:19.402Z" }, + { url = "https://files.pythonhosted.org/packages/ca/2c/481bcfc70ceeb77a778ca6e5b705fe592cb64735c108157f81b7dd9c280e/pydantic_core-2.50.1-cp315-cp315-musllinux_1_1_aarch64.whl", hash = "sha256:d4193206b6587047437f6f11d7e776df23e1c1e23af2a54d9347275614791e10", size = 2277948, upload-time = "2026-10-11T18:34:21.317Z" }, + { url = "https://files.pythonhosted.org/packages/24/eb/f1e09333faa7ba447cde967310f758430cc7c5e987bdab5228816c70030d/pydantic_core-2.50.1-cp315-cp315-musllinux_1_1_armv7l.whl", hash = "sha256:84bc765b282a9d5b7fe0348b8648904f25a6a04b2139da52b1dd30c8ac3a2c8f", size = 2449688, upload-time = "2026-10-11T18:34:23.321Z" }, + { url = "https://files.pythonhosted.org/packages/d1/b3/036bde636db8f76d92996e81aefc75678ab5cec4a07eea1ad0c72a893fc3/pydantic_core-2.50.1-cp315-cp315-musllinux_1_1_x86_64.whl", hash = "sha256:ed1e728b39a383c81035b2459cfcb35d99dfb01f7d6ebe3a913bc1cc5b81e459", size = 2479286, upload-time = "2026-10-11T18:34:25.214Z" }, + { url = "https://files.pythonhosted.org/packages/d0/a3/07f018294ee18d144afeb6df1a47d9e92960f014be45c5ed13519fa5af95/pydantic_core-2.50.1-cp315-cp315-win32.whl", hash = "sha256:bc94f474417604bd383d2cd445d071b07dd55fedceed3ce33407bf1fcc107290", size = 2103683, upload-time = "2026-10-11T18:34:27.42Z" }, + { url = "https://files.pythonhosted.org/packages/5f/98/f9bd7e1f9b6709f155acb9ef826d9c3884fe925f811fd8e55b9b52280bad/pydantic_core-2.50.1-cp315-cp315-win_amd64.whl", hash = "sha256:983a662de2571cb2502fc8ff47b6770b03d025d2eb314c92f77b3f07c74720ed", size = 2171681, upload-time = "2026-10-11T18:34:29.508Z" }, + { url = "https://files.pythonhosted.org/packages/10/87/4bb3e1e7f385c076ab5af4d6dd0571b22042cd8207eb810d5b9fef15ae31/pydantic_core-2.50.1-cp315-cp315-win_arm64.whl", hash = "sha256:94845ff54dc5193f228cab81b2662a04bfbb892e95bdc15edf7399000ce57d54", size = 2156251, upload-time = "2026-10-11T18:34:31.455Z" }, + { url = "https://files.pythonhosted.org/packages/47/47/83643225b08f2aef6c8cc4bbe6e3f79c5e139c4364a6e450d0f399d87774/pydantic_core-2.50.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:4a53d13cdfbedbfa87f08b83c1a0a5efcc767d785a4b41934fa9cb672670493a", size = 2234363, upload-time = "2026-10-11T18:34:33.65Z" }, + { url = "https://files.pythonhosted.org/packages/5e/66/127ca649ba2f2462039dc1e694c6c01e00a3689f023a617364d3507e6d97/pydantic_core-2.50.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:efbecf43d321f7b9281441f1f213f7c21c66988b0e06c2730ba13ed47a46bb08", size = 2000972, upload-time = "2026-10-11T18:34:36.037Z" }, + { url = "https://files.pythonhosted.org/packages/5e/4f/e421e0a5d653b1203b090b2e48745976988d7338a647940704b5b9c2b399/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc1f08f68dac9f9e83845a8039880aba2ab553eb9b2259c3243a313182c253fe", size = 2022925, upload-time = "2026-10-11T18:34:37.972Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4e/ea5568e2491e1a71100f15ae8c2d01ef52db42a184a2d4e716bc79e5eb8f/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5dfe41f232befddb9c4377f6cfc702b51595e2d78ed082672adf8758d2c4619f", size = 2192867, upload-time = "2026-10-11T18:34:39.921Z" }, + { url = "https://files.pythonhosted.org/packages/ae/5e/3b8c3a35acbe219909ada5defad5d7d9fed845fb2b37bd5ec518f453c119/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adc06d218a1cadfd2ec4628424d7d79ce4eba69c2965e7e7b55106f0da5208c8", size = 2388687, upload-time = "2026-10-11T18:34:42.184Z" }, + { url = "https://files.pythonhosted.org/packages/b6/aa/7889b4e515f91a2e8c0ae6b5081fec0feb30c4398d1434e14793c60f173a/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cf91809d0721ab81592ba67bea7694821679c10b1a2e3c3460082b286c1918a", size = 2464415, upload-time = "2026-10-11T18:34:44.384Z" }, + { url = "https://files.pythonhosted.org/packages/08/78/93449e628eb8a6fdcce3eff9043081179d1bc7ce6f1bff32dc5006f41e00/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23923ab9292c40da026330b1ecf4dc2618c8e86e0422e5d1fbf50d94d64ca4f8", size = 2150823, upload-time = "2026-10-11T18:34:46.392Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f1/72c5bc129fceb0d00f05dc1e67f518c1728de1928c55f81fc13d7690de39/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:f3377c8c2b3ce898423c5e5dd94c7982e30aa7717a7e6ab2470b9de364963709", size = 2245806, upload-time = "2026-10-11T18:34:48.805Z" }, + { url = "https://files.pythonhosted.org/packages/28/2a/922a0e78f3aa6ab837b59f88190233fb8dad546c17995fde9bb3ed3b9b49/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:455a773617b5913bf5c20d0692e5787b119e52c4d40ea644ca31f5758fd31be2", size = 2264160, upload-time = "2026-10-11T18:34:50.876Z" }, + { url = "https://files.pythonhosted.org/packages/52/a8/0f1449e3e1b20941c9372faa18e7b6a092e30cdfa841902473f7989532ac/pydantic_core-2.50.1-cp315-cp315t-musllinux_1_1_aarch64.whl", hash = "sha256:1a9006395dece0e32e704c315eff8a00bede494f6108546cfc5539c89fef4f9a", size = 2294031, upload-time = "2026-10-11T18:34:52.876Z" }, + { url = "https://files.pythonhosted.org/packages/d1/d0/1031f492857de70355fb16524bbb03efce5fd34c93ed4a1ec60be07e0d4b/pydantic_core-2.50.1-cp315-cp315t-musllinux_1_1_armv7l.whl", hash = "sha256:d2d82aa62521c55ddfb000ae70f88cdd8de974078f6024e821dfe5addd0c818f", size = 2468423, upload-time = "2026-10-11T18:34:54.995Z" }, + { url = "https://files.pythonhosted.org/packages/46/52/269ffffa645b8e47906395a39cf9db1151ae9fa4bcd7f47b960bc31baf37/pydantic_core-2.50.1-cp315-cp315t-musllinux_1_1_x86_64.whl", hash = "sha256:009634b83993777ddcd69cad0ffcace43dabde692109528e35f0fde91e386a8b", size = 2512598, upload-time = "2026-10-11T18:34:57.149Z" }, + { url = "https://files.pythonhosted.org/packages/31/5c/e47e28281f20326ff6f3c31d626f0a83e615d2d94ba41bb0ad6ec237184a/pydantic_core-2.50.1-cp315-cp315t-win32.whl", hash = "sha256:3fde4fdc6487a58d944ca87cf5adc95d5f266e872c19599f5f4c0a8a1b1f9f9f", size = 2098535, upload-time = "2026-10-11T18:34:59.313Z" }, + { url = "https://files.pythonhosted.org/packages/03/ad/759e181e69c1b472c60b2049e5f61d5da1deefdd5ce1df4bb2ebcf771f25/pydantic_core-2.50.1-cp315-cp315t-win_amd64.whl", hash = "sha256:1c8632d4ac04e6f91128fca584b3a8a507d81604c24eeaaad00d4be42765c32b", size = 2148645, upload-time = "2026-10-11T18:35:01.571Z" }, + { url = "https://files.pythonhosted.org/packages/6d/56/8a702c27e5be9f47e5f19d8669227424290e4c024e7c370279cbaf244b4e/pydantic_core-2.50.1-cp315-cp315t-win_arm64.whl", hash = "sha256:c3ede305158e75510be50869b319550ab072008c13d64d4ab1e094fb286b6f44", size = 2175297, upload-time = "2026-10-11T18:35:04.079Z" }, { url = "https://files.pythonhosted.org/packages/e7/73/a23a327237d9bb985298ce47702e196f995ce850224c12c70886bd66bb5c/pydantic_core-2.50.1-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:062e891facce5ca296a1c37098e5e466780457f86413894b399f0cf22934f769", size = 2162560, upload-time = "2026-10-11T18:35:06.274Z" }, { url = "https://files.pythonhosted.org/packages/df/b2/33b37b5e82408f402a5e82649a43e7c95cd5dab7beaeef2c35cedbfd18f2/pydantic_core-2.50.1-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:49c2cbb2397fe4d0987e84606e691af6cb87bc0ee1bd3e7b737f7e10b4c142f9", size = 2075250, upload-time = "2026-10-11T18:35:08.455Z" }, { url = "https://files.pythonhosted.org/packages/04/62/c7d5b9249466ccab90f3ce4790c2399dbfb8172ae9e74a7753dd295fe65a/pydantic_core-2.50.1-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e4472072de0137ee0d8e72d6620e85939c271d2f90f6bbb4b15c24638b79f92", size = 2107891, upload-time = "2026-10-11T18:35:10.918Z" }, @@ -2307,9 +2206,6 @@ wheels = [ name = "pyjwt" version = "2.15.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/43/ea/5194e52748b0da83d71e082d75496eaec6e58f419f5e184786ded517e6a9/pyjwt-2.15.1.tar.gz", hash = "sha256:4f259e80cdfb6b3fc18a7de51fd1ef9ec79652f25019bae68975ca2468a34df8", size = 121252, upload-time = "2026-09-28T18:40:42.598Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/50/ca/44de4e75f8aadc457f0634be3b542815078ded46dca30efb960edeecad6e/pyjwt-2.15.1-py3-none-any.whl", hash = "sha256:42d59d631f7768a1028a64c7ff581a9bf7519804daf91fc5b6c56e30eec5e193", size = 33860, upload-time = "2026-09-28T18:40:41.429Z" }, @@ -2343,12 +2239,10 @@ version = "9.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, { name = "pygments" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } wheels = [ @@ -2360,7 +2254,6 @@ name = "pytest-asyncio" version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "backports-asyncio-runner", marker = "python_full_version < '3.11'" }, { name = "pytest" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] @@ -2403,7 +2296,6 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pytest" }, { name = "python-dotenv" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/32/72/d3e125d18f798b2968430b77dba991c69df354ec649db4c1480ac9bc2ab4/pytest_env-1.7.1.tar.gz", hash = "sha256:f2c5aed2621dbfc73c2866a710e2e456409495c5ac10905612c9509b3ee631a2", size = 17091, upload-time = "2026-09-08T14:49:44.487Z" } wheels = [ @@ -2524,15 +2416,6 @@ 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/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, - { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, - { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, - { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, - { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, - { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, - { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, - { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, - { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, { 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" }, @@ -2603,16 +2486,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/e7/8d/5b3d5631c2f4b4b8862f64cd0c9eb777b5710eeb5125b4be8dd0a200a4c0/pyzmq-27.2.0.tar.gz", hash = "sha256:54d4259d1bfae24ecdb5ca79f7acc2eac6c286a02d6a0ae617797cb45f0726d3", size = 292316, upload-time = "2026-08-20T19:08:21.19Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/de/c9d653d686ec686bac6ae5f953c784ffc4d2e4a33f9c20d0326aff549ca8/pyzmq-27.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:480dba27b145373b5e103890f17969d891bc9e86746d6b8b29dd70b0d4addc62", size = 1458528, upload-time = "2026-08-20T19:06:11.455Z" }, - { url = "https://files.pythonhosted.org/packages/13/3a/e3ae8e56fdb87cefbef655dc1d808d5ac76eacf40af850c5d78fd81a7faf/pyzmq-27.2.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:722f0a6940be1a483c81029a271d950e04dc2ff113a42e21b3d2b7a0d8e59638", size = 985810, upload-time = "2026-08-20T19:06:13.409Z" }, - { url = "https://files.pythonhosted.org/packages/03/ee/0ace0abf6315f3f481388826f1e9218802d9b5bb4a01bae5ce42018c3b4e/pyzmq-27.2.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ee556ed1cf836f96de9d5e545563116426d4a94f21b8041fdc79408eff18ebb", size = 713840, upload-time = "2026-08-20T19:06:14.85Z" }, - { url = "https://files.pythonhosted.org/packages/3b/fd/aee8c87f4854a012e232a6557b1167b6cd207506f59f378954b2d8bb6ed1/pyzmq-27.2.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d64da42cae09e6b0c61368b4cc8ca80f23ce3af17584d08053f3dc957433d5ed", size = 888214, upload-time = "2026-08-20T19:06:16.295Z" }, - { url = "https://files.pythonhosted.org/packages/94/2f/9be34eab874a26aa91315be0b27f94d43d35dad544cbdf28bcd41691afb2/pyzmq-27.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:376981d106598beb70be384f44d8f589832fd0051d184d38d10043da3cc3b080", size = 1705252, upload-time = "2026-08-20T19:06:17.89Z" }, - { url = "https://files.pythonhosted.org/packages/7f/26/362344e337d6b5905d65d0c205e91090b39b3b5a59ec9b84dbe88a5dd60c/pyzmq-27.2.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:40d96cb7a8f6a43aa9617c00215c2b73e1b5e4a1d6cbc9f5860ed7ac682599f0", size = 2075298, upload-time = "2026-08-20T19:06:19.27Z" }, - { url = "https://files.pythonhosted.org/packages/1d/ee/3b76b91e2bb8c5c12f8ae9ee553eb6254ba0bb048c2f0dea7d945420a0d3/pyzmq-27.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4ebc7889b31bc11c72e9f17ba3ebb0a8b0911cce413f41b498e55383a94819a3", size = 1926812, upload-time = "2026-08-20T19:06:20.621Z" }, - { url = "https://files.pythonhosted.org/packages/9e/ae/83d0740f125a6ef91d5ed29e560679e4c5beeaa3ab1fc87e5fe1128c296d/pyzmq-27.2.0-cp310-cp310-win32.whl", hash = "sha256:650c6cd7cb39a069e7048261efe66fce8bf2e0052c831a7a099b7a0f2ea860d7", size = 571057, upload-time = "2026-08-20T19:06:22.078Z" }, - { url = "https://files.pythonhosted.org/packages/ce/b3/3e99a7af1c25e84f68c6c7b16c51b664dd51e12d0bc3d252a48d298e9a08/pyzmq-27.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:82a09aa67871d4f2fcafd47bf670fb93210b232a7c2d4b8a54676314edf04033", size = 643232, upload-time = "2026-08-20T19:06:23.431Z" }, - { url = "https://files.pythonhosted.org/packages/06/cb/785d002a08e630807141b102fd2740cc11623c366bb4606465450bd12e03/pyzmq-27.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:bad4813f270592cedf56977e31ac1fc374fb0f6f67ea5134a5e37c19cb429a8e", size = 567590, upload-time = "2026-08-20T19:06:24.664Z" }, { url = "https://files.pythonhosted.org/packages/1d/2e/8897afa4538707d86645f51cc50e66b2b84900edb1be9dc9af2c2fc04e5d/pyzmq-27.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:9216132843d139a123f243c07fe70f7487dce5041093dd77040f9adb5dc91872", size = 1457109, upload-time = "2026-08-20T19:06:26.022Z" }, { url = "https://files.pythonhosted.org/packages/d1/bc/dbce7bc1654fa25b1e68b9bad9e547906f581ce919c186a88ed951cb794c/pyzmq-27.2.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:d41ebb260b69329b7d4a2936d44c872c86dd785355b51366c8b14e07ed7e9373", size = 985701, upload-time = "2026-08-20T19:06:27.481Z" }, { url = "https://files.pythonhosted.org/packages/95/cf/6981738b57c83fef33f356141ad83bf51e92f2f70c9d5767affd1a699f07/pyzmq-27.2.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:468139ddb2e494d06e586bd3a6835077e8b3764560c8db552fe685c5867fc24e", size = 714285, upload-time = "2026-08-20T19:06:28.962Z" }, @@ -2648,12 +2521,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/36/81/ea1c1ae3f801d96ba2c269e056761ebcfe023476e651d3af2a7817962051/pyzmq-27.2.0-cp314-cp314t-win32.whl", hash = "sha256:fba8afcf265c6e9fbe1594cb045d4765c6c9a7d607653a8196067ef23566b843", size = 591103, upload-time = "2026-08-20T19:07:13.451Z" }, { url = "https://files.pythonhosted.org/packages/8a/04/149a627707e780fa9f2c1ede3590c14fa6b18b5576d15744342622299a50/pyzmq-27.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d1bc1d380a91d954ed5fc9f12915dba014eed0978d2de05ee7ca688bdaac144a", size = 670215, upload-time = "2026-08-20T19:07:15.069Z" }, { url = "https://files.pythonhosted.org/packages/30/ba/f9c3c1536c41ef3dbf765ea04218990e2056e558f98184ecd883767fc501/pyzmq-27.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:c7cfb75caa83f5153c687e9d2107f64b5ef0ef0d6edd260d3ff920baaaa69101", size = 582252, upload-time = "2026-08-20T19:07:16.582Z" }, - { url = "https://files.pythonhosted.org/packages/8c/26/1a7cd2d8e4e3c27d83a46960e22101b69f527843be140cb3375267aa8ca6/pyzmq-27.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:770a37f28ddfbe1d2c40a2e3ce37e5fd10831daa6ae9634105aa8a5d23507b00", size = 875015, upload-time = "2026-08-20T19:07:52.084Z" }, - { url = "https://files.pythonhosted.org/packages/b8/ed/c8daf770ca31eb293bef40f801f05148e0a96ad538d55ec3bceb226c91ec/pyzmq-27.2.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b398c5fe102b41e1559f7ffdae760aabd5f432d73b047b4ae0eac4e01cb594d2", size = 774400, upload-time = "2026-08-20T19:07:53.596Z" }, - { url = "https://files.pythonhosted.org/packages/64/6f/b958b0785eb15ab7a78913e3df8de705dbf226ce1d0004998fa4872bdd59/pyzmq-27.2.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0e1af01858d6dc0c09cea57f9cb1ddf4601f04897b6bb1efc3a2038123c87d79", size = 877993, upload-time = "2026-08-20T19:07:55.192Z" }, - { url = "https://files.pythonhosted.org/packages/2d/5a/7a070d0e9911441061402013f0c64e5772ee781704c5dae093e6b051c6f6/pyzmq-27.2.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:211350c3ccd4746bc5a85e8fe961bad1f7f2f274f67cf1f785fad7f96f562eea", size = 614493, upload-time = "2026-08-20T19:07:56.77Z" }, - { url = "https://files.pythonhosted.org/packages/b3/28/833485224e1bd8960cbf3539db465ab2bf23b50de885dc4225a637480539/pyzmq-27.2.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dde5e291548ca0f397623b5e523db5c90172b32aa4fd3ba464a79ea31a580b43", size = 780573, upload-time = "2026-08-20T19:07:58.18Z" }, - { url = "https://files.pythonhosted.org/packages/90/8e/52239b9b5fe4f9cf77e272e6a8c548c01ba407d08d3aeeb3220816669ef1/pyzmq-27.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:94242bd4de6af7e74665e14a88630bccd615057f6acfaf08a3a432551d604645", size = 553963, upload-time = "2026-08-20T19:08:00.015Z" }, + { url = "https://files.pythonhosted.org/packages/fa/00/78fe097a304a408275747ce43f20428789130b059c5649956277c20f30cf/pyzmq-27.2.0-cp315-cp315-android_24_arm64_v8a.whl", hash = "sha256:c5129a8fe43ecc49b99eb75616603d483a3c2fcaef504988fafe8ea392aea98b", size = 1134295, upload-time = "2026-08-20T19:07:17.94Z" }, + { url = "https://files.pythonhosted.org/packages/f2/83/1c36270658d2ee56e23a3f9ef5fbcb94cbd2f9fe966a6641f2f38e697162/pyzmq-27.2.0-cp315-cp315-android_24_x86_64.whl", hash = "sha256:baa2ce3485145653194d6c8c5beedd1e9f0bf46a0919c9fa2fe2204fc35b74d9", size = 1167492, upload-time = "2026-08-20T19:07:19.476Z" }, + { url = "https://files.pythonhosted.org/packages/58/b2/f0ae223438d7faa991f6feefdc823815f11cc604f898738376b59fd96515/pyzmq-27.2.0-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:e1ed46048d1920cabc96d952a0d5cfe4127ad8db572c335aae4e3c57b9278d7f", size = 1465992, upload-time = "2026-08-20T19:07:20.941Z" }, + { url = "https://files.pythonhosted.org/packages/59/46/fb56f3f37a6a0937b0e1d2885e808b5eedc171320bac85573cfae78fa9bc/pyzmq-27.2.0-cp315-cp315t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:e0fa0bc6b1a184aee59b32efcd1b7f0e6d5b8f9387799e4c16a4cb66a86747d6", size = 976118, upload-time = "2026-08-20T19:07:22.577Z" }, + { url = "https://files.pythonhosted.org/packages/21/82/a2c9bfd7c4d34eea1278493cd041bc000d41acb4463c89ceaad29dc813b6/pyzmq-27.2.0-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4bd6743e8bf854c3bfce892dd6578a514aabf128e37a4b2eafcf01856f7e44", size = 705968, upload-time = "2026-08-20T19:07:24.019Z" }, + { url = "https://files.pythonhosted.org/packages/d6/12/b906b269116b6591dc15c0acc5d04c043957c8a531d336999731f4b1d899/pyzmq-27.2.0-cp315-cp315t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95369ed6626afcfe2ac89832fb1b917c077fbeb905fbbe5d918349ce0222b89b", size = 879011, upload-time = "2026-08-20T19:07:25.428Z" }, + { url = "https://files.pythonhosted.org/packages/12/13/f96359534bfb77651c15f1fbfc4bfdd7ec3489d23f434706d39598dd0dcd/pyzmq-27.2.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:40124779c3a56ad5d91902df1ff89159cb414b6c1a0ee697abcc66cf5e6db62d", size = 1697496, upload-time = "2026-08-20T19:07:26.821Z" }, + { url = "https://files.pythonhosted.org/packages/21/b4/2c007ae5f2fe5eca86cbfbc874ed86b5135f2f7812615dfd78606d3c93f6/pyzmq-27.2.0-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:ec8a318dfc27c7d946651b3d9e8025d5734f30c168a822195601827207bac09b", size = 2064347, upload-time = "2026-08-20T19:07:28.315Z" }, + { url = "https://files.pythonhosted.org/packages/9b/88/767af3a6630c15215f3a66700ec79598a375edd1fdc9d75a3ad522178c01/pyzmq-27.2.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:88c0fac061bac269076edeb3a209acefc96cd6167c239daf1c2b404ac48d7012", size = 1917360, upload-time = "2026-08-20T19:07:29.693Z" }, + { url = "https://files.pythonhosted.org/packages/35/c1/80dd2d20d6e57bc68e1dce1e84bf3e76c9577c1bf728199985c8b4ea0fd1/pyzmq-27.2.0-cp315-cp315t-win32.whl", hash = "sha256:ac126d48cf18aa955daabef43bf0009ff76ad4deee437d09ecf15388214b5beb", size = 591073, upload-time = "2026-08-20T19:07:31.341Z" }, + { url = "https://files.pythonhosted.org/packages/f8/b5/33b781666f3f52ae834bc9c8e38f4f0483a826c5a91cccc993292007bf10/pyzmq-27.2.0-cp315-cp315t-win_amd64.whl", hash = "sha256:edce90a1e588ec63adbf612cc0ad582de4169cd216c7ae53c15f42a2ee902f35", size = 670701, upload-time = "2026-08-20T19:07:32.895Z" }, + { url = "https://files.pythonhosted.org/packages/6e/97/bc4f0edefb992df4fdebcf9f0cc40f631cd4ed277e1ed59ef2cd99a5c8c5/pyzmq-27.2.0-cp315-cp315t-win_arm64.whl", hash = "sha256:a843094b4d3d633bc3623e47a2ff50742d6af02bc1f7606aa2e67e971e21878d", size = 581985, upload-time = "2026-08-20T19:07:34.19Z" }, { url = "https://files.pythonhosted.org/packages/93/22/7187a1f0bf2b8bf8dc6b91762438fb9b472f684f2dc4cb74a24bf8957943/pyzmq-27.2.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a7c1144dc61777938e932a2c9011b980b89fd8ff3733033b34c44c299187a6e1", size = 875015, upload-time = "2026-08-20T19:08:01.692Z" }, { url = "https://files.pythonhosted.org/packages/92/71/09b71620ad52bad4eb68b1516978ecaf52ef623c3fa16e0732a03cf3274c/pyzmq-27.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:c218b816220d05acf6ab1bafca58926d95cbcc5fec5024724666030466308f0c", size = 774395, upload-time = "2026-08-20T19:08:03.108Z" }, { url = "https://files.pythonhosted.org/packages/9c/cf/5c8eb9994a14ff5ee5b0cada339421748746c95aee0280c8b656741e8749/pyzmq-27.2.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ae6ebbc0bfe5a21ce21e32ba567bf73df2d93888109c65acbd42506cf9395759", size = 877994, upload-time = "2026-08-20T19:08:04.724Z" }, @@ -2664,101 +2543,97 @@ wheels = [ [[package]] name = "radixtarget" -version = "4.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/07/0f/f581bd64b2b1cff364fa94539ee6e99924ff28ceb017ddc819aa7deff9a0/radixtarget-4.2.0.tar.gz", hash = "sha256:c6ba17832edeed75d63ce605327b79a2ed9b24a4a5eae9c1b1419adbdbfaf839", size = 703140, upload-time = "2025-12-16T18:44:00.747Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1c/f5/551f8df0744fbed27d42f48e1aae3e8fe8ed4dcbb21310ad0eebca49019b/radixtarget-4.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aa0d14f3c1df46fbd81ddc58df1bc376e6a22610e1491b6fb485b0ca1959977", size = 525953, upload-time = "2025-12-16T18:47:58.819Z" }, - { url = "https://files.pythonhosted.org/packages/66/5f/64a17cc53cdc094e7aa09c84f02891627cd00d0272a09424c8a7360718fa/radixtarget-4.2.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3cbfafea3ff152c7ed5f9731657caad6e0b3556b6cbb9fbad89b0c483630a2c1", size = 536305, upload-time = "2025-12-16T18:48:10.509Z" }, - { url = "https://files.pythonhosted.org/packages/29/4a/2f91713e7cb651188f31038fcb61a9af8ff1a7e7463ba8819846f0ae6642/radixtarget-4.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44af119000a99be3851e56d545d75d6e12c683c9966950320cb1a2ccf1333cc0", size = 711324, upload-time = "2025-12-16T18:48:23.324Z" }, - { url = "https://files.pythonhosted.org/packages/8d/91/b07232578100307f1a3ad15b7108823691429968e9b26185d3ac8a587f23/radixtarget-4.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba8c8349aca622b722b62c766a298883ac0495a259768e8753b2aa4b1f7073cb", size = 561546, upload-time = "2025-12-16T18:48:34.563Z" }, - { url = "https://files.pythonhosted.org/packages/71/8d/bc63c8d89b6092f749db2eb6cbc380dfdda140b82e1cb155a2f09077e837/radixtarget-4.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b83b17269cbeeb5c87c53f36c850ab35e50e45290b5da14c9f1d5bf93dd4573c", size = 532511, upload-time = "2025-12-16T18:48:55.502Z" }, - { url = "https://files.pythonhosted.org/packages/bb/5a/06c63a9659a21db2043812a276cb61e85343627039dabd1544b772b1200d/radixtarget-4.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0ba767a789a5d7a9b3b6f054bd2b3b2a627db8cbe1de11d837e06f4bad40472", size = 561009, upload-time = "2025-12-16T18:48:45.839Z" }, - { url = "https://files.pythonhosted.org/packages/ff/f3/092c899d35889b9e3796400fdcd4e25ee50a1c6e908b010a6e6956efd1b9/radixtarget-4.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b59066e196ed402f30b0df70a243734f4fabd67324bdedec5e130409c55d606a", size = 708927, upload-time = "2025-12-16T18:49:14.091Z" }, - { url = "https://files.pythonhosted.org/packages/f8/ff/6214504bf0fdd1f321d9c9d0e1850b6718cb94c81d49e73e75c7f3e7be1e/radixtarget-4.2.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:05efd8b2603e61818cdf5d89a43d2a0103c5e3574ab96b60a81b08ec4caa53dc", size = 807385, upload-time = "2025-12-16T18:49:26.575Z" }, - { url = "https://files.pythonhosted.org/packages/b2/c6/27b5f2f392312c81b355a8ee10d14fa15c8dea2db197c5206481d584bc01/radixtarget-4.2.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:7e354cf2e84732b631b87af1fe3555650fc9e21bd9618d425a277ab07a14ff87", size = 772106, upload-time = "2025-12-16T18:49:38.981Z" }, - { url = "https://files.pythonhosted.org/packages/54/83/1cfd3058e0da4d8172d10334e18af0b47317b652c5d33c57188634a3c95a/radixtarget-4.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2d65164dff07141276e5ac758ba42df0378727ca51812b18b8e296bb68c1aa2b", size = 736298, upload-time = "2025-12-16T18:50:05.846Z" }, - { url = "https://files.pythonhosted.org/packages/2d/c6/ff526bfd19b6d1aac758e8c256996eef6162a80594293658f4119ff468bc/radixtarget-4.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:ed274b85d0bde14c4ba1e9efa753644b8b19170c61d66987d212e2463e14e9af", size = 378903, upload-time = "2025-12-16T18:50:34.057Z" }, - { url = "https://files.pythonhosted.org/packages/b6/d7/f855b8cf09f06e1a5806b6cca93592394ce4e79df2d00a76ae522bbf384b/radixtarget-4.2.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:bad895da09a580c944f050b506d752cf0350c3874bf42f84b517246b5a18649a", size = 497631, upload-time = "2025-12-16T18:49:09.338Z" }, - { url = "https://files.pythonhosted.org/packages/8f/6f/6413fd33eea0b22d2ed0db194bccffbef922c89e002f0d99befebc7354ed/radixtarget-4.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3dfb196f516a665194ad3f22e402a3c1fbbf9a8353a97fd3829273a77c9a0da1", size = 492115, upload-time = "2025-12-16T18:49:04.673Z" }, - { url = "https://files.pythonhosted.org/packages/70/23/e296772b5a811b8fbc2d224880166112c446cecc51b0774c0d71ec59462b/radixtarget-4.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0253d0852cfb736c3e484c6ac77a401689bcd4dbc1d128f743d90b12360f401f", size = 526063, upload-time = "2025-12-16T18:48:00.281Z" }, - { url = "https://files.pythonhosted.org/packages/e9/bc/da800929b5fc9456ef3221a19465806e7b85c0bb97118e8d2d9e27fe51ec/radixtarget-4.2.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:09b587a22cbf735d790db5bf6a116c0311c7502a568177345c2725d267430212", size = 536300, upload-time = "2025-12-16T18:48:11.575Z" }, - { url = "https://files.pythonhosted.org/packages/9b/62/6eaecc12148f9998f4d3237cd6ed4c23caf416ca90fa25147e92bf218aa0/radixtarget-4.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe6160c5ac6f7c08c22d5b3a4dc9011e2b822906f157a7dc3ea9921f3a15ad15", size = 711722, upload-time = "2025-12-16T18:48:24.541Z" }, - { url = "https://files.pythonhosted.org/packages/4f/3d/54231188743f9aa731a1352b4104cdb48299c8def3750ef56c743a6ba3e9/radixtarget-4.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe042a589c4045607816dbf79bc41fcd9b421ce93b3e296612945ab46fe97f5a", size = 561534, upload-time = "2025-12-16T18:48:35.613Z" }, - { url = "https://files.pythonhosted.org/packages/9c/8d/fe45c6390bd825279ec57975acf86eca745dab5cae1797a9bc72ed29a6b2/radixtarget-4.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb243a1ebf4b089e830dcb6d08f96e751de0a116eb522677a42b5e4e9ec0e05c", size = 532615, upload-time = "2025-12-16T18:48:56.612Z" }, - { url = "https://files.pythonhosted.org/packages/3f/5c/e812eaea1ff3aa7394ed9df30d21e5f8643b7513b303b9be4949f10b0bf1/radixtarget-4.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cb82132c07e43ef30e7687849a71c676e533f786373b6673d3e0f796614de6ec", size = 561252, upload-time = "2025-12-16T18:48:47.304Z" }, - { url = "https://files.pythonhosted.org/packages/68/d9/47de5b14f3fe3be5085267bfef75ba3af25cfe561584c8f275be672144a0/radixtarget-4.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b0df39424c81c946c1c6f11e2389b361644e418bf1bbc6a8b80c23d26607d278", size = 709082, upload-time = "2025-12-16T18:49:15.269Z" }, - { url = "https://files.pythonhosted.org/packages/25/56/18381cc7511db6a98957f83f420d20f3e158fc7e3b6085551ebfcbaf257c/radixtarget-4.2.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:581e0791229bfc4801af86405b62cb4f3eb41c5c68868151cb6c97b0ef32b685", size = 807210, upload-time = "2025-12-16T18:49:27.884Z" }, - { url = "https://files.pythonhosted.org/packages/58/6a/6d29f2e46be3acb30ea120efaa3e335c723db10f740e5091f2db825e8408/radixtarget-4.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:49797ad5db114e600372184ff7f79e1435613156f4cab67f5b7b32c2ac1cc291", size = 772474, upload-time = "2025-12-16T18:49:40.404Z" }, - { url = "https://files.pythonhosted.org/packages/bd/dd/2b4962600262e8137c0223aea7f8ac5979143735c30d371fce4fec123b68/radixtarget-4.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7eb702384f5e90e1b911f8d4f314e59030759a519fc14bcb2e37135091dd091f", size = 736455, upload-time = "2025-12-16T18:50:07.425Z" }, - { url = "https://files.pythonhosted.org/packages/b4/3f/d171081c15c2113a10a9b9a35eceea5c421a6d55d212fb3c5e6b112aae9f/radixtarget-4.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:0c515fcd99dd268f6b4e1eb21bbf14b6818c9c1317496c06bc3fd47790173b72", size = 378916, upload-time = "2025-12-16T18:50:36.406Z" }, - { url = "https://files.pythonhosted.org/packages/f2/f0/2dd66769df40ceed730ed50d00b06430c15dfe5ab7f02d07ee313826d9b3/radixtarget-4.2.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:d9d305119875ffda3af4e4cbb60ab3a3f44a618276edb6154de58bfb7fa2ce3f", size = 498895, upload-time = "2025-12-16T18:49:10.509Z" }, - { url = "https://files.pythonhosted.org/packages/e1/21/eaf70a8b7d5be07cb0722a495b7da227f9b6979e246c08af37174d70e972/radixtarget-4.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e5ddd4cee0a3e6640602f6695469b0ce86fb669eefe40db56a66982368ba5350", size = 490903, upload-time = "2025-12-16T18:49:05.829Z" }, - { url = "https://files.pythonhosted.org/packages/0c/27/a34161399043180158645aed3045c1f17b156eeb1e4518794cd5254ca568/radixtarget-4.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b23e10d2452f29fe09d3095ded30fdbc221b1acd10360e2a5f81856a756c4c73", size = 524748, upload-time = "2025-12-16T18:48:01.4Z" }, - { url = "https://files.pythonhosted.org/packages/ef/f8/0219eb4a010b90aeaf911ba030ac29189f9a71007cabbd1c7f1d63252562/radixtarget-4.2.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:75903eda31182dedc7e3342a8879f79709138829c20a8258279a4c7e78156c1d", size = 536507, upload-time = "2025-12-16T18:48:12.663Z" }, - { url = "https://files.pythonhosted.org/packages/99/5b/e7b6b3c00b380c6567551009e08662516bf653a2a7282a2b365921ca51ac/radixtarget-4.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a43eca0711a743dd897a5fef0aa513798ad12fae19553aaf24e18fd21fe96597", size = 708677, upload-time = "2025-12-16T18:48:25.691Z" }, - { url = "https://files.pythonhosted.org/packages/b8/4a/fc0c5eacaa977a6496967282c154da8b5798f5e8c0c705fea773e8a3ff58/radixtarget-4.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ec3ff6c8b447891921f5ecbedc8569053b16c0cc356fed731b99c470c20aebab", size = 560847, upload-time = "2025-12-16T18:48:36.773Z" }, - { url = "https://files.pythonhosted.org/packages/a8/37/0f952cb79dd99f90d750c39635206faa30f39b09e5cfdb3ae2f377e80044/radixtarget-4.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1d1119f57e74307abda2fd1a23e83c0338373214a539ab1286a88dda55b91f1", size = 531507, upload-time = "2025-12-16T18:48:57.943Z" }, - { url = "https://files.pythonhosted.org/packages/87/32/e9120cda5cd05e99835d7664e9fa4dddbf5fb57fc07d80ad46453ab38d7a/radixtarget-4.2.0-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:76d46168ce9acc65abbe553b435ea113c65762a47148a8406142a2176c5e53bb", size = 461830, upload-time = "2025-12-16T18:43:59.227Z" }, - { url = "https://files.pythonhosted.org/packages/76/48/aeec382df32d2ad85905cf46096a1bfb6c067a7438cba06a8c7f549792dc/radixtarget-4.2.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:62eae4c069123ebd933b935339b4b19c477308ab308262e4a765e4dd7443077a", size = 559835, upload-time = "2025-12-16T18:48:48.951Z" }, - { url = "https://files.pythonhosted.org/packages/f4/81/8c00262b004228163104c2996a3629b6cf828b61b0282ab391b67a0d29ee/radixtarget-4.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877f6a960a7309dcd9c2eb10fed4ca7e03c117fafbda8659e52bb082466ebb56", size = 707968, upload-time = "2025-12-16T18:49:16.908Z" }, - { url = "https://files.pythonhosted.org/packages/f1/f3/c4707fa238d6fa2b2eb16f83db4b7840a51cfeab667704980836158d4e52/radixtarget-4.2.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d92109f94a916aac2fc04ee4c8f5a3f1a3ecb60df774d1febb2a8e1aa22d0694", size = 806824, upload-time = "2025-12-16T18:49:29.073Z" }, - { url = "https://files.pythonhosted.org/packages/0e/a6/6e9b8d2f50e9dd2402e568f03fe305767a4018764cb4903aa04c730fc243/radixtarget-4.2.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e70a00bc5f27d49c2c6aeda47adb776f639d503f726ef6cd484a917aa603d2a2", size = 771612, upload-time = "2025-12-16T18:49:56.618Z" }, - { url = "https://files.pythonhosted.org/packages/34/73/2a57c889a5bb209f265a6cb9734f119a69dc760684b586458de86de7fed2/radixtarget-4.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f38ef0281e4af7a5dc41a040b2adbe45202a2c904666d9ae141d53869f33db02", size = 735221, upload-time = "2025-12-16T18:50:08.746Z" }, - { url = "https://files.pythonhosted.org/packages/2f/fe/bfc926131d4d950aec8657aa0d7f7c6eff0d45690375245a61dc292abebd/radixtarget-4.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:dfd80f33aa21bbf30eba4a5482bdf4d5da7d6f231b6a1f7d55a99887cdc118d2", size = 379211, upload-time = "2025-12-16T18:50:37.713Z" }, - { url = "https://files.pythonhosted.org/packages/df/f3/becbfd7ecacee757c5cd41560ee2c044a2e8e19c0ad273e44f3ab9f38b02/radixtarget-4.2.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1b220ac0837d70837a59a1f1030c671ce4cf706ea9402268fea2effbba9a9e73", size = 498485, upload-time = "2025-12-16T18:49:11.679Z" }, - { url = "https://files.pythonhosted.org/packages/3e/e2/46a645929ea18c24f4690da321f3cf29f9be328e021b0a513c55a6dfdffa/radixtarget-4.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3dcac7b61bcbad700b0347c3aa930dcc85dc4cfc3d9432ce977737d11972b71c", size = 491313, upload-time = "2025-12-16T18:49:07.009Z" }, - { url = "https://files.pythonhosted.org/packages/50/68/1a5aaf605e2d194619931f95cf60c2d20e97437ff9a340aa765cfca08b2a/radixtarget-4.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1a9ef464e354ff4cb6e9b81cbe7cae61614e7d08ed7c380b2345f3d87faa1d3", size = 524293, upload-time = "2025-12-16T18:48:02.827Z" }, - { url = "https://files.pythonhosted.org/packages/de/81/dec202a939bf0b066a3ad4cf8308948b401508575fc6c520400a09289fe9/radixtarget-4.2.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:96a0c97c84c347d3628ee825711b08a351b0ae8e1f7c37435f562fd64fe33ca9", size = 536159, upload-time = "2025-12-16T18:48:15.901Z" }, - { url = "https://files.pythonhosted.org/packages/b6/3b/3a634622a98c6db58e27f4ff49efa9d25bbdd73a9302e47ff3ea0d0d5082/radixtarget-4.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a5f86e9b8805959ee7f66bd6a82d6a67e2087ece27a89ea135de5e80fe1aebb", size = 708628, upload-time = "2025-12-16T18:48:27.002Z" }, - { url = "https://files.pythonhosted.org/packages/b2/56/c347a34ded989e2ebcf388720d437e48b67c8c8ea4fcc2ed0579ccc68f58/radixtarget-4.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2ed8149e6effffa647a2c0341fba0a97d596de37351d28a354dd76bf6840292", size = 560428, upload-time = "2025-12-16T18:48:38.009Z" }, - { url = "https://files.pythonhosted.org/packages/81/8b/e462f93a8dd8c48e7e9c511aeebdcf924e1476e9ceb53c85e91e049e3d71/radixtarget-4.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a81a575e771e360556c404352b3868abe3717265c53f243edeb6dc84416bb0b", size = 531269, upload-time = "2025-12-16T18:48:59.377Z" }, - { url = "https://files.pythonhosted.org/packages/9d/92/0709d70f497a0360e9a7db0387ba3dfa2ce43bcb9ecd0a8505a715d88106/radixtarget-4.2.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17d6254b9449b12e249107340eb1b9f28cac224070cd075a5468e9683e974de3", size = 559408, upload-time = "2025-12-16T18:48:50.429Z" }, - { url = "https://files.pythonhosted.org/packages/30/a2/9817987f6b98cb6851b5744b9e86a917c3ca0775c8e8797c2edd85148d70/radixtarget-4.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:548cc66578feb9a5a4f6af6caab53e68bf5351f3d4361ab8d4f3646281a7fbd5", size = 707551, upload-time = "2025-12-16T18:49:18.38Z" }, - { url = "https://files.pythonhosted.org/packages/d6/a4/ac4c3ec42c2d12d3a1ca26b95bb652436957f7708562cca506976a18e2b3/radixtarget-4.2.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a428ee5cd0ba7dabdd24311a697dee79a14a1719de1dad60e98cf1e5f2bdb083", size = 806347, upload-time = "2025-12-16T18:49:30.627Z" }, - { url = "https://files.pythonhosted.org/packages/c9/af/46f6d575a59dd60b686064f0bf62c97f78f5a797ef59505c78c54ef2f74b/radixtarget-4.2.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:82ed101dc5d8a7b3ec12de59b788683d3b40b862a5f83a4c094ad22a937b9f30", size = 771144, upload-time = "2025-12-16T18:49:57.992Z" }, - { url = "https://files.pythonhosted.org/packages/f9/ce/d1e83431bc68ae0cabdbc373cb985de5be03e3856baa0f2086c18f3be9d6/radixtarget-4.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2770e86a92220b08706b647cd00639c893f0c51cab413d748e129cfc2c49e362", size = 734990, upload-time = "2025-12-16T18:50:10.119Z" }, - { url = "https://files.pythonhosted.org/packages/99/2a/04996087bcba40b19094ce21593b53041d4bfc1bd1712f5416459cdb5b48/radixtarget-4.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:d5b99dca0b6177318396dc7170681f384241819491d0695eb8fc13e9bde5cf61", size = 378947, upload-time = "2025-12-16T18:50:39.214Z" }, - { url = "https://files.pythonhosted.org/packages/8a/b4/1b5d3a0cd7805edc15e03f6281ac7aeb3dd030dba77c9513e196949f15e1/radixtarget-4.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:653378321743c3e79471298e03929a345fff9450abba0f1495638355d1049d95", size = 522379, upload-time = "2025-12-16T18:48:03.938Z" }, - { url = "https://files.pythonhosted.org/packages/b0/79/83d3cf51a87ad6400d75a3ac25dd1c674fecdd9b05d3831768f7c8ffa53b/radixtarget-4.2.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f515860a4a5e18022a7bbafdf36dff82b3614ede92008d52f1aa1664220dbd5", size = 533382, upload-time = "2025-12-16T18:48:16.982Z" }, - { url = "https://files.pythonhosted.org/packages/fb/40/ecb9eae445401566b3e9b61dec4c262ae19b98ae4c91aac4806665535e72/radixtarget-4.2.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7fca34e9c48e5a1c6d81849b185591a8b8e256c3e755a3d815951f5311880b73", size = 707425, upload-time = "2025-12-16T18:48:28.121Z" }, - { url = "https://files.pythonhosted.org/packages/f1/7b/ae9ff987841fc85663f3cd4377b7e259353a9f2c75f187706143ad31d105/radixtarget-4.2.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d7b939a7f1bd17f1e2257313a90ebb19ba10e7e59a0c5e5e113fedb882966684", size = 558296, upload-time = "2025-12-16T18:48:39.343Z" }, - { url = "https://files.pythonhosted.org/packages/35/b9/057d2d88941610d3492e104f6c656cd2da9d323325e27ced178f62044565/radixtarget-4.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:05915257e8ac3ee05812e411f1ae2c62851fd4986d84f8c26f44bc33a3fe1043", size = 704696, upload-time = "2025-12-16T18:49:19.645Z" }, - { url = "https://files.pythonhosted.org/packages/71/b5/871e0339af40eddee2373ca6eb9773f3bdc2757cdeb4347386376f4bc241/radixtarget-4.2.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:e67f5cd923de5d7aeb0688105cfcc2feedcfd3ba05310585ac0fa63f8ab2f634", size = 803127, upload-time = "2025-12-16T18:49:31.902Z" }, - { url = "https://files.pythonhosted.org/packages/95/57/be0c086ac255fe4d1ab75bdb5a5929233640408104843ca9e9b03faf3a7b/radixtarget-4.2.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:c9529b9fd3f0bed32b64f148859ba7832b75c26e582e4c1cc7586c315454c5b6", size = 768508, upload-time = "2025-12-16T18:49:59.317Z" }, - { url = "https://files.pythonhosted.org/packages/f5/e2/0e720d6022b6d9ace940798da70c3735c6b879698d83af60fb2282d81f6a/radixtarget-4.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4f90f1a8270600f3bdc2173757623e85e928815b091e1e145afa3032c26d40a3", size = 733015, upload-time = "2025-12-16T18:50:11.859Z" }, - { url = "https://files.pythonhosted.org/packages/16/fa/a595055e758b5e226bf234eb86f3ec5fbc1976e38e915d897d76fc31b84d/radixtarget-4.2.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:741c7d8833a88bd1305253acbe558920ee818be27fa1c1aea0e0fb3564e0936e", size = 495466, upload-time = "2025-12-16T18:49:12.882Z" }, - { url = "https://files.pythonhosted.org/packages/52/bd/1ae6b8e9609dffa00d3e2a1c4fa5f474c12eb60f2564a65e971928718dbd/radixtarget-4.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:33357489b71862dc63bf029a7803f5aee80466c2ca83b2120d8dea921d35f1e4", size = 487773, upload-time = "2025-12-16T18:49:08.173Z" }, - { url = "https://files.pythonhosted.org/packages/75/b6/72eb662c79e03a1f701ef0cad0272e6e90aab062a5c7ba2dd06322ebecbf/radixtarget-4.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:424611144171c5bff08f123d1b579800d0a7a987f1f28a065ecbfa40a4ff8a21", size = 523213, upload-time = "2025-12-16T18:48:05.016Z" }, - { url = "https://files.pythonhosted.org/packages/a7/44/9efe558f4bcaeee940568444cb87673b471f006e349520dcb730437fe0d2/radixtarget-4.2.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79dc672f10299d5e95522382f4965d26e484916dba4ff44e4ab77e6d4fb80b9d", size = 533440, upload-time = "2025-12-16T18:48:18.18Z" }, - { url = "https://files.pythonhosted.org/packages/c1/f4/32035a5f9e55258611ecd16c7cb7f63e8ed8432b9f60b85f77950270aebc/radixtarget-4.2.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84797ea9544bad786f1c0a233d5081418a76217821345b0f23e56fce713b7659", size = 706516, upload-time = "2025-12-16T18:48:29.573Z" }, - { url = "https://files.pythonhosted.org/packages/7d/49/8ed31f8e089b3aeb9ad14936fd0881530bd963fe6c64ebb40742e1d4ca8f/radixtarget-4.2.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a77c405240eb624970fb4194d498c23833fc404361dea167e614ca27b25f1b96", size = 559263, upload-time = "2025-12-16T18:48:40.624Z" }, - { url = "https://files.pythonhosted.org/packages/8e/f2/f71acd1ce0b4e2bb3c6fa71b60fe746676e39c205f7db01498edef1e1af9/radixtarget-4.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ed5064530dc2185f61f7e6a05b62bd55e20b764eb4c0b156f1c1dd06a538ec5", size = 529125, upload-time = "2025-12-16T18:49:00.662Z" }, - { url = "https://files.pythonhosted.org/packages/d1/3e/17ccc7ba7d7cda61411ec0166b19a98b54f924431e005811db4a081fd55f/radixtarget-4.2.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4f54893bd7ac2985c470b4edeea894661b762b4805e0c585a0a94a1d6155ea7b", size = 556447, upload-time = "2025-12-16T18:48:51.485Z" }, - { url = "https://files.pythonhosted.org/packages/48/c7/25987424b0e3e0c72ec7367b9403bca853fbe570328528223d0ca57494e1/radixtarget-4.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:3a57aea7d709049d2f55d633dda684d87316b962b7bf4a00fa2d3063023e8dd8", size = 705990, upload-time = "2025-12-16T18:49:20.854Z" }, - { url = "https://files.pythonhosted.org/packages/92/be/1f153fb4d57343baa978ffbff99c9f853e7959f966bb9d40308ebac8fffc/radixtarget-4.2.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:233a39a73e0c2b3341ffea438d8d4722d8b5287edaa5d5ddb778ced9d437c9d2", size = 803275, upload-time = "2025-12-16T18:49:33.406Z" }, - { url = "https://files.pythonhosted.org/packages/02/94/45f6b55bd57b8eee6b5a5d8882255364c3f7e1aabd45521178109da59fde/radixtarget-4.2.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:d75bf219fb61d0149164926c3901aa8bd0587ac63444edae846e650cd4af2a33", size = 768779, upload-time = "2025-12-16T18:50:00.582Z" }, - { url = "https://files.pythonhosted.org/packages/37/5b/92dd5e447f9ff20e4462f3a4ba37d1903f283cfb8b6ec2036a14899fefac/radixtarget-4.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9041444da3bb83c1c6e82c44b33808490390ecbcacb35010f27248fd75d7ed70", size = 732662, upload-time = "2025-12-16T18:50:28.222Z" }, - { url = "https://files.pythonhosted.org/packages/51/59/987a5ee67627e8f4a8dd016d9c43fa3113a6991f0460a422e839fb93a460/radixtarget-4.2.0-cp314-cp314-win32.whl", hash = "sha256:6d3353b8e93c43841c94d1f1de8447cf4843acda3c0376aebc4c0249482e1869", size = 369629, upload-time = "2025-12-16T18:51:05.531Z" }, - { url = "https://files.pythonhosted.org/packages/ed/7b/bc78cfb2e46b16c265cf10fc746eb05d39079f04051c35554f74a4881429/radixtarget-4.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:e6e8db75a7ba938e4fd4ff03f6768c0381ecf4e3d26d6252cf9f60e0e572d60b", size = 376294, upload-time = "2025-12-16T18:51:02.813Z" }, - { url = "https://files.pythonhosted.org/packages/0b/37/5334f46e8ebbfb533735624c2645276401feee66ddf3413e75376925c1b1/radixtarget-4.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:461936708cd075ea37946eef58b12fd198b031965c6e0c25f801b9fe3cf87974", size = 523072, upload-time = "2025-12-16T18:48:06.194Z" }, - { url = "https://files.pythonhosted.org/packages/30/96/9bf4388abc4a0f9afbaa0fd55d77b9fb206c9c43dcc49fe7b138a6f031ab/radixtarget-4.2.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6221e7ee00df05c6c2d28e86096d441e8f6a81f12edbfe38422f88b587fef891", size = 534222, upload-time = "2025-12-16T18:48:19.315Z" }, - { url = "https://files.pythonhosted.org/packages/c0/a7/f0f24ddd254d2f86a2ff13f37d9886df0e0c4500ff4f481d865d8a482aa4/radixtarget-4.2.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c1e55858a955ceb6946cebc5a1664cdfff682cf380e03015ac22f40a73785079", size = 706790, upload-time = "2025-12-16T18:48:30.763Z" }, - { url = "https://files.pythonhosted.org/packages/7a/d2/c28bc32796f703fb2ef78af374bd63c1e85cc19dc2dd1476f244646c3af4/radixtarget-4.2.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:773d317934ed1b3c86f808f80a4af4d3756b21a268173ad1ffd9b7505ec3fc73", size = 558637, upload-time = "2025-12-16T18:48:41.736Z" }, - { url = "https://files.pythonhosted.org/packages/74/9e/2ebde415856c066f9e51a07096153f2f9b9d130af4c28e051600976c5d88/radixtarget-4.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f7bab59aac38f370c10845b7a1fb4335a9bd2bc3978cb81ce60e534f97373f86", size = 705271, upload-time = "2025-12-16T18:49:22.497Z" }, - { url = "https://files.pythonhosted.org/packages/5f/29/f23905191087e3cbc38c7328ad985daeec6753fc7812fab0b4525600e316/radixtarget-4.2.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:0bf49f4524f2b309e4d164f405336df116f257a80074cee669c5b5b51e8eb484", size = 804030, upload-time = "2025-12-16T18:49:34.625Z" }, - { url = "https://files.pythonhosted.org/packages/2d/ba/031cbbfdc807acb66e8183cf47ed7bc8a34c0ff8065ab52b913e86f7b44d/radixtarget-4.2.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:01dc45a2e24565f4f269bc724024fbefa9a12bd4f2b9c4d3542caa45ea3e4eb7", size = 768802, upload-time = "2025-12-16T18:50:01.834Z" }, - { url = "https://files.pythonhosted.org/packages/0f/e5/115fb6ab50682bb041e15dcb9c72e35e3868edc297f55799aa4404012c54/radixtarget-4.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0a368e059ffba6e786f5552eb9b8638ad90195643074830314d8cec6f23f157c", size = 733430, upload-time = "2025-12-16T18:50:29.94Z" }, - { url = "https://files.pythonhosted.org/packages/af/9c/e79af1c408b008cde3054e408aec2f78ead5d754c96e392117ba5ef24cb2/radixtarget-4.2.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:858831b2b369d8973ddd927bd870c353a4386d0a517ab3855a2fc73f2f1b61cc", size = 527144, upload-time = "2025-12-16T18:48:09.392Z" }, - { url = "https://files.pythonhosted.org/packages/05/c8/2584c148a34a5df38024ef3296479b7a86de0b70d44956fcc395e72ad8aa/radixtarget-4.2.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d5a75d34f55009a4513dcb396b638ba7dba672d5eb107b7e9f0f0262b98775c4", size = 537302, upload-time = "2025-12-16T18:48:21.896Z" }, - { url = "https://files.pythonhosted.org/packages/62/81/0ebab51c21e24331b78471d1e10cf79b1f5df13a3f214d2d64db1be36111/radixtarget-4.2.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92f908ec996f49686a35dec20d47a98f0b24648c5eacc24c1969cbb13595107c", size = 712638, upload-time = "2025-12-16T18:48:33.441Z" }, - { url = "https://files.pythonhosted.org/packages/3e/49/1e7cb866e724017a102f383ff0715424d77a76242b3793c562d1b2e13f3f/radixtarget-4.2.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2499a664b78bca3b0536d8ac3d57dabdba1652c9c9e746979a743873f4edc19", size = 563931, upload-time = "2025-12-16T18:48:44.595Z" }, - { url = "https://files.pythonhosted.org/packages/97/39/a88a4d1f6d57fda78a9481e0955674ce079d4e5758d35e7e3e876b465aee/radixtarget-4.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:482b5b5c317bafb49fc1d9e5a648bddabb38dddec2be336545146d743d09622d", size = 533809, upload-time = "2025-12-16T18:49:03.476Z" }, - { url = "https://files.pythonhosted.org/packages/e0/1e/9b2c183e5d5def426945d3364cbb5c62968e5ed0a21d56eefd58b7d22cb0/radixtarget-4.2.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886001cc5679657cc643aa94858ef1a989bdfb168f60122222a25d5c0b11e8d5", size = 562933, upload-time = "2025-12-16T18:48:54.038Z" }, - { url = "https://files.pythonhosted.org/packages/93/56/2e4b3ffc43aaefadce4b03a0ad525cd8663e520e63232174450da3a68177/radixtarget-4.2.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:9f230e01ee9333ca2202ced3a1e0d6ee24cdad698283b32c453ca1846762992f", size = 710660, upload-time = "2025-12-16T18:49:25.052Z" }, - { url = "https://files.pythonhosted.org/packages/21/75/80f1460e98697f90387782644ae83f0b6f14bde4d8bb24c50562bd95db8b/radixtarget-4.2.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:4ef1b02bf1fb907e18403cb424b74b6ec05df6b103aba5e14768b6b208fd2e12", size = 808362, upload-time = "2025-12-16T18:49:37.195Z" }, - { url = "https://files.pythonhosted.org/packages/c9/dc/9ad890f8c48b1997a8b1a258c421a8014f963c7a883932a6a043d6e56670/radixtarget-4.2.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:d8160247559a35a4df41aa50c786afd0dbbd983e3071e815017e3fa62a64bc72", size = 773601, upload-time = "2025-12-16T18:50:04.521Z" }, - { url = "https://files.pythonhosted.org/packages/bb/47/a1bf30b4a047bfa6a1f97a679ebd5322d67cb16fc96cd9cddb2273d2cf10/radixtarget-4.2.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c1f6d83716242d7b7a8463dca7d77f2b9be0edb7ea0f467917ee87e46ef658a6", size = 738037, upload-time = "2025-12-16T18:50:32.41Z" }, +version = "4.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7f/b2/21ab05131cb326bb901cae081ff0fadbaaf2b5452314f0361aea18fe33bf/radixtarget-4.3.0.tar.gz", hash = "sha256:b879b39efe97a6399e7a3986f259d928c0f17e5f616444b7aae1589fcf413b71", size = 719049, upload-time = "2026-10-20T21:36:45.15Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/8b/65d252ea7de59b96b9382f8934e3ed256a3816785749f3baf3afde71cd90/radixtarget-4.3.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:dc6f80f5138b2e4be80a7b2b9fae71be2f310b14873f5fbc4f2aea117697ccbe", size = 489089, upload-time = "2026-10-20T21:43:16.904Z" }, + { url = "https://files.pythonhosted.org/packages/64/fd/4ff4588526b3f1929f6eab13e1fd50caf4f6ecb76499a4f4a45ecabca3e7/radixtarget-4.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3aa3017ba86cfad6e8486cf675eab85014275a52729e7e3a418f81dd11fd38d7", size = 488363, upload-time = "2026-10-20T21:43:09.035Z" }, + { url = "https://files.pythonhosted.org/packages/58/44/f4a4c69def04dfd5897d66458eb4257395cfc4679c947f4dab41fc07ac6f/radixtarget-4.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b04c1fa9537859ebab2f952bae52e1ddfc54261f499a129d056362b706716061", size = 524738, upload-time = "2026-10-20T21:42:15.015Z" }, + { url = "https://files.pythonhosted.org/packages/80/b6/03d7f7faef6a799977c9503b70130d96b5ffeaeac297197611f017bba2aa/radixtarget-4.3.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99216e34d3f954690d8da34b55fc87f740210de0582f75f60eb50fd349076e4b", size = 532673, upload-time = "2026-10-20T21:42:23.581Z" }, + { url = "https://files.pythonhosted.org/packages/21/8b/7c6d8b33710d1f438978b6ce8f26842a42099797f5883dd71b58d0e9a02b/radixtarget-4.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44f077f150a3c47d9aaeee7c1f971c9ded73a5473382f9ab6ccf78206d3e3b8b", size = 698252, upload-time = "2026-10-20T21:42:31.543Z" }, + { url = "https://files.pythonhosted.org/packages/ce/89/e24a4821c7671abebfe209b049d3af8c0bb0aac7571be2351316b960e83f/radixtarget-4.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6ebfc7e2110d0a3ea69bdab6f8d3f485b50903e8e83c0315ac8e40a50e31db", size = 561389, upload-time = "2026-10-20T21:42:39.915Z" }, + { url = "https://files.pythonhosted.org/packages/c5/a5/ce1decf84462b169c2791ae47ecdfe60cb36b98989cc2b531dd15ced521b/radixtarget-4.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:594f5738e3987a1b66a5f71e360677087cd7e13e5ddd67d4ab6b76450b8d94e0", size = 531300, upload-time = "2026-10-20T21:42:58.881Z" }, + { url = "https://files.pythonhosted.org/packages/28/5c/c064b32331a48c7fb81a83dfcd87f2b9676cc4690211de9d5e0338e62ece/radixtarget-4.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c9bdb56696cc639ac632a460d5f080958ccdce674bfc3166c21618095e58961c", size = 557922, upload-time = "2026-10-20T21:42:47.982Z" }, + { url = "https://files.pythonhosted.org/packages/14/72/fcd8e6bb2c099a02d7f1434e71a756a88e3ac38fb6a475ecdf279b4ef080/radixtarget-4.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f2615c6d0e53d35b0088564b49f2f078915b9e5fd92484af4126fc2c51e5b2b2", size = 702110, upload-time = "2026-10-20T21:43:24.383Z" }, + { url = "https://files.pythonhosted.org/packages/cf/eb/f2e316b91ac5d038f426db6a6886a85b91aff344d3eb3996d54cc0c76489/radixtarget-4.3.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:fd5a81726a4f1b0e3a43f48754975afb2b0a2f2ae22cba3f8af3c883b4b8f6bf", size = 807986, upload-time = "2026-10-20T21:43:31.976Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ce/5a5bc4b82d77a0a5eedb59d5408a9ee3311150b249968ecd3f31750d8dec/radixtarget-4.3.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1812edad1503534f87be0442f0b86267d244b964e5f07ddaf63a1dbc29d0799a", size = 771407, upload-time = "2026-10-20T21:43:40.547Z" }, + { url = "https://files.pythonhosted.org/packages/c1/d7/521a747349ce73998c19352950a9b74824b697d9b94570ddbda0f23caa71/radixtarget-4.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4ff9d0b4e747e90252c1e8e324c0f41d8a69d84e5087ca0c2f86dd3232f15124", size = 734635, upload-time = "2026-10-20T21:43:48.555Z" }, + { url = "https://files.pythonhosted.org/packages/9f/5e/2b413ee202821334f1a852153dbb01934271ca24aa050f49459b776f48a7/radixtarget-4.3.0-cp311-cp311-win32.whl", hash = "sha256:159af2ad78934a723d9b3a96d9838dcfa1d38d757a1cc46629aeb62b0290102d", size = 373574, upload-time = "2026-10-20T21:44:02.575Z" }, + { url = "https://files.pythonhosted.org/packages/e2/fa/bf4d3eac0bd70b7ae3fac1ca29e3d772f7b1a6166ac398298d93082433e9/radixtarget-4.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:fe3ce32afbeb0c2cc8508496947a9bb8251993654de2bd711e0f9c17fc355c96", size = 381243, upload-time = "2026-10-20T21:43:56.409Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c1/4cf000e36be130fba8e56c800010a4f8ebca4f9f574317090b2a6ffd0111/radixtarget-4.3.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0c14e35d4cc2ea42dfbe2df8ea63115555c269fea8bbaa548ca10590024ba757", size = 488792, upload-time = "2026-10-20T21:43:18.304Z" }, + { url = "https://files.pythonhosted.org/packages/3c/6f/533382edc61bdc45444a574f3c6b8acba1be654be22b7f3f75de0bc8d9b1/radixtarget-4.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1a107914773907c278eaf18f3cf57570726efa702d1a16bf740ffa5d2c874883", size = 485729, upload-time = "2026-10-20T21:43:10.326Z" }, + { url = "https://files.pythonhosted.org/packages/27/46/29ce563e3a279084f32d5a585f6031060e0401b43b7261fa87b3ed74d8e6/radixtarget-4.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8287f1ceb7654dffc6a18de2c00a777c3bdc7f16de9cf065a51e97cb9dbe4d1", size = 522359, upload-time = "2026-10-20T21:42:16.313Z" }, + { url = "https://files.pythonhosted.org/packages/42/04/d00bcd2ccbc211a2df455de261d2e70f463ea6233d83fec7e8fd4a5a3238/radixtarget-4.3.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9419092aa04dcbc8bcaf7c4d52068e314ce38dc106818d61c10496d33e40d8b2", size = 527762, upload-time = "2026-10-20T21:42:24.784Z" }, + { url = "https://files.pythonhosted.org/packages/f6/cd/4466c4a733268e81707b1d9f4a66046d1f9d1c3070b582ef576b8e2720ad/radixtarget-4.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:da1c5f85200dbc2332068e7d86f81492fce56181c1eedc14305e356891a7853b", size = 694036, upload-time = "2026-10-20T21:42:33.048Z" }, + { url = "https://files.pythonhosted.org/packages/85/72/81cd041f6801a1924cc9298bbf7ddc333036e0246836806e2aca31bb8823/radixtarget-4.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64a7c85d479631e93e1d4d40f8df6cb80aba570b7110907772252f7043085f65", size = 560111, upload-time = "2026-10-20T21:42:41.141Z" }, + { url = "https://files.pythonhosted.org/packages/05/d4/bbed629b7b8a2e8385fddf7a7e1689cce20676cf468bb6ca51f1c946048f/radixtarget-4.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0eb95293e8c2b5bbe92c61fd6f3f7328038abbe1e324f0c607aeefc80b1da5a2", size = 527829, upload-time = "2026-10-20T21:43:00.401Z" }, + { url = "https://files.pythonhosted.org/packages/c8/6f/384cc93ddaead630fbde622127837aa49787cce032375c150505f12ac582/radixtarget-4.3.0-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:1bd5d2bea813d019eab0943f4cd788042e44247a1be9f21fa6fb60e1faa76c7a", size = 478902, upload-time = "2026-10-20T21:36:43.171Z" }, + { url = "https://files.pythonhosted.org/packages/35/c5/3230042518170d909d76ad3bc52f08ca5367386af901fe934e5daff1a777/radixtarget-4.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a760138f56551c3eae4ed9be2328ad2a769630ff09020f18e1882f3221f0d9eb", size = 553639, upload-time = "2026-10-20T21:42:49.071Z" }, + { url = "https://files.pythonhosted.org/packages/15/9c/7fcc7eea5d05e0305e8716d279a15e894c4dfc115514708586579b26a5d1/radixtarget-4.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d16ffa0e3e4e01cbea89ec8db7e3ac375b7dc229ea8f6fb1713d0d0f117248e", size = 699841, upload-time = "2026-10-20T21:43:25.874Z" }, + { url = "https://files.pythonhosted.org/packages/4e/c4/947fccf2489e414ca9b403159961768d11b417a5894f8ef0127dd620247f/radixtarget-4.3.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:510afc1b48f5831dfe60e656c1ce727c1658a3b0fed056d9c0e34ee4c3c9a418", size = 803442, upload-time = "2026-10-20T21:43:33.586Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d0/5e4642818cce761e8e37fe242033b87c4f6c89e39c8a620bcf5032893be3/radixtarget-4.3.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0decfe35e42b13ea21f8581f50213293f88b75ab984e8b872bc5451781b6bb9c", size = 767120, upload-time = "2026-10-20T21:43:41.988Z" }, + { url = "https://files.pythonhosted.org/packages/fb/f2/8b3f1d136468b817941fee27d944de50c12c226c8202a93082ef0cc81826/radixtarget-4.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5619011509bd31b2758dbee97b01a69bf4f0007aaf3ed97e4094ba9c25110827", size = 732136, upload-time = "2026-10-20T21:43:49.858Z" }, + { url = "https://files.pythonhosted.org/packages/b3/78/4975928219f909454b3639a809b4f824c44edc5d9af39e6f6ca846f5c54b/radixtarget-4.3.0-cp312-cp312-win32.whl", hash = "sha256:0699e41269497b950f971baa187a831cd6f2d33795f6cb02845084ff308c5be3", size = 370549, upload-time = "2026-10-20T21:44:04.442Z" }, + { url = "https://files.pythonhosted.org/packages/09/46/df393f74343438ff7ac3f48f254e9c8e2be50c2efa8859b79d33c19f96db/radixtarget-4.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:27cbd510f88d4029ac949b930ca5b4d1fa909c62aeef497c1e54fbeefe09d6c1", size = 378719, upload-time = "2026-10-20T21:43:57.693Z" }, + { url = "https://files.pythonhosted.org/packages/46/9b/d5608c85bc55e3b86cb3adc55aaa31373acccdfe532607ec7a34270b6f24/radixtarget-4.3.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1c2990081c08acf3b3eaa4d37dba3ed61888dc944707fdd6bec75f90c3fbe690", size = 488161, upload-time = "2026-10-20T21:43:19.503Z" }, + { url = "https://files.pythonhosted.org/packages/b1/28/f4bb9c8e0138a4aaedfaa3502241f6101530a6879cd9ad3fbcac23faae64/radixtarget-4.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:51a927026e0f08ebb1214d6c9d7385d783df2e4a04d168580dc29ea201a3c364", size = 484890, upload-time = "2026-10-20T21:43:11.511Z" }, + { url = "https://files.pythonhosted.org/packages/03/2e/cbbfe02f15dea95d5085daed80a3820f9cab050a07ba1612715fac881231/radixtarget-4.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:680d9f5676a874cd0d4acf9d6460f7398e3cbf4af3cbc9bc4cfa8a7575654922", size = 522275, upload-time = "2026-10-20T21:42:17.513Z" }, + { url = "https://files.pythonhosted.org/packages/5c/7a/e581acb35af6a9dba07735563e868368d95589b7e84dfb8577e52cda70fa/radixtarget-4.3.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a6c7dc5e26fd89e989e088d7be627693dfb7d3835cc3009279a6070eb9fae28f", size = 527680, upload-time = "2026-10-20T21:42:26.032Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f6/0da562fcbb22e33d227c030fe6eaa131cbdb84862c0a989592abc0c28c54/radixtarget-4.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a0245dd99932ff7f67c65732250298a97a1dfca115741183b689efb4828b1570", size = 692944, upload-time = "2026-10-20T21:42:34.416Z" }, + { url = "https://files.pythonhosted.org/packages/ec/2f/9a38093d7ad9577f697177a8ef08a044c5f00de539a9beb32354369c67d7/radixtarget-4.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccb7d27790af7ba4daf2b1b3998381670d091335de35fcf96f39431971edb189", size = 559658, upload-time = "2026-10-20T21:42:42.334Z" }, + { url = "https://files.pythonhosted.org/packages/a0/3c/34959342ccc9280dcf14930737b7c8661d781d4806a1adda360e5b2cfc4d/radixtarget-4.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23bf5b85b86173f2a5e793bfeb805e5aa15c23c0c40b4f28041e572aa0c14ddd", size = 528214, upload-time = "2026-10-20T21:43:01.664Z" }, + { url = "https://files.pythonhosted.org/packages/2c/92/bfcef0aadedcd6a028ef0a519abf51bd5ab16e93689fbfc09460055a0669/radixtarget-4.3.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5933e46fdc6b2e2e6416d2a88b5edc413a64f41a299874a3337503a1aad167ef", size = 553373, upload-time = "2026-10-20T21:42:50.183Z" }, + { url = "https://files.pythonhosted.org/packages/60/f5/1d50b371073ff8b6ba85c35131292d35a96458c4709a93b0c50a5c50b359/radixtarget-4.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d29d2ac6c1425860e5d8f1edb7dab88f530add25537c30f04f7151ef8e098d95", size = 699383, upload-time = "2026-10-20T21:43:27.038Z" }, + { url = "https://files.pythonhosted.org/packages/7f/cc/3338305bb60e47af28e88967a1c1b8c4081402fb62d5cb1e14086b49e1f5/radixtarget-4.3.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c72da1e64608ccf4a944ff91b8f1a56d3d2422ff2a5a7c1b670979a7f118f7f4", size = 803320, upload-time = "2026-10-20T21:43:35.094Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c2/74cb43e093aa32c6ca6ef66bc9ccf6611dad483d11c490e4333162570402/radixtarget-4.3.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:84b14718e17cc4b84b8c27fe5d0112ca9c30ea9466b7b911f008f609f0deddf3", size = 766607, upload-time = "2026-10-20T21:43:43.087Z" }, + { url = "https://files.pythonhosted.org/packages/5d/b0/b2432269f710fdd68250925c4d02e4623914dab769f1769c4cd3ae63d43d/radixtarget-4.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0b0581737b97fd41d5575f610fe73243d2e8c5bedffced7363537476dbeddf0c", size = 732243, upload-time = "2026-10-20T21:43:51.065Z" }, + { url = "https://files.pythonhosted.org/packages/f1/a2/31f882ef8383632ce23586349baf67233976239865ceceac404d05857235/radixtarget-4.3.0-cp313-cp313-win32.whl", hash = "sha256:c63e194a88ce9fb4037d45c4736a9857b4b7b23d43c8c13bc23e3eb1980e24d4", size = 370215, upload-time = "2026-10-20T21:44:05.701Z" }, + { url = "https://files.pythonhosted.org/packages/21/82/472c3bf74b5b6a1b9f67f3e724b68768e038ef26e2b84c45febb71f10a9c/radixtarget-4.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:19845ffa9af202582b5ef151ded93d5f1a9b9624d291b0d7b4dc4a15e8f0ac49", size = 379270, upload-time = "2026-10-20T21:43:59.056Z" }, + { url = "https://files.pythonhosted.org/packages/51/ab/33c23adc1425175bcc9d794eefa171184c7c18f12d69849167d99eda2727/radixtarget-4.3.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:6a2774d6327a79907bb3e6dc2418cb2357ae66e8bde598c0e8155ffed54549c9", size = 489850, upload-time = "2026-10-20T21:43:20.688Z" }, + { url = "https://files.pythonhosted.org/packages/39/06/d58e88f15e882defa7c555e62a62e5aaacbf6288006de0c211df06a3d85e/radixtarget-4.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f0efd4ad55b337f0e332d94dc20d0036066165b370d3fdffe55a5772199a166", size = 486282, upload-time = "2026-10-20T21:43:12.706Z" }, + { url = "https://files.pythonhosted.org/packages/22/99/d9283310db012121ca215ed942272c6f84f18f1043861615c3bef83a0e4f/radixtarget-4.3.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07961511f61012732148d1c17521a804dae617bc83efa2ff12c1e8989efe0788", size = 523798, upload-time = "2026-10-20T21:42:19.532Z" }, + { url = "https://files.pythonhosted.org/packages/27/cf/deb43fbdf54e97629890390d5d97780fcbbbca984e062f3976109ee1d5ad/radixtarget-4.3.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b2fd267c7839c1cdbb64764a9ee271dce67795454461f26afd66df46debc8fb1", size = 529467, upload-time = "2026-10-20T21:42:27.354Z" }, + { url = "https://files.pythonhosted.org/packages/db/62/8f8defd51762d6f7c973c737f876ea4d5b3bd6f968752f1cd0d7cfd8ce40/radixtarget-4.3.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0dd4cb4a794f67e1901ef416336fb4f7a2ee917f09a225d0cad3ee9c964adf91", size = 693684, upload-time = "2026-10-20T21:42:36.011Z" }, + { url = "https://files.pythonhosted.org/packages/8b/36/067435db8b63c9864f594e8683b2945a69dc30e74fb5977242081949f940/radixtarget-4.3.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3887ff89c29566f6398b2727df9641a7b671a7864e183d0c4465f8e99557da5b", size = 561437, upload-time = "2026-10-20T21:42:44.058Z" }, + { url = "https://files.pythonhosted.org/packages/1b/24/104f9a01c4fdd77d2f2d8f2fcbbb983731eac400b0f002260b3118aa69c5/radixtarget-4.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b86a5a172a99cd709d733c8345a90179ab37c4156a7cb77e6d86c8544459722e", size = 529424, upload-time = "2026-10-20T21:43:02.962Z" }, + { url = "https://files.pythonhosted.org/packages/03/b5/4638586d062c74940ff0568b1586bbe0379c296358801c2feb2e85165085/radixtarget-4.3.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1c637ffbadc8caa0ce396b62194f855cc23ec17e7b0ba8a3cdcf3afba1133638", size = 554472, upload-time = "2026-10-20T21:42:51.646Z" }, + { url = "https://files.pythonhosted.org/packages/77/81/dc86208a4170fb196217527bd4b1c6933a35a1ed377ebb168fc4650817ec/radixtarget-4.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2841ae8701b23f09b05a65fa1cf4aa073470104429083f065dbdcb43322f22d5", size = 700624, upload-time = "2026-10-20T21:43:28.309Z" }, + { url = "https://files.pythonhosted.org/packages/45/85/49690c561f13316b7ba7f426f3be41752545a49c6330ed1c8f6739c9117f/radixtarget-4.3.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:986d313200c863e3411e75ecf01e8fd6ea61c8ca1846e454ffb28c24427c055c", size = 804653, upload-time = "2026-10-20T21:43:36.307Z" }, + { url = "https://files.pythonhosted.org/packages/67/79/42717f4195f912695f0a9d2f32183d3ce94b36e834d679d9ea0747b62f61/radixtarget-4.3.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:62b0b5d6499da58bba66da818350dcb7f05097b7011609481acb3b65e4445c41", size = 767567, upload-time = "2026-10-20T21:43:44.313Z" }, + { url = "https://files.pythonhosted.org/packages/96/8c/931db485c5a3e3d0d0d4cfefdf9ad9b7f1e5f957364a7df8edaafbbafc08/radixtarget-4.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:be6477b12b6ee461d799c109505687910e3716ad743740973971ce6b640d8999", size = 733244, upload-time = "2026-10-20T21:43:52.535Z" }, + { url = "https://files.pythonhosted.org/packages/4d/98/db7862ad2e5f414602b785b741caf528f95161ea7b9a24bbadb0107c2d29/radixtarget-4.3.0-cp314-cp314-win32.whl", hash = "sha256:e94e269b26a0ea3747007dd040eb1170ea2dd976452c7bf5b40e79d1d8cf3678", size = 371342, upload-time = "2026-10-20T21:44:07.013Z" }, + { url = "https://files.pythonhosted.org/packages/0d/84/699bb6fe9d3f82ed6033407910fc4aaba3ce6d8357fe6001560ea2c3f2d4/radixtarget-4.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:6d8ca21f4678a63827312a74c6e9c991aefd14873a058ad6520e5d97905ece53", size = 378990, upload-time = "2026-10-20T21:44:00.196Z" }, + { url = "https://files.pythonhosted.org/packages/82/43/863eae794c6e72f3acc1343a0573e1f56cfbe2f9aa515daeec390824619c/radixtarget-4.3.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bcd7aff6c31698ccfbb2b6c541d2455f938be6f93d3c285537af93126c77860", size = 522917, upload-time = "2026-10-20T21:42:20.883Z" }, + { url = "https://files.pythonhosted.org/packages/9e/11/8202b2aba67d24c7324a8afb55df6aab5551004d102fa354c1d963cd35d2/radixtarget-4.3.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:854d5acbb47d2351045cd79a59f0d6cef9fe80fcd8616ad0f60e7303df14f401", size = 531680, upload-time = "2026-10-20T21:42:28.954Z" }, + { url = "https://files.pythonhosted.org/packages/6e/77/a0921e6625be25237042910e05811a40f2f486da1b3b15a9be5e19a67587/radixtarget-4.3.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b61ae9b5fdb8391841eaa55e20cdb060bab8c29d1ebbbf5a9ee5dfe4ee6fb6e", size = 693582, upload-time = "2026-10-20T21:42:37.302Z" }, + { url = "https://files.pythonhosted.org/packages/3e/03/5fe550adcddcd2faa31b1f973e21bf43a105286f6ca0eccef81c99ff7c57/radixtarget-4.3.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4a7ee7b8321b31658db0ec76bbba0a14b4577908d47d563a6a4949c1c069a93f", size = 558975, upload-time = "2026-10-20T21:42:45.238Z" }, + { url = "https://files.pythonhosted.org/packages/3c/e1/8e39ae22ba1de2a2aa221cf0fa56a96ac1689a6d7dc98011bfb47fbdf5fd/radixtarget-4.3.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3821d26b68a992084b931d0b57d0417b02181de5c69b19a44a4d207e8bcf3e9", size = 529213, upload-time = "2026-10-20T21:43:04.275Z" }, + { url = "https://files.pythonhosted.org/packages/e8/44/abad98b2a04225a33a506d41c8b75563b2b7c82801632d4fd838d75038df/radixtarget-4.3.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f57ac4944f33f913a8eceb9b7e6934d472bed2a5053cbd479dc08456c9f20a68", size = 556065, upload-time = "2026-10-20T21:42:53.23Z" }, + { url = "https://files.pythonhosted.org/packages/ca/f6/35e849a6ef4e0849dbbbefc77234b8d8b0f231e4ac44935d4c87af69d4ac/radixtarget-4.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2cf0957a63a371c833a5a31cc12fb993bfa36175b2e05e5978a057b3dcf34d86", size = 700108, upload-time = "2026-10-20T21:43:29.625Z" }, + { url = "https://files.pythonhosted.org/packages/59/f2/49cbaed10daccb025f0451d33bbf5b58115ab01c15d95885be1368fb9639/radixtarget-4.3.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:6ae7bc4b5cf27caa737016f0bce0d4a12fed78b2bc07af49ca9b71af5d576056", size = 806857, upload-time = "2026-10-20T21:43:37.553Z" }, + { url = "https://files.pythonhosted.org/packages/c2/22/4d5a2d7b0f715e5eff0cd854ba53a7a0325b03bf4fd1d4c98fdd9f6f469b/radixtarget-4.3.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e90076d7d11516ccf43dcfb045b526b094cc76456db3511798c5125dbe3e539a", size = 769369, upload-time = "2026-10-20T21:43:45.7Z" }, + { url = "https://files.pythonhosted.org/packages/73/f1/0391e6f847ef9d22e47fddfa0c0adf8c34769e4892cd736644a050522d3e/radixtarget-4.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f2dff405f68bfe7915652a38f351dcd2c5abf4c2925e83da9f0abe5107f5564e", size = 733034, upload-time = "2026-10-20T21:43:53.791Z" }, + { url = "https://files.pythonhosted.org/packages/78/d5/f435cf3f2fc1b7f5555a96fde968d7c0c12e499647f794fc84f58e0618e8/radixtarget-4.3.0-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:15a9459a33dbc9b240f4d3db5232a271a93ad677852721a18c5ec14f0cce4b07", size = 489252, upload-time = "2026-10-20T21:43:21.921Z" }, + { url = "https://files.pythonhosted.org/packages/e6/de/ff4c5e9104a29c70e1add28f4bbb225e0cc51be3ec964e9ae5a292dc630d/radixtarget-4.3.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:3aca6ac08ad11a9df2e271d8ea66cd8469259e48891bce07f7fa5237d13352e6", size = 486609, upload-time = "2026-10-20T21:43:13.993Z" }, + { url = "https://files.pythonhosted.org/packages/a3/3c/a321979f39d0f4a4eb531900330a18e167a36c8038bf87f145c694c3f106/radixtarget-4.3.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57c8322cc68f7276bc3c7c0d0a81808a4eaae6cc95bcd3a941e44ad34d7eb116", size = 529808, upload-time = "2026-10-20T21:43:05.536Z" }, + { url = "https://files.pythonhosted.org/packages/12/4a/f11dc43fc7f4a7ad685587076d0a34607f54d125ecb61c343360b2f1f47b/radixtarget-4.3.0-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:54f0f1786304b749b520f683d7bf059c385a0d2ae2b490ea4031bafbb29e1481", size = 555012, upload-time = "2026-10-20T21:42:54.564Z" }, + { url = "https://files.pythonhosted.org/packages/34/44/fc8f6848edf71322fc016175b23717a090319aee5bc4027f0d25f7aeec6e/radixtarget-4.3.0-cp315-cp315-win32.whl", hash = "sha256:19bf3fd436c6740d61999b293cd0059b69d205fbb3903a3017fbcc4f0857839a", size = 371678, upload-time = "2026-10-20T21:44:08.172Z" }, + { url = "https://files.pythonhosted.org/packages/89/53/259aecdca0a6716fcc6e60de1bdfc8f493eff1016aad29012abab8799056/radixtarget-4.3.0-cp315-cp315-win_amd64.whl", hash = "sha256:315760e364e0443bc41c6c071352cb4c7ebec6a80d999005b3d01526f91cb413", size = 378540, upload-time = "2026-10-20T21:44:01.353Z" }, + { url = "https://files.pythonhosted.org/packages/78/f8/c603e1143dfb98660003ef6d165e60151725ecdda9a6bdb71f6ca7f24536/radixtarget-4.3.0-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:72c2909aeaf2d13e6ded483b40982967f1d26557940d65a3d20623197a613466", size = 489324, upload-time = "2026-10-20T21:43:23.18Z" }, + { url = "https://files.pythonhosted.org/packages/8f/f2/773537c7d607d3a77d2e6b1abc3d778fd37a7aa416e032213d8d93f16c46/radixtarget-4.3.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:579543a1e52316823314616a7d122f281989fca59f6a162c1d203a24e3d54ef3", size = 485139, upload-time = "2026-10-20T21:43:15.341Z" }, + { url = "https://files.pythonhosted.org/packages/ce/20/a1423051753e36efe6ff79597a06d4e8bda7bdc40c9c17ed5da63cb9c397/radixtarget-4.3.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:202f149cb84726567e129d51c53132b5f9683e6ea87df780dcc5422c8f9e843f", size = 529865, upload-time = "2026-10-20T21:43:06.644Z" }, + { url = "https://files.pythonhosted.org/packages/db/12/25c80e0bbb9b0e48a4a72932d27738e1ce8cc8ccb39978d0aab60fb027fc/radixtarget-4.3.0-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b44f2d0c19a40b3a9f8f55272fc07e16cf1cce8da825b442ad38b03529311193", size = 556882, upload-time = "2026-10-20T21:42:56.287Z" }, + { url = "https://files.pythonhosted.org/packages/c3/b8/b49985c393f6fbcaabe3d41289bdcb49c5138bbc2f243275f636b522eaa9/radixtarget-4.3.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee8fecffe854f371b770a38de76006d495c3623cee648f04b8c0ab52d8365dd7", size = 526711, upload-time = "2026-10-20T21:42:22.059Z" }, + { url = "https://files.pythonhosted.org/packages/03/93/f50514946d523adb0001d9c590a07cbf5a296c1ea39d7b8b7f5f1c50cd01/radixtarget-4.3.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ad530864a6afb7d2cf4f487a3515fa7ee76641409b138982f600b9801bb4179", size = 534295, upload-time = "2026-10-20T21:42:30.383Z" }, + { url = "https://files.pythonhosted.org/packages/d8/e6/fbe3dbc97e697726fb0783ef0eb9d6ab43fafe6ac0e7b0a15231d3b5a09e/radixtarget-4.3.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2933e55c977703b1ee10894c124b5ea8d4f418b431606cf99c6910c489506d24", size = 698372, upload-time = "2026-10-20T21:42:38.462Z" }, + { url = "https://files.pythonhosted.org/packages/93/c6/3f1358f648caadc6bd7e6018865545c2ec64ed67dfd77bba706e4a6ae00c/radixtarget-4.3.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc6fec868c5e5bd8824b1cd55492afa0b71c09edcaf94a1ef879a545e02b4298", size = 563312, upload-time = "2026-10-20T21:42:46.725Z" }, + { url = "https://files.pythonhosted.org/packages/29/7c/e30958ef97e9bf05b2d8a4bc28f7dd743c667875663cc5f282b34a808b5e/radixtarget-4.3.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efed53d7883d4d9fa679cdb66d3634f0eb955b4e612ef2a25b90c58c7afca4c5", size = 533114, upload-time = "2026-10-20T21:43:07.885Z" }, + { url = "https://files.pythonhosted.org/packages/f6/87/e8b2908d3d253a516b0562df109300b34b693581814fb482dfe3aea79fa1/radixtarget-4.3.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:373bb34ec192217a052246cef8b8b4b3f519d0fa802396a72c9b89c3e58b7be9", size = 559203, upload-time = "2026-10-20T21:42:57.502Z" }, + { url = "https://files.pythonhosted.org/packages/95/4f/6be1e43a378cde61377b8d60f2a9ed55b27a1e119a0f693133f6e1a32523/radixtarget-4.3.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:9515ad765ecfbf28e6a33bf7fffe6430199d13d21347819f515b9500a45f1d76", size = 704490, upload-time = "2026-10-20T21:43:30.787Z" }, + { url = "https://files.pythonhosted.org/packages/00/62/e7bfc68db9e6fabc404b984e8930739a550b2fe206f4970cd7d851cc6c49/radixtarget-4.3.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:1bcfb088e24d458d35723646b80c7676de8be409259e2049ed6045c3d94d4282", size = 809685, upload-time = "2026-10-20T21:43:39.102Z" }, + { url = "https://files.pythonhosted.org/packages/88/ff/a45bc52c2d1345056f17573c58f6cfb1c866009a488116572d7ecdb28ddf/radixtarget-4.3.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:88003c9b81b00e4eda991f5836e7b4f242e4335894c225dbf9890f9b9f890dd6", size = 771816, upload-time = "2026-10-20T21:43:47.094Z" }, + { url = "https://files.pythonhosted.org/packages/40/5f/dd2f31d946f99893f8d815ca3d6f458a1ca74b8cd81064f6a6015ef46a83/radixtarget-4.3.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:da4f39aea3c5aaba6bae079a236e1fb89d7312bcae8fb1bb6da5ad9d4684a568", size = 738225, upload-time = "2026-10-20T21:43:55.054Z" }, ] [[package]] @@ -2767,23 +2642,6 @@ version = "2026.9.29" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/fc/f2/af1da9d3ceed77bfcdce40427d49ba0be94e4fe84245e3bfef68c10e75b6/regex-2026.9.29.tar.gz", hash = "sha256:8b5fcc4771732191b2b7d1dd68d8f0353f47f8d90b6150f6dce58bf1112442cb", size = 419199, upload-time = "2026-09-29T00:49:58.298Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/37/404442e7296554792e2de4c0c8f8b95ee491a3c227d6ff90d4cebf2dbde3/regex-2026.9.29-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9916fda742cd4eede63b286f58c06718324265d727ce0856eb1aac86d0d150d6", size = 495402, upload-time = "2026-09-29T00:45:50.322Z" }, - { url = "https://files.pythonhosted.org/packages/72/6d/116db2946888bd60db8e2033739471be6d80aa47c833afd952c9ed40654c/regex-2026.9.29-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8873c4a11c50b9989168881aeb3f08859f469d809941866aa1feefd8be5431f6", size = 295139, upload-time = "2026-09-29T00:45:51.826Z" }, - { url = "https://files.pythonhosted.org/packages/9d/1d/aefd12fb5cd62b748aa6ed28725b375c71102853fcbf15fb6481f806a2ba/regex-2026.9.29-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1d9fe8091b2e89d470df68a9331111ed008ae8aae6bf1e8e1fba4086a495c84e", size = 292130, upload-time = "2026-09-29T00:45:53.017Z" }, - { url = "https://files.pythonhosted.org/packages/7c/98/41fe60ae6ccf3e166fe7bc73495aa15e9a1a7fe3a1f9f0f95a3d64a2df0f/regex-2026.9.29-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb00027a09a8f9f08028b40dce4c933cf73e4833240ed356583fdc9cfa721566", size = 793080, upload-time = "2026-09-29T00:45:54.331Z" }, - { url = "https://files.pythonhosted.org/packages/45/0d/944b13e8286ecba61a3baeca28b375550821a279800bdb18fac41ade6637/regex-2026.9.29-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:14e953ff3607c92d7675bf79c4d4509ef6782aa8c08509f179f9b3d6d0679e86", size = 865241, upload-time = "2026-09-29T00:45:56.065Z" }, - { url = "https://files.pythonhosted.org/packages/2a/b4/e1c32fdee0462f1373c52a73325cafbde653fac0b0cc1e9badac74154f4a/regex-2026.9.29-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0476e5bcbe6e1ba3d1c4cc7bbb1c3ba78e3b979b5c8a88d0a6a8cdd4992b8c84", size = 905496, upload-time = "2026-09-29T00:45:57.491Z" }, - { url = "https://files.pythonhosted.org/packages/ec/99/eae371ca63f7ea1f1eac025021527adb57ce3a4b67ff608b896fd31ea447/regex-2026.9.29-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fb41211d2333eb930a51e0546a65999761cf1f572a4da56ef9b8a62966c06f2", size = 797643, upload-time = "2026-09-29T00:45:58.746Z" }, - { url = "https://files.pythonhosted.org/packages/dc/26/9e4f158459e37e41633c96f49766a465f801c5daba9507260609ed76d783/regex-2026.9.29-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:edf06545875f3efa31560d94121e95c7fd70d98b1dfedc0157097d79b13b52ea", size = 797591, upload-time = "2026-09-29T00:46:00.2Z" }, - { url = "https://files.pythonhosted.org/packages/86/60/5e1c5c6e85132e757ae77bd7693f1809046edb2c8853658c9200f4c8593c/regex-2026.9.29-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6398d5145689503412cc1748895242598d8846b8967b851133b20dc2ed1e21e8", size = 774874, upload-time = "2026-09-29T00:46:01.491Z" }, - { url = "https://files.pythonhosted.org/packages/e5/13/301b394f32a8db86ae3280533c9186229595fed766376f18e87959f92f96/regex-2026.9.29-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:45010bcfe66df41522d56c9b6114e87ecc597a08970ff6a2ced24415c141ae5f", size = 780168, upload-time = "2026-09-29T00:46:02.817Z" }, - { url = "https://files.pythonhosted.org/packages/f6/27/0c647127db32760b2dfc4c38da9ca509a3c4a8d3d93a586121a10fef2701/regex-2026.9.29-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a5758353650079898dc1b2b0e95aa51fa23a30d020e06f62c430dd08ee56cdd8", size = 856604, upload-time = "2026-09-29T00:46:04.152Z" }, - { url = "https://files.pythonhosted.org/packages/4f/18/cac15fb2829c33218ececf76333b66869a96e4f973480ec32494921750f0/regex-2026.9.29-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:6f7121a8914ed13fcfe2099f895341bfb789f004d4c5a0bdece8fa667da10849", size = 760602, upload-time = "2026-09-29T00:46:05.794Z" }, - { url = "https://files.pythonhosted.org/packages/b8/55/967676e4089a25d5f54b9d62522f9fe09b87677d1db58f207888d4ccfbe3/regex-2026.9.29-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:b9d74e4eee9ddb64c2e92d5d61472c59c21684c059eb7b68767be9628e977859", size = 846830, upload-time = "2026-09-29T00:46:07.258Z" }, - { url = "https://files.pythonhosted.org/packages/f1/8d/bb4165d61860ed443da5fb0fafe629c1ee9202526394eead7925bdee2be4/regex-2026.9.29-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:143533cc4b6fbc5b95aca0a5b8d541088d374831593def000ec89322c220221d", size = 785445, upload-time = "2026-09-29T00:46:08.89Z" }, - { url = "https://files.pythonhosted.org/packages/86/a6/a5cfc2560e063f8e6871373d3b719f573d7e7fcaa09db43e7c8aaeb51bd5/regex-2026.9.29-cp310-cp310-win32.whl", hash = "sha256:b84f186a7f0536fe4ff9a9fa12d06d007b9b71d4b5352ddcc41f59ad6522a312", size = 268950, upload-time = "2026-09-29T00:46:10.331Z" }, - { url = "https://files.pythonhosted.org/packages/0c/f6/b127312ebc8092357f435c9e4594fd8cf50abb85f8b4b16ab8d262abab2a/regex-2026.9.29-cp310-cp310-win_amd64.whl", hash = "sha256:23ae6fdad9e63e54038f5ef78aba2933faca61e24d432786589e737bc5522ebb", size = 280629, upload-time = "2026-09-29T00:46:11.638Z" }, - { url = "https://files.pythonhosted.org/packages/c6/e4/ab36f3c26f2374d16d525dd5a7fb4997f3c6e6bb7c6722821b84f9ea35b1/regex-2026.9.29-cp310-cp310-win_arm64.whl", hash = "sha256:c0094897d7d01f184b2d7fe8c56c66d64efe01b31f4b7d34205b391387df1111", size = 279407, upload-time = "2026-09-29T00:46:13.248Z" }, { url = "https://files.pythonhosted.org/packages/e8/6b/6dea87689c3a06a6e79d254bf824e6f3e3d724b5ba027c6112559aa6cd2c/regex-2026.9.29-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6abb75ab16bc3281714a5b99548a2225db70dba1f995f6d7f7419b76eb5a8fbe", size = 495413, upload-time = "2026-09-29T00:46:14.51Z" }, { url = "https://files.pythonhosted.org/packages/3a/a5/0c791a0e83ad1013d262c13247c4c77e0f4a8d05bdc167df96aba6681c0d/regex-2026.9.29-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b7b893976e7fe42053da64f2aa27239c24252fd2ec6df471e1be197c0addc3b1", size = 295145, upload-time = "2026-09-29T00:46:16.292Z" }, { url = "https://files.pythonhosted.org/packages/b1/07/9bf3607d8d13a12e436ab9d63f9791e10706827d535695b23964ad79fd79/regex-2026.9.29-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:066d0e3dbfdd739bce2bf8c2a41dd16f73e3d8adc2eb06dd803a36a307f56075", size = 292123, upload-time = "2026-09-29T00:46:17.646Z" }, @@ -2864,6 +2722,38 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/89/22/857050a86e21ce60193e02a8ef662521f2e263a645c8b1b905fc136b61a7/regex-2026.9.29-cp314-cp314t-win32.whl", hash = "sha256:65b408d8fcb273e3499e7ef2ce796810da1becd208c7fb4373692a242d79d461", size = 276758, upload-time = "2026-09-29T00:48:34.72Z" }, { url = "https://files.pythonhosted.org/packages/4d/96/56808fe029553d7d4c703414f2a527faad2ea2bfa9ca094a2e7f8762b530/regex-2026.9.29-cp314-cp314t-win_amd64.whl", hash = "sha256:bf48516e35cf848390ea68850aba53e7c333720d2945b4d2c25b69fc5171723f", size = 286527, upload-time = "2026-09-29T00:48:36.864Z" }, { url = "https://files.pythonhosted.org/packages/01/aa/074e2cfb3d8101a6a764aba5f7c5d1e21de087483e35bdc0c4ce2eb60364/regex-2026.9.29-cp314-cp314t-win_arm64.whl", hash = "sha256:9173db3be74a35cb6731701094b98120f7ee4876a287882a59cdea1fa7da342f", size = 285954, upload-time = "2026-09-29T00:48:38.901Z" }, + { url = "https://files.pythonhosted.org/packages/a7/dc/d84990386c9dfdf8c377f00f371b241fdc9a2c8aea0e3d66941b2e51be0b/regex-2026.9.29-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:c3589f40749acce747510bf5d589d54e376cb0930ea58b35effac97e5312b0c1", size = 497836, upload-time = "2026-09-29T00:48:40.858Z" }, + { url = "https://files.pythonhosted.org/packages/c2/ab/a569ebde875fa12ff8c6c9a30e07503620f195e4be4d54c3d3ee8eecc283/regex-2026.9.29-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:32ab11df9677ca80bcbb5fe4eb1da9109a5019239a054836efc6fa1c64e683cf", size = 296244, upload-time = "2026-09-29T00:48:42.952Z" }, + { url = "https://files.pythonhosted.org/packages/f3/3e/7d548e82a108e7c8b2d5246650e397a2f8db599f9b2e975466939c5b4e70/regex-2026.9.29-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:7c03031610e3e6ed1768a2b7a8fc84637c1257b50c5eacaf094c6e17a84fc563", size = 293748, upload-time = "2026-09-29T00:48:44.985Z" }, + { url = "https://files.pythonhosted.org/packages/40/34/a8e19a52f452bbb07b32a2bef70dcdf90c2737049749f74cc12d7486fb4f/regex-2026.9.29-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:42e82e578c904445d4c8a35b8f28052cf567593215fa5db06266fbc6f77aaa2e", size = 807840, upload-time = "2026-09-29T00:48:46.948Z" }, + { url = "https://files.pythonhosted.org/packages/88/7b/11fbd4640b3bb82b72822a63c20ade4013d562d291703a9debeedc24e682/regex-2026.9.29-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0b65c72739f981377c9c22e0c5c3cd7f42da7bd8a3c9209330fac772c7d893ed", size = 879330, upload-time = "2026-09-29T00:48:49.168Z" }, + { url = "https://files.pythonhosted.org/packages/f3/55/de58c74f1f4e31586d83eb39c56872d686c4e0d0966d151884c833b94ced/regex-2026.9.29-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4408b2b27a95ca8cc48b7411945753773353b5c93b307754781086c99d3a576f", size = 919251, upload-time = "2026-09-29T00:48:51.322Z" }, + { url = "https://files.pythonhosted.org/packages/81/42/a8c480f6dd5ac59fa28ddae79afd9d7ac7e596fdb61813adc65bb6e674b8/regex-2026.9.29-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a714befaacbd10092ffe4cea0d3c5f008fb9efe9bc322c715bcdfdee414b9a3d", size = 808808, upload-time = "2026-09-29T00:48:53.529Z" }, + { url = "https://files.pythonhosted.org/packages/68/60/0bc0d1ec8b37ad64be6fa30e035251f11de9667a0fac9e82ee74517d81be/regex-2026.9.29-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:33026515aebc0e70d1c89978e53e8d695d35d9e472f8d5b34465ba3c74028650", size = 789907, upload-time = "2026-09-29T00:48:56.036Z" }, + { url = "https://files.pythonhosted.org/packages/da/84/116a3ef19b3acfe81077f0bf2cbc7714a5e94bc8935b7243ab61cb0f1c3c/regex-2026.9.29-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:31b003f9a070335e2a8233ee9b14a3ca8e6d792012ae011f741bf0aaf11744c5", size = 795770, upload-time = "2026-09-29T00:48:58.284Z" }, + { url = "https://files.pythonhosted.org/packages/96/ba/e38c3f203e7e7e18c957d48e6cb6dbf96c11e95a44efa4a480522afc5d6d/regex-2026.9.29-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:c03c6eb6ece86dfdcbb34799efaa339b093132e1aceed491ba5e08fe06cdf699", size = 870671, upload-time = "2026-09-29T00:49:00.506Z" }, + { url = "https://files.pythonhosted.org/packages/2f/0f/9ee0b0cb76c55f63684bd7fff554978e8773b4fc86e2bcb2d50772dc1086/regex-2026.9.29-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:a5300757f8a68f5b6cc33f57338d72a0e3589c5cc9ad5f8504ea06f028be582a", size = 778631, upload-time = "2026-09-29T00:49:02.984Z" }, + { url = "https://files.pythonhosted.org/packages/b6/19/e6e3eeb226af5872c4958002f6edef4e4f40ea4cc5f5665023f2019eb045/regex-2026.9.29-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:80c7cadd3fd2bfde5df8aa0787e315812cad0c313a753095d02f4c2b6c01677b", size = 862187, upload-time = "2026-09-29T00:49:05.264Z" }, + { url = "https://files.pythonhosted.org/packages/5b/62/823c102e106bb2711d6b7dfe5981552fe4467b2969c46a20c5c383cf498c/regex-2026.9.29-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:3f1e6cb402a89457582cd696f982559217d13484a193202c394015297968c86d", size = 798423, upload-time = "2026-09-29T00:49:07.644Z" }, + { url = "https://files.pythonhosted.org/packages/37/e0/e927776258fa70b2f6feffc3be584ffc85ba4c1e20a320f0aee9a632fc7d/regex-2026.9.29-cp315-cp315-win32.whl", hash = "sha256:a64b85a4760337cfefdb27d42da6ed8b58e8cde3f2d57b6ef43e76ef6ea9ef47", size = 274757, upload-time = "2026-09-29T00:49:10.513Z" }, + { url = "https://files.pythonhosted.org/packages/77/04/358de85d1860238e1b4fa98fc2c80c990124a25d2e14739e28cc02c25562/regex-2026.9.29-cp315-cp315-win_amd64.whl", hash = "sha256:b3e445b66c80b4eb4234e855ce94d9adc183eedbd632816228d89930b91b2c5b", size = 283824, upload-time = "2026-09-29T00:49:12.849Z" }, + { url = "https://files.pythonhosted.org/packages/92/d3/d5c5b264784a5ab2b0f8cf620c1eeb4dbf3440d306761905e7d99345bef5/regex-2026.9.29-cp315-cp315-win_arm64.whl", hash = "sha256:8f39588af4731c8923c26810eb3b33f76f17633985e40f59c3cd45a33805a895", size = 283664, upload-time = "2026-09-29T00:49:15.331Z" }, + { url = "https://files.pythonhosted.org/packages/02/dc/f63ec2c201445ce1150fe780f5c56f16a10124d9a9da3a93161dbb0d8892/regex-2026.9.29-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:fb99cc9d45f48895d9d67f6a0b8a57f08d39c174d9f25ad97a313e0470267b1c", size = 501549, upload-time = "2026-09-29T00:49:17.705Z" }, + { url = "https://files.pythonhosted.org/packages/9a/5c/d2a698dc6bfc11fbce03f1cb0249c13284e93b79ed11f893edf6fac431c9/regex-2026.9.29-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:720537c7ea6f80dc61913184edb0ce2497a306b39ef19f28505b322553d52bdb", size = 298187, upload-time = "2026-09-29T00:49:20.171Z" }, + { url = "https://files.pythonhosted.org/packages/85/b7/88dcdb38cd3935d4ee9e9ce9b8e56cb3b3518d1f020acfa7dd62ad289bf8/regex-2026.9.29-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:0fd2c901cc307a745ad4bc87f20060d7a0825a3371d1e93488af22e7a387f78f", size = 296157, upload-time = "2026-09-29T00:49:22.342Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8e/ba6c01dde33a69fc294b38b43f6677baaa5735a6248f39708031a738158a/regex-2026.9.29-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b11b589e00095ec69cf79841a76360f9b079e95b0368a25b5ebb951ab0c157ff", size = 818468, upload-time = "2026-09-29T00:49:24.612Z" }, + { url = "https://files.pythonhosted.org/packages/2a/f1/2586693e3a2d6b1247852593d37a6c17b42a92ee44f7cdcb9a0c1494e64a/regex-2026.9.29-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d7cab119d0df0b9413f106b4d7fc34f2872d3574ed3806fb48959c830b1537da", size = 882825, upload-time = "2026-09-29T00:49:26.996Z" }, + { url = "https://files.pythonhosted.org/packages/30/51/084f3e7bdcd0e9c33665c938cf5d134dc3548cbb4a75f0197ec7bfd754b1/regex-2026.9.29-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b89efc38431793d28b7cd91227e2f952ad7c48df19132b17f43a5fec3c14143b", size = 923314, upload-time = "2026-09-29T00:49:29.822Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f1/066c6fc23b7dc229789c21c880b5ba5ad689fb95fed12e078266f55a1f9b/regex-2026.9.29-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:80a5ea3b4fd9d6a5b9a44f7976a9acaaab35aa3c1f6b29e5bd857dfabaded223", size = 822222, upload-time = "2026-09-29T00:49:32.404Z" }, + { url = "https://files.pythonhosted.org/packages/0a/56/592cd46fdb8f2f8682a1d7fd1310e4d0bcb93fbd0e6bbe4141ac28240227/regex-2026.9.29-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:19959129885356df0e97556856f77eb2888380dac18bed075a7c05c5128c618d", size = 794882, upload-time = "2026-09-29T00:49:35.076Z" }, + { url = "https://files.pythonhosted.org/packages/ee/4d/d65384bb071c864b01aa8314e3a6a687845ebd57588390976edc960c218b/regex-2026.9.29-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:6a1a824fbed817e0a891103886b68f063b1e83cc51bc97192a90a60195a9291f", size = 805887, upload-time = "2026-09-29T00:49:37.395Z" }, + { url = "https://files.pythonhosted.org/packages/65/b6/358de0d8f40d5178e4f7e7e121cfd5b961c812b77a055d11f5079e3f8fd7/regex-2026.9.29-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:1ba8c6a416569ce0d37e83e28a254a61dc99a419084dfb6476cea02d997f74fa", size = 872901, upload-time = "2026-09-29T00:49:39.927Z" }, + { url = "https://files.pythonhosted.org/packages/00/06/6bfded72d043240c6b52bbb5e16f639d81affbf7484b4fe2ec45f3d4afc9/regex-2026.9.29-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:446654b29bfaa30500d80947eda42cef1449dc8a87f4e3cf061cc8485d3a1f0b", size = 782970, upload-time = "2026-09-29T00:49:42.581Z" }, + { url = "https://files.pythonhosted.org/packages/5a/20/9f418a50baa78b3ed8308fcb0cc49e472dd000b7ef935a7295af202ea744/regex-2026.9.29-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:bf3c49863c23a1ad6da9c30351aed6cff8d5ddbeb63c5c8420ae54e98c7d0138", size = 865441, upload-time = "2026-09-29T00:49:45.238Z" }, + { url = "https://files.pythonhosted.org/packages/2c/29/817c7eacdeaf8463123e949bd394c39ad024eea1ec38ddf5ad141da2f3bd/regex-2026.9.29-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:01000ddf0e3ffef97f2413ceb514f6313040106b6d18a03ee00a4fe35c1eb1db", size = 809431, upload-time = "2026-09-29T00:49:47.878Z" }, + { url = "https://files.pythonhosted.org/packages/63/0b/83aab3b5b739947f744135a7a3a446e25433ebc92b05e01aae197ccbfdda/regex-2026.9.29-cp315-cp315t-win32.whl", hash = "sha256:c4e38dd8f39c43a91d2410ad2b85610701b0979342c3df1d69eaf8e838c757d8", size = 276964, upload-time = "2026-09-29T00:49:50.524Z" }, + { url = "https://files.pythonhosted.org/packages/72/f2/6314b5fc68789b5dcc38885bc6e3d6986b34fb3372b7231088ee5cecaa05/regex-2026.9.29-cp315-cp315t-win_amd64.whl", hash = "sha256:e2c89e9b762c57f59d5e99ee8b20202adb892e35f8d3485741340999ca55058e", size = 286487, upload-time = "2026-09-29T00:49:53.224Z" }, + { url = "https://files.pythonhosted.org/packages/56/bc/97b2245c8c7b2dd01f2db74f2bea003cd33c15009b4996a2447f46b5325c/regex-2026.9.29-cp315-cp315t-win_arm64.whl", hash = "sha256:e8c65ef3862a8ad6e86492b6ed9327805dd66904c012bd3649dc67d822ed6c34", size = 285955, upload-time = "2026-09-29T00:49:55.655Z" }, ] [[package]] @@ -2893,26 +2783,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e1/d5/de8f089119205a09da657ed4784c584ede8381a0ce6821212a6d4ca47054/requests_file-3.0.1-py2.py3-none-any.whl", hash = "sha256:d0f5eb94353986d998f80ac63c7f146a307728be051d4d1cd390dbdb59c10fa2", size = 4514, upload-time = "2025-10-20T18:56:41.184Z" }, ] -[[package]] -name = "resolvelib" -version = "1.0.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11'", -] -sdist = { url = "https://files.pythonhosted.org/packages/ce/10/f699366ce577423cbc3df3280063099054c23df70856465080798c6ebad6/resolvelib-1.0.1.tar.gz", hash = "sha256:04ce76cbd63fded2078ce224785da6ecd42b9564b1390793f64ddecbe997b309", size = 21065, upload-time = "2023-03-09T05:10:38.292Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/fc/e9ccf0521607bcd244aa0b3fbd574f71b65e9ce6a112c83af988bbbe2e23/resolvelib-1.0.1-py2.py3-none-any.whl", hash = "sha256:d2da45d1a8dfee81bdd591647783e340ef3bcb104b54c383f70d422ef5cc7dbf", size = 17194, upload-time = "2023-03-09T05:10:36.214Z" }, -] - [[package]] name = "resolvelib" version = "1.2.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", -] sdist = { url = "https://files.pythonhosted.org/packages/1d/14/4669927e06631070edb968c78fdb6ce8992e27c9ab2cde4b3993e22ac7af/resolvelib-1.2.1.tar.gz", hash = "sha256:7d08a2022f6e16ce405d60b68c390f054efcfd0477d4b9bd019cc941c28fad1c", size = 24575, upload-time = "2025-10-11T01:07:44.582Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e2/23/c941a0d0353681ca138489983c4309e0f5095dfd902e1357004f2357ddf2/resolvelib-1.2.1-py3-none-any.whl", hash = "sha256:fb06b66c8da04172d9e72a21d7d06186d8919e32ae5ab5cdf5b9d920be805ac2", size = 18737, upload-time = "2025-10-11T01:07:43.081Z" }, @@ -2962,18 +2836,6 @@ version = "1.3.8" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/49/b0/6b8a516c5a9e9630bd5293db78314ac012f690305fe93beadea388626efb/setproctitle-1.3.8.tar.gz", hash = "sha256:cafe209d064a6efb88cb45a03e97981ff8832802b2b5d009dde0197a3b7b41c8", size = 27214, upload-time = "2026-10-01T21:09:27.121Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/4e/60631727c0302cbbc9afbc2072ebf7f346ff30edf59a5e765e1474ab1cb2/setproctitle-1.3.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:78cbc62de67dad0a1dbadb1b2bed1bb4b283d73b460ba5fdce16727d27396dd6", size = 18128, upload-time = "2026-10-01T20:58:13.369Z" }, - { url = "https://files.pythonhosted.org/packages/28/6d/5a362f73748f02b7c05ce8ea25c330a80b358213ddb5c9729cf5d4a09006/setproctitle-1.3.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6579e2a6fd0bf3128c06141a87a49423e145a3ad1631fa9cd43886668ce4ea8c", size = 13133, upload-time = "2026-10-01T20:58:15.229Z" }, - { url = "https://files.pythonhosted.org/packages/13/25/252257eccb5d0476b63f0fd60c3bd632f6a7f0fb5b61ee531e8582bec8d6/setproctitle-1.3.8-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bbe67d7ac416087996e39494325d94ef9f4ac1ed33823f90de83c73925665cd2", size = 31928, upload-time = "2026-10-01T20:58:17.45Z" }, - { url = "https://files.pythonhosted.org/packages/75/d4/565f624a49e2e49b4907f3b5131cdda20027d45312ce2b538a0e3985b549/setproctitle-1.3.8-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:199c2c674af749003596d3a5ccf35112d28a7cfe95a363eae5fd042c33e0253e", size = 32788, upload-time = "2026-10-01T20:58:19.763Z" }, - { url = "https://files.pythonhosted.org/packages/15/16/9f619b2dea800c3e43a4b706ce08060ba1683e493135249e254d781e4951/setproctitle-1.3.8-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:53c92b933a47fdc9bcf5033834ebd640bdba8ddc8437e1ab2310682806c31c0e", size = 34639, upload-time = "2026-10-01T20:58:23.664Z" }, - { url = "https://files.pythonhosted.org/packages/ca/fc/96807f69eacd8c675a536c9bd63874a6ed34e5ddd85415074af322e6eb9c/setproctitle-1.3.8-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e5e6208cd0ce0562887925850d22bffd85aa6d5709f6890d3cdac8668e5aefb9", size = 31137, upload-time = "2026-10-01T20:58:25.945Z" }, - { url = "https://files.pythonhosted.org/packages/d7/bf/79402fbaccea0e8b2fa52753f31c0c81e58b92f4cf6823d7371d95b7e309/setproctitle-1.3.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0b15200dc328020f498b196eb59a3b3e35cb08f17bfe05b2e63e5ed47110d254", size = 32127, upload-time = "2026-10-01T20:58:28.253Z" }, - { url = "https://files.pythonhosted.org/packages/ff/60/9abaaa5ac714c5605dc75555c297d355890f21a1a58c9c60b8120f17b86e/setproctitle-1.3.8-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3b256ac72a3855b434506a85cf5ca6e25441657d5dc56eb73df6e279193cb35b", size = 33378, upload-time = "2026-10-01T20:58:30.495Z" }, - { url = "https://files.pythonhosted.org/packages/34/7c/2b9e148c0156018266bf6384d94dfaf6367f36a329cc27f383d4bf62c31a/setproctitle-1.3.8-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:7c8a2beab229c818ae36ca3f7d769db95dd748c76b857851e0a883d947419ba5", size = 30383, upload-time = "2026-10-01T20:58:32.479Z" }, - { url = "https://files.pythonhosted.org/packages/3e/55/388d6942629b7fe58c704bea325934766e5ef1b0e59acfb2633093d0fb0f/setproctitle-1.3.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5b6372be8ff8afc56e0d50036ff618a29bfef72f52946f316e3a65fe25266800", size = 31558, upload-time = "2026-10-01T20:58:34.659Z" }, - { url = "https://files.pythonhosted.org/packages/b9/64/75c83676e826cee93692deec002c9b4ec0f9f437c0c7271c049d0c385331/setproctitle-1.3.8-cp310-cp310-win32.whl", hash = "sha256:66656b71c3eb1f7f57feb4579822bebc750c2a71e6090bc0aa7ec161cdecd30b", size = 12105, upload-time = "2026-10-01T20:58:36.441Z" }, - { url = "https://files.pythonhosted.org/packages/1e/95/a7a6d3a560f69e352dde20f3dd5f89ce2e9613a4b203a8329d5d0a019ae1/setproctitle-1.3.8-cp310-cp310-win_amd64.whl", hash = "sha256:4151e5b53f7fb6a39fac2e3db35d70761bac27c0f6b924aeb4a6f67e92ad56e3", size = 12943, upload-time = "2026-10-01T20:58:38.183Z" }, { url = "https://files.pythonhosted.org/packages/4a/78/d065a73bef541ab5f6f094c705c016563a063a4ba9e839030a845f2087d7/setproctitle-1.3.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc711e639a3e978978ab3bbb01f8f106715f5c23bbd99ced5af2404528bbaa6c", size = 18131, upload-time = "2026-10-01T20:58:40.67Z" }, { url = "https://files.pythonhosted.org/packages/6a/95/2981f400b09b0675225f45b105f1c99e3dfa603b12e6767fd09fd5e58209/setproctitle-1.3.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:50f9bce172b6f9ead1c8fe813d85b1dde57ab503a445f982026ac3a16c719e1e", size = 13140, upload-time = "2026-10-01T20:58:42.383Z" }, { url = "https://files.pythonhosted.org/packages/2e/89/7a19bba7f4a354fc3499bf83614b27452232235b1d44191f46ff396051de/setproctitle-1.3.8-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1a6f6a3b2920f4362e8d924f9e5b084f0b2692a2c140e348abd2e3a07a1def73", size = 32316, upload-time = "2026-10-01T20:58:44.544Z" }, @@ -3034,6 +2896,30 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/79/e5/68be1eed21bba3ce27c6907ddcf0559cb99e4de3aa3ee000a38994371b73/setproctitle-1.3.8-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:84003eeaf2d7460390bbff1dbd7bee5b1213e7ae47a489f0fb7aad6acd2b045c", size = 34024, upload-time = "2026-10-01T21:08:06.514Z" }, { url = "https://files.pythonhosted.org/packages/40/7e/f275783d6915fac997dbfa3729330552c4f2ddcd4f1bba7ff522f5f05c28/setproctitle-1.3.8-cp314-cp314t-win32.whl", hash = "sha256:ac4e037d276ce27069cad0083c4611b45232278bd2fbac33f06ef9438c171a1e", size = 12259, upload-time = "2026-10-01T21:08:08.432Z" }, { url = "https://files.pythonhosted.org/packages/86/59/3347f13aa38c81d78f5c93bc55e4355c43550f47348e5de48c5080f3a1b2/setproctitle-1.3.8-cp314-cp314t-win_amd64.whl", hash = "sha256:c284642b229ba7b7b927fb044aba03694b880ab572db3f07a10adc786db1ff7b", size = 13163, upload-time = "2026-10-01T21:08:10.087Z" }, + { url = "https://files.pythonhosted.org/packages/92/e4/e9866831fd0cff677c67488059fab3786a843ff0bd86f4b3c44bea8dd763/setproctitle-1.3.8-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:63348d86ae60b071a898e4241b41da1346d8c36f1a60bf3b698ae5eb35b79865", size = 18107, upload-time = "2026-10-01T21:08:16.029Z" }, + { url = "https://files.pythonhosted.org/packages/ff/79/5c11a8c8cf3b91e54fdf4c93d1c79d99a491e04d77d34c80a90552fe6b46/setproctitle-1.3.8-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:59239b6e5007b1bec79ef444a390b3bcd59cbcb2686c9910da5a42f1e99f738c", size = 13132, upload-time = "2026-10-01T21:08:17.756Z" }, + { url = "https://files.pythonhosted.org/packages/9c/6d/47dea0a33ec67a2813e40bd92deea74c3732fd598bd71b636a92897eaf17/setproctitle-1.3.8-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:38310d9cf94959e39d22fdc0154c66c8bdbadfa790c524b04cb36da6333c7507", size = 33509, upload-time = "2026-10-01T21:08:20.254Z" }, + { url = "https://files.pythonhosted.org/packages/f1/7c/5d6945012077e6c393d59432df42d281d213f508bcf6d83a1287ab2eb9ae/setproctitle-1.3.8-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a279b136ed97407209d2dc9c30d1e65405d1a4a06ab162cedd9c4159b51f8f20", size = 34405, upload-time = "2026-10-01T21:08:22.796Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d9/543a4470bfd01529dc35f0014dc68c70665db8b790e3647b41d155203b87/setproctitle-1.3.8-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:26997a85aa70bb088e86f0b7899fb0c909be824d22fc025e87b0005afbe59261", size = 36167, upload-time = "2026-10-01T21:08:25.35Z" }, + { url = "https://files.pythonhosted.org/packages/44/c7/fc55041b162833c4bbbbfe78ed417bcab7b22f9fa72aff1722ff6af46fae/setproctitle-1.3.8-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:35fc5e10fcba6df25d676ef908b44a36c17e7f167738ed016561185e24f4d274", size = 32623, upload-time = "2026-10-01T21:08:27.778Z" }, + { url = "https://files.pythonhosted.org/packages/a5/e2/8c73c990c338b9ca5bf4fc6167ac864a80a53a10e71fd2755ba146f1fce6/setproctitle-1.3.8-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:f5df0503093ec8c3c7e1da53920e79c62ab653b51b136c4736caa252552a8732", size = 33510, upload-time = "2026-10-01T21:08:30.431Z" }, + { url = "https://files.pythonhosted.org/packages/cd/61/8e10270d3a7326dc4e8a1408c631e6ae912625b91f38adaf04794a19e07b/setproctitle-1.3.8-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:0a582308ba43afa7233d28243d9d1212e11c81d3c187a43929ec0cb70c4781c5", size = 34528, upload-time = "2026-10-01T21:08:37.161Z" }, + { url = "https://files.pythonhosted.org/packages/77/d4/00773ca8c876123348e65edfd9eec47464bbfa1a31067c6e1cd382356a0f/setproctitle-1.3.8-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:ce48dbf74e8ec618d74cbaffe1159a4c32a4428de598f0ccdb0782bae618a72a", size = 31681, upload-time = "2026-10-01T21:08:39.874Z" }, + { url = "https://files.pythonhosted.org/packages/d5/42/19c6b634cca492575f9d99868bc35134528fb390d683d6a0396f61df0b8d/setproctitle-1.3.8-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:dd3a8fcee7d8a23e44781144830dee97b53ca4e0380bdd2a0e05b13913ce5725", size = 32999, upload-time = "2026-10-01T21:08:42.36Z" }, + { url = "https://files.pythonhosted.org/packages/94/34/09f653f687e4a1a6f515642519cc65f0e6bcf34631386380924fc9785b44/setproctitle-1.3.8-cp315-cp315-win32.whl", hash = "sha256:50beee618377ce6fd35767a9327f2da594b36778eb10b503ee2dc9b7c801f433", size = 12251, upload-time = "2026-10-01T21:09:17.504Z" }, + { url = "https://files.pythonhosted.org/packages/89/69/ab9afe8c198594533ad5eed6dcea647e1743ac8196a6c6dea974724b72e6/setproctitle-1.3.8-cp315-cp315-win_amd64.whl", hash = "sha256:f5916010de8b6045d7c63d98bb3f7a1e13f8c9c1046e859f2fd8de79c4e2d865", size = 13161, upload-time = "2026-10-01T21:09:19.295Z" }, + { url = "https://files.pythonhosted.org/packages/78/90/da93e1ae012f2515473a45fb33f5ba2ddbbfcce1381c5e41005b31ab3230/setproctitle-1.3.8-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:e9f643bd97374aeb7e4274e5c361277bf1428e8e55246cee6823fa3525dc2c04", size = 18119, upload-time = "2026-10-01T21:08:44.296Z" }, + { url = "https://files.pythonhosted.org/packages/af/35/41b28fa8eb8f1bee9c5516b99262a5df413937bf186e9d50ec3ef812fc61/setproctitle-1.3.8-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:fbd9ceb8c091c125e5892757e4d16af06674dc96edd7b5bf1e627b1ae7650c66", size = 13140, upload-time = "2026-10-01T21:08:46.797Z" }, + { url = "https://files.pythonhosted.org/packages/0c/19/089c878e6b8a3a391ceb03e1653ad6f33f27a5f7e204cf4a54b6a053b83d/setproctitle-1.3.8-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:322b4643f98c824b17dbf2ddb07ea7a37def8cc9e18adee320befce4bdffa271", size = 35122, upload-time = "2026-10-01T21:08:49.921Z" }, + { url = "https://files.pythonhosted.org/packages/88/a7/f419b87fcb6202ef0a94f7cd6bdecb23c2d01f2f07b38f92d3f0c5dfb518/setproctitle-1.3.8-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e36ee7300584a53fd7ac5f3853323411bde1cf6c081921bd3754a73b4071245", size = 35944, upload-time = "2026-10-01T21:08:52.612Z" }, + { url = "https://files.pythonhosted.org/packages/1e/16/fb181112f3c09a8c8962bd110f538c8a9d287a0c6a8bfd5b4dc39d54e0df/setproctitle-1.3.8-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5c05aff52e6eb9c4d2ea86cf0d0a60b1487ed570263a1b13bb30d9f96aa8ba97", size = 37981, upload-time = "2026-10-01T21:08:55.136Z" }, + { url = "https://files.pythonhosted.org/packages/d8/8f/934846cf63b5ae2e9a88dcac6ddc3ec813e6b9e0919994684f7674155b8a/setproctitle-1.3.8-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:df807e7f036c19235320b6b5137291891d660f10ccb0b50dc46bc8385be18379", size = 34229, upload-time = "2026-10-01T21:08:57.703Z" }, + { url = "https://files.pythonhosted.org/packages/c9/04/c11f73d8aa0ebe5d63866130ad14ca3789a4dfb9fc617c3a612af9c177f9/setproctitle-1.3.8-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:bef8c5f8820c70e8761171409052056ffd247023b001a6254287a0694c3d8b1c", size = 34743, upload-time = "2026-10-01T21:09:04.088Z" }, + { url = "https://files.pythonhosted.org/packages/38/50/8c780488db26e8f51af91465bda6ee224522248dc5220b282791dacbbe5e/setproctitle-1.3.8-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:7855290194637a3c5a2e37c423efbf5813fde97a6b63ab99feade5e05d73dc6c", size = 36094, upload-time = "2026-10-01T21:09:06.67Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e6/13d541653607b3b7232dc9f8baae05b24112ac9a3756c3653903c624c4a9/setproctitle-1.3.8-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:8c0a7753f5ddaf0ecd1fc8df3e2106611d4290f0508e643e723cb5000b7d6c2f", size = 33148, upload-time = "2026-10-01T21:09:09.064Z" }, + { url = "https://files.pythonhosted.org/packages/42/94/f3e16c3a7949fa28a777aa30830bf89098026e13669144b0ec1b147f17f4/setproctitle-1.3.8-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:97b35b15f81363a314baca76674c19027dce19eed1590abd51c2d285830efd50", size = 34488, upload-time = "2026-10-01T21:09:11.756Z" }, + { url = "https://files.pythonhosted.org/packages/4c/e7/9baa826fc44c6f607a39ad35d419da7f51dec2df31ef169e7a4a34e1cc75/setproctitle-1.3.8-cp315-cp315t-win32.whl", hash = "sha256:ecf44731e351c6100885120cecf53a0f43a1bb975a92480de1f9e022ab542bc1", size = 12260, upload-time = "2026-10-01T21:09:13.6Z" }, + { url = "https://files.pythonhosted.org/packages/71/fb/08f55fab7294d18a6b1bc6d13340706c998b4641bd5f99ed9c7a626fcbf0/setproctitle-1.3.8-cp315-cp315t-win_amd64.whl", hash = "sha256:61aac898128dade36438da9387fea570f00cd519ad5231d3b268913afc2fc329", size = 13170, upload-time = "2026-10-01T21:09:15.351Z" }, { url = "https://files.pythonhosted.org/packages/1c/e1/61838733db1ee33c4d550e72e98891824b28f644a2fb9612f107e5bf819d/setproctitle-1.3.8-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:26da5ad9883d825b9d732fd1dcb99268a4ee545b1edd0aaa5c56f16009cccaf8", size = 12627, upload-time = "2026-10-01T21:09:21.435Z" }, { url = "https://files.pythonhosted.org/packages/ce/cf/08599efcb67f437acc0b1b6510aa08f44873cbd416b526139c4eb38b2775/setproctitle-1.3.8-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:15aaec002066f6dd7d920c46d3bffc3e529cb4a9fac961f2dd878aad64b0e29e", size = 14324, upload-time = "2026-10-01T21:09:23.204Z" }, { url = "https://files.pythonhosted.org/packages/ce/a1/971a49677f247a613a2229df65af01d5a27e8793adee5b818680e90c30a9/setproctitle-1.3.8-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6a740a6de2675da29594612eca3c962ceefc063fb62f43fc5a8f84d547ce0d7a", size = 12982, upload-time = "2026-10-01T21:09:25.006Z" }, @@ -3244,7 +3130,6 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "h11" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/da/34/30e9280707135d2cfc589dfff3cb796bd07a3aeb1a3e415ba09dd89d7bb4/uvicorn-0.54.0.tar.gz", hash = "sha256:a2e33cbfaa0306f8e6b0c13e0cb89d7d7a2da3e62b90c66e18c33d9807b28620", size = 112283, upload-time = "2026-09-25T06:52:37.601Z" } wheels = [ @@ -3268,7 +3153,6 @@ dependencies = [ { name = "distlib" }, { name = "filelock" }, { name = "platformdirs" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/aa/a3/4d310fa5f00863544e1d0f4de93bddec248499ccf97d4791bc3122c9d4f3/virtualenv-20.36.1.tar.gz", hash = "sha256:8befb5c81842c641f8ee658481e42641c68b5eab3521d8e092d18320902466ba", size = 6032239, upload-time = "2026-01-09T18:21:01.296Z" } wheels = [ @@ -3281,9 +3165,6 @@ version = "6.0.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/56/90994d789c61df619bfc5ce2ecdabd5eeff564e1eb47512bd01b5e019569/watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26", size = 96390, upload-time = "2024-11-01T14:06:24.793Z" }, - { url = "https://files.pythonhosted.org/packages/55/46/9a67ee697342ddf3c6daa97e3a587a56d6c4052f881ed926a849fcf7371c/watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112", size = 88389, upload-time = "2024-11-01T14:06:27.112Z" }, - { url = "https://files.pythonhosted.org/packages/44/65/91b0985747c52064d8701e1075eb96f8c40a79df889e59a399453adfb882/watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3", size = 89020, upload-time = "2024-11-01T14:06:29.876Z" }, { url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393, upload-time = "2024-11-01T14:06:31.756Z" }, { url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392, upload-time = "2024-11-01T14:06:32.99Z" }, { url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019, upload-time = "2024-11-01T14:06:34.963Z" }, @@ -3293,8 +3174,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload-time = "2024-11-01T14:06:42.952Z" }, { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload-time = "2024-11-01T14:06:45.084Z" }, { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload-time = "2024-11-01T14:06:47.324Z" }, - { url = "https://files.pythonhosted.org/packages/30/ad/d17b5d42e28a8b91f8ed01cb949da092827afb9995d4559fd448d0472763/watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881", size = 87902, upload-time = "2024-11-01T14:06:53.119Z" }, - { url = "https://files.pythonhosted.org/packages/5c/ca/c3649991d140ff6ab67bfc85ab42b165ead119c9e12211e08089d763ece5/watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11", size = 88380, upload-time = "2024-11-01T14:06:55.19Z" }, { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" }, { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" }, { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" }, @@ -3313,23 +3192,6 @@ version = "16.1.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/21/f7/bc3a25c5ec26ce62ce487690becc2f3710bbc7b33338f005ad390db0b986/websockets-16.1.1.tar.gz", hash = "sha256:db234eda965dcce15df96bb9709f587cd87d4d52aaf0e80e2f34ec04c7670c57", size = 182204, upload-time = "2026-07-17T22:51:05.858Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/e7/d1671fb984f9dd844e1da5288070c7c23c9eaba3082d3871aae19c3ab8b9/websockets-16.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:49ae99bdfcae803a885c926bf14f886196e84925395bb3f568fef5c0f0979d7d", size = 179570, upload-time = "2026-07-17T22:48:24.032Z" }, - { url = "https://files.pythonhosted.org/packages/99/f5/70df723bf571f5e0b1b845e0a4ff1c966eeb84f667599fc251caa37d15a3/websockets-16.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5bfd1ac19b1b9986a9c95a82d5e23a391ebb09e12c34d7be6094b86efcc35731", size = 177252, upload-time = "2026-07-17T22:48:25.775Z" }, - { url = "https://files.pythonhosted.org/packages/90/72/2f14b2e167170b8bf1c8bb7f9b0d78000f470d41a2085a91f33e3917b6c9/websockets-16.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9246a0d063cfcbcc85f2359dd6876d681213f4790832272aa16641b4ed5d64d4", size = 177530, upload-time = "2026-07-17T22:48:27.337Z" }, - { url = "https://files.pythonhosted.org/packages/f3/18/a17e2f0cde02dc10154c808deed7e1d8528afff93612f70d3f0a5b19b011/websockets-16.1.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1214e673c404684b9bf7154f5cf43b45025b1a6160fac3a9e438e9c1a97e22cb", size = 186038, upload-time = "2026-07-17T22:48:28.756Z" }, - { url = "https://files.pythonhosted.org/packages/d5/b0/41de283899cf5929d637b72a508cdbc9aa40dc0f317c6b77613fd1000488/websockets-16.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90001d893bc368e302ef168d82130b4e4fdd27b85fa094682df9b667c2d48838", size = 187278, upload-time = "2026-07-17T22:48:30.328Z" }, - { url = "https://files.pythonhosted.org/packages/50/61/874aab5257e027f9f61b5004cec65e592babca7942b1bc09f38e72b7f1fd/websockets-16.1.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:130937b167a52af203c8d58e78d67705874e82759862e3b9671a452fec4abc87", size = 189936, upload-time = "2026-07-17T22:48:31.896Z" }, - { url = "https://files.pythonhosted.org/packages/a6/1a/42173913ac5519607220849ed417c864d77384e4119f06dbba964a50f096/websockets-16.1.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9c9f23004a3d40e89c01a7955d186a6cc83418d93b749701944ce2de3e95a1f3", size = 187796, upload-time = "2026-07-17T22:48:33.344Z" }, - { url = "https://files.pythonhosted.org/packages/1b/f4/37c1840bd89b529479aec41470b97b7c683b107ca90b6399ac5afb99dedf/websockets-16.1.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f55f0b01956a094c8587146d9558c91937e78789c333860ffaf35931a6e5dbc4", size = 186481, upload-time = "2026-07-17T22:48:34.843Z" }, - { url = "https://files.pythonhosted.org/packages/9e/70/652d9b964adcfbeb056f42e0ca6bece34d108fe75534e74df20643cae199/websockets-16.1.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6aaface73b9c71974c6497366d8b9628357f6c9749e09c4ea3610176c63f2ae3", size = 184351, upload-time = "2026-07-17T22:48:36.307Z" }, - { url = "https://files.pythonhosted.org/packages/13/f1/af3850e5d48d482921985be72ebcb169c6180b3a77b57bd612deebcee23b/websockets-16.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dc0fad4933f427acd5b1cec210f3ea6dce7089e1724e4b9ec6ef47c6c04d1b3b", size = 186791, upload-time = "2026-07-17T22:48:37.762Z" }, - { url = "https://files.pythonhosted.org/packages/1d/40/1a4e3ed4969ec378dcad337e5f1472c5e292cb3e733bc392f0dc2e230abd/websockets-16.1.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f2769a0344a09e9ccf5b3cce538bc75a51b53eff3275d3896310c8552049195d", size = 185413, upload-time = "2026-07-17T22:48:39.127Z" }, - { url = "https://files.pythonhosted.org/packages/aa/3e/4e3fa1afe8f1a6a780434cd9ba8eb422632b044eff3dd73f6af67523c147/websockets-16.1.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f70541f3104339f59f830522d94ebadb1bf47426287381623443d8bb1cdbf33d", size = 187178, upload-time = "2026-07-17T22:48:40.676Z" }, - { url = "https://files.pythonhosted.org/packages/71/ab/dd742766aa5dda7f349be0de49e4d565b84cf6f7f7fa02e07692f0f2bdd9/websockets-16.1.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:dc385593a42e31cd6fb60c19f0ecb015b386603818fc2c6c274fb42bd2bb4165", size = 185051, upload-time = "2026-07-17T22:48:42.098Z" }, - { url = "https://files.pythonhosted.org/packages/ae/f5/76438c6560f416f1c0a7f587679fb97cc6e99ed336011d43ce2002dd27c1/websockets-16.1.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:387e8e4aa5df2f90b198fa3cad3478822a89cf905b6a6d6c97dc3664689640cc", size = 185846, upload-time = "2026-07-17T22:48:43.472Z" }, - { url = "https://files.pythonhosted.org/packages/62/12/5c0320f2127823d27b2d56d611d31b0b284ad4edcb41364d66bf4c92b537/websockets-16.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fd46fff7eb62c24804d234f0051c7a8ea81285ad63e0337d3dcf33ca82aee58a", size = 186066, upload-time = "2026-07-17T22:48:44.884Z" }, - { url = "https://files.pythonhosted.org/packages/a2/97/875986b857b955c3f9dd192cb8a1af81254dfb2ea22cc9590f0a1e020b8b/websockets-16.1.1-cp310-cp310-win32.whl", hash = "sha256:7883388947767080f094950b342b30d35a2a06b849cd967c422fa0db72b40ea9", size = 179940, upload-time = "2026-07-17T22:48:46.481Z" }, - { url = "https://files.pythonhosted.org/packages/54/82/1013a5fe7ddae8e102bc3b4b39db81d8d28fd02100a324ce6ede8cd832b1/websockets-16.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:d57685547e0060cc6fd90ee6a28405d6bd395e525545f13c8d7cd99c78afd79f", size = 180239, upload-time = "2026-07-17T22:48:48.043Z" }, { url = "https://files.pythonhosted.org/packages/2b/03/47debfe28e9d6d354be5d777b67fd44c359b9eb299a5d103500bd7cc3e37/websockets-16.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d0fcf657e9f13ff4b177960ab2200237b12994232dfb6df16f1cfe1d4339f93c", size = 179566, upload-time = "2026-07-17T22:48:49.596Z" }, { url = "https://files.pythonhosted.org/packages/72/93/31efa1ed78c17e5cfc229fd449e3966e1b9cc15753204cd585cc8dd01f4a/websockets-16.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b852788aa51764e2d8e4cf5493d559326bcae5e38d16ba25ffa322b034df272a", size = 177250, upload-time = "2026-07-17T22:48:50.942Z" }, { url = "https://files.pythonhosted.org/packages/01/4a/542378ab3972b0c1cf1df3df3eff9591cea0d30c58c3aa3c4ddbc244e787/websockets-16.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1427fb4cf0d72f66333e2cacc3ff5f575bf2d7008166ce991a4a470b21d51a22", size = 177528, upload-time = "2026-07-17T22:48:52.59Z" }, @@ -3468,25 +3330,6 @@ version = "4.0.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f6/a5/1386f35da1475fcaeef42581deae73417c6d2a6a0b2d2e8914de18844dcd/xxhash-4.0.1.tar.gz", hash = "sha256:d55bf4ef10eb09b8b6866790e083d26d087d84caa3cc0946ba87c3ca7ecaf7b7", size = 101513, upload-time = "2026-08-17T08:24:08.557Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/19/de/6854b311cb468985de555e49717357ba1de8ffe4b08eda3f4c522a418fda/xxhash-4.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3f68fe400ceec235f3e4a4b02a28c2fd2d283584a193223c921dd4c48f1d0754", size = 38470, upload-time = "2026-08-17T08:20:33.331Z" }, - { url = "https://files.pythonhosted.org/packages/91/2a/7d79952633fccbf9c2a59cc1dfe9d073f9edfceb052ba9bff5075e31408d/xxhash-4.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b1dddc257279417d93c9e59420d49ef90aece90d7a01996db3aade74b0281b1", size = 36229, upload-time = "2026-08-17T08:20:10.259Z" }, - { url = "https://files.pythonhosted.org/packages/70/6a/6a6f4220c39bae1636eb3f8ef217359b8afe268493ee858adf9002130257/xxhash-4.0.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4972332c079d6aad69c4620a68d015a4ecb33141583f70d642cf9edf6a713763", size = 243168, upload-time = "2026-08-17T08:20:07.211Z" }, - { url = "https://files.pythonhosted.org/packages/c8/03/a1d745b324bede7af8a274d889d25b758402629695499a957375cc5fe994/xxhash-4.0.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1b603d0686c99fa0879f104a74e7db58367634c6e50ba827bee9aa095e23205", size = 266061, upload-time = "2026-08-17T08:20:18.253Z" }, - { url = "https://files.pythonhosted.org/packages/0f/cd/55c7565db23d2d29a2e31ea9dd0001ad3f4729298f42ba32967dde7644ab/xxhash-4.0.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:33fd538191f47071deef6b1f676535e2aa770f1fd150ae4cc75a34c9e930be3d", size = 287357, upload-time = "2026-08-17T08:20:08.901Z" }, - { url = "https://files.pythonhosted.org/packages/72/31/c967c98cbf151df6ae8756fc9821b1f78d1feffa8420ff2ad5645f27f98f/xxhash-4.0.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33e270d302c95ec426dfa0f5a4e16bff2ab8d7b8a46faa4746affb05e684ac77", size = 270683, upload-time = "2026-08-17T08:20:10.943Z" }, - { url = "https://files.pythonhosted.org/packages/70/98/df9f3c14bc2fb2712ed1497349dc7e8c0b0f20a1f353e2e146d83a1adef9/xxhash-4.0.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3fb1d30d4b6d6e2c4a08e5ac6fffdb2b572d2cfcca15a5509cf4e7a1350f955c", size = 497802, upload-time = "2026-08-17T08:20:17.217Z" }, - { url = "https://files.pythonhosted.org/packages/5f/3b/e5d20b4f602d15fc5fc066f601052a7d6f5a401a50d67fac92098a5829a5/xxhash-4.0.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7e27dbed5c4ba033919e4b4ed8dc14e029e91d14a93cd9f920d25277c7df6781", size = 249503, upload-time = "2026-08-17T08:20:40.14Z" }, - { url = "https://files.pythonhosted.org/packages/39/98/4cd03fa7ba791657aa555d0655e89a0d66193b1331e4391114b50227f80f/xxhash-4.0.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:43bcf2a871f28f16135545415cab3ec43904d4c80425a64598a9e6cebfb2b5ba", size = 333384, upload-time = "2026-08-17T08:20:18.93Z" }, - { url = "https://files.pythonhosted.org/packages/c1/67/a0a076dbcecad2af0cceb873ba4f95475f3955fb81d82f9c5e9f97a12854/xxhash-4.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5dc434c946012e6d8a72b10f970ea30755b718251dd7591dbfdabafd3bcb21bc", size = 262463, upload-time = "2026-08-17T08:20:08.719Z" }, - { url = "https://files.pythonhosted.org/packages/48/94/767b68736250813923d74703ef628b0f57ff1c5bf690d7a6082928d1a14d/xxhash-4.0.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:0b1082fd0f089ce9098ed77aad8b777b5d156f8ac601c69cab73811822b8ef07", size = 289405, upload-time = "2026-08-17T08:20:35.493Z" }, - { url = "https://files.pythonhosted.org/packages/ab/61/69d9ec6e85f9933f26b39753b404f97ffd2fc3bfeeb5e26333752595e060/xxhash-4.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd649663ddeafbfd4734eb8abae921dd5baa1242f20bda54e8bc927369ccded4", size = 247989, upload-time = "2026-08-17T08:20:10.759Z" }, - { url = "https://files.pythonhosted.org/packages/a7/66/e6a033879893074bc441faec65587f9ef9cca49ee3cb99ef20c699b014cf/xxhash-4.0.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:97b455de3e8b1b0b1e4594cb61a468992563f03ca264062fbb0a66b393c01d90", size = 267987, upload-time = "2026-08-17T08:20:20.947Z" }, - { url = "https://files.pythonhosted.org/packages/18/91/a99a412b010cf2cc2bd38a0a44043c894ffa80b46c8d4e1522e40d2ef401/xxhash-4.0.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:2194bf96d5f3d4e0cb65deba370ec83dda3edfba42155f9384190ed5e51ea5e2", size = 322541, upload-time = "2026-08-17T08:20:22.675Z" }, - { url = "https://files.pythonhosted.org/packages/0b/12/1a91408e66d1716bd278cf55529d4ba251d90c6b694ea78a09dcbd9d36c6/xxhash-4.0.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:84df5f8da574caadbc0cb1b8866ecc2368cc941f0cd05f677756c802f370dafa", size = 466264, upload-time = "2026-08-17T08:21:12.422Z" }, - { url = "https://files.pythonhosted.org/packages/fc/c8/8abd4c1b90962f794ed9b139767b0a971e5168e8393961ccf046956c0039/xxhash-4.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c09ada495567c9c9a8156c5ebcfb93be7fece0755062d738c972dcbecd0d84b5", size = 246149, upload-time = "2026-08-17T08:20:23.385Z" }, - { url = "https://files.pythonhosted.org/packages/22/3f/e020285d737a712bbfcf01dfdbbec7773c7c8289447a5373540caf2cdf5f/xxhash-4.0.1-cp310-cp310-win32.whl", hash = "sha256:85bdd40cb505a11e0ca04191711266c5fd696ed786ae83849955e457774edc96", size = 34630, upload-time = "2026-08-17T08:20:10.001Z" }, - { url = "https://files.pythonhosted.org/packages/6c/9b/4e8384b299b40664a225ce9deef54c42b3d59f5181a16d4a374ea3503f8f/xxhash-4.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:8ec4777d92fd61a5c8fdeddab894fd65bea301a8092fb5419ec6472aa4d458d7", size = 37058, upload-time = "2026-08-17T08:21:05.846Z" }, - { url = "https://files.pythonhosted.org/packages/b3/e9/d73c870d9dd26f8d6782ecf716b31e836bb6269c888b6bb6e1fcf71eed36/xxhash-4.0.1-cp310-cp310-win_arm64.whl", hash = "sha256:03600a8987849b2bef7be795a60a6052b635c63fa98b718b08ca5ee823691cfc", size = 33289, upload-time = "2026-08-17T08:20:19.707Z" }, { url = "https://files.pythonhosted.org/packages/0e/58/bc81e25cceab76ce4b400441e3a43312bf3887fedbb2e5f80cc5a7dd7f75/xxhash-4.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8b4477edc03091f51f5309406d230851c23cf4822029e3bf40b8df53093fff1c", size = 38473, upload-time = "2026-08-17T08:20:34.303Z" }, { url = "https://files.pythonhosted.org/packages/64/8d/d95e810c9a2930906f1fbd0e38f77554abb8e042a190aa9cbb24da39e9a2/xxhash-4.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:04f9a24de11a6647666d5302fd73d6a5224ce50ddc965fb0bb44cee736e6bd7c", size = 36228, upload-time = "2026-08-17T08:20:36.641Z" }, { url = "https://files.pythonhosted.org/packages/72/be/ebcded2a32ba664a17a1737a91b6baa298bcda6942acdad81af81660b74c/xxhash-4.0.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6a8c5ce76b94ba49f3be8a8f2611abc6564210702c72ac9e237ca2bebfd17794", size = 253292, upload-time = "2026-08-17T08:21:27.206Z" }, @@ -3595,17 +3438,55 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9b/8d/7eabcc8d29cce40621443cff24c07d7306ef574b8956c47ac59f21098005/xxhash-4.0.1-cp314-cp314t-win32.whl", hash = "sha256:a14578102a6081465aec9cf73c76c3cd3f79f0709bdb3b8ae7ab0b54c9d8b089", size = 35482, upload-time = "2026-08-17T08:22:32.336Z" }, { url = "https://files.pythonhosted.org/packages/ca/89/2a4268e1971f63038b79fb75e3b9c8de942cd77acabbb0c5625352a31940/xxhash-4.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c57963970d359a72262f7fe6be88f945e2334d4bc41462b7f08c37b0abf35ca6", size = 37490, upload-time = "2026-08-17T08:35:22.475Z" }, { url = "https://files.pythonhosted.org/packages/90/7b/950ecab1fe4cf421d0a6211ddd9a0ac82e39e55c45a111ceb90953dc6c9a/xxhash-4.0.1-cp314-cp314t-win_arm64.whl", hash = "sha256:b659fad79c99b0238c7ad7e9d7dbf4eebfea9097c2dba65fa0a4d18a25b29a2f", size = 34596, upload-time = "2026-08-17T08:23:10.001Z" }, + { url = "https://files.pythonhosted.org/packages/c4/03/7dc3b85fac10751613bfedb0e120734e0e8710054abad3f931e9d3843a14/xxhash-4.0.1-cp315-cp315-android_24_arm64_v8a.whl", hash = "sha256:5adf927dca8c47fde7e683fe69efdd81bc865c4db1fb6bb00b391e2b6185207b", size = 43749, upload-time = "2026-08-17T08:36:00.47Z" }, + { url = "https://files.pythonhosted.org/packages/a5/55/bfac071c5b1c6d6a3d48ab1ab96a15e958a1d7061f4afc97804292d87264/xxhash-4.0.1-cp315-cp315-android_24_x86_64.whl", hash = "sha256:c30dd1af66a820820398b26e0d74e7a9aa43cae705924f23ed828cd8e5c26c3d", size = 40758, upload-time = "2026-08-17T08:22:30.209Z" }, + { url = "https://files.pythonhosted.org/packages/79/87/49a260e685d1a74c56a69432a8ee0527ddcbd684a3c51f87edc3b75639c5/xxhash-4.0.1-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1bc591533fc975614f7e13594daee76af96b8e1fbcf8de76c8773858fa9e7cea", size = 34788, upload-time = "2026-08-17T08:23:09.014Z" }, + { url = "https://files.pythonhosted.org/packages/6c/ef/50d72ed2170dae872e1c0fe333d0908e0a2afbffe74c5c9037d5406a4b89/xxhash-4.0.1-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:567cbc630302a46a8ecfd943b309ccf5372bb3718f1f3762d452df30f033bcf0", size = 35746, upload-time = "2026-08-17T08:36:05.557Z" }, + { url = "https://files.pythonhosted.org/packages/66/f0/969deaa2bab3bfd5ad5b023442124d2255b9961eef6f797ec74eb8683bdf/xxhash-4.0.1-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:e998cb3685b92101ec5de0fb4d9485cf01e50bc418211955c55d98064664cf4c", size = 38098, upload-time = "2026-08-17T08:22:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/86/aa/45ed7d7b8d7b66202a47bf8ff3b77cea28d2ea54dfcdd202b4cfe043e3dc/xxhash-4.0.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:c3074db513c81f764053e3da079312ecf85a50d8350c71f4cc0105d9662a9e6c", size = 38251, upload-time = "2026-08-17T08:35:25.774Z" }, + { url = "https://files.pythonhosted.org/packages/f1/9d/45e7520a7856e13800a5dc8cd038d34c6372429465b163af0c5722f16918/xxhash-4.0.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:3088dadbffa33c29e0518578430a7dff2e901a212e487aefa5faaa0dc06dad34", size = 35986, upload-time = "2026-08-17T08:23:25.854Z" }, + { url = "https://files.pythonhosted.org/packages/9e/0e/5ad466e5fea18c9f9bdc5828c0506f62190061b4a1b0e688aa54969d0a9e/xxhash-4.0.1-cp315-cp315-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1b50223d92df94d54e1a31469335a2c74b16692e6c1cb726f1e6949514458706", size = 264609, upload-time = "2026-08-17T08:36:04.229Z" }, + { url = "https://files.pythonhosted.org/packages/aa/cf/8f269f85217e3dbd45e31e25e46cc26f3aff0e159ef05d228b4b982c778c/xxhash-4.0.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:427b62d62d4f967fbb10b82a3813e4875c2a6e7e7634739f17265b650c7f65a6", size = 285910, upload-time = "2026-08-17T08:22:38.589Z" }, + { url = "https://files.pythonhosted.org/packages/ca/30/2fc1a16ee0f9501d074b798ebfae52e24fa602c7117f5c4b81de71eada72/xxhash-4.0.1-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c6370189e8e66b7e608f533b939a9de092ddca6cce084ca0d3d414d2ed5b5d59", size = 306566, upload-time = "2026-08-17T08:23:16.895Z" }, + { url = "https://files.pythonhosted.org/packages/e0/a7/08375cf2b997e1903663fe7525c5973b1987a4f8ad2b8d47463e9143f2ee/xxhash-4.0.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ec1a470c6db94ac4589c203921e89ac1bc13e796a8b1784d8135e1893559cd3b", size = 287978, upload-time = "2026-08-17T08:36:09.296Z" }, + { url = "https://files.pythonhosted.org/packages/b2/e5/90a7b404c11add9e53a497d06236152852490c3b2f21e468d97a58f26afe/xxhash-4.0.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:37f667dee0f867c42894b34e2a6fe26bf195c0ea4683d9d2b713db023f242c3a", size = 520098, upload-time = "2026-08-17T08:22:41.565Z" }, + { url = "https://files.pythonhosted.org/packages/11/02/7fba10b1b17eb46308f09cc0a4ed513d74dff16b1e22a1c439f011c77129/xxhash-4.0.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f18732adcc271741bd651c3e56fa519d8a237d2cccda01fe3afb226bf87f783b", size = 268273, upload-time = "2026-08-17T08:35:29.043Z" }, + { url = "https://files.pythonhosted.org/packages/54/49/c21b228877357a3be43eeeaa22182ad1685796f415390ada475922c084e4/xxhash-4.0.1-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0b42a5a26607e4b2409fea174773a66f2dff9dfdbf2c1a851bb7b804e2c97535", size = 350164, upload-time = "2026-08-17T08:23:29.494Z" }, + { url = "https://files.pythonhosted.org/packages/00/3c/c15bb4aa33d94b78a5553b52e7fa1070565f0199925aeadec3871de20ce9/xxhash-4.0.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:99166cc98637e8bf550cda2aab07f4f1d5f899c45fbd721801aeabcc9d404824", size = 281975, upload-time = "2026-08-17T08:36:08.139Z" }, + { url = "https://files.pythonhosted.org/packages/18/7a/b1d0388315fe7752b7725b68a912667526a1dd48ed492fcc031ac03f4b52/xxhash-4.0.1-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:6cf633df84d80a1668fcf61e330791dae46825e395549e7d34f376411e75088a", size = 307872, upload-time = "2026-08-17T08:22:42.206Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a1/037cb2dd8cf725c9565dfe3712b2915c0e0276a9154913dbfcbcecbeb672/xxhash-4.0.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:e259bb7e1e2d8de6b35f430f5c7220b1c0ebf3962d1ba7ec7545980d5931edb8", size = 268241, upload-time = "2026-08-17T08:23:23.997Z" }, + { url = "https://files.pythonhosted.org/packages/c6/a9/67c44422d0ee082169b238ce24bd2796b82d7c21ed953471365df8c508d8/xxhash-4.0.1-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:704381264b36a18b9c62ecbabe2e71d0fc58c77c129c15355c989b10bf05b6b0", size = 284970, upload-time = "2026-08-17T08:36:13.476Z" }, + { url = "https://files.pythonhosted.org/packages/7f/d0/254a5f51c4014cacc77a26f321372338b924f54e89efb730164ee336d850/xxhash-4.0.1-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:e90b4bcf1d9eb1010fdaee7c9209fb667e74c0684f3ba17f9032bd7319da90c9", size = 338074, upload-time = "2026-08-17T08:22:51.166Z" }, + { url = "https://files.pythonhosted.org/packages/64/03/f21c4830118d72ef3a958ce8bf2152f49e0d4cf200907616c9be6caf372a/xxhash-4.0.1-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:a65785e653573fcd1e33062760ab4c3c3440e8e910765018e4b6ed4ad07b54a0", size = 487626, upload-time = "2026-08-17T08:35:32.768Z" }, + { url = "https://files.pythonhosted.org/packages/45/1f/268a689d741d7da649317eb4ce41760140beb4179aaf43a7216fdbe8100c/xxhash-4.0.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e3996ff9b6f99180357024336bf5749a8ad6476a9a2523e535c5212b995b12a2", size = 263852, upload-time = "2026-08-17T08:23:41.871Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f5/adaf8101cd7f143191a0b390600294d83924b32cb13770fde8803dce27a2/xxhash-4.0.1-cp315-cp315-pyemscripten_2026_5_wasm32.whl", hash = "sha256:99054b838b74d8d3995ea0d410976ae967c46207ae22d6ddfc535e809197dab9", size = 20569, upload-time = "2026-08-17T08:36:11.952Z" }, + { url = "https://files.pythonhosted.org/packages/ee/2c/56a5eb8c993420fc07114c08f447a2b66ee996510b4764cb368b9b44c9f0/xxhash-4.0.1-cp315-cp315-win32.whl", hash = "sha256:6c45258a37fc22721395c09927cb982d3e7a83607cab15be7e2416501bd3a330", size = 35145, upload-time = "2026-08-17T08:22:50.038Z" }, + { url = "https://files.pythonhosted.org/packages/67/c7/65f210db43e62157d0fef3b4d4d7b394821e7733c8bb4ece49f91410a725/xxhash-4.0.1-cp315-cp315-win_amd64.whl", hash = "sha256:0ab851b45c70d4992be7cdeeee16f97a0b677408c758c4b1efb1cfe8030bfd37", size = 37161, upload-time = "2026-08-17T08:23:32.438Z" }, + { url = "https://files.pythonhosted.org/packages/33/ae/1a641d1d60ba219756d9ebe907ff0ecf4445adcf4fa96f6e3da57b91d439/xxhash-4.0.1-cp315-cp315-win_arm64.whl", hash = "sha256:a5b21b42a01a343096a1c018d35e9b7aec9c7065dda53ae8da071e37478b2cea", size = 34378, upload-time = "2026-08-17T08:36:15.912Z" }, + { url = "https://files.pythonhosted.org/packages/48/7f/7698b320b251806d1249e513922a626f19027e104c829a611272250350eb/xxhash-4.0.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:44ab12e8cd17d4f001769f00ad465208b4bcb897ed29e65f058f74466b57a98f", size = 38610, upload-time = "2026-08-17T08:22:55.203Z" }, + { url = "https://files.pythonhosted.org/packages/c0/3d/436497e775b647b3b3e9a4ffe8c76c59fa4aa7a9fab6447cb59acf1b50ea/xxhash-4.0.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:45e88111ebe331de478ef8d4293efbe88f3cf8b863386c9a2357136b838e1af0", size = 36378, upload-time = "2026-08-17T08:35:36.18Z" }, + { url = "https://files.pythonhosted.org/packages/e3/d8/17a4f8182b9257898aa2a77c2a45f70233eb8e50681a280e8e09d2ee76e9/xxhash-4.0.1-cp315-cp315t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bf430c587f447a554c53768ad76b9846fe7c5632180ef6f69c4fce8b0552fbd0", size = 273559, upload-time = "2026-08-17T08:23:51.075Z" }, + { url = "https://files.pythonhosted.org/packages/83/28/121bd5a5c5adb88e0da772c7bef61964cf9da92956a7a237c7d24c4351b8/xxhash-4.0.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adbd48b30e3f82c89fb2b3e6a87cdd28d113b190a5ed0ee2dee286323ee9a621", size = 299133, upload-time = "2026-08-17T08:36:14.731Z" }, + { url = "https://files.pythonhosted.org/packages/11/8f/57c7b6e04642ed738a0d08a31bed7fc63fdacb661d665f98739cc9751b62/xxhash-4.0.1-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e71b34978e77868cbf2d18c5206a4603f9c644dd7181bec5643bd40141d3b8c5", size = 314527, upload-time = "2026-08-17T08:22:54.224Z" }, + { url = "https://files.pythonhosted.org/packages/8e/18/42793917dbab0ea1ff71458aea4875e17a7263f2797b798af048dc81e867/xxhash-4.0.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:488ca5c5e28ef56ec4bbb12f835b3f1cbecc5f3510062e70117bc6594851932a", size = 299199, upload-time = "2026-08-17T08:23:36.864Z" }, + { url = "https://files.pythonhosted.org/packages/37/60/51dc92443923d8e908d5614f1145d8d696450f9d6c8f1abe243c6f2a0222/xxhash-4.0.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:421b94f3ba7067958d02e38960d987756347aa150df06df11aa68ae1af78c619", size = 531967, upload-time = "2026-08-17T08:36:18.66Z" }, + { url = "https://files.pythonhosted.org/packages/88/c5/d0de77de09661fac71742c4155b1cd65e274f7cc277819d702b6c8ff2db5/xxhash-4.0.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f33cf0baa91eccd2cb7b62bf00f10c2264ef578b71dd33a12962e71a36eb4d32", size = 278764, upload-time = "2026-08-17T08:22:58.15Z" }, + { url = "https://files.pythonhosted.org/packages/08/9a/589929c655aba1bfb2c41ee03e50eec1547c39c3042a66bda9c173a9614b/xxhash-4.0.1-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:23a4376b4a3183cb50d4d2a3179f887a7773cc695eb2c908e551bec3221b8c60", size = 359876, upload-time = "2026-08-17T08:35:40.35Z" }, + { url = "https://files.pythonhosted.org/packages/3e/a8/c1d8c94d54d91db2215565f4b4151c1593af3e6d27ac4c00fd1e8d714a02/xxhash-4.0.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:38c3d22129a6958846a3098d68bc8e661704461c0be4793ae28836e4690c8478", size = 293548, upload-time = "2026-08-17T08:23:54.951Z" }, + { url = "https://files.pythonhosted.org/packages/8b/67/85d8abca94508a4dd10561d9dea3e6e68843c6986dd6d9c1b3729c8622e4/xxhash-4.0.1-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:87cbdec1a7dd930079671a60b249f3ca4e773e6fbd0676e21e36fdc9dd0f3b00", size = 318780, upload-time = "2026-08-17T08:36:17.623Z" }, + { url = "https://files.pythonhosted.org/packages/1b/16/2b920ed456b9cdcfc99ddc20c3afe42f9f807ee5850773c12fd891f3c08d/xxhash-4.0.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:6cbf4e21ef0890804b5bb9ad25c48f9c127758d7f6c66bef374efcacc63c738a", size = 277582, upload-time = "2026-08-17T08:22:57.156Z" }, + { url = "https://files.pythonhosted.org/packages/fa/cc/5811b5997aebb8452047f5800d32fc50eaa29d0ba08d4e426f84450b9c2f/xxhash-4.0.1-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:c101180495cb4ba3617b279a944345c53a5e73b0c150053d1fa8d8af32de9579", size = 295116, upload-time = "2026-08-17T08:23:40.868Z" }, + { url = "https://files.pythonhosted.org/packages/2d/dc/c2f3f9c2f4d6aadb79f17a9f1c9a7ee82638cc873680da044cf29537d2ee/xxhash-4.0.1-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:c0e6ccc2b19ec8a726b2e26062ac71ea63e15500d6bf85910e42481844fdffc1", size = 347065, upload-time = "2026-08-17T08:36:21.618Z" }, + { url = "https://files.pythonhosted.org/packages/a2/4c/750cc642c92252e10772ec09e1a1d995581ba4c3ceb24f6e2d57c7ce47ca/xxhash-4.0.1-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:8bcba9456242ebf180a04d9443812fd85ffe6bd12bda464dd116fcece8886ff3", size = 497208, upload-time = "2026-08-17T08:23:17.88Z" }, + { url = "https://files.pythonhosted.org/packages/6c/2d/58693cb13d6395f39b6b9bb40c5e0db53a5df7c9fce805aa7e792f64a1a5/xxhash-4.0.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:83b8c2013edb5dc1f9e7268b6496130705bc48d79c86bb8817b3d210b81a5513", size = 274338, upload-time = "2026-08-17T08:35:44.062Z" }, + { url = "https://files.pythonhosted.org/packages/4a/08/9aa9787586d9b3e92d63343ce7dc24f0f445fd9e74ff5d6e85dd82233df5/xxhash-4.0.1-cp315-cp315t-win32.whl", hash = "sha256:aa6ccc7f31018484d652cf52db020003433f3c9fa83189c028bd807d2adde503", size = 35471, upload-time = "2026-08-17T08:24:05.795Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ab/4615789c333bee331ac417885c50105715eeb8244bfc68d2bc37dcfd63ca/xxhash-4.0.1-cp315-cp315t-win_amd64.whl", hash = "sha256:daade8936c4deaaf7b01561324ce438ba4f885d717e9adc62b4d67212ad7d7bd", size = 37488, upload-time = "2026-08-17T08:36:19.929Z" }, + { url = "https://files.pythonhosted.org/packages/fb/81/49f718beb0c55d0411bc4bd90b50a3fbe5863a0e97a2f4d11682ba13d298/xxhash-4.0.1-cp315-cp315t-win_arm64.whl", hash = "sha256:f00330ac7e24769e2032203f2b01794d670916b0c1799fd261340f1af9499875", size = 34590, upload-time = "2026-08-17T08:23:19.597Z" }, { url = "https://files.pythonhosted.org/packages/86/79/9127ff42a887a348dc4ce3211cf1a962836887adee6f57078132bfba78b4/xxhash-4.0.1-graalpy312-graalpy250_312_native-macosx_10_13_x86_64.whl", hash = "sha256:ff48915bf1871a1f19f74c11834c6329443d306cedc0c05fe7fe617810422a80", size = 31836, upload-time = "2026-08-17T08:36:28.261Z" }, { url = "https://files.pythonhosted.org/packages/0a/e6/f238693bfdd642adb59c99683964d46d9947fe721ff44d3bd850ae675407/xxhash-4.0.1-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:4a76345f5aceb4ec404918edf9c7f2b5507db864dc0d7455982009ac0890b57b", size = 34453, upload-time = "2026-08-17T08:23:49.795Z" }, { url = "https://files.pythonhosted.org/packages/40/4b/796ace33cdfb75c91ba6d11615c3bd436355b9f3103e05865bbee9abce57/xxhash-4.0.1-graalpy312-graalpy250_312_native-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:31d86f9e81f3e84e00131ac7c54caf5119ae4ddd82c09c31cff597c813ce1ee2", size = 38488, upload-time = "2026-08-17T08:23:59.901Z" }, { url = "https://files.pythonhosted.org/packages/ad/23/2d549e5d5d7759eaf9ac2d2d2ab81ff60f1bb2b52cdaae8e5ec5c6524354/xxhash-4.0.1-graalpy312-graalpy250_312_native-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:deca2a30d983d240b8375ec2ee0a4288e72042827fc61df2f7671f8467e4cb2f", size = 38206, upload-time = "2026-08-17T08:36:32.193Z" }, { url = "https://files.pythonhosted.org/packages/79/98/1ee576b27f78e6107ee4ea8ac03e8a52888dff256e57d560f8282c195563/xxhash-4.0.1-graalpy312-graalpy250_312_native-win_amd64.whl", hash = "sha256:7c343ee174d417a44d0c3355602c0cbbfa52a04d1bbbf1723378c7d2c8f60626", size = 37127, upload-time = "2026-08-17T08:23:42.705Z" }, - { url = "https://files.pythonhosted.org/packages/c9/c5/8b528f4a394a1eabfd5d8b4271f24fff67fa1aebe58bdd3c64967662e6fe/xxhash-4.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:26fe6238c2d5b11ed5063b9bf4eb290624b004fd074688da6bb079bd564f10d7", size = 36450, upload-time = "2026-08-17T08:35:59.217Z" }, - { url = "https://files.pythonhosted.org/packages/b6/03/909926dcedb64ceee629e18d8dffa758f9d3fdbe01e25530ce2bf0eaf9d0/xxhash-4.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:e53926e76131a74e79cc0b39fa712c227875f180afc68646bd1e1d8a17e60313", size = 33467, upload-time = "2026-08-17T08:24:12.924Z" }, - { url = "https://files.pythonhosted.org/packages/13/b5/ad50456fbfed07f29169bc3fd34e70cbee306a88c17d1a1141a7638de0ee/xxhash-4.0.1-pp310-pypy310_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0718ad66f4ded2411f8e62bdba549ee71e313a2d26ef5060ca3fdbf29897dd3c", size = 48048, upload-time = "2026-08-17T08:36:30.847Z" }, - { url = "https://files.pythonhosted.org/packages/33/c4/83cfe6b591a3067ab3f1339931c91211a8b3864d0ea76ad8184f0c1b0515/xxhash-4.0.1-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2200b98a805351cb3142ae4e1fdcc9e91b5e20f5d30d4862b0b96f92558f4e", size = 42719, upload-time = "2026-08-17T08:23:53.581Z" }, - { url = "https://files.pythonhosted.org/packages/20/2e/0f654f2831abba09d502751e38816759086dd92749501b128b7c3676ea87/xxhash-4.0.1-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ea5ecf800b45bdb34afe05a1d0dae1f8ea02a290e50636dccd399063f6b180f8", size = 39477, upload-time = "2026-08-17T08:24:03.735Z" }, - { url = "https://files.pythonhosted.org/packages/3b/d4/375b9e4b719ee70e0a6d9e98e2b60aab09efd59f46c7871a112a2e6b0fcb/xxhash-4.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce6d5cc94a50291d080259a126cbf1e9ba4ac861e6429d2f3cdbb1474f51945d", size = 37244, upload-time = "2026-08-17T08:36:35.452Z" }, { url = "https://files.pythonhosted.org/packages/ea/4f/e0648288a17d0d1084ca4f7bef206097831988fc86af74aa1dff8f1fbd68/xxhash-4.0.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:554f87034635bcec47c5d72447bf3db7e02da1bf493a0ada010db28a76f891c6", size = 36333, upload-time = "2026-08-17T08:23:52.913Z" }, { url = "https://files.pythonhosted.org/packages/22/15/34b7f72e9b5a8bfd7e6178de9e1e342bc3de9f07111a5ae26c00506d9edf/xxhash-4.0.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:3c2445edafc300cc40feb6a25a8356a971c30cd0bf47b5349c2ad74c508343b1", size = 33519, upload-time = "2026-08-17T08:36:03.04Z" }, { url = "https://files.pythonhosted.org/packages/06/4b/e0af324ccf701bf84a7a060bef11c915d45d9e3c5b9caf5b94d62ecb040b/xxhash-4.0.1-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bdd16718b63aa3ebd68aabb79021a40e47c81374852d41a306b9453141bbcbee", size = 47995, upload-time = "2026-08-17T08:24:14.335Z" }, @@ -3620,18 +3501,6 @@ version = "4.5.4" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/51/38/347d1fcde4edabd338d5872ca5759ccfb95ff1cf5207dafded981fd08c4f/yara_python-4.5.4.tar.gz", hash = "sha256:4c682170f3d5cb3a73aa1bd0dc9ab1c0957437b937b7a83ff6d7ffd366415b9c", size = 551142, upload-time = "2025-05-27T14:15:49.035Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/51/7f/5767870ecdde75b7991f67caa5d78d692d30239529b66262a33bb6ab12e3/yara_python-4.5.4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:721d341bd2013fbada4df5aba0eb79a9e4e21c4b86441f7f111ab8c31671f125", size = 2471734, upload-time = "2025-05-27T14:14:03.034Z" }, - { url = "https://files.pythonhosted.org/packages/13/01/c7253b9cbeb9058deff46e332d98d8a76ecdc07235a41f1a3050348b035e/yara_python-4.5.4-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:c785fd16475f2a3191cd4fae0cd608b1ba6271f495ec86fa26a3c5ac53f5f2e1", size = 208858, upload-time = "2025-05-27T14:14:04.728Z" }, - { url = "https://files.pythonhosted.org/packages/02/09/cbe63e02a7b2448cd84b78918c1d765ce17038f1e7f0a6ae25e942bdca22/yara_python-4.5.4-cp310-cp310-macosx_15_0_arm64.whl", hash = "sha256:5eefa3b157cd5f4454a317907bab334036f61385324b70cb61dbc656c44168d5", size = 2478392, upload-time = "2025-05-27T14:14:06.404Z" }, - { url = "https://files.pythonhosted.org/packages/01/02/c5f2953a7dfd3055fd67581fe740c46c7b678d3760faced24674080019c8/yara_python-4.5.4-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:bbc0c5a2ee67e6043e4c2622093ebfc7d2c173dc643dd089742aedbdea48d6a4", size = 209306, upload-time = "2025-05-27T14:14:07.876Z" }, - { url = "https://files.pythonhosted.org/packages/be/70/a7bd03cbf1ac7e9fcfe292b3dfad181d7fb7eabf6d0ee493f7c5b2386238/yara_python-4.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b091f1bd6c5d2a9b5c0c682ba67ba31b87bb71b27876430775998b71c8e3f97", size = 2240111, upload-time = "2025-05-27T14:14:09.246Z" }, - { url = "https://files.pythonhosted.org/packages/0a/3d/0b0eadc8b39aa61cc04337d60b15fdebccaf662877a30604baadf760a4f5/yara_python-4.5.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91276c90bb5e148e10050015fec8a1d4009a95eee9eb832d154f80355d0b4080", size = 2323286, upload-time = "2025-05-27T14:14:10.688Z" }, - { url = "https://files.pythonhosted.org/packages/c4/30/aab92c73b02bdda575f9507108c9617708f8d6812647a0654bc44447fc20/yara_python-4.5.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e20e1f69b6239fe4f4da97e9ff361d9be25d6f1d747589ea44b8a9ec412a12d", size = 2327981, upload-time = "2025-05-27T14:14:13.044Z" }, - { url = "https://files.pythonhosted.org/packages/7a/40/461d76a5ec526679e58efca35383d3511cade8c8fc8868ad9f97bea21a1a/yara_python-4.5.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a83773b561727fc360f7a6874f7fac1409bc9c391134dc3e070f1c2515c0db98", size = 2946194, upload-time = "2025-05-27T14:14:14.717Z" }, - { url = "https://files.pythonhosted.org/packages/33/d2/656319472612d821d224ef2a79dc5b8339332aa03e4586e5fd9ec0c45f4e/yara_python-4.5.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:14f203bd9fb33ad591e046429560133127fa4a6201dac28c525fa7c6c7ca36a7", size = 2416600, upload-time = "2025-05-27T14:14:16.269Z" }, - { url = "https://files.pythonhosted.org/packages/5e/76/5ec476aa39e81d4dd5e26071f6b2c763c4a7d7f628dff3370fe6053ba9ac/yara_python-4.5.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e632daf9f38f8d4b433f08f798b07a45756e6c396e9e0ec54aac10045f6d241d", size = 2636555, upload-time = "2025-05-27T14:14:18.082Z" }, - { url = "https://files.pythonhosted.org/packages/f1/b5/26cdb3d13b91625dc35a68aca2db8cb62d6c6d5e7b83d97981b350163dd3/yara_python-4.5.4-cp310-cp310-win32.whl", hash = "sha256:a3866830f7f2d071f94cbce7c41d91444ac29e2cbbe279914abf518d57a2d41f", size = 1447301, upload-time = "2025-05-27T14:14:19.635Z" }, - { url = "https://files.pythonhosted.org/packages/be/21/68f211559de12eac0cb0fd8dbda279cadb0cc681cc4dc6394f9e06dfd4e2/yara_python-4.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:135c1097ea0445a323038acd509162675ce6d5e21f848aa856779632d48dec42", size = 1825559, upload-time = "2025-05-27T14:14:21.508Z" }, { url = "https://files.pythonhosted.org/packages/17/17/f0bc4a643d8c3afb485c34b70fe1d161f3fe0459361d2eb3561d23cc16e1/yara_python-4.5.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:e3e2a5575d61adc2b4ff2007737590783a43d16386b061ac12e6e70a82e5d1de", size = 2471737, upload-time = "2025-05-27T14:14:23.876Z" }, { url = "https://files.pythonhosted.org/packages/3f/11/39c74fc2732b89d4a5a6ad272b2b60ec84b3aae53b120a9eccc742eec802/yara_python-4.5.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:f79a27dbdafb79fc2dc03c7c3ba66751551e3e0b350ab69cc499870b78a6cb95", size = 208862, upload-time = "2025-05-27T14:14:25.941Z" }, { url = "https://files.pythonhosted.org/packages/05/ef/ff38abffe3c5126da0b4f31471bc6df2e38f4f532a65941a1a8092cddb4f/yara_python-4.5.4-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:9d9acf6f8135bcee03f47b1096ad69f4a2788abe37dd070aab6e9dd816742ecc", size = 2478391, upload-time = "2025-05-27T14:14:27.802Z" }, @@ -3676,22 +3545,6 @@ version = "0.25.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/fd/aa/3e0508d5a5dd96529cdc5a97011299056e14c6505b678fd58938792794b1/zstandard-0.25.0.tar.gz", hash = "sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b", size = 711513, upload-time = "2025-09-14T22:15:54.002Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/56/7a/28efd1d371f1acd037ac64ed1c5e2b41514a6cc937dd6ab6a13ab9f0702f/zstandard-0.25.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e59fdc271772f6686e01e1b3b74537259800f57e24280be3f29c8a0deb1904dd", size = 795256, upload-time = "2025-09-14T22:15:56.415Z" }, - { url = "https://files.pythonhosted.org/packages/96/34/ef34ef77f1ee38fc8e4f9775217a613b452916e633c4f1d98f31db52c4a5/zstandard-0.25.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4d441506e9b372386a5271c64125f72d5df6d2a8e8a2a45a0ae09b03cb781ef7", size = 640565, upload-time = "2025-09-14T22:15:58.177Z" }, - { url = "https://files.pythonhosted.org/packages/9d/1b/4fdb2c12eb58f31f28c4d28e8dc36611dd7205df8452e63f52fb6261d13e/zstandard-0.25.0-cp310-cp310-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:ab85470ab54c2cb96e176f40342d9ed41e58ca5733be6a893b730e7af9c40550", size = 5345306, upload-time = "2025-09-14T22:16:00.165Z" }, - { url = "https://files.pythonhosted.org/packages/73/28/a44bdece01bca027b079f0e00be3b6bd89a4df180071da59a3dd7381665b/zstandard-0.25.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e05ab82ea7753354bb054b92e2f288afb750e6b439ff6ca78af52939ebbc476d", size = 5055561, upload-time = "2025-09-14T22:16:02.22Z" }, - { url = "https://files.pythonhosted.org/packages/e9/74/68341185a4f32b274e0fc3410d5ad0750497e1acc20bd0f5b5f64ce17785/zstandard-0.25.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:78228d8a6a1c177a96b94f7e2e8d012c55f9c760761980da16ae7546a15a8e9b", size = 5402214, upload-time = "2025-09-14T22:16:04.109Z" }, - { url = "https://files.pythonhosted.org/packages/8b/67/f92e64e748fd6aaffe01e2b75a083c0c4fd27abe1c8747fee4555fcee7dd/zstandard-0.25.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b6bd67528ee8b5c5f10255735abc21aa106931f0dbaf297c7be0c886353c3d0", size = 5449703, upload-time = "2025-09-14T22:16:06.312Z" }, - { url = "https://files.pythonhosted.org/packages/fd/e5/6d36f92a197c3c17729a2125e29c169f460538a7d939a27eaaa6dcfcba8e/zstandard-0.25.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4b6d83057e713ff235a12e73916b6d356e3084fd3d14ced499d84240f3eecee0", size = 5556583, upload-time = "2025-09-14T22:16:08.457Z" }, - { url = "https://files.pythonhosted.org/packages/d7/83/41939e60d8d7ebfe2b747be022d0806953799140a702b90ffe214d557638/zstandard-0.25.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9174f4ed06f790a6869b41cba05b43eeb9a35f8993c4422ab853b705e8112bbd", size = 5045332, upload-time = "2025-09-14T22:16:10.444Z" }, - { url = "https://files.pythonhosted.org/packages/b3/87/d3ee185e3d1aa0133399893697ae91f221fda79deb61adbe998a7235c43f/zstandard-0.25.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:25f8f3cd45087d089aef5ba3848cd9efe3ad41163d3400862fb42f81a3a46701", size = 5572283, upload-time = "2025-09-14T22:16:12.128Z" }, - { url = "https://files.pythonhosted.org/packages/0a/1d/58635ae6104df96671076ac7d4ae7816838ce7debd94aecf83e30b7121b0/zstandard-0.25.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3756b3e9da9b83da1796f8809dd57cb024f838b9eeafde28f3cb472012797ac1", size = 4959754, upload-time = "2025-09-14T22:16:14.225Z" }, - { url = "https://files.pythonhosted.org/packages/75/d6/57e9cb0a9983e9a229dd8fd2e6e96593ef2aa82a3907188436f22b111ccd/zstandard-0.25.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:81dad8d145d8fd981b2962b686b2241d3a1ea07733e76a2f15435dfb7fb60150", size = 5266477, upload-time = "2025-09-14T22:16:16.343Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a9/ee891e5edf33a6ebce0a028726f0bbd8567effe20fe3d5808c42323e8542/zstandard-0.25.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a5a419712cf88862a45a23def0ae063686db3d324cec7edbe40509d1a79a0aab", size = 5440914, upload-time = "2025-09-14T22:16:18.453Z" }, - { url = "https://files.pythonhosted.org/packages/58/08/a8522c28c08031a9521f27abc6f78dbdee7312a7463dd2cfc658b813323b/zstandard-0.25.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e7360eae90809efd19b886e59a09dad07da4ca9ba096752e61a2e03c8aca188e", size = 5819847, upload-time = "2025-09-14T22:16:20.559Z" }, - { url = "https://files.pythonhosted.org/packages/6f/11/4c91411805c3f7b6f31c60e78ce347ca48f6f16d552fc659af6ec3b73202/zstandard-0.25.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:75ffc32a569fb049499e63ce68c743155477610532da1eb38e7f24bf7cd29e74", size = 5363131, upload-time = "2025-09-14T22:16:22.206Z" }, - { url = "https://files.pythonhosted.org/packages/ef/d6/8c4bd38a3b24c4c7676a7a3d8de85d6ee7a983602a734b9f9cdefb04a5d6/zstandard-0.25.0-cp310-cp310-win32.whl", hash = "sha256:106281ae350e494f4ac8a80470e66d1fe27e497052c8d9c3b95dc4cf1ade81aa", size = 436469, upload-time = "2025-09-14T22:16:25.002Z" }, - { url = "https://files.pythonhosted.org/packages/93/90/96d50ad417a8ace5f841b3228e93d1bb13e6ad356737f42e2dde30d8bd68/zstandard-0.25.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea9d54cc3d8064260114a0bbf3479fc4a98b21dffc89b3459edd506b69262f6e", size = 506100, upload-time = "2025-09-14T22:16:23.569Z" }, { url = "https://files.pythonhosted.org/packages/2a/83/c3ca27c363d104980f1c9cee1101cc8ba724ac8c28a033ede6aab89585b1/zstandard-0.25.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:933b65d7680ea337180733cf9e87293cc5500cc0eb3fc8769f4d3c88d724ec5c", size = 795254, upload-time = "2025-09-14T22:16:26.137Z" }, { url = "https://files.pythonhosted.org/packages/ac/4d/e66465c5411a7cf4866aeadc7d108081d8ceba9bc7abe6b14aa21c671ec3/zstandard-0.25.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3f79487c687b1fc69f19e487cd949bf3aae653d181dfb5fde3bf6d18894706f", size = 640559, upload-time = "2025-09-14T22:16:27.973Z" }, { url = "https://files.pythonhosted.org/packages/12/56/354fe655905f290d3b147b33fe946b0f27e791e4b50a5f004c802cb3eb7b/zstandard-0.25.0-cp311-cp311-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:0bbc9a0c65ce0eea3c34a691e3c4b6889f5f3909ba4822ab385fab9057099431", size = 5348020, upload-time = "2025-09-14T22:16:29.523Z" }, From 73eb9b12400b1dcb43b2546bc59139e40df427fe Mon Sep 17 00:00:00 2001 From: Paul Mueller Date: Tue, 20 Oct 2026 19:44:45 -0400 Subject: [PATCH 21/28] Let already-resolved events skip ahead in dnsresolve's queue (#3533) * Let already-resolved events skip ahead in dnsresolve's queue * Resolve a host's minimal records on every dnsresolve pass * Make portscan test mock report ports for any covering target --- bbot/core/helpers/async_helpers.py | 20 ++ bbot/modules/base.py | 14 +- bbot/modules/internal/dnsresolve.py | 60 +++-- bbot/scanner/scanner.py | 2 +- bbot/test/test_step_1/test_dns.py | 238 ++++++++++++++++++ bbot/test/test_step_1/test_helpers.py | 27 ++ .../module_tests/test_module_portscan.py | 85 ++++++- 7 files changed, 406 insertions(+), 40 deletions(-) diff --git a/bbot/core/helpers/async_helpers.py b/bbot/core/helpers/async_helpers.py index 4620dc8345..526852c362 100644 --- a/bbot/core/helpers/async_helpers.py +++ b/bbot/core/helpers/async_helpers.py @@ -4,6 +4,7 @@ import asyncio import logging import functools +import itertools from contextlib import suppress from cachetools import keys, LRUCache from contextlib import asynccontextmanager @@ -20,6 +21,25 @@ def _get(self): return self._queue.popleft() +class LaneQueue(asyncio.PriorityQueue): + """ + A queue divided into lanes, where items in a lower lane are always dequeued before items in a higher one. + + `lane_fn` assigns each item its lane (an int). Items within the same lane are dequeued in FIFO order. + """ + + def __init__(self, lane_fn, maxsize=0): + self._lane_fn = lane_fn + self._sequence = itertools.count() + super().__init__(maxsize) + + def _put(self, item): + super()._put((self._lane_fn(item), next(self._sequence), item)) + + def _get(self): + return super()._get()[-1] + + class _Lock(asyncio.Lock): def __init__(self, name): self.name = name diff --git a/bbot/modules/base.py b/bbot/modules/base.py index 2d553d35ce..11ba12f631 100644 --- a/bbot/modules/base.py +++ b/bbot/modules/base.py @@ -9,7 +9,7 @@ from ..core.helpers.misc import get_size # noqa from ..errors import HttpCompareError, ValidationError, WebError -from ..core.helpers.async_helpers import TaskCounter, ShuffleQueue +from ..core.helpers.async_helpers import LaneQueue, TaskCounter, ShuffleQueue from ..core.event import is_event from .. import __version__ @@ -2051,6 +2051,18 @@ async def get_incoming_event(self): """ return await self.incoming_event_queue.get() + def make_intercept_queue(self): + """ + Make the queue that feeds this module from the previous intercept module, divided into lanes by `incoming_lane()` + """ + return LaneQueue(lambda item: self.incoming_lane(item[0])) + + def incoming_lane(self, event): + """ + The lane an incoming event joins. Events in lower lanes are handled first. + """ + return 0 + async def forward_event(self, event, kwargs): """ Used for forwarding the event on to the next intercept module diff --git a/bbot/modules/internal/dnsresolve.py b/bbot/modules/internal/dnsresolve.py index f4a5abae1a..4abf2223a6 100644 --- a/bbot/modules/internal/dnsresolve.py +++ b/bbot/modules/internal/dnsresolve.py @@ -50,6 +50,13 @@ async def setup(self): return True + def incoming_lane(self, event): + # events whose host was already resolved upstream skip ahead of hosts still awaiting resolution + if not event.host: + return 0 + dns_parent = self.find_dns_parent(event) + return 0 if dns_parent is not None and dns_parent is not event else 1 + async def filter_event(self, event): if (not event.host) or (event.type in ("IP_RANGE",)): return False, "event does not have host attribute" @@ -65,25 +72,23 @@ async def handle_event(self, event, **kwargs): non_minimal_rdtypes = self.non_minimal_rdtypes # first, we find or create the main DNS_NAME or IP_ADDRESS associated with this event - main_host_event, in_target, blacklisted, new_event = self.get_dns_parent(event) + main_host_event, new_event = self.get_dns_parent(event) original_tags = set(event.tags) # minimal resolution - first, we resolve A/AAAA records for scope purposes - if new_event or event is main_host_event: - await self.resolve_event(main_host_event, types=minimal_rdtypes) - # are any of its IPs in target scope or blacklisted? - in_target, blacklisted = self.check_scope(main_host_event) - if in_target and main_host_event.scope_distance > 0: - # when filter_ptrs is enabled, don't promote PTR-derived hostnames to in-scope - # this prevents rDNS results from triggering subdomain enumeration against unrelated domains - # (e.g. scanning 1.2.3.0/24 would otherwise enumerate every PTR parent like randomothercorp.com) - if self.filter_ptrs and "ptr" in main_host_event.tags: - self.debug(f"Not making {main_host_event} in-scope: PTR-derived hostname (filter_ptrs=true)") - else: - self.debug( - f"Making {main_host_event} in-scope because it resolves to an in-scope resource (A/AAAA)" - ) - main_host_event.scope_distance = 0 + # done for every event, since a child can be handled before or alongside its parent (repeats are cache hits) + await self.resolve_event(main_host_event, types=minimal_rdtypes) + # are any of its IPs in target scope or blacklisted? + in_target, blacklisted = self.check_scope(main_host_event) + if in_target and main_host_event.scope_distance > 0: + # when filter_ptrs is enabled, don't promote PTR-derived hostnames to in-scope + # this prevents rDNS results from triggering subdomain enumeration against unrelated domains + # (e.g. scanning 1.2.3.0/24 would otherwise enumerate every PTR parent like randomothercorp.com) + if self.filter_ptrs and "ptr" in main_host_event.tags: + self.debug(f"Not making {main_host_event} in-scope: PTR-derived hostname (filter_ptrs=true)") + else: + self.debug(f"Making {main_host_event} in-scope because it resolves to an in-scope resource (A/AAAA)") + main_host_event.scope_distance = 0 # abort if the event resolves to something blacklisted if blacklisted: @@ -333,22 +338,25 @@ async def resolve_event(self, event, types): except ValueError: continue + def find_dns_parent(self, event): + """ + Get the first DNS_NAME / IP_ADDRESS in an event's chain (including the event itself) with the same host, or None. + """ + for parent in event.get_parents(include_self=True): + if parent.host == event.host and parent.type in ("IP_ADDRESS", "DNS_NAME", "DNS_NAME_UNRESOLVED"): + return parent + def get_dns_parent(self, event): """ Get the first parent DNS_NAME / IP_ADDRESS of an event. If one isn't found, create it. - Returns a 4-tuple of: + Returns a 2-tuple of: - the parent event - - whether the parent is in target - - whether the parent is blacklisted - whether the parent is a new event, i.e. it is newly created or is the current event """ - for parent in event.get_parents(include_self=True): - if parent.host == event.host and parent.type in ("IP_ADDRESS", "DNS_NAME", "DNS_NAME_UNRESOLVED"): - blacklisted = any(t.startswith("dns-blacklisted-") for t in parent.tags) - in_target = any(t.startswith("dns-in-target-") for t in parent.tags) - new_event = parent is event - return parent, in_target, blacklisted, new_event + parent = self.find_dns_parent(event) + if parent is not None: + return parent, parent is event tags = set() if "seed" in event.tags: tags.add("seed") @@ -361,8 +369,6 @@ def get_dns_parent(self, event): context="{event.parent.type} has host {event.type}: {event.host}", tags=tags, ), - None, - None, True, ) diff --git a/bbot/scanner/scanner.py b/bbot/scanner/scanner.py index 8bb8548cd0..a61f747879 100644 --- a/bbot/scanner/scanner.py +++ b/bbot/scanner/scanner.py @@ -414,7 +414,7 @@ async def _prep(self): self.debug( f"Setting intercept module {intercept_module.name}._incoming_event_queue to previous intercept module {prev_intercept_module.name}.outgoing_event_queue" ) - interqueue = asyncio.Queue() + interqueue = intercept_module.make_intercept_queue() intercept_module._incoming_event_queue = interqueue prev_intercept_module._outgoing_event_queue = interqueue diff --git a/bbot/test/test_step_1/test_dns.py b/bbot/test/test_step_1/test_dns.py index aa5ac4524c..78a3d29d0e 100644 --- a/bbot/test/test_step_1/test_dns.py +++ b/bbot/test/test_step_1/test_dns.py @@ -1007,3 +1007,241 @@ def __init__(self, resolvers, config): # a DNS-disabled scan never resolves, so it must not be blocked by that check scan = bbot_scanner(config={"dns": {"nameservers": ["not-an-ip"], "disable": True}}) await scan._prep() + + +@pytest.mark.asyncio +async def test_dnsresolve_incoming_lanes(bbot_scanner): + from bbot.core.helpers.async_helpers import LaneQueue + + scan = bbot_scanner("evilcorp.com") + await scan._prep() + dnsresolve = scan.modules["dnsresolve"] + + dns_name = scan.make_event("www.evilcorp.com", "DNS_NAME", parent=scan.root_event) + open_port = scan.make_event("www.evilcorp.com:443", "OPEN_TCP_PORT", parent=dns_name) + new_host_url = scan.make_event("http://new.evilcorp.com/", "URL_UNVERIFIED", parent=dns_name) + finished = scan.make_event("FINISHED", "FINISHED", dummy=True) + + # hosts that still need resolving wait; hosts already resolved upstream (and hostless events) don't + assert dnsresolve.incoming_lane(dns_name) == 1 + assert dnsresolve.incoming_lane(new_host_url) == 1 + assert dnsresolve.incoming_lane(open_port) == 0 + assert dnsresolve.incoming_lane(finished) == 0 + + # the queue feeding dnsresolve is divided by those lanes + queue = dnsresolve.incoming_event_queue + assert isinstance(queue, LaneQueue) + for event in (dns_name, new_host_url, open_port): + queue.put_nowait((event, {})) + assert [queue.get_nowait()[0] for _ in range(3)] == [open_port, dns_name, new_host_url] + + +# a host and a child on that host, emitted together by one module (as urlscan and asset_inventory do) +parent_child_mock_data = { + "evilcorp.com": {"A": ["127.0.0.1"]}, + "ok.evilcorp.com": {"A": ["127.0.0.3"]}, + # resolves to a blacklisted IP + "bad.evilcorp.com": {"A": ["127.0.0.99"]}, + # in scope only because it resolves to a target IP + "viaip.othercorp.net": {"A": ["127.0.1.5"]}, + # doesn't resolve + "dead.evilcorp.com": {}, + # inside a wildcard zone + r"regex:.*\.wild\.evilcorp\.com$": {"A": ["127.0.0.4"]}, +} +parent_child_hosts = ( + "ok.evilcorp.com", + "bad.evilcorp.com", + "viaip.othercorp.net", + "dead.evilcorp.com", + "foo.wild.evilcorp.com", +) + + +async def run_parent_child_scan(bbot_scanner, order): + """ + Scan where a module emits each host in `parent_child_hosts` as a DNS_NAME plus an OPEN_TCP_PORT child of it. + + `order` controls the order dnsresolve handles them in: + - "parent_first" / "child_first": one dnsresolve worker, FIFO queues, the given event emitted first + - "lanes": one dnsresolve worker with its real lanes, held until every host and child is queued + """ + import asyncio + from bbot.modules.base import BaseModule + + class DummyModule(BaseModule): + watched_events = ["DNS_NAME"] + target_only = True + + async def handle_event(self, event): + for host in parent_child_hosts: + host_event = self.make_event(host, "DNS_NAME", parent=event) + port_event = self.make_event(f"{host}:443", "OPEN_TCP_PORT", parent=host_event) + pair = (port_event, host_event) if order == "child_first" else (host_event, port_event) + for e in pair: + await self.emit_event(e) + + scan = bbot_scanner( + "evilcorp.com", + "127.0.1.0/24", + blacklist=["127.0.0.99"], + config={"dns": {"threads": 1, "wildcard_ignore": []}}, + ) + await scan._prep() + await scan.helpers.dns._mock_dns(parent_child_mock_data) + dummy_module = DummyModule(scan) + scan.modules["dummy_module"] = dummy_module + dnsresolve = scan.modules["dnsresolve"] + + queue_filled = None + if order == "lanes": + # hold dnsresolve's only worker on the first of these events until the rest are queued behind it + handle_event = dnsresolve.handle_event + + async def gated_handle_event(event, **kwargs): + nonlocal queue_filled + if queue_filled is None and event.host in parent_child_hosts: + queue_filled = False + for _ in range(100): + if dnsresolve.incoming_event_queue.qsize() >= 2 * len(parent_child_hosts) - 1: + queue_filled = True + break + await asyncio.sleep(0.05) + return await handle_event(event, **kwargs) + + dnsresolve.handle_event = gated_handle_event + else: + # keep emission order all the way into dnsresolve + dummy_module._outgoing_event_queue = asyncio.Queue() + dnsresolve.incoming_lane = lambda event: 0 + + events = [e async for e in scan.async_start()] + if order == "lanes": + assert queue_filled, "hosts and their children never queued up together" + return events + + +@pytest.mark.asyncio +@pytest.mark.parametrize("order", ["parent_first", "child_first", "lanes"]) +async def test_dnsresolve_parent_child_order(bbot_scanner, order): + """A host and its child come out of dnsresolve the same way no matter which is handled first.""" + events = await run_parent_child_scan(bbot_scanner, order) + + def find(event_type, data): + return [e for e in events if e.type == event_type and e.data == data] + + # the parent is resolved, not demoted to DNS_NAME_UNRESOLVED by its child's pass + assert [e.type for e in events if e.host == "ok.evilcorp.com" and e.type.startswith("DNS_NAME")] == ["DNS_NAME"] + # the child gets the parent's IPs and scope + port = find("OPEN_TCP_PORT", "ok.evilcorp.com:443") + assert len(port) == 1 + assert port[0].resolved_hosts == {"127.0.0.3"} + assert port[0].scope_distance == 0 + + # nothing on a host that resolves to a blacklisted IP gets into the scan + assert not [e for e in events if e.host == "bad.evilcorp.com"] + + # a host that's in scope only through its IP brings its child into scope with it + viaip = find("DNS_NAME", "viaip.othercorp.net") + assert len(viaip) == 1 + assert viaip[0].scope_distance == 0 + port = find("OPEN_TCP_PORT", "viaip.othercorp.net:443") + assert len(port) == 1 + assert port[0].scope_distance == 0 + assert port[0].resolved_hosts == {"127.0.1.5"} + + # a host that really doesn't resolve is still DNS_NAME_UNRESOLVED + assert [e.type for e in events if e.host == "dead.evilcorp.com" and e.type.startswith("DNS_NAME")] == [ + "DNS_NAME_UNRESOLVED" + ] + port = find("OPEN_TCP_PORT", "dead.evilcorp.com:443") + assert len(port) == 1 + assert not port[0].resolved_hosts + + # a wildcard host collapses (once per emitting module), and its child keeps its own host + wild = [e.data for e in events if e.type.startswith("DNS_NAME") and e.data.endswith(".wild.evilcorp.com")] + assert wild and set(wild) == {"_wildcard.wild.evilcorp.com"} + port = find("OPEN_TCP_PORT", "foo.wild.evilcorp.com:443") + assert len(port) == 1 + assert port[0].resolved_hosts == {"127.0.0.4"} + + +@pytest.mark.asyncio +@pytest.mark.parametrize("release", ["first_arrived_first", "last_arrived_first", "together"]) +async def test_dnsresolve_parent_child_interleaved(bbot_scanner, release): + """A host's DNS_NAME and its child give the same result when their lookups of that host overlap, in any order.""" + import asyncio + from bbot.modules.base import BaseModule + + hosts = ("ok.evilcorp.com", "bad.evilcorp.com") + + class DummyModule(BaseModule): + watched_events = ["DNS_NAME"] + target_only = True + + async def handle_event(self, event): + for host in hosts: + host_event = self.make_event(host, "DNS_NAME", parent=event) + await self.emit_event(host_event) + await self.emit_event(f"{host}:443", "OPEN_TCP_PORT", parent=host_event) + + scan = bbot_scanner("evilcorp.com", blacklist=["127.0.0.99"]) + await scan._prep() + await scan.helpers.dns._mock_dns(parent_child_mock_data) + scan.modules["dummy_module"] = DummyModule(scan) + + # hold every A lookup of these hosts until both the DNS_NAME's pass and the child's pass are waiting on it + dns = scan.helpers.dns + resolve_multi_full = dns.resolve_multi_full + waiting = {host: [] for host in hosts} + all_waiting = {host: asyncio.Event() for host in hosts} + + async def held_resolve_multi_full(query, rdtypes): + if query in waiting and "A" in rdtypes and len(waiting[query]) < 2: + gate, done = asyncio.Event(), asyncio.Event() + waiting[query].append((gate, done)) + if len(waiting[query]) == 2: + all_waiting[query].set() + await gate.wait() + try: + return await resolve_multi_full(query, rdtypes) + finally: + # set before returning, so the released pass applies its results before the next one is released + done.set() + return await resolve_multi_full(query, rdtypes) + + dns.resolve_multi_full = held_resolve_multi_full + + async def release_lookups(host): + try: + await asyncio.wait_for(all_waiting[host].wait(), timeout=10) + except asyncio.TimeoutError: + # only one pass looked the host up; let the scan finish so the assertions below report it + for gate, _ in waiting[host]: + gate.set() + return + lookups = list(waiting[host]) + if release == "last_arrived_first": + lookups.reverse() + if release == "together": + for gate, _ in lookups: + gate.set() + else: + for gate, done in lookups: + gate.set() + await done.wait() + # let the released pass apply its results + await asyncio.sleep(0.1) + + releasers = [asyncio.create_task(release_lookups(host)) for host in hosts] + events = [e async for e in scan.async_start()] + # both passes looked the host up themselves, and their lookups overlapped + for task in releasers: + await task + assert all(len(lookups) == 2 for lookups in waiting.values()) + + assert [e.type for e in events if e.host == "ok.evilcorp.com" and e.type.startswith("DNS_NAME")] == ["DNS_NAME"] + port = [e for e in events if e.type == "OPEN_TCP_PORT" and e.data == "ok.evilcorp.com:443"] + assert len(port) == 1 + assert port[0].resolved_hosts == {"127.0.0.3"} + assert not [e for e in events if e.host == "bad.evilcorp.com"] diff --git a/bbot/test/test_step_1/test_helpers.py b/bbot/test/test_step_1/test_helpers.py index a8f7ae8b62..c3a53bc2f5 100644 --- a/bbot/test/test_step_1/test_helpers.py +++ b/bbot/test/test_step_1/test_helpers.py @@ -840,6 +840,33 @@ async def do_stuff(r): assert sorted(random_ints) == sorted(results) +@pytest.mark.asyncio +async def test_lane_queue(): + from bbot.core.helpers.async_helpers import LaneQueue + + # lower lanes are dequeued first, and each lane is FIFO + q = LaneQueue(lambda item: item[0]) + items = [(1, "a"), (0, "b"), (2, "c"), (0, "d"), (1, "e")] + for item in items: + q.put_nowait(item) + assert q.qsize() == len(items) + assert [q.get_nowait() for _ in items] == [(0, "b"), (0, "d"), (1, "a"), (1, "e"), (2, "c")] + assert q.empty() + + # items with equal lanes are never compared to each other + q = LaneQueue(lambda item: 0) + q.put_nowait({"unorderable": 1}) + q.put_nowait({"unorderable": 2}) + assert q.get_nowait() == {"unorderable": 1} + + # maxsize still applies backpressure + q = LaneQueue(lambda item: 0, maxsize=1) + q.put_nowait("a") + assert q.full() + with pytest.raises(asyncio.QueueFull): + q.put_nowait("b") + + def test_portparse(helpers): assert helpers.parse_port_string("80,443,22") == [80, 443, 22] assert helpers.parse_port_string(80) == [80] diff --git a/bbot/test/test_step_2/module_tests/test_module_portscan.py b/bbot/test/test_step_2/module_tests/test_module_portscan.py index 85a1caecdd..5298769fca 100644 --- a/bbot/test/test_step_2/module_tests/test_module_portscan.py +++ b/bbot/test/test_step_2/module_tests/test_module_portscan.py @@ -1,3 +1,5 @@ +import ipaddress + from .base import ModuleTestBase @@ -18,6 +20,29 @@ class TestPortscan(ModuleTestBase): masscan_output_2 = """{ "ip": "8.8.4.5", "timestamp": "1680197558", "ports": [ {"port": 80, "proto": "tcp", "status": "open", "reason": "syn-ack", "ttl": 54} ] }""" masscan_output_3 = """{ "ip": "8.8.4.6", "timestamp": "1680197558", "ports": [ {"port": 631, "proto": "tcp", "status": "open", "reason": "syn-ack", "ttl": 54} ] }""" + expected_results = { + ("DNS_NAME", "evilcorp.com"), + ("DNS_NAME", "www.evilcorp.com"), + ("DNS_NAME", "asdf.evilcorp.net"), + ("DNS_NAME", "dummy.evilcorp.com"), + ("DNS_NAME", "dummy.www.evilcorp.com"), + ("DNS_NAME", "dummy.asdf.evilcorp.net"), + ("IP_RANGE", "8.8.8.0/24"), + ("IP_RANGE", "8.8.4.0/24"), + ("IP_ADDRESS", "8.8.8.8"), + ("IP_ADDRESS", "8.8.4.4"), + ("IP_ADDRESS", "8.8.4.5"), + ("IP_ADDRESS", "8.8.4.6"), + ("OPEN_TCP_PORT", "8.8.8.8:443"), + ("OPEN_TCP_PORT", "8.8.4.5:80"), + ("OPEN_TCP_PORT", "8.8.4.6:631"), + ("OPEN_TCP_PORT", "evilcorp.com:443"), + ("OPEN_TCP_PORT", "www.evilcorp.com:443"), + ("OPEN_TCP_PORT", "asdf.evilcorp.net:80"), + ("OPEN_TCP_PORT", "dummy.asdf.evilcorp.net:80"), + ("OPEN_TCP_PORT", "dummy.evilcorp.com:631"), + } + masscan_output_ping = """{ "ip": "8.8.8.8", "timestamp": "1719862594", "ports": [ {"port": 0, "proto": "icmp", "status": "open", "reason": "none", "ttl": 54} ] }""" async def setup_after_prep(self, module_test): @@ -61,11 +86,15 @@ async def run_masscan(command, *args, **kwargs): else: self.syn_runs += 1 self.syn_scanned += targets - if "8.8.8.0/24" in targets or "8.8.8.8/32" in targets: - yield self.masscan_output_1 - if "8.8.4.0/24" in targets: - yield self.masscan_output_2 - yield self.masscan_output_3 + # like real masscan, report an open port whenever its IP is covered by this run's targets + networks = [ipaddress.ip_network(t) for t in targets] + for ip, output in ( + ("8.8.8.8", self.masscan_output_1), + ("8.8.4.5", self.masscan_output_2), + ("8.8.4.6", self.masscan_output_3), + ): + if any(ipaddress.ip_address(ip) in n for n in networks): + yield output yield "]" else: async for l in module_test.scan.helpers.run_live(command, *args, **kwargs): @@ -110,12 +139,13 @@ def check(self, module_test, events): if e.type == "DNS_NAME" and e.data == "dummy.asdf.evilcorp.net" and str(e.module) == "dummy_module" ] ) - # the reason these numbers aren't exactly predictable is because we can't predict which one arrives first - # to the portscan module. Sometimes, one that would normally be deduped is force-emitted because it led to a new open port. - assert 2 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.8.8"]) <= 4 - assert 2 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.4.4"]) <= 4 - assert 2 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.4.5"]) <= 4 - assert 2 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.4.6"]) <= 4 + # how many IP_ADDRESS events there are depends on which parent an open port is first emitted under (a range, + # or an IP that arrived first), but the distinct results don't + assert 1 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.8.8"]) <= 4 + assert 1 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.4.4"]) <= 4 + assert 1 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.4.5"]) <= 4 + assert 1 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.4.6"]) <= 4 + assert {(e.type, e.data) for e in events if e.type != "SCAN"} == self.expected_results assert 1 == len([e for e in events if e.type == "OPEN_TCP_PORT" and e.data == "8.8.8.8:443"]) assert 1 == len([e for e in events if e.type == "OPEN_TCP_PORT" and e.data == "8.8.4.5:80"]) assert 1 == len([e for e in events if e.type == "OPEN_TCP_PORT" and e.data == "8.8.4.6:631"]) @@ -241,3 +271,36 @@ def check(self, module_test, events): # the non-skipped host: portscan emitted 443 (real, non-internal), no speculated 80 assert ("regular-host.com", 443) in consumer_seen assert ("regular-host.com", 80) not in consumer_seen + + +class TestPortscanRangeLast(TestPortscan): + """The results are the same when a range is scanned after a hostname inside it.""" + + module_name = "portscan" + + async def setup_after_prep(self, module_test): + await super().setup_after_prep(module_test) + portscan = module_test.scan.modules["portscan"] + handle_batch = portscan.handle_batch + held_ranges = [] + asdf_scanned = False + + # hold back 8.8.4.0/24 until asdf.evilcorp.net (8.8.4.5) has been scanned on its own + async def handle_batch_range_last(*events): + nonlocal asdf_scanned + held_ranges.extend(e for e in events if e.type == "IP_RANGE" and e.data == "8.8.4.0/24") + events = [e for e in events if e not in held_ranges] + if events: + await handle_batch(*events) + if any(e.type == "DNS_NAME" and e.data == "asdf.evilcorp.net" for e in events): + asdf_scanned = True + if asdf_scanned and held_ranges: + ranges = list(held_ranges) + held_ranges.clear() + await handle_batch(*ranges) + + portscan.handle_batch = handle_batch_range_last + + def check(self, module_test, events): + assert "8.8.4.5/32" in self.syn_scanned + super().check(module_test, events) From ab954ba7f8f52ae24dc61b90c97e4152c6fbd3a1 Mon Sep 17 00:00:00 2001 From: Paul Mueller Date: Tue, 20 Oct 2026 19:49:39 -0400 Subject: [PATCH 22/28] Bump cloudcheck to 11.2.0 (#3559) --- pyproject.toml | 2 +- uv.lock | 152 +++++++++++++++++++++++++------------------------ 2 files changed, 80 insertions(+), 74 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 287154a27e..4dc5cc60cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,7 +47,7 @@ dependencies = [ "orjson>=3.10.12,<4", "ansible-core>=2.17,<3", "tldextract>=5.3.0,<6", - "cloudcheck>=11.1.0,<12", + "cloudcheck>=11.2.0,<12", "blasthttp>=0.10.0,<0.11", "blastdns>=1.9.0,<2", "zstandard>=0.22,<1", diff --git a/uv.lock b/uv.lock index a121bec5f1..232196116d 100644 --- a/uv.lock +++ b/uv.lock @@ -241,7 +241,7 @@ requires-dist = [ { name = "blastdns", specifier = ">=1.9.0,<2" }, { name = "blasthttp", specifier = ">=0.10.0,<0.11" }, { name = "cachetools", specifier = ">=5.3.2,<8.0.0" }, - { name = "cloudcheck", specifier = ">=11.1.0,<12" }, + { name = "cloudcheck", specifier = ">=11.2.0,<12" }, { name = "deepdiff", specifier = ">=8.0.0,<10" }, { name = "dnspython", specifier = ">=2.7.0,<2.9.0" }, { name = "idna", specifier = ">=3.4,<4" }, @@ -749,78 +749,84 @@ wheels = [ [[package]] name = "cloudcheck" -version = "11.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b5/a7/ef40cc541c87615091321ac67042ce481e32215d93c37fd184fd999d2a0e/cloudcheck-11.1.0.tar.gz", hash = "sha256:6f6d7415fd62dd1dffeb171f603e4f25f451a856924f0b0e7d14851a2b888574", size = 4912429, upload-time = "2026-06-24T01:38:19.915Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/80/af/0ae5ef92b6cadfabc5a720e188538c87ca2f100ba9d0fd32acfa673ce8b6/cloudcheck-11.1.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0d46d045256dee4d6cdcd8ab318a23685198e48efb0ac90374d01117b4fe76fb", size = 1632427, upload-time = "2026-06-24T01:52:22.037Z" }, - { url = "https://files.pythonhosted.org/packages/39/4a/d2ac4022927c021782146e6074ffb6956eb913c73522b4df2cc48f022f5f/cloudcheck-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0ed638c38fb92f5fd3418ddc7c4efa57acbe7be094913e892c5407f079e487c0", size = 1607813, upload-time = "2026-06-24T01:52:14.82Z" }, - { url = "https://files.pythonhosted.org/packages/d1/33/e78b449dd12e5b9deaf24c81cd456439c61a78f7241dc53980ae97738c7f/cloudcheck-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e51567ec7e0fb2ec00767ce4d5960bfea7508e2a7930a1319ade023e780ac1b", size = 4235073, upload-time = "2026-06-24T01:51:13Z" }, - { url = "https://files.pythonhosted.org/packages/ea/57/78e1dd0df64fb3ee1a4d8eb4f5223d0e18051b4aed50bbcb413b0deea1a2/cloudcheck-11.1.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c1c11ef543658dd120adec82600df90c3fc41b73a57df3daf2c9af5890dfcfe", size = 3585141, upload-time = "2026-06-24T01:51:25.961Z" }, - { url = "https://files.pythonhosted.org/packages/42/ae/fab43ed6e9b21b0591890d688b45b31a359953c1e2e7e6002abda006de36/cloudcheck-11.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4236fd5649312d8dcec9a58b95d6332698da66f107d916b506957febf6c10e80", size = 4168921, upload-time = "2026-06-24T01:51:51.209Z" }, - { url = "https://files.pythonhosted.org/packages/21/2a/b2237231ec916fb8a496da0bccd826b962e0a650f8fcf1419b7823bf2a52/cloudcheck-11.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ef47a2e43f78dc0d63a48a65cffaac7da90ad7f2f8b85a00ca03152818f719e3", size = 4082934, upload-time = "2026-06-24T01:51:38.854Z" }, - { url = "https://files.pythonhosted.org/packages/8e/bd/005838063806eb0b483e8773c5f498f6ff5c902998260f0d7b8a2408d906/cloudcheck-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd9ca7ea0dfe8abf1c6ca243d685a9efcca446f202275ac0a7a341ae7827ef28", size = 4027396, upload-time = "2026-06-24T01:52:04.038Z" }, - { url = "https://files.pythonhosted.org/packages/93/44/e645877ec6d7bdbd29215771857fc16bddd07234554c0def9fb735b0c0a4/cloudcheck-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:590ff109285306b5d772c3d21bebe47fa2f151f843b5411abda309124e93d117", size = 4641536, upload-time = "2026-06-24T01:52:30.674Z" }, - { url = "https://files.pythonhosted.org/packages/70/55/ba038eca014cb7ffa1ce26b48ceb75a625028ff9bcdb890829871421fc3e/cloudcheck-11.1.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:544cc820c26c76fb824f892876e413f477652464ff5a2f77888013da31ceeeb8", size = 3916047, upload-time = "2026-06-24T01:52:44.578Z" }, - { url = "https://files.pythonhosted.org/packages/ea/56/d8fca04a8f2cd6dbecd45f0a4c1943a6d82bd78a84c6c1173d6cc576095d/cloudcheck-11.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:55e922a2221d86bb15ec6ab4d7dfaef2256202b17f40b5909f08e43fbfa44de8", size = 4261416, upload-time = "2026-06-24T01:52:57.889Z" }, - { url = "https://files.pythonhosted.org/packages/bd/8c/741f054f53192970c3a12dff0c8338966fde2668aad55e852f3e85f901a8/cloudcheck-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1b4484f57c91ac87f1ade3d9c59cfda8e30c91d687da909a97ba7bece42a4126", size = 4290042, upload-time = "2026-06-24T01:53:11.461Z" }, - { url = "https://files.pythonhosted.org/packages/cf/dc/7b9daf45013786fa188e1b26bd7317193f266e3586a839b1dadccf3acde8/cloudcheck-11.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:a2e8ae876141ba3019e9d10464bb8782dad2ac981940ee946493b4aaa4528fd1", size = 1416873, upload-time = "2026-06-24T01:53:25.41Z" }, - { url = "https://files.pythonhosted.org/packages/4b/10/0440a42b558c872612de41fc0820579bdc7e2628b523414d23fe7241dfa0/cloudcheck-11.1.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1fbe51b7e1b4177004c75f2e3af5cbd72fdb68f79105d31263801e36d76565b6", size = 1628297, upload-time = "2026-06-24T01:52:23.737Z" }, - { url = "https://files.pythonhosted.org/packages/aa/b0/1c68aed4783fe4bf70cc82f90f4630d17b045438a0994b0a7e3a044ee827/cloudcheck-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8f1a58782f395a972177e3b594a500c956da976e76cee9c4d81f3602f1d3e438", size = 1603790, upload-time = "2026-06-24T01:52:16.658Z" }, - { url = "https://files.pythonhosted.org/packages/55/e4/2df14c1cf9326e301167b9497314849d138e5c0fa2d370abc40b6169016e/cloudcheck-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b28ba5aaefebed398c1711d4112d1f0808ac35d24a82b581a3b84b554f4b0605", size = 4231440, upload-time = "2026-06-24T01:51:14.832Z" }, - { url = "https://files.pythonhosted.org/packages/ef/30/3b54e4ffc807846cd982016f43ddf16c0c7981b2abdb6a63130a2fc410be/cloudcheck-11.1.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4f1c10fa62aff32cb4185d804977fc08833a00f54a48da4f4c2d7cfbab59cd38", size = 3582533, upload-time = "2026-06-24T01:51:27.798Z" }, - { url = "https://files.pythonhosted.org/packages/39/72/4870ed35779ffc64af2ee8e6b6e5dcaf85fc1b1ef25cc80293a07f43d44b/cloudcheck-11.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac8663542f0a56d69ff7ef95b6ea58a3d352ec13fcad86c221f5e66644e0240b", size = 4166645, upload-time = "2026-06-24T01:51:53.012Z" }, - { url = "https://files.pythonhosted.org/packages/3b/ba/45b6a553de29735a7e08e22f45d3f82ffd4f8c03f277d2830ef78c7d2529/cloudcheck-11.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61636088dad3b4412b4117c49978e2a53cc124a7043c9a3c18270fa8c978c600", size = 4076618, upload-time = "2026-06-24T01:51:40.657Z" }, - { url = "https://files.pythonhosted.org/packages/15/43/b0343a74f27d398610baaa39382bdba6a58f106c8d818085d6204386725a/cloudcheck-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41301dc25603fae15d2a0a6ca6b02b8454b825fb1bae5ead4b0218ed57e31c41", size = 4022187, upload-time = "2026-06-24T01:52:05.788Z" }, - { url = "https://files.pythonhosted.org/packages/80/e9/b4fd29b3e40dc37aa1d77e4b6bf487db17aa7859b9a9009070f54dac3f65/cloudcheck-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cfd7ba30e7a3c13d64b8c81b37fa621a8def13591ce612b3fbe29d8390053be0", size = 4636261, upload-time = "2026-06-24T01:52:32.719Z" }, - { url = "https://files.pythonhosted.org/packages/38/8a/571f57283009fe6ac174340a224ee7be41bae54df480c0cf08fecf5496e5/cloudcheck-11.1.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:1bb64247e7414f97d8efcd86d7be63b2bbd04694abbe69c33ea73e97f39eb6c3", size = 3911569, upload-time = "2026-06-24T01:52:46.555Z" }, - { url = "https://files.pythonhosted.org/packages/40/a5/3963d4a90720a05916f14a154dfb1fe6fde274a48f60f5d3e2ea50d7c2c2/cloudcheck-11.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a9a904c36b63089b0d6bbd27c44f3433ab6b50128e649431744669756e7bdfb1", size = 4257464, upload-time = "2026-06-24T01:52:59.66Z" }, - { url = "https://files.pythonhosted.org/packages/67/25/2deb743ec58df78cd0ce577a40df187600e670d1554ae6c686c9405362c6/cloudcheck-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8d47c3527a6db33ae5c1c57c428df2f16e47818a75154481ff88e70b7b7f009c", size = 4289112, upload-time = "2026-06-24T01:53:13.416Z" }, - { url = "https://files.pythonhosted.org/packages/bd/ae/18f5b61a5ad6add2cea661bd839c1246ff295de24b1d761aacb78229582b/cloudcheck-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:53df6bd27a797560802c4e8e6b3a8bb4f6aa9d87bd762d2d7ab4ed4bbda1ef5f", size = 1412447, upload-time = "2026-06-24T01:53:27.079Z" }, - { url = "https://files.pythonhosted.org/packages/23/22/16169719a177e6ed099f1030b95a68dacd516429563bfe4c1d4561bd385d/cloudcheck-11.1.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7fdd75d9290732ab63b60a0456c72c6100b0ece7ba29f3ba37903da945aed90e", size = 1627846, upload-time = "2026-06-24T01:52:25.366Z" }, - { url = "https://files.pythonhosted.org/packages/31/42/567df33fd6022379f70ab69659b18f3a28a44c5c0878d4928c1d0c8ab033/cloudcheck-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:91682f2f6f06f7d99040c3b7e281e82057322cfd4d0f15c77746868335176bf4", size = 1603340, upload-time = "2026-06-24T01:52:18.402Z" }, - { url = "https://files.pythonhosted.org/packages/e5/00/1f054e67b5932f63cdbe1d4363c358a926ccc6a46a286fb18b41a82f1edc/cloudcheck-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cc23596a1c64d5dc8300f03bec7f3962e21ff07fcca1b9a7e697d4ec47628f1", size = 4231553, upload-time = "2026-06-24T01:51:16.77Z" }, - { url = "https://files.pythonhosted.org/packages/cd/c2/27b9eb424148475cb6c696be2926bf06a27e9e19066357c99f5a8431bc1b/cloudcheck-11.1.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a9d2c81349bc95cf598248da3f34cc052ee9b19a0d374923ba88ca522a2b6b21", size = 3581702, upload-time = "2026-06-24T01:51:29.737Z" }, - { url = "https://files.pythonhosted.org/packages/f1/23/090a17cdf2447deec2019ddf2c99e71998fc7b6c1eca4dfd93e82b35b14f/cloudcheck-11.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1db5cd94eaff83acf93111c83cc053a71a11861ae3a45d08c5a5c02a919ab17", size = 4166027, upload-time = "2026-06-24T01:51:54.715Z" }, - { url = "https://files.pythonhosted.org/packages/a9/95/a663471127fc36ddc5102a7f1638630e7098a4c2f59385039cfb201ec5a8/cloudcheck-11.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03d8ab01a4f72a806d8ecb045e29055d208e5e75202934aee1fa3d709a4c77f2", size = 4076800, upload-time = "2026-06-24T01:51:42.432Z" }, - { url = "https://files.pythonhosted.org/packages/8b/47/a97fbf2eacb4956cbb9ca0a4316067b5d7cf18164267829cceac05eb6fc2/cloudcheck-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:916574b39591b533bda458c9ae3a780169e71be1ad0c72e1175ad58a5a5629b3", size = 4020820, upload-time = "2026-06-24T01:52:07.687Z" }, - { url = "https://files.pythonhosted.org/packages/0d/e0/f4545bb3bf57ee43c17ef1226de5dde334977ba538632f2be99d745885fa/cloudcheck-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:488518b5bcf8b9e72cefb5c23af69a52be68b4a196ccca5ef2f5a7cd5bf41645", size = 4634914, upload-time = "2026-06-24T01:52:34.565Z" }, - { url = "https://files.pythonhosted.org/packages/07/f0/932346dcf9efa86245a490f5d3a2432f895bba61432ece025134534a88b3/cloudcheck-11.1.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:1b32de616c43504e092f7ce7ad7122f6cba2a0d72bca130b0134d8811aba277c", size = 3911265, upload-time = "2026-06-24T01:52:48.629Z" }, - { url = "https://files.pythonhosted.org/packages/22/6b/99da3537c47ac0f73ff753ffb850d1f3249a653d537925e14bb7d66b880c/cloudcheck-11.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ca6a5e8e8b293acd32a5f5affe4106c6165033445062384a44dc2044c4d2061f", size = 4256638, upload-time = "2026-06-24T01:53:01.56Z" }, - { url = "https://files.pythonhosted.org/packages/2d/3f/b8250fa548c54d41948a59b24c23cba8215aae6ec45237c0981e47f6986e/cloudcheck-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ccaa40f94d028bf264e71e89e6e51993fc01643fb063e0f2633cd44de86a429c", size = 4288676, upload-time = "2026-06-24T01:53:15.676Z" }, - { url = "https://files.pythonhosted.org/packages/4d/5d/5fc745389013087e1d92c633b848f1a149486a0619a54276690b5f209e1a/cloudcheck-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a90283241cbf136f99a4b9181ad5845aa479e826e0fc1a8287b8a69400cd14e3", size = 1412224, upload-time = "2026-06-24T01:53:28.64Z" }, - { url = "https://files.pythonhosted.org/packages/59/e4/ae62a65601098faf2b0b841e7ce5e87617f5c640c8c775087a77dea0b4a4/cloudcheck-11.1.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:37c7b25eebde0bdfadbe23a285ee0570cc6b91aee01400b3d2a12eb9c354e9a6", size = 1628902, upload-time = "2026-06-24T01:52:27.078Z" }, - { url = "https://files.pythonhosted.org/packages/ca/c8/b57b9930dc5352696f8ce154fcd8c4a1c0e56a7436186430d016c6be0773/cloudcheck-11.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e69c64d371cef736ce7404dbc0d2d4f0af2c645e467432d5596f01f2b3f1c67e", size = 1603546, upload-time = "2026-06-24T01:52:20.368Z" }, - { url = "https://files.pythonhosted.org/packages/91/1d/13e34739ea4b1d6adc4af45c569446f70435616a81facc2b8adc7c3a0e36/cloudcheck-11.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e99315d0e1214987bc2f6463dbfc5864e30a757c0f5a61ab3f569eeab65d804", size = 4227647, upload-time = "2026-06-24T01:51:18.708Z" }, - { url = "https://files.pythonhosted.org/packages/88/91/f4bb1a4ad1388375d62866c3dbb2d7868d01cc84d529404fecd1ea364ec3/cloudcheck-11.1.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac124c734c5e9e773f55245878819d793eb30662974f67fadf9bfb01e89f5850", size = 3582647, upload-time = "2026-06-24T01:51:31.514Z" }, - { url = "https://files.pythonhosted.org/packages/d3/61/36bedf0b70f3a31a25c72c1167a7972652084a7e07c8419fa363f03aab41/cloudcheck-11.1.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14da5f7208fa6248ce96e620eca7888977905ff29de217c294976f098928e255", size = 4166298, upload-time = "2026-06-24T01:51:56.768Z" }, - { url = "https://files.pythonhosted.org/packages/f2/df/87ddfc882f32b2cfcbbd30b8758cadced445114c17b6979b60ed0d8c7e9f/cloudcheck-11.1.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05cdffad94d306ed391399848c583f917fb4ac25d99e6edddcaa77a9b78a9d5a", size = 4078109, upload-time = "2026-06-24T01:51:44.128Z" }, - { url = "https://files.pythonhosted.org/packages/82/6d/709c0fb41c52029da2a91df2f2184a37beb8ab95c3c614df2575060b4033/cloudcheck-11.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:593f78d4740b83f43955883b24fdc785193b7ff4e679f5545f9e9e6501ea86b5", size = 4019438, upload-time = "2026-06-24T01:52:09.584Z" }, - { url = "https://files.pythonhosted.org/packages/c7/7b/408820addf925533973abb1da009f8719c4063e4964ade075dcdf50c67d8/cloudcheck-11.1.0-cp314-cp314-manylinux_2_38_x86_64.whl", hash = "sha256:127ffee71e9de652e88c9e0179c59318eedd139b13453e839f0eb7f33e19b88f", size = 3620324, upload-time = "2026-06-24T01:38:18.03Z" }, - { url = "https://files.pythonhosted.org/packages/08/49/47e64da6a7775e8b79c0974ecb05d46c4576ea13c1b61616ee4536d04bc5/cloudcheck-11.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7625d40295f3285d8c81f527ea248e4a4c03a5ae9b0e3be777b7d5b519fffa51", size = 4627588, upload-time = "2026-06-24T01:52:36.667Z" }, - { url = "https://files.pythonhosted.org/packages/61/1e/7b3cfa2f917fb529f1b726cfe495258b05b7c689abf815c6786da63f03ad/cloudcheck-11.1.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:f5cf04e8a36eadcfe66739804df961f570dbacdade908fc8dde856bc7f3a070c", size = 3912050, upload-time = "2026-06-24T01:52:50.423Z" }, - { url = "https://files.pythonhosted.org/packages/77/43/1e680cbc70bfc2afd40753a2c3458f4568d14a3d605e72871f2aea3f5566/cloudcheck-11.1.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:3f4f92835fcf428f4acdc3681739a306c7172b6a7963ef4b272eefd0f390c387", size = 4256341, upload-time = "2026-06-24T01:53:03.479Z" }, - { url = "https://files.pythonhosted.org/packages/55/c7/3611ac35cb38a82d0ebbcf3568eefb19ba89b5d93040179a9bf13e93b4bc/cloudcheck-11.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3e38eaf5fa3f871b2afe1caa4c1cf2626af8a55faf7db0f05abeb8895a40ece5", size = 4283526, upload-time = "2026-06-24T01:53:17.642Z" }, - { url = "https://files.pythonhosted.org/packages/3a/de/6ba44d3ea3c5ed7c03c744ee8155019845975208dc15a00213895fde5923/cloudcheck-11.1.0-cp314-cp314-win32.whl", hash = "sha256:5d418ad7ccd53f1367b31ead8c96c42c324f6eaef8a69f9a82772b5ce651465c", size = 1320213, upload-time = "2026-06-24T01:53:31.805Z" }, - { url = "https://files.pythonhosted.org/packages/91/c4/76ad9c8e15524c115b1f11e5b56b4291e0925cb8626989d7d93a503f7a22/cloudcheck-11.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:76a90ae769b9837bf7f5cd7d7831ca3fae36fea839b5fcdd41e7ed8327c05183", size = 1411520, upload-time = "2026-06-24T01:53:30.269Z" }, - { url = "https://files.pythonhosted.org/packages/b6/7a/c414832db140aceb8d7021f787d9fc91f2358cbbb1733c689e939657238a/cloudcheck-11.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:416bbc5bcc2da6b77a7c5d83715da8b68ed140ce5435f40ebae7ac8a1669b54e", size = 4230623, upload-time = "2026-06-24T01:51:20.703Z" }, - { url = "https://files.pythonhosted.org/packages/08/5a/6062da2e386424f35907ffe5f9fa5f8d76efa9ba7b297f17ff6e2bfcfd7b/cloudcheck-11.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:75c04c26554d8b98564a6a354b7b5a23769fe106b81f6fe6bcf54d3f482f0937", size = 3579147, upload-time = "2026-06-24T01:51:33.376Z" }, - { url = "https://files.pythonhosted.org/packages/f0/9b/ba7c8bb8243c4a5ce4cc2522f046bd71742b0423738eb945cc778659d486/cloudcheck-11.1.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af81fdf60c2369b384c182017c188bcbe6fd7a7a9dfb504f4e52ebd09f9dcd46", size = 4164579, upload-time = "2026-06-24T01:51:58.599Z" }, - { url = "https://files.pythonhosted.org/packages/a1/cf/0d81beba95d8ff0c64e9604f4abaf7001dc536f48efb54ab2b92c7a3539b/cloudcheck-11.1.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d619c5beef80b831a95508dca6e7400378295a81f593290490f1e919b2d3ba4", size = 4078924, upload-time = "2026-06-24T01:51:45.817Z" }, - { url = "https://files.pythonhosted.org/packages/ac/d0/050ab1722d6c1a628ab6c2e5a1ba6788f79a14c16e1ea959467736a6d4bc/cloudcheck-11.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6914ec7776c85b73a739e2e6708fa7e730d28ab15010f4fba401386beee50180", size = 4025140, upload-time = "2026-06-24T01:52:11.439Z" }, - { url = "https://files.pythonhosted.org/packages/35/97/2bb5e69c7aded98bc9efc5cec1d648d9e5e4b4c3a717103f4d8513a66a5f/cloudcheck-11.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74542a999b0b633c43a68ed6e51ccc4a1f1c7e5b009d774d29c9a3d2164742af", size = 4631093, upload-time = "2026-06-24T01:52:38.458Z" }, - { url = "https://files.pythonhosted.org/packages/c9/37/f7559e749951eb2b639eee322018c276bd1b4eb892ae7d46514b2afa4c63/cloudcheck-11.1.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:8cd31034b0be3b3bf706543e54eb61b4c31567484554f3c44b490f0759302e2b", size = 3909734, upload-time = "2026-06-24T01:52:52.269Z" }, - { url = "https://files.pythonhosted.org/packages/cb/34/c22c7b6863d9302b2cd94887dbea46a9d69be5d5ccb8f37459d9eb637028/cloudcheck-11.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:bf2cc009afa271b2ebfde51364003d67fe439d0a6c4c2740ceeb25ef0c36ad8b", size = 4253930, upload-time = "2026-06-24T01:53:05.241Z" }, - { url = "https://files.pythonhosted.org/packages/f7/88/a26706ee3c86e0d2b990d3184d38a7b69dc2fc2bd11b45dda4325cc9f9cf/cloudcheck-11.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:de8b44c02d05d5a5c4629b88f3edfadcefee2834b90a8b8888b4d56e2b8b1922", size = 4290138, upload-time = "2026-06-24T01:53:19.41Z" }, - { url = "https://files.pythonhosted.org/packages/70/3b/bfdfcc252b3df211a2adc657744528755c810e5c58e8d95a414ccabe3fc8/cloudcheck-11.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b70efa9390577f1c2cdec2a3dab40149efed3192b71a41cfe59e28984c0d1c6", size = 4236159, upload-time = "2026-06-24T01:51:22.71Z" }, - { url = "https://files.pythonhosted.org/packages/14/18/9fec85a4a09d528f4d514f8e70638d3961d4098cb715b4179f55313b673c/cloudcheck-11.1.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a0d8d5c586f4dfdb8a644503ef855a7f59fe760390c3bae2cffce0fd7c5e6d5", size = 3585652, upload-time = "2026-06-24T01:51:35.245Z" }, - { url = "https://files.pythonhosted.org/packages/d6/5e/59699d4d59d9f0df8e370a465eda694cb106490c7e62d92446fb91944f60/cloudcheck-11.1.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d89a88f1ab1d8984a4ab69d5e1b6fc0d27372a337cce07138ba8464410a58631", size = 4170828, upload-time = "2026-06-24T01:52:00.378Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ea/39266dd460993c5573b0b6e83a501e592b31f76bbaa39dcb6373f0e0d144/cloudcheck-11.1.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f5e25da85442c04e5adfa8e640b317461d5b28ffc4e9a4f69553215bddceb58f", size = 4082245, upload-time = "2026-06-24T01:51:47.743Z" }, - { url = "https://files.pythonhosted.org/packages/a3/e4/ccbc9d41aa4e38f1da5ae70860b65370eef1e9f3793e644113b12b3db2f6/cloudcheck-11.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f66138d97c9cbb6e5afe2f794fdfd6345ba2a65e958a138652f82c4c3fb261cd", size = 4025861, upload-time = "2026-06-24T01:52:13.234Z" }, - { url = "https://files.pythonhosted.org/packages/4c/7b/f63b121aa58decb8e29e51a894642477d9dd6e66d25a0f8dbc0bf11c482f/cloudcheck-11.1.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:fe3e69f5aa1611b9cb75a09f0062f590b76eb3d700c347239287e5a1503c38d0", size = 4641331, upload-time = "2026-06-24T01:52:40.327Z" }, - { url = "https://files.pythonhosted.org/packages/01/46/83842410d5e502c71e07e493f1fbf1d22531aebe352e578539ac3ee57c00/cloudcheck-11.1.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:0dbe979a8ddbc8d324798d04667efa46a4200db350a16f10e7ad07d8c16102cd", size = 3914486, upload-time = "2026-06-24T01:52:54.083Z" }, - { url = "https://files.pythonhosted.org/packages/1d/c6/51fa6ff51575f8411dea54a7ba06cad6c2f7d28d874431dbd1aed1af21c8/cloudcheck-11.1.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:bb895f08f654451bbcc847d9f61bcd2132c1e1b968f6056a63647bbd560ebe36", size = 4264679, upload-time = "2026-06-24T01:53:07.513Z" }, - { url = "https://files.pythonhosted.org/packages/0a/2c/d9c8309be4e6aaae9e49343ba53f8314aa4258cb4a16a24bb3efd3e49003/cloudcheck-11.1.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e8b40a33c6c2e66072fe7aa94b6a8cd088106dcf6da676ae9195b5a4e5606eca", size = 4292406, upload-time = "2026-06-24T01:53:21.307Z" }, +version = "11.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/1a/9a1e0c52781c4b600c9926add96f329268dcde6be3d1f95c83d99cb6cd52/cloudcheck-11.2.0.tar.gz", hash = "sha256:80287bf7a8917dfbadc5773490c33c57de31be93e4f0f80a03a730f3e6d312ba", size = 4906458, upload-time = "2026-10-20T21:44:50.449Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/3c/d5edb1c270842e4da3acdefd8bf004c4ae8096cdfb8a3b70f585fac2894a/cloudcheck-11.2.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c3cecc0d4cbe287176dd8ecb5c5dd5a65524455ba31a95bc2ac247b0b0f1923e", size = 1605163, upload-time = "2026-10-20T22:03:51.757Z" }, + { url = "https://files.pythonhosted.org/packages/aa/64/72a83311438f3c6376f9dff4e7eaac3e686ab71f011d96121a96f16f8a14/cloudcheck-11.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:131f8370569c4270c5efbdeaa98613071d07478242f6ea42db3ebb22d22d6937", size = 1587019, upload-time = "2026-10-20T22:03:43.319Z" }, + { url = "https://files.pythonhosted.org/packages/16/f9/f130069582c0336af798e0dab8ba2af53f7200bc3ea2b5b26a311baf605f/cloudcheck-11.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa2d8f8a8c476a9677793b58a569685d4522167c4e25ea22fe40e14da5b08e9d", size = 4229160, upload-time = "2026-10-20T22:02:42.574Z" }, + { url = "https://files.pythonhosted.org/packages/e2/44/195e5dadef8777ef1ff658b11639910ca25e516b0662a17b159093ba231b/cloudcheck-11.2.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5320aba38ddfe5331739d883c4fe62a5156a496bef42bbb82018004136c5c277", size = 3590579, upload-time = "2026-10-20T22:02:54.532Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ea/745b386b5c252f4f840ee73de26af82f0a7e4a62d358a2c170cc9be7e3c0/cloudcheck-11.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:981ba74405a1a7690cb42c1640d1a5a821ec7bebe811fdf86d852ea9f1cfab6d", size = 4169402, upload-time = "2026-10-20T22:03:17.839Z" }, + { url = "https://files.pythonhosted.org/packages/d1/eb/fdb5cdd1b5b2991f556ef8ec93fddf2a1e2fe31a87ee1e502061b51569cd/cloudcheck-11.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ad79998c00df63f82c2bc989304b4448ee89b28cd3df3ecebdc9fda88669151", size = 4086788, upload-time = "2026-10-20T22:03:07.265Z" }, + { url = "https://files.pythonhosted.org/packages/7c/b4/76095f64e478663543be5de321934277b468a804f6ddb577e206e21620df/cloudcheck-11.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4306963ac62b667b5a667a24f517451ef716b4970fed16c9f06427f68eedbcf2", size = 4001554, upload-time = "2026-10-20T22:03:30.357Z" }, + { url = "https://files.pythonhosted.org/packages/2d/7a/0713ca692f4c615bc70291792630b905410f679c6ee83050fe2d85870c21/cloudcheck-11.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:feccf6aa0c4e1b68ea6aa9087e139c1652267adf781fe4eec2e703809f21d7bd", size = 4632162, upload-time = "2026-10-20T22:03:57.981Z" }, + { url = "https://files.pythonhosted.org/packages/c9/29/03afd0114003ef4efe883759ff646a42da3287a107409351ea21518fcd9a/cloudcheck-11.2.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:3ec8016211069daa2f0f1db6b89d59d1216d53c6f11ab1ad316e1e420de9c3ea", size = 3920869, upload-time = "2026-10-20T22:04:08.779Z" }, + { url = "https://files.pythonhosted.org/packages/a6/92/aa91674667ca232ac84f47d2524704f3e7eac2d69689c5ec004b3e604753/cloudcheck-11.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:97f2e2a87dcb4847c98b0f740f329759c5d6953aee893f04e469605bdebca41c", size = 4264567, upload-time = "2026-10-20T22:04:18.492Z" }, + { url = "https://files.pythonhosted.org/packages/ec/2e/1ad69d34a48e4f1103bae44a7e27d9878f73140e39e6a0c23cc84e8adf83/cloudcheck-11.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:eee893f95879970878ffbdca030ec43ed188b1cea40b6039de6881b0cdfd27e8", size = 4294159, upload-time = "2026-10-20T22:04:28.103Z" }, + { url = "https://files.pythonhosted.org/packages/ae/03/159dd2f5e8bf7003144982442d96a8cb12aa097b2804a1ff58647b0490a0/cloudcheck-11.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:d2d78012770df160c7696eca10300ad094a06c69219826525541c3865ba80bec", size = 1426369, upload-time = "2026-10-20T22:04:38.476Z" }, + { url = "https://files.pythonhosted.org/packages/9b/34/7fa7f6c01572bb42f28c8c337b7096c2410c9154e9f943f8e809eea9e6e5/cloudcheck-11.2.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:284f4656038cb001f1e81e4221e9077e1d23ba4c0951e5deb1d36da9b52a4bb0", size = 1605419, upload-time = "2026-10-20T22:03:53.603Z" }, + { url = "https://files.pythonhosted.org/packages/58/1e/4c1df2672c29992848fe2f43c9d6af27f764e4f8607a15fcecba187e5482/cloudcheck-11.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d5681044373d3069f005e319c147d649b632b544337310479ff91d71954c51b7", size = 1578977, upload-time = "2026-10-20T22:03:45.277Z" }, + { url = "https://files.pythonhosted.org/packages/fb/15/fd18b79569796dd22d963fa6e68b0796daed7e1074a6df04da984e2ca991/cloudcheck-11.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dac30e3a6b17fc4e58418ff918df74328840d2d54b5f94fe69f5f20df2da2fb5", size = 4227327, upload-time = "2026-10-20T22:02:45.036Z" }, + { url = "https://files.pythonhosted.org/packages/93/e8/152b133010ecb61571f801544795a9118524ba675e039faa0ffc18f826ac/cloudcheck-11.2.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc0ad9552cfea148f770b8072a0f7bdf77033c2359919f955cfd871496032772", size = 3583693, upload-time = "2026-10-20T22:02:57.509Z" }, + { url = "https://files.pythonhosted.org/packages/71/b4/3403497f3701078cc851a6f3d0b81b8da614734503da632e0633bdd9cfd0/cloudcheck-11.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:67e088193c787e3e9ab1298aaeb79bb657662f8c5844f31d125775b1b45fbff0", size = 4165599, upload-time = "2026-10-20T22:03:19.42Z" }, + { url = "https://files.pythonhosted.org/packages/2d/5d/4cab2acc7ea616b5f07b9ee1b399711f1c177680c3afbdb6e53aecbe4ba8/cloudcheck-11.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:073559eed248a76e70d27b91a099654108cb4a1b8a1e2660b01a12a172e23b81", size = 4079756, upload-time = "2026-10-20T22:03:08.949Z" }, + { url = "https://files.pythonhosted.org/packages/10/d4/5a4586fe20c29c35a8417be5e37d58c615ccce2d2d6b31f4885751f90fbb/cloudcheck-11.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2b81aad0847abdb3b258e220950dfea7972516cae57a7bf769680bace3d1de5", size = 3997496, upload-time = "2026-10-20T22:03:31.938Z" }, + { url = "https://files.pythonhosted.org/packages/15/90/e9edd4d955b12a787edfb94b3db8e473caeac87f09a764f5fe6cfe67feea/cloudcheck-11.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6777e2e26974e03160a73dd13b3ec6154df9f002be3803f038f5e6c1ef7c567c", size = 4629821, upload-time = "2026-10-20T22:03:59.727Z" }, + { url = "https://files.pythonhosted.org/packages/47/89/a1c068199e80e6a49d2dd8eb9ad3468c79e98b76ab4a06cd3c46805cd6a8/cloudcheck-11.2.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4f600b10b0714bf28d74bbf53883a3e195c91ffa553ac18eb08ab6e0fe1a543b", size = 3914552, upload-time = "2026-10-20T22:04:10.22Z" }, + { url = "https://files.pythonhosted.org/packages/cd/ec/a48bc381649431690c110dd4033d0c203ee2fe178be38e98683a7f677667/cloudcheck-11.2.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:87ced02f3de6d696b525a3be1586c3f935212a705e2d7e6b957edbe42c01e19f", size = 4257624, upload-time = "2026-10-20T22:04:20.123Z" }, + { url = "https://files.pythonhosted.org/packages/18/bf/6e77b70584de21940057acf9fcc17860ed3f2c1c447bc809d78b0863cae7/cloudcheck-11.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:628771cb19ef3a6c2e783c90b5bf77b22b900ba8532d602974c16ad83168ede2", size = 4286295, upload-time = "2026-10-20T22:04:29.703Z" }, + { url = "https://files.pythonhosted.org/packages/45/ce/f99a0f7d6b7a64d1bfa893a41446e63b46ea92513be0da9d8727a0ed0431/cloudcheck-11.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:f229356ba548bf616852e16fcbf86b939767dca9d6238ddf7dd160a33213eaa0", size = 1422982, upload-time = "2026-10-20T22:04:40.022Z" }, + { url = "https://files.pythonhosted.org/packages/83/5b/e4e98a45a4957cd74a40b5cbb760d4d565b61133c87cf4a5ed1322d744d8/cloudcheck-11.2.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:8d38291827e863b479ed66018c2141e2c8d3b32c5c40021d945a6dee9dc3cdac", size = 1600271, upload-time = "2026-10-20T22:03:55.037Z" }, + { url = "https://files.pythonhosted.org/packages/c0/14/c5eafcdb0dc62ba36b2b028d3134f4661c5e7c13f5c0d12afc246f751ee6/cloudcheck-11.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:080d3d04ab2e78507b63d98e57c2c397c609aeaf6eddd73d35d253ffddf32d86", size = 1579135, upload-time = "2026-10-20T22:03:47.028Z" }, + { url = "https://files.pythonhosted.org/packages/29/af/e404464dbb6d31dbdd7a3aca00806bf3baf2820b0725da8752bee8f09b11/cloudcheck-11.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a810325944cd1d1692b928f75ffc5cb16e909c258bc73941985538c7b45a148", size = 4225643, upload-time = "2026-10-20T22:02:46.929Z" }, + { url = "https://files.pythonhosted.org/packages/77/f8/ae4bb28474c19535368a1f1645cf4598eb4e840e155358679db5445358ac/cloudcheck-11.2.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b137825881252b59231049c22571fdae049d436b0239ac20bac4eef54bb346fc", size = 3585592, upload-time = "2026-10-20T22:02:59.122Z" }, + { url = "https://files.pythonhosted.org/packages/dd/f5/bbd6c9dded6b41a1f8b55e60181e77bae6039a2edbbfc3625f89a72611c5/cloudcheck-11.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db305cbf9f668b39cc0eb1e0bd9ef6623c5b0fea72f2845accc8f11e68001fb7", size = 4167190, upload-time = "2026-10-20T22:03:20.855Z" }, + { url = "https://files.pythonhosted.org/packages/8f/28/29f1780296f511fd57a92b4a13e091c0ca8c749e677baeb4e182450c9091/cloudcheck-11.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4fa443bcc28c45b75d058f81e227bd0b2e54899b113964c1ed11c4b700591e9a", size = 4082591, upload-time = "2026-10-20T22:03:11.584Z" }, + { url = "https://files.pythonhosted.org/packages/c3/75/5a04ef98ff80db384cc3609129eed10fed488e7e573b84960336cdc5501b/cloudcheck-11.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cc2b72c453c696977e8f9f446f3a365e09cf18f3b15bd480658f78e069a6733", size = 3997475, upload-time = "2026-10-20T22:03:33.597Z" }, + { url = "https://files.pythonhosted.org/packages/e5/61/6040a5f034131765b30d642a8bc8f237175a814f67b4b4112f7e0328ec2e/cloudcheck-11.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:19d7d67814df33af93faf3b15d3786d6df98e3dbbdbc79e617030abb644360a6", size = 4628964, upload-time = "2026-10-20T22:04:01.791Z" }, + { url = "https://files.pythonhosted.org/packages/36/84/47fc06bca3af455ba6cd4bc020770d059fbdd94a59fc549dda72821a88a9/cloudcheck-11.2.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2d3a7f4903920d33eb0611b5c438c738e95389293e5a924d0717f1d78f9601e9", size = 3915312, upload-time = "2026-10-20T22:04:11.711Z" }, + { url = "https://files.pythonhosted.org/packages/97/c8/021c9add33a54627f7bc2a61a06f81932eed23ee97f7eaa34db25bb8f132/cloudcheck-11.2.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:58938c0c4d2d5c47fe8e04515f8d92c1e3c5f816a5b56eb93ed114b22de693be", size = 4261493, upload-time = "2026-10-20T22:04:21.686Z" }, + { url = "https://files.pythonhosted.org/packages/04/41/e6c229acad43d0e078dd3f19f596ac48fa81e8a61e893ff007017bab72c3/cloudcheck-11.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d1d7ee7d4860cd2f117f99675d1d5e246d0dcc2fa2752f4fa6dc549e134d4257", size = 4287106, upload-time = "2026-10-20T22:04:31.263Z" }, + { url = "https://files.pythonhosted.org/packages/c3/6a/59d99cef1bf7303302afd6f7cc3b0ac2808383c8da593020cbc253f9297b/cloudcheck-11.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:2ea4a675ab368036d6ee437ae52f5994f0d70728bf72f05d2c874c466fa2c556", size = 1422894, upload-time = "2026-10-20T22:04:41.478Z" }, + { url = "https://files.pythonhosted.org/packages/00/05/87a4b484fe2c7ef6789e4780ce9572554b172510759b2dc872ade44af39f/cloudcheck-11.2.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:b76da03118f441009e94683ea74cec82a1a3e1790b5abbc252b53d1fa1b9e2f9", size = 1601481, upload-time = "2026-10-20T22:03:56.523Z" }, + { url = "https://files.pythonhosted.org/packages/3a/17/f01a4646caa0848d08ac796e58918acd525ef46f3f0a7e8e5511d56ecac8/cloudcheck-11.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4370f8c250030942f6fc9ff1f128e88d457e2791c92d5ce6239992d450045495", size = 1582655, upload-time = "2026-10-20T22:03:48.645Z" }, + { url = "https://files.pythonhosted.org/packages/56/01/e2565b1875f85982ad958f9c281693b4b971d0fdb35d72daa367f0ae96a6/cloudcheck-11.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a514139cf3641d8e9be749a4f6bc79219e50e23fdd16346f77ad5a12bac35aff", size = 4228396, upload-time = "2026-10-20T22:02:48.859Z" }, + { url = "https://files.pythonhosted.org/packages/4a/40/73dc51ab553bc50946bf12e65b5428fce3003c756514792581977209906c/cloudcheck-11.2.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b7e85fa6105748bd91c0fb82b8e46f65ccb733fd44e274819016560bfd5a4c26", size = 3587029, upload-time = "2026-10-20T22:03:01.268Z" }, + { url = "https://files.pythonhosted.org/packages/a4/99/7a390e325f3cb310f9e842cafb1210f20d64434f8eab2e536d51249fc286/cloudcheck-11.2.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7b2d043f1c20f3fb42fa45807a0718bbe3051dbc23fbe2f2065cf0dac0268a3", size = 4167966, upload-time = "2026-10-20T22:03:22.317Z" }, + { url = "https://files.pythonhosted.org/packages/52/b0/268b8897747e8056d8f4f5bf145dd923a0c1ec6dc1f787a1e597f8cfb12e/cloudcheck-11.2.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6137f1f1167b84aefedb9cb511ff809ac5a5c2d3bf0a99730555d5e3b91cda9d", size = 4082778, upload-time = "2026-10-20T22:03:13.199Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3f/9232355344bc0ff977b026a1e2840f7f19d2ad9683a2c6b98489d224536b/cloudcheck-11.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:795e885d4ea072695b55844bf1172fca5ee0ddb2a54ea086f8e5aff6dd6b76e8", size = 3997488, upload-time = "2026-10-20T22:03:35.228Z" }, + { url = "https://files.pythonhosted.org/packages/19/1c/c871a962ffbcb3a932bff2dfff017c9da3c3e0dbccea61ccc09f38c866e5/cloudcheck-11.2.0-cp314-cp314-manylinux_2_38_x86_64.whl", hash = "sha256:31b00dc90396f186d6c7f1fa643e042721c95cb8056ca5bb0e077a92f6ed3a8f", size = 3624926, upload-time = "2026-10-20T21:44:47.923Z" }, + { url = "https://files.pythonhosted.org/packages/61/9f/8e0792d54f7e7db1208d75510307ab2218a320281a32d170bdacb72acdb6/cloudcheck-11.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e0dcc6c5543169813f8a65715d01884a651dd340a06f3e8ab240a0f76ac09eb3", size = 4629774, upload-time = "2026-10-20T22:04:03.407Z" }, + { url = "https://files.pythonhosted.org/packages/75/da/077739b36c6686d4b9df7bb52cdb89dbeae5bc700dfd18819763bd4fb57e/cloudcheck-11.2.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:14c5046eee9a3e86ad408d7cc4cab7eab8d999bf6561901daae065d5a88fdb63", size = 3916846, upload-time = "2026-10-20T22:04:13.183Z" }, + { url = "https://files.pythonhosted.org/packages/58/51/01d79d469d42a8feb27c3e3d20468748ef40e2c5f383ded4afcc470cafdf/cloudcheck-11.2.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a2e9333470b431c608a5cfcf78e9fbf1e3021fabcf42f40b3dfe751a65c1757c", size = 4261933, upload-time = "2026-10-20T22:04:23.423Z" }, + { url = "https://files.pythonhosted.org/packages/c6/86/19fcc02bac1ad74a03ca3c3f480532232a30f6133870f5243e6379a419ff/cloudcheck-11.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:09a3b46cddfeca6764a907d3e89ae8b664e66158afc63579bc95e708e805474b", size = 4288135, upload-time = "2026-10-20T22:04:32.803Z" }, + { url = "https://files.pythonhosted.org/packages/ea/58/5afb78a1a141863f45c9d7c80963e32496b79b13470dd90a35976e25787c/cloudcheck-11.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:a18b0a11b7d2f8074b1d6d1d789212f2706b25cc7017ededcab91c792042c576", size = 1422824, upload-time = "2026-10-20T22:04:43.075Z" }, + { url = "https://files.pythonhosted.org/packages/87/92/d444bdc4ea089bbcb5858f9def1e53f263e2fe0a8d4b819e50ff6b044719/cloudcheck-11.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3282d046d29d59619c3a8d5a56dd9bd7b84d4b28f22464e53b4bd76a7e95120c", size = 4226009, upload-time = "2026-10-20T22:02:51.052Z" }, + { url = "https://files.pythonhosted.org/packages/51/d6/923d272ceb898cca51ade85eb0ad4622f2a34aa3416952c360fc271e75f7/cloudcheck-11.2.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3b09aca7cb8c7f477d15243bc3ca4041b6f56d43faa1964c6497b4408bff762d", size = 3579868, upload-time = "2026-10-20T22:03:02.963Z" }, + { url = "https://files.pythonhosted.org/packages/02/d2/53849d7dc64ec5b37d385e727441355e9ac0999d7cb630ccfd110c59b3dc/cloudcheck-11.2.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2acb9c4679c2a820b9f502f08880984bd01410edaa198c9c87bc0ffaf8af24ad", size = 4160237, upload-time = "2026-10-20T22:03:23.937Z" }, + { url = "https://files.pythonhosted.org/packages/76/73/5fde6cd72c02c9ae638d4d03b26d2b6f0a183518855f8e70dd0248f7b04b/cloudcheck-11.2.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e68b87edca9d168a20144a808ff4777c228a4fe88d990e516a697fb39e1f29e7", size = 4082295, upload-time = "2026-10-20T22:03:14.767Z" }, + { url = "https://files.pythonhosted.org/packages/37/fe/73f599b3099692dab9dcafd5e6d7f6b050762f0a0618e50293e58d6af66c/cloudcheck-11.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab3d58824b6a03f558e40d6c344efa414892360ee979eeca66d1dd199bd8a1a5", size = 3999207, upload-time = "2026-10-20T22:03:36.951Z" }, + { url = "https://files.pythonhosted.org/packages/12/ec/f6e827575797273021af215380871b670b2254195aea9f95780c8dd284a6/cloudcheck-11.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a2abe71ebaac4e09a10b4594f51d39195585b43a4f848c058f1fd25da8e769fe", size = 4628543, upload-time = "2026-10-20T22:04:05.179Z" }, + { url = "https://files.pythonhosted.org/packages/7b/a9/5a52b31e6ff4be2e8e4263ba8f28b0181a301b740bf89176cd7dfd8a6820/cloudcheck-11.2.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:c22f3e53ee4360c537cbe49e0f6fe170fad4c86c9bee1f7563a4a687ceb51c11", size = 3910329, upload-time = "2026-10-20T22:04:15.064Z" }, + { url = "https://files.pythonhosted.org/packages/1b/33/e17471996dd3a1317cf5cae509af8f928da7fdcfce5dfcf424ee7c80d492/cloudcheck-11.2.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf6a4bddd0732186d93838eb743d70f633cd82d23a4c93180ecf4a5b1f1e5f74", size = 4254296, upload-time = "2026-10-20T22:04:24.943Z" }, + { url = "https://files.pythonhosted.org/packages/f8/09/78bc8ad0c0f0b9c68288b018143217a8827ff34b14c311d45b508903712f/cloudcheck-11.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3d7f32b834e357820a43a7a5ca0059aab5b89ebf5b985a195a4227a77604def7", size = 4289111, upload-time = "2026-10-20T22:04:34.593Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1e/221714844b528c8434e1ac3de2e2b3535d6439402966614c09a3c5d9ad5b/cloudcheck-11.2.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:13678bdca0bf18a8d2ab26464e06498c7dfc7b8fcb50d5b097d085b217f3d2c4", size = 1582457, upload-time = "2026-10-20T22:03:50.363Z" }, + { url = "https://files.pythonhosted.org/packages/a9/15/3453dfc0087c999a3fe6df5a1a9fb9819373ed4b99508f294be6a5b16bbb/cloudcheck-11.2.0-cp315-cp315-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf94548075a8ae837c2a3ad33b391c9d4bf842c3e39380803cef1ad005f68081", size = 4169348, upload-time = "2026-10-20T22:03:25.632Z" }, + { url = "https://files.pythonhosted.org/packages/97/d9/69e126d83883596841816b26093714fbdb1caf6398b1baaae091de0d6b6c/cloudcheck-11.2.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9c3af0f162d70f18749105e86eb71406a8cd7c4ac0b2b784370ff378dcf0069", size = 3997555, upload-time = "2026-10-20T22:03:38.418Z" }, + { url = "https://files.pythonhosted.org/packages/67/a9/fdbcc45f03a4d6ec8f4c592aa64e67f6adea33dfb61877531e8edb80d3b0/cloudcheck-11.2.0-cp315-cp315-win32.whl", hash = "sha256:c6d361dcbf540d32c211c9a7b900b31385abed4e50b6e7147be6c4e572fb24ac", size = 1326083, upload-time = "2026-10-20T22:04:46.007Z" }, + { url = "https://files.pythonhosted.org/packages/b1/87/9b9039fdbd774b43a1537057385480dc486cc836b8070293e19d185784a7/cloudcheck-11.2.0-cp315-cp315-win_amd64.whl", hash = "sha256:2660a7730f7b79d3a6e2f3def102d0b63546cd2d46fc44b2bc58dda366c91fb2", size = 1423006, upload-time = "2026-10-20T22:04:44.364Z" }, + { url = "https://files.pythonhosted.org/packages/36/04/4d6e3b5d286105a230b9bb5de136aa00a2586762415e662011f2c8ecc4b2/cloudcheck-11.2.0-cp315-cp315t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f04809725e2cf3e3b47c6550132f55065831f0c8c1568d3d1b4e2a9dec375687", size = 4161023, upload-time = "2026-10-20T22:03:27.313Z" }, + { url = "https://files.pythonhosted.org/packages/53/1c/96d6e51e7e11a9d8ca1637ec23533412df02d4ddf330b0f353bb402c5847/cloudcheck-11.2.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c336fa395b3f3610de38ae43f7912ec743ec82288881f4cf7c7d4cfd95e34d6a", size = 3998418, upload-time = "2026-10-20T22:03:39.875Z" }, + { url = "https://files.pythonhosted.org/packages/bc/b2/88391dc949d7fdd9c405bc7c79e9e83752ef592ff74dfefff1e2ce87e849/cloudcheck-11.2.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d986a24ba563ef44a8c7e2f49a09c4e9692ca5e278d14468037b17dfcf032796", size = 4228705, upload-time = "2026-10-20T22:02:52.999Z" }, + { url = "https://files.pythonhosted.org/packages/17/6f/4cfc9fb7360eb4457a2fe39e058adfdc2ae84ae0ecbc6ba550c9246ac6f2/cloudcheck-11.2.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:583880be734f2fcbc1ef55f9e1a05355427ee53a99390861746e008eddfb6153", size = 3589196, upload-time = "2026-10-20T22:03:05.321Z" }, + { url = "https://files.pythonhosted.org/packages/48/47/bdde318e5971337c328f30c50597fb2c79fba8525b752c5944df0e31b32f/cloudcheck-11.2.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:158d516d39c94ab3954b085db74b39e176cad9d13f0349f46a079d3125d52171", size = 4170436, upload-time = "2026-10-20T22:03:28.886Z" }, + { url = "https://files.pythonhosted.org/packages/ca/78/ccd48b4816dfc29b1aa435db25e7363ab3d55e90784403f97404631e2a9b/cloudcheck-11.2.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:096185066a3a0fc90991e876bb9f87257de5a5bb29df351fafadb9ed3935cf64", size = 4087651, upload-time = "2026-10-20T22:03:16.325Z" }, + { url = "https://files.pythonhosted.org/packages/ca/1e/58016517e7ed378e0d1be4cd6227af30b3571521a587fc7c2de53db06821/cloudcheck-11.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1776d80cc214ad138c8dc6b1059fffb46296b969ba0baa70723f8f1e896ceb96", size = 4005148, upload-time = "2026-10-20T22:03:41.317Z" }, + { url = "https://files.pythonhosted.org/packages/96/5e/8d77dbb07437468b2ed16ee745e01898bb7cf666e85cd74bbe04086adf6d/cloudcheck-11.2.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:14e3094b2288ece75465566cf690902f659760454b4271a63c5b58a5f4fad165", size = 4632217, upload-time = "2026-10-20T22:04:06.981Z" }, + { url = "https://files.pythonhosted.org/packages/62/a9/0310e4e304196e63536b7575d9008493efa4a5dbc35c8ed4a568f8b58c6e/cloudcheck-11.2.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:73706117b5fee402e3a9a69c639ee6e3d1718b18b0169c6ac8f8037df7c57c21", size = 3921186, upload-time = "2026-10-20T22:04:16.997Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4f/cae603209067b0e4ae3bf7d0ba4104a4dadd2892869f2b59ee97c3fb2d5c/cloudcheck-11.2.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1db5379cdee879aba236bc8d7ef806f9a5ec9ad014c031e64acdfa7fd89e19f7", size = 4264891, upload-time = "2026-10-20T22:04:26.417Z" }, + { url = "https://files.pythonhosted.org/packages/ea/54/9800c59c5d8f3895ad8ffee439f7fd1f585f1e6e7b158c863a5c315c7742/cloudcheck-11.2.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:16b70fa359d3467a62408ddf54db567a24add3b7658428fbddda250aeff7aec6", size = 4295494, upload-time = "2026-10-20T22:04:36.408Z" }, ] [[package]] From dcfc5e4b04fd48a95527924a9b3165a3a2f5ad37 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Wed, 21 Oct 2026 09:52:58 -0400 Subject: [PATCH 23/28] Bump blasthttp to 0.10.1 --- pyproject.toml | 2 +- uv.lock | 100 +++++++++++++++++++++++++++---------------------- 2 files changed, 56 insertions(+), 46 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 4dc5cc60cb..14b1e31843 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,7 +48,7 @@ dependencies = [ "ansible-core>=2.17,<3", "tldextract>=5.3.0,<6", "cloudcheck>=11.2.0,<12", - "blasthttp>=0.10.0,<0.11", + "blasthttp>=0.10.1,<0.11", "blastdns>=1.9.0,<2", "zstandard>=0.22,<1", "packaging>=23.0", diff --git a/uv.lock b/uv.lock index 232196116d..076dcefcdc 100644 --- a/uv.lock +++ b/uv.lock @@ -239,7 +239,7 @@ requires-dist = [ { name = "asndb", specifier = ">=1.1.0" }, { name = "beautifulsoup4", specifier = ">=4.12.2,<5" }, { name = "blastdns", specifier = ">=1.9.0,<2" }, - { name = "blasthttp", specifier = ">=0.10.0,<0.11" }, + { name = "blasthttp", specifier = ">=0.10.1,<0.11" }, { name = "cachetools", specifier = ">=5.3.2,<8.0.0" }, { name = "cloudcheck", specifier = ">=11.2.0,<12" }, { name = "deepdiff", specifier = ">=8.0.0,<10" }, @@ -414,50 +414,60 @@ wheels = [ [[package]] name = "blasthttp" -version = "0.10.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/ed/69b881bd12b81db517d0b0483a89827a656165c854bed80dc6a35fb9d3f7/blasthttp-0.10.0.tar.gz", hash = "sha256:5034eac464c5306695f54a43468eb93aaa9abd366ae142320b72b9b7e7bd5bdb", size = 197871, upload-time = "2026-08-21T01:13:33.23Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f0/e8/814691f977367025a05dde70bca48350d19d036842c6d65b5dd4b53b2822/blasthttp-0.10.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:3c8ef6fbc65ae4244cdaf486d0f8db8da038b295f059c6b3d46a81e02b99f55c", size = 5177417, upload-time = "2026-08-21T01:12:02.752Z" }, - { url = "https://files.pythonhosted.org/packages/d1/de/e88eb7bdbb124e66c946059995511d99e00f8124ec97ec910353b6213b70/blasthttp-0.10.0-cp311-cp311-manylinux_2_28_armv7l.whl", hash = "sha256:c66cc2457bdf3baa2386ef707dfea9f82e59b38aa48813caab68d6aef2a4f731", size = 4451480, upload-time = "2026-08-21T01:12:11.824Z" }, - { url = "https://files.pythonhosted.org/packages/80/a0/f2e41f2621e5887bca46cac8436d70d4b0aa7ef38d73ccff349e448f7012/blasthttp-0.10.0-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:0c3fe2cfcd779bf9c18343802fce7099c4eefd45114c5521d9109f96b021fee1", size = 5111096, upload-time = "2026-08-21T01:12:39.351Z" }, - { url = "https://files.pythonhosted.org/packages/e4/b4/877fab26e0f7990d31a449cecc33cf9c0aaa8a38e34cb67a78943acffeb9/blasthttp-0.10.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:e060ff698d20d6a4c2d6e4a1c7a8810c0fb4d3ba08df64309ca89287668ec3a1", size = 5114165, upload-time = "2026-08-21T01:12:21.802Z" }, - { url = "https://files.pythonhosted.org/packages/bf/82/8a4835a0962d4dedc054458c008fc04171b0320168a4b1204f7fc8d6893a/blasthttp-0.10.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:da782d4f8a698a14d4c3b892100cf67bf81a59b00e7412b335a0206152ccb88f", size = 4699079, upload-time = "2026-08-21T01:12:30.769Z" }, - { url = "https://files.pythonhosted.org/packages/a6/73/e2c254e46420968fd17388c36257b9231a2f7612fef66f8244f2613898ff/blasthttp-0.10.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:6af8a85127b066a0a7bf37fdbb3eaf24ac9df31c633eb22316151cf0d8b79bc5", size = 4773946, upload-time = "2026-08-21T01:12:48.525Z" }, - { url = "https://files.pythonhosted.org/packages/74/0a/3e88451f280ccfc4fc44770fcfab4f27d7d205970dd55f65be58f24ca9b8/blasthttp-0.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2df69bd5b38195c32d13e547c54746bb32b2cb3414a75efc2e62102c96470df8", size = 5467773, upload-time = "2026-08-21T01:12:57.554Z" }, - { url = "https://files.pythonhosted.org/packages/d5/53/193dfad6ff3a28586e98118c05163aab7b98a217b4bb58faa882693ca057/blasthttp-0.10.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:1d7512815689a29ab162bdb1a761a32d5a784792feae7158779cd28a47e1d85f", size = 4751657, upload-time = "2026-08-21T01:13:07.821Z" }, - { url = "https://files.pythonhosted.org/packages/0b/78/5619cb02d91cdb453362d99a5d46b19d49596cceb067063c31d812c4b207/blasthttp-0.10.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:dbc213b573d09bdce3fb59db3be659db4a0203b3097fca147bda7070328b8b70", size = 5242018, upload-time = "2026-08-21T01:13:16.663Z" }, - { url = "https://files.pythonhosted.org/packages/24/df/ff4351ba71298be0ff4ab14b12bdb9de459b5b47d4adc9b61314e74465ed/blasthttp-0.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b36800fbd164534b12607e03137010e2eec9b5b24f41c601ba6d11784af70987", size = 5175705, upload-time = "2026-08-21T01:13:26.134Z" }, - { url = "https://files.pythonhosted.org/packages/be/c2/5dce28e3b54f50683e6dce9c07fabf09d1187fbe65913bd7846583b35ccc/blasthttp-0.10.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:41d5cdbca172170474ff7041b6db53faf608d285a41a886a606abffd6ee291c2", size = 5183670, upload-time = "2026-08-21T01:12:04.665Z" }, - { url = "https://files.pythonhosted.org/packages/ca/89/5b8f47a2a4840a15d888fa44edf596e6e10ad1f0c3f85d21a47580ece937/blasthttp-0.10.0-cp312-cp312-manylinux_2_28_armv7l.whl", hash = "sha256:f23e23b5af5d373c28a7360aa522d38547964657d4e7238e1f541914dc5d252d", size = 4446981, upload-time = "2026-08-21T01:12:14.063Z" }, - { url = "https://files.pythonhosted.org/packages/e9/59/45d42d11158c1128cfbbd438c8f51d86327bc0eb4938fa4e98dfd2f8713b/blasthttp-0.10.0-cp312-cp312-manylinux_2_28_i686.whl", hash = "sha256:b21619250ec3024f6faa1ae3caa9ecfffb8ef5cbb378f86dfa4dfebe622b20d5", size = 5104261, upload-time = "2026-08-21T01:12:41.523Z" }, - { url = "https://files.pythonhosted.org/packages/84/20/12d5341c2d5197bb0fbdd8fa52bd2709c204516112341aed5879a3b629a9/blasthttp-0.10.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:d285dc0bacae184a0b63778c4e970f851afa8e55ee133243c92c0c744566fc8a", size = 5109026, upload-time = "2026-08-21T01:12:23.641Z" }, - { url = "https://files.pythonhosted.org/packages/f4/5a/38254e928da498bbd938758b8c24748e9596919f0c7b1bd705fa57c5066b/blasthttp-0.10.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:194b70d5f69132d8749872df11e8b58f360106a47a5df8c5c8a302e7d9a1c473", size = 4704628, upload-time = "2026-08-21T01:12:32.437Z" }, - { url = "https://files.pythonhosted.org/packages/fb/16/166b41741cd246f78656c78fdeb2b58ffc0ce3959784479ddf6f3c476bbb/blasthttp-0.10.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:fdb4e3b6eadd0d7fae827cc9652d80069b93c56449481b1ddc2643d665d5b370", size = 4774577, upload-time = "2026-08-21T01:12:50.19Z" }, - { url = "https://files.pythonhosted.org/packages/c4/a1/ee39c9f7b0f923ba27fe8b12993f2dca552da51e5e37a3c890cd31fd6214/blasthttp-0.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5cc485c2e3ee3159e3d5ee06b1dc8fa11321403a0251988889a9a7959c6355fd", size = 5472222, upload-time = "2026-08-21T01:12:59.312Z" }, - { url = "https://files.pythonhosted.org/packages/61/a3/4ffa17caf2f74f0039cc08fa898f0710f321b0d41d706ff45f622752d858/blasthttp-0.10.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5abf57b96d2041eca20145a5f6abb930008646d1f757a3bc24172c0788a231da", size = 4747038, upload-time = "2026-08-21T01:13:09.508Z" }, - { url = "https://files.pythonhosted.org/packages/84/c8/ea76e9c7ae571ac80241ba731ea727cbb3c0ab1c6a4110b87b7c3229a61b/blasthttp-0.10.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:197638ebbc4c6473ca9dd6bdfd203c932be61f780b702e268278b173167596ae", size = 5234388, upload-time = "2026-08-21T01:13:18.587Z" }, - { url = "https://files.pythonhosted.org/packages/7c/37/1b3d83bc41f2dd60f232d82dee0b0823b7b3270bd2b63ab35c784a5899c5/blasthttp-0.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dbe784a57466a3b1cbeb94e638f17d5e08883aef366d5da10d82066c27ed02e6", size = 5175493, upload-time = "2026-08-21T01:13:27.846Z" }, - { url = "https://files.pythonhosted.org/packages/84/aa/1d543053d7e294e6ca6c23f0890d6dfc07a39d1235de546533882d193f1d/blasthttp-0.10.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:71d217144bbdcc4571cc0203669666a7501af5fc786f42166e59ae3b8731cfcb", size = 5182057, upload-time = "2026-08-21T01:12:06.522Z" }, - { url = "https://files.pythonhosted.org/packages/d3/01/e4237f45c250659a06fdf9a3984b536127a783bf28275349ef484e659295/blasthttp-0.10.0-cp313-cp313-manylinux_2_28_armv7l.whl", hash = "sha256:b9886139baa78d9e52229fab929e70b6da0b59b26edab28f6c3d161afec12dae", size = 4446646, upload-time = "2026-08-21T01:12:15.735Z" }, - { url = "https://files.pythonhosted.org/packages/97/74/5b84758be4cc911556e5743190e32a1d28550ff8d2dbc0eefcee2aa0c2c8/blasthttp-0.10.0-cp313-cp313-manylinux_2_28_i686.whl", hash = "sha256:39f10851915c68ab18c90a92f1fee9f7127371a23782596a1ef13be8b8c466b3", size = 5106500, upload-time = "2026-08-21T01:12:43.344Z" }, - { url = "https://files.pythonhosted.org/packages/c4/32/64a92d81c58c6aaa0a97c68dab2cd4f2c9ec255d8b5047ae3a3cd91c9137/blasthttp-0.10.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:f3ed768bba7343e6f57e733196f666448c87842aa08ff265a17226cf9cfb5133", size = 5112408, upload-time = "2026-08-21T01:12:25.27Z" }, - { url = "https://files.pythonhosted.org/packages/c0/6a/fde097ec18bde504ba3f154f7688fbe3a5ca84e990e78b1a240733b2b87d/blasthttp-0.10.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:88a829b70d27ad420dffd57ba7f5f8461a17db7ac1c65837f1bfb51e88266fd5", size = 4705903, upload-time = "2026-08-21T01:12:34.104Z" }, - { url = "https://files.pythonhosted.org/packages/7b/76/a46bb6ca8e1f5c86a53e626c114d52482be8e14e98685699850d305f1b49/blasthttp-0.10.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:48b05db28beaf8664e66269917a0a2bfa344ccb6f57b1aa1df63424323b6b02c", size = 4775015, upload-time = "2026-08-21T01:12:52.092Z" }, - { url = "https://files.pythonhosted.org/packages/cc/f4/57163f1409981735f8de633e9da2976da9d24de581e54eabadc19afb4243/blasthttp-0.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a9031d954fb32365f7198586836c8b6257ddd37d8f9d2a7071709426c6eb29c6", size = 5473056, upload-time = "2026-08-21T01:13:01.688Z" }, - { url = "https://files.pythonhosted.org/packages/f4/79/361350a2a64577ddc0346d87a0b35164619310a1c89c294f535cbd1ef05d/blasthttp-0.10.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:84bde21e5344080a82eabea7ba92402ff82acb34f6f29beee0a6d5f6500589bf", size = 4746573, upload-time = "2026-08-21T01:13:11.268Z" }, - { url = "https://files.pythonhosted.org/packages/0d/8e/b3087e0575bd23f5beb68bab38038fafc0307afb20e19df6abf8288e4318/blasthttp-0.10.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d0168734e0daf8395edccedb217380910cee08e4e7beee1b22aca9154b93f3ab", size = 5234206, upload-time = "2026-08-21T01:13:20.534Z" }, - { url = "https://files.pythonhosted.org/packages/78/fb/dff9b205660061564bfb39a4324e48a9a68b049c6110825b1e9c6434ed2e/blasthttp-0.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:02ab3b76384b91080d0c81f5992cb07ae4219373d3439e4e2f57057c3db86092", size = 5176587, upload-time = "2026-08-21T01:13:29.688Z" }, - { url = "https://files.pythonhosted.org/packages/40/0d/7f8d2e91be8c4757135a7b31f1f227e754d0056359fa9b493dd54d0b2f24/blasthttp-0.10.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:e001b3a3d26287cfac9b313fdcc7847f38baf34c36e0bb8dff40e51d26475731", size = 5182433, upload-time = "2026-08-21T01:12:08.352Z" }, - { url = "https://files.pythonhosted.org/packages/19/a4/ca849bfb5e58ac512d31d1f0ad8a162b1fcfde176d9e071f3d7adb77d4f9/blasthttp-0.10.0-cp314-cp314-manylinux_2_28_armv7l.whl", hash = "sha256:8c1d016dd94b14fcdbb1f349b1eb0d69dda57b8d668f16ff82ea96dff774bfc8", size = 4442455, upload-time = "2026-08-21T01:12:17.509Z" }, - { url = "https://files.pythonhosted.org/packages/0d/10/ccf917740cffe7b0bad36d5d5ed57e905cb334cd5618b26cba2b13363052/blasthttp-0.10.0-cp314-cp314-manylinux_2_28_i686.whl", hash = "sha256:4f1169e4cc013e5a00e7150ce73105ef34beba5875ac2038b39ab5ca29a6c2ca", size = 5106391, upload-time = "2026-08-21T01:12:45.175Z" }, - { url = "https://files.pythonhosted.org/packages/a2/74/075f5c1e42e3b407ef3380b876aecb020e8bba1a0d5197d096fa1e16b9f7/blasthttp-0.10.0-cp314-cp314-manylinux_2_28_ppc64le.whl", hash = "sha256:f14d55f45d9dadb256c29a1dcab2e810319e1ffab7250ff0572770916d684ce3", size = 5105862, upload-time = "2026-08-21T01:12:27.26Z" }, - { url = "https://files.pythonhosted.org/packages/9b/4f/941b71252cb653563e3b1c24d00607f90e76b8d0f959fedbbd96552902cb/blasthttp-0.10.0-cp314-cp314-manylinux_2_28_s390x.whl", hash = "sha256:4c8aa5750e3b77c2027555bc4780b3a939b5dc4ac801468f1463e1779f25c969", size = 4702116, upload-time = "2026-08-21T01:12:35.793Z" }, - { url = "https://files.pythonhosted.org/packages/bc/1e/2a90ac2a677cb1857e609b3a0c38fd8a7fba75f75f6e2d3628911ad3cd94/blasthttp-0.10.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:d258769eb7d13436e1e11f079da7218d7596eb9cd2c63ab871533685b9000aa4", size = 4771943, upload-time = "2026-08-21T01:12:53.981Z" }, - { url = "https://files.pythonhosted.org/packages/6c/4b/e86d8fbbdc8a2a222d3f293db0c864746510b87708f2092f8bc97b1dbfc1/blasthttp-0.10.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c63b26e9973125840210e1f15e42a639c5b24cc8c6bce9a742829ff18d2f5f01", size = 5471373, upload-time = "2026-08-21T01:13:03.736Z" }, - { url = "https://files.pythonhosted.org/packages/19/be/d7fb36ae804d9a0aa9cb71c7f8ddfcf6feda374da6ba7a81d2b54c81d4f4/blasthttp-0.10.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d042e4647e916084387be24e13aaaec2cd9147cad5cb2808f433b36697c1afb5", size = 4744786, upload-time = "2026-08-21T01:13:12.985Z" }, - { url = "https://files.pythonhosted.org/packages/3c/5e/d795201debaa9f34d5eb7bf2ca2e300d1714ea8b4f5e88c1f4488b0d120e/blasthttp-0.10.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c2618ab698285f831dbb0828b12945bfb9edc8e5314c9563f9ef63dd2a765061", size = 5235909, upload-time = "2026-08-21T01:13:22.208Z" }, - { url = "https://files.pythonhosted.org/packages/92/3c/f9a0391ff3d0df1d4c2d51aa4464f333c6cfd4ac82af71fba6b6f0184689/blasthttp-0.10.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4d4b777d5b20a36ff619525f4442a3851d7cc2a64917a04fe11d9df736fa55f1", size = 5175841, upload-time = "2026-08-21T01:13:31.755Z" }, +version = "0.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/c2/082a4f3ab60863d8d8b345e8ab28d93b206d9fc3a1482220ae98c928ef92/blasthttp-0.10.1.tar.gz", hash = "sha256:480f2d128f59779ea569e8aeddee65c3eb613fb83649682896a27bce74d2bb39", size = 197387, upload-time = "2026-10-21T13:22:09.24Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/2c/a9384029d47f7527e2ae8e5b928455de73395064956ae21666a5e5f7dd8f/blasthttp-0.10.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:d62695de1f1d462568bc8b2490671690fbd919011a2ebb2b71e4116b91cb5edc", size = 5177987, upload-time = "2026-10-21T13:20:42.526Z" }, + { url = "https://files.pythonhosted.org/packages/e3/8e/0c3c0fd5fea8a2c6875f3fa290c6a75209d3e41eba411e9bc8d48d0e209c/blasthttp-0.10.1-cp311-cp311-manylinux_2_28_armv7l.whl", hash = "sha256:5fad1545b2894532be6a571d3af47267bd45da0b163f7d98b105778e3635e5dc", size = 4432780, upload-time = "2026-10-21T13:20:51.857Z" }, + { url = "https://files.pythonhosted.org/packages/d6/d6/a5c5087702a1a27ed212acab9994e3dd651f594e7eac3465468b6d3f0f58/blasthttp-0.10.1-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:64a497edec714a8f9d48bfc37c99bfb324512a21643e162a96ea247a22808dd6", size = 5108256, upload-time = "2026-10-21T13:21:18.121Z" }, + { url = "https://files.pythonhosted.org/packages/36/86/617a318ef9c3ff8e1b9e9e72f5cb380c9c1b319f19b0fb0b1251d49b690d/blasthttp-0.10.1-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:c5b5ba5a1e0236d058c935e486d1077ea5e9eab9c051246bfeb4d3d7b593b4f4", size = 5110908, upload-time = "2026-10-21T13:21:00.353Z" }, + { url = "https://files.pythonhosted.org/packages/ae/92/f2df93521b67abce5d016a190f48a6e62367cf5d4762f14a1a83a3b1be86/blasthttp-0.10.1-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:95f4a807f5029c4603aa723cf81349276f9d53d4a46fe7339404c7a941935737", size = 4703012, upload-time = "2026-10-21T13:21:09.505Z" }, + { url = "https://files.pythonhosted.org/packages/f1/be/102ec1ddfc8a102eb2cf41bccc81b95ba570c018fa2cf1ce19d02fb6272e/blasthttp-0.10.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:532243148d9626f16168b2185d772c760f45eec6ce07abced7e2b764839324b0", size = 4768593, upload-time = "2026-10-21T13:21:27.175Z" }, + { url = "https://files.pythonhosted.org/packages/c5/6c/5fdc6b8a4c2faf184ee7238e89b192a157f13a1ffa5511e6bd5f8a9857e5/blasthttp-0.10.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:082c2c7cc1270c01e739d26ac1f7422d3c3c47bbccf25db1b47d72458d570e90", size = 5466478, upload-time = "2026-10-21T13:21:35.718Z" }, + { url = "https://files.pythonhosted.org/packages/9c/7b/4a7936396a1f291a8f9a15dded8eac29af932390e423a8752b4a7eacede8/blasthttp-0.10.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:40c12a9c60c2a5b4bda0b2b1fedcb4c38fe58273c8820c9e633c8a3d651f4d65", size = 4736015, upload-time = "2026-10-21T13:21:44.104Z" }, + { url = "https://files.pythonhosted.org/packages/22/41/bbf821bb435606527365e140f90c47446501040deb97f6c5049b5966a2fb/blasthttp-0.10.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c22d5a631699d3c4244c7a190a93cb5e8b848f096068b71e00b85bc7b0d801fc", size = 5241126, upload-time = "2026-10-21T13:21:53.139Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1b/a6648272b99e82f4036c885941ac8e57aa7d6ca73c423170991c89ab54cf/blasthttp-0.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ff1d16cdf26213b7dae9338830b91a5b738c061eb2168fa0176fd645d6bde974", size = 5172743, upload-time = "2026-10-21T13:22:02.161Z" }, + { url = "https://files.pythonhosted.org/packages/b0/82/d166335c7bdcb62c937e4653dff22562901fd4fb829b5f4c348bb32fd9ab/blasthttp-0.10.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:7655066d0a68a1c6b5655088ea2eead485404a635668fd4f7b18c22fec86ef6a", size = 5169886, upload-time = "2026-10-21T13:20:44.188Z" }, + { url = "https://files.pythonhosted.org/packages/0f/01/08d1a4a112e5e3135d891503c48a79d923abd6f282081f28ad6a2ab1ddc0/blasthttp-0.10.1-cp312-cp312-manylinux_2_28_armv7l.whl", hash = "sha256:ead925750ca6078e5bfeece23338156b65eecbbdadeae6ec233e66160f566ef9", size = 4431017, upload-time = "2026-10-21T13:20:53.155Z" }, + { url = "https://files.pythonhosted.org/packages/f4/42/6ea6e593db48ba7e52f7660b31a98e021044c1d46544092381afbf7af7fa/blasthttp-0.10.1-cp312-cp312-manylinux_2_28_i686.whl", hash = "sha256:26b60c08e5c1d7262aac0d8d5198efb4f480b429eab3f5e36e48ca2832e03e16", size = 5095852, upload-time = "2026-10-21T13:21:19.527Z" }, + { url = "https://files.pythonhosted.org/packages/1c/41/fcb54790dfbe3f8d9b7f91c64f3e1d9ce7d8127204f0ba256b8c5c0c3954/blasthttp-0.10.1-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:ee4c5c07c1aaecbf16385a9213dcf7b117e3127c0227c4b233a32763a97ba5ba", size = 5100413, upload-time = "2026-10-21T13:21:01.743Z" }, + { url = "https://files.pythonhosted.org/packages/43/32/28f4c090ce1ed5211d67a6e9319514efa7c848d4529bdd4beaedea0f3bf3/blasthttp-0.10.1-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5905aa8ada6b7383a872e1d07e5860c39d0f70b982bc18a7edce731c5eb7f1c8", size = 4695161, upload-time = "2026-10-21T13:21:11.022Z" }, + { url = "https://files.pythonhosted.org/packages/e9/f2/0a8653ea963b5577b75dd2d9b7c83ab4318006c30749f127b46c6701313b/blasthttp-0.10.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:0c57fb5ab391fdee5bd215d277811682b9f8b6ae79e47355e083b7b2c06a26ef", size = 4762949, upload-time = "2026-10-21T13:21:28.593Z" }, + { url = "https://files.pythonhosted.org/packages/e6/04/923992f1f76fd26c1924cfc096c8c8577f7b945c598f121d43fba3c6e103/blasthttp-0.10.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0d9eb70f7e75807f081233286998428b9d5468119103fe2d59636b41f520e37c", size = 5456417, upload-time = "2026-10-21T13:21:37.055Z" }, + { url = "https://files.pythonhosted.org/packages/31/90/2ffeb75610a9df262d63d7f3e6edf78dd545f6a44a40dad327262073a66b/blasthttp-0.10.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5446e4d57cbddc235bf2f6bf07a0d51eb514ba24759bdd5ef0c1b3005545143e", size = 4734565, upload-time = "2026-10-21T13:21:45.812Z" }, + { url = "https://files.pythonhosted.org/packages/ab/94/ded3f8ea5505e62200f68c5ef65328f440e448c5b1ca1021445ec501cb12/blasthttp-0.10.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b69ba0720452ddd97e887b520016cc4f996716701dec4b60271b94be4bac0e5b", size = 5221587, upload-time = "2026-10-21T13:21:54.582Z" }, + { url = "https://files.pythonhosted.org/packages/56/b6/d396284aecf4fac53f058e544f12ff7c478916b06afa6fa79a56380a68fd/blasthttp-0.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:160ae19ade6813d41fe82fc8aa156f4edfde8f5a71fc16bb3b16773e89714073", size = 5165638, upload-time = "2026-10-21T13:22:03.57Z" }, + { url = "https://files.pythonhosted.org/packages/2a/eb/cab37db4c53e7db05cddb2016dff7ff6ccd463e6ec5d1fbe0f3296bb808a/blasthttp-0.10.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:abb9347c6f88a01eb63c66a1aa4b0f6410a30daacf5269111c32d2fc6333014b", size = 5170835, upload-time = "2026-10-21T13:20:45.754Z" }, + { url = "https://files.pythonhosted.org/packages/e4/cd/0d68fe8b674f06e2500c9598ca7fcf24c0f195d73fb4ad74395422b21957/blasthttp-0.10.1-cp313-cp313-manylinux_2_28_armv7l.whl", hash = "sha256:ddc7296c42c78c1ce15ecacb1e4e16390210f5856724e63c5e1dcb93509e4304", size = 4427423, upload-time = "2026-10-21T13:20:54.489Z" }, + { url = "https://files.pythonhosted.org/packages/45/1d/77aadde0244799d8d78e23176438e968a5620ccf8e5743ff88ad2ff7b6dd/blasthttp-0.10.1-cp313-cp313-manylinux_2_28_i686.whl", hash = "sha256:2fc72c3d2ac0f472a9af21b9b7004e97b6da5fa21f935e6b88667419fa2fd028", size = 5096767, upload-time = "2026-10-21T13:21:21.127Z" }, + { url = "https://files.pythonhosted.org/packages/60/87/b04c332b8cc78ad0ed276bdb202af145d7791ac59419b9fed2e5c1289563/blasthttp-0.10.1-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:a76109d7d9fc7ad0605386ccf0cf9d3c1be9d426132d3397f5eb5429c919b278", size = 5103763, upload-time = "2026-10-21T13:21:03.196Z" }, + { url = "https://files.pythonhosted.org/packages/a0/5d/a8d1da056351140c4234657c93d18bc02012b3bc6027d1dd1e56988ec26d/blasthttp-0.10.1-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:552b609ab9a88cf03f6c128bdfa7717f05328c8d1f75a17dcbe7b24c35edbc1e", size = 4703850, upload-time = "2026-10-21T13:21:12.474Z" }, + { url = "https://files.pythonhosted.org/packages/d9/30/869cf7f6738840ef22266a5109e39e1f01466e6646ce23c1d07860763644/blasthttp-0.10.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6eb2d7bf201c3ef10db69e247999fbadfdee8740a978198a790bdabb5f8e3620", size = 4771548, upload-time = "2026-10-21T13:21:29.887Z" }, + { url = "https://files.pythonhosted.org/packages/6b/e5/f0679903e507521b9fc3efad55673ee494b49fd54694c15c9b6f13c505ab/blasthttp-0.10.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac4b11855e171c9da707a078e7474dcf7220ea7c942c42ba91c4411d6589e106", size = 5457487, upload-time = "2026-10-21T13:21:38.626Z" }, + { url = "https://files.pythonhosted.org/packages/43/eb/9a67d94d70d6ad37faa1b59841075edcaf58894aa2bd89adb4e394b1807a/blasthttp-0.10.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:1051d7be8071f5629a4a063e0f1608031b42a6647ab5f3385bd24a6e517b34bc", size = 4729121, upload-time = "2026-10-21T13:21:47.368Z" }, + { url = "https://files.pythonhosted.org/packages/8b/30/eee14afc6f39483ba6b22599f6703c88cd404836e916055c122f06daaf2e/blasthttp-0.10.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:dfbefdc8fa1c39ebe2d84e6a716e5587aae6a440af154b262935dcb7d08dc980", size = 5225102, upload-time = "2026-10-21T13:21:55.996Z" }, + { url = "https://files.pythonhosted.org/packages/3c/cd/5d9cf4a1ecb9d8f6423772a4bba68b9e61a91e3467fb4006b61336738521/blasthttp-0.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b57038176bbd8eddadf6f1cd53ed2c8bc8698d843ed4c8bd348b8c8c016c8517", size = 5172971, upload-time = "2026-10-21T13:22:04.984Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d8/77fb46f8010f2d54739593fb108c9f106f1ea0fabf74094a99eb086009c3/blasthttp-0.10.1-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:25c80e4c70286997e82becba838810a79a6df7f8f879b7e1ab05ed1971d55c44", size = 5168250, upload-time = "2026-10-21T13:20:47.609Z" }, + { url = "https://files.pythonhosted.org/packages/1d/64/965a157ef7849319dbad31635fd0e97d5a70becc9183d11227146e2badd4/blasthttp-0.10.1-cp314-cp314-manylinux_2_28_armv7l.whl", hash = "sha256:c996d613328756736e652d1457cc3eb881eee3272885808f6ab058f840d71b33", size = 4428934, upload-time = "2026-10-21T13:20:55.875Z" }, + { url = "https://files.pythonhosted.org/packages/28/8d/9295534a0761647c3d3a4741ce958405ede21ff7b6dccc11ba4569198002/blasthttp-0.10.1-cp314-cp314-manylinux_2_28_i686.whl", hash = "sha256:9b72c862179ed545f80d3e117f7d4d78a46de67b615ae98e32732ba661c244ac", size = 5099859, upload-time = "2026-10-21T13:21:22.606Z" }, + { url = "https://files.pythonhosted.org/packages/05/03/a769784714e6c15e58a0f6a2cce9cc7264583ca4af2ee1f3f54321c0b777/blasthttp-0.10.1-cp314-cp314-manylinux_2_28_ppc64le.whl", hash = "sha256:8f2a99b1ff72cc6de824c0e2670ec6b61a8e62859f262b824af80a757b28566c", size = 5106384, upload-time = "2026-10-21T13:21:05.253Z" }, + { url = "https://files.pythonhosted.org/packages/cf/5d/e0f826b9bb3c7628e56082e1b0580d401b057c02455ecb7fc87d30b66534/blasthttp-0.10.1-cp314-cp314-manylinux_2_28_s390x.whl", hash = "sha256:e3a79da057434cf574d41dcaec1a528a17458dedc0adcb7f9b4c6b79ce272471", size = 4702879, upload-time = "2026-10-21T13:21:13.849Z" }, + { url = "https://files.pythonhosted.org/packages/d1/5f/dbc30ed18af74f33c082ae9744cda12ddbe8f54ebfa982057ef368a64862/blasthttp-0.10.1-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:e815f61aa9778d9f9d81c5440689253ee38db5078d850da5665492f887f0a54c", size = 4772628, upload-time = "2026-10-21T13:21:31.245Z" }, + { url = "https://files.pythonhosted.org/packages/ec/fb/8d2c90a697ee164bcacd8e2e24ba90067520dba342f775799bff552b7c7d/blasthttp-0.10.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:acbdf56544811315880e37ed3c467a0d402161d6307ab70a0aa5de8362363cd7", size = 5458248, upload-time = "2026-10-21T13:21:40.158Z" }, + { url = "https://files.pythonhosted.org/packages/9d/33/beb2f1db4b8993d9e0918381935940c4a9d04089611351c8cee7f4ebfe0d/blasthttp-0.10.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:94fa034d21c2cc5302e6d7d2815fd07448670deb882c566ebf21318e0da99559", size = 4730912, upload-time = "2026-10-21T13:21:48.772Z" }, + { url = "https://files.pythonhosted.org/packages/9a/05/0f9665f1e4826e00f5b5ba8bb72872c79f66dd88e969d5706cd328ffe0c8/blasthttp-0.10.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:f4bf2aebf22148261770e535156f99f35dad7d697c5858a3b0bf3dccf1caefa2", size = 5229645, upload-time = "2026-10-21T13:21:57.721Z" }, + { url = "https://files.pythonhosted.org/packages/59/a9/1c7d4d085416e9ecf0a5dc6b3606ba1095003fb4430341821307d4109771/blasthttp-0.10.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dba11a45a98d9996d0c82143084f968e7cc404b5c2aa00c51258f427654caacd", size = 5175100, upload-time = "2026-10-21T13:22:06.513Z" }, + { url = "https://files.pythonhosted.org/packages/48/f6/2fa1a30879884e8b39ac068b4742fb6c262787f1a19addd67b78acd9f7c9/blasthttp-0.10.1-cp315-cp315-manylinux_2_28_aarch64.whl", hash = "sha256:ea83ad7ed6a611410d31b3181205016bb1da66e9ad9f14af6690327baadd26c3", size = 5170007, upload-time = "2026-10-21T13:20:48.971Z" }, + { url = "https://files.pythonhosted.org/packages/99/75/d6f5c39d75269447ef8d18833023d1870643a50df143740a615921b90fef/blasthttp-0.10.1-cp315-cp315-manylinux_2_28_armv7l.whl", hash = "sha256:5890e68d2a652c8477ce319d00f0114d379602e3e67148eb56f55f820848f61d", size = 4430846, upload-time = "2026-10-21T13:20:57.243Z" }, + { url = "https://files.pythonhosted.org/packages/3f/5d/8057ca7e62636027c6c6bfea9957a69b081eebb0edd56e3c2b6050869770/blasthttp-0.10.1-cp315-cp315-manylinux_2_28_i686.whl", hash = "sha256:b6ac7361de023debd6bb88ded132eef4df42492d5fa2643e7e59d8f985ca0531", size = 5101844, upload-time = "2026-10-21T13:21:24.134Z" }, + { url = "https://files.pythonhosted.org/packages/d6/d8/e23fd44a3950586f65b71e54121fbb34855353a803cc3367ed6395f497b1/blasthttp-0.10.1-cp315-cp315-manylinux_2_28_ppc64le.whl", hash = "sha256:a9784471d31bab68da265cb546f3944b3809092c713030b14dafca0456e8e6ca", size = 5106407, upload-time = "2026-10-21T13:21:06.765Z" }, + { url = "https://files.pythonhosted.org/packages/02/f7/4b1dffbf2aa61626929859a24b6eaffef9b0f3a0bc5ab4bb70cc3b130f67/blasthttp-0.10.1-cp315-cp315-manylinux_2_28_s390x.whl", hash = "sha256:2d3b7740a44d211739a965d96ba7edbc22671a291a2d6ac970534f6a3bab350e", size = 4704504, upload-time = "2026-10-21T13:21:15.189Z" }, + { url = "https://files.pythonhosted.org/packages/4c/8d/c6c6f8dab5673eb586b234cddfbff4df24c2a4dc439e151739ac56a99151/blasthttp-0.10.1-cp315-cp315-manylinux_2_28_x86_64.whl", hash = "sha256:d308f076011b6ae938af4282dbcdc6e98f5b679b4917e997dc174c47d71ce696", size = 4774016, upload-time = "2026-10-21T13:21:32.886Z" }, + { url = "https://files.pythonhosted.org/packages/c6/b2/bb8fa1e95c123ff2a9df10e27cf00aca37e46f11f0907640b8e33e2ded7b/blasthttp-0.10.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:5130e267195441e47069e012993b6777912008defa8767842aa9de89c44904bd", size = 5457543, upload-time = "2026-10-21T13:21:41.479Z" }, + { url = "https://files.pythonhosted.org/packages/a2/b3/385707a9de2b60917f131c260248a6973968947c41082e65b4e2f35352cc/blasthttp-0.10.1-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:a5da13f3cb2b57ed993fcbbdd49cdda0564c10945cab5096329ec483e85bb0dd", size = 4731843, upload-time = "2026-10-21T13:21:50.09Z" }, + { url = "https://files.pythonhosted.org/packages/d5/b7/57efe30c71ba7a841968659a3e4151de9a38079d5f63dabb1340836471dc/blasthttp-0.10.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:11fdd2a6ba46a115b2d95eabb836a73ccaed04e1f083f2c07195a8287fc055b0", size = 5232865, upload-time = "2026-10-21T13:21:59.268Z" }, + { url = "https://files.pythonhosted.org/packages/f1/dd/ce4502ac238ee2524cc0f06df13ce565ac3b8a40ef4d64ed399815aa7c3b/blasthttp-0.10.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:bda21226b8c3b65d3bb319e3b38a09cc02bd35dfa5af63debd407e5404c443a8", size = 5176823, upload-time = "2026-10-21T13:22:07.923Z" }, ] [[package]] From 9c702b943b902e78642cfe1e83f5b09599c0e95e Mon Sep 17 00:00:00 2001 From: liquidsec Date: Wed, 21 Oct 2026 09:55:52 -0400 Subject: [PATCH 24/28] Bump blastdns to 2.0.2 --- pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 80f91be690..8f9f3af0db 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,7 +49,7 @@ dependencies = [ "tldextract>=5.3.0,<6", "cloudcheck>=11.1.0,<12", "blasthttp>=0.10.0,<0.11", - "blastdns>=2.0.1,<2.1", + "blastdns>=2.0.2,<2.1", "zstandard>=0.22,<1", "packaging>=23.0", ] diff --git a/uv.lock b/uv.lock index a7f25da8c2..07738a513e 100644 --- a/uv.lock +++ b/uv.lock @@ -270,7 +270,7 @@ requires-dist = [ { name = "ansible-runner", specifier = ">=2.3.2,<3" }, { name = "asndb", specifier = ">=1.1.0" }, { name = "beautifulsoup4", specifier = ">=4.12.2,<5" }, - { name = "blastdns", specifier = ">=2.0.1,<2.1" }, + { name = "blastdns", specifier = ">=2.0.2,<2.1" }, { name = "blasthttp", specifier = ">=0.10.0,<0.11" }, { name = "cachetools", specifier = ">=5.3.2,<8.0.0" }, { name = "cloudcheck", specifier = ">=11.1.0,<12" }, From 67424f10ee4ff853429707b678687f0334d8a9fc Mon Sep 17 00:00:00 2001 From: liquidsec Date: Wed, 21 Oct 2026 13:47:53 -0400 Subject: [PATCH 25/28] Decouple dnsresolve worker count from dns.threads --- bbot/modules/internal/dnsresolve.py | 5 ++--- bbot/test/test_step_1/test_dns.py | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/bbot/modules/internal/dnsresolve.py b/bbot/modules/internal/dnsresolve.py index 4abf2223a6..1c7f8c4c7a 100644 --- a/bbot/modules/internal/dnsresolve.py +++ b/bbot/modules/internal/dnsresolve.py @@ -20,9 +20,8 @@ class HostModule(BaseModule): _name = "host" _type = "internal" - @property - def module_threads(self): - return self.dns_config.get("threads", 25) + # events resolved concurrently; separate from dns.threads, which caps blastdns queries per resolver + _module_threads = 25 async def setup(self): self.dns_config = self.scan.config.get("dns", {}) diff --git a/bbot/test/test_step_1/test_dns.py b/bbot/test/test_step_1/test_dns.py index 8d8d54d988..04e29f03e4 100644 --- a/bbot/test/test_step_1/test_dns.py +++ b/bbot/test/test_step_1/test_dns.py @@ -1065,6 +1065,20 @@ def __init__(self, resolvers, config): await scan._prep() +@pytest.mark.asyncio +async def test_dnsresolve_module_threads(bbot_scanner): + """dnsresolve's worker count is its own module_threads, not dns.threads.""" + scan = bbot_scanner("evilcorp.com", config={"dns": {"threads": 3}}) + await scan._prep() + assert scan.modules["dnsresolve"].module_threads == 25 + + scan = bbot_scanner( + "evilcorp.com", config={"dns": {"threads": 3}, "modules": {"dnsresolve": {"module_threads": 50}}} + ) + await scan._prep() + assert scan.modules["dnsresolve"].module_threads == 50 + + @pytest.mark.asyncio async def test_dnsresolve_incoming_lanes(bbot_scanner): from bbot.core.helpers.async_helpers import LaneQueue @@ -1141,7 +1155,7 @@ async def handle_event(self, event): "evilcorp.com", "127.0.1.0/24", blacklist=["127.0.0.99"], - config={"dns": {"threads": 1, "wildcard_ignore": []}}, + config={"modules": {"dnsresolve": {"module_threads": 1}}, "dns": {"wildcard_ignore": []}}, ) await scan._prep() await scan.helpers.dns._mock_dns(parent_child_mock_data) From 087d83a90c39ff1b9c2be66bf6dfd042c678337a Mon Sep 17 00:00:00 2001 From: liquidsec Date: Mon, 2 Nov 2026 12:28:38 -0500 Subject: [PATCH 26/28] Remove deepdiff dependency --- bbot/core/helpers/diff.py | 17 +-- bbot/test/test_step_1/test_http_compare.py | 39 +++++++ docs/dev/core_dependencies.md | 1 - pyproject.toml | 1 - uv.lock | 129 --------------------- 5 files changed, 45 insertions(+), 142 deletions(-) diff --git a/bbot/core/helpers/diff.py b/bbot/core/helpers/diff.py index 24686d5808..8ff502be05 100644 --- a/bbot/core/helpers/diff.py +++ b/bbot/core/helpers/diff.py @@ -3,7 +3,6 @@ import xmltodict from time import monotonic from itertools import islice -from deepdiff import DeepDiff from contextlib import suppress from xml.parsers.expat import ExpatError from bbot.errors import HttpCompareError @@ -153,7 +152,7 @@ class _BaselineSnapshot: The blasthttp Headers object is kept by reference (it survives Response GC independently) to preserve case-insensitive lookups and - duplicate-header semantics that DeepDiff relies on. + duplicate-header semantics that compare_headers() relies on. """ __slots__ = ("status_code", "headers", "_text", "_spill_key", "_spill_store") @@ -358,15 +357,11 @@ def compare_headers(self, headers_1, headers_2): with suppress(KeyError): del headers[header] - ddiff = DeepDiff(headers_1, headers_2, ignore_order=True, view="tree", threshold_to_diff_deeper=0) - - for k in ddiff.keys(): - for x in list(ddiff[k]): - try: - header_value = str(x).split("'")[1] - except (KeyError, IndexError): - continue - differing_headers.append(header_value) + # Headers iterate as lower-cased unique names; indexing returns the last value of a repeated header + names_1, names_2 = set(headers_1), set(headers_2) + for name in sorted(names_1 | names_2): + if name not in names_1 or name not in names_2 or headers_1[name] != headers_2[name]: + differing_headers.append(name) return differing_headers @staticmethod diff --git a/bbot/test/test_step_1/test_http_compare.py b/bbot/test/test_step_1/test_http_compare.py index dd38985836..22390a9d98 100644 --- a/bbot/test/test_step_1/test_http_compare.py +++ b/bbot/test/test_step_1/test_http_compare.py @@ -19,6 +19,7 @@ from urllib.parse import urlparse import pytest +from blasthttp import Headers from bbot.core.helpers.diff import ( MAX_STRUCTURED_BODY_SIZE, @@ -299,6 +300,44 @@ def test_deeply_nested_json_does_not_raise(self): assert isinstance(parse_body(nested), _LineBody) +class TestHeaderComparison: + @staticmethod + def compare(headers_1, headers_2, ignore=()): + comparer = HttpCompare("http://example.com/", None) + comparer.baseline_ignore_headers = list(ignore) + return comparer.compare_headers(Headers(headers_1), Headers(headers_2)) + + def test_identical_headers_match(self): + assert self.compare([("Server", "nginx")], [("Server", "nginx")]) == [] + + def test_name_case_is_ignored(self): + assert self.compare([("Server", "nginx")], [("SERVER", "nginx")]) == [] + + @pytest.mark.parametrize( + "headers_2, expected", + [ + ([("Server", "apache")], ["server"]), + ([("Server", "nginx"), ("X-New", "1")], ["x-new"]), + ([], ["server"]), + ], + ids=["changed", "added", "removed"], + ) + def test_difference_is_reported(self, headers_2, expected): + assert self.compare([("Server", "nginx")], headers_2) == expected + + def test_repeated_header_compares_last_value(self): + assert self.compare([("Set-Cookie", "a=1"), ("Set-Cookie", "b=2")], [("Set-Cookie", "b=2")]) == [] + assert self.compare([("Set-Cookie", "a=1"), ("Set-Cookie", "b=2")], [("Set-Cookie", "a=1")]) == ["set-cookie"] + + def test_name_with_quote(self): + assert self.compare([("X-It's", "1")], [("X-It's", "2")]) == ["x-it's"] + + def test_ignored_headers_are_skipped(self): + assert ( + self.compare([("Date", "Mon"), ("Server", "a")], [("Date", "Tue"), ("Server", "a")], ignore=["date"]) == [] + ) + + class TestBaselineIntegration: """End-to-end coverage of the real baseline-then-compare flow over HTTP. diff --git a/docs/dev/core_dependencies.md b/docs/dev/core_dependencies.md index 50781bbcee..d6429b9e43 100644 --- a/docs/dev/core_dependencies.md +++ b/docs/dev/core_dependencies.md @@ -73,5 +73,4 @@ result = await self.helpers.asn.lookup("8.8.8.8") | [pydantic](https://docs.pydantic.dev/) | Preset/config validation, module config schemas (`BaseModuleConfig`) | | [ansible-runner](https://ansible-runner.readthedocs.io/) | Module dependency installation (`deps_apt`, `deps_ansible`) | | [yara-python](https://yara.readthedocs.io/) | Pattern matching in `excavate` (secret/credential extraction from HTTP responses) | -| [deepdiff](https://zepworks.com/deepdiff/) | HTTP response comparison for web modules (baseline diffing, wildcard detection) | | [dnspython](https://dnspython.readthedocs.io/) | DNS record type constants and utilities (blastdns handles actual resolution) | diff --git a/pyproject.toml b/pyproject.toml index 52e5f0dd17..821c7203c8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,6 @@ dependencies = [ "psutil>=5.9.4,<8.0.0", "wordninja>=2.0.0,<3", "ansible-runner>=2.3.2,<3", - "deepdiff>=8.0.0,<10", "xmltojson>=2.0.2,<3", "pycryptodome>=3.17,<5", "idna>=3.4,<4", diff --git a/uv.lock b/uv.lock index 22c324efa6..e448b2eec9 100644 --- a/uv.lock +++ b/uv.lock @@ -189,7 +189,6 @@ dependencies = [ { name = "blasthttp" }, { name = "cachetools" }, { name = "cloudcheck" }, - { name = "deepdiff" }, { name = "dnspython" }, { name = "idna" }, { name = "jinja2" }, @@ -264,7 +263,6 @@ requires-dist = [ { name = "blasthttp", specifier = ">=0.10.1,<0.11" }, { name = "cachetools", specifier = ">=5.3.2,<8.0.0" }, { name = "cloudcheck", specifier = ">=11.2.0,<12" }, - { name = "deepdiff", specifier = ">=8.0.0,<10" }, { name = "dnspython", specifier = ">=2.7.0,<2.9.0" }, { name = "idna", specifier = ">=3.4,<4" }, { name = "jinja2", specifier = ">=3.1.3,<4" }, @@ -499,111 +497,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f1/dd/ce4502ac238ee2524cc0f06df13ce565ac3b8a40ef4d64ed399815aa7c3b/blasthttp-0.10.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:bda21226b8c3b65d3bb319e3b38a09cc02bd35dfa5af63debd407e5404c443a8", size = 5176823, upload-time = "2026-10-21T13:22:07.923Z" }, ] -[[package]] -name = "cachebox" -version = "5.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/36/f6/85f176d2518cf1d1be5f981fc2dadf6b131e33fefd721f36b330e3434d6c/cachebox-5.2.3.tar.gz", hash = "sha256:b1f68246685aa739bbbd2734befb1465363a1e1042407c154feadb065f17a099", size = 63686, upload-time = "2026-04-10T12:21:35.028Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/88/154179d492f2c000fe6efab3c3ff6b8eb94fbfaa09efe47999bce6b1e29f/cachebox-5.2.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:996f49d04b234082530afcc650bdd00556afbebc19c6c0daaafb85950340cb3c", size = 374245, upload-time = "2026-04-10T12:20:22.042Z" }, - { url = "https://files.pythonhosted.org/packages/7d/9d/3b03f2e063161bcb1a5e0969d521b5c622c2da02252a5c8bd4ef0e4f9914/cachebox-5.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23a3300ebbb526fa12ce6fa53699002f5fba6da23b4bbbaf8ba8b18a3f03e6b3", size = 356308, upload-time = "2026-04-10T12:20:09.149Z" }, - { url = "https://files.pythonhosted.org/packages/bb/9b/8da38af731e3832e9f987548e4bfb610d7f3054019e12c44a94ba9272b37/cachebox-5.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79c63ee1589364caa04c018405e625d2e44e0bf9994f2715b2f322075d8c45b6", size = 395666, upload-time = "2026-04-10T12:18:51.89Z" }, - { url = "https://files.pythonhosted.org/packages/01/dd/1522aa808f94c904c5eb3640991799fed14dd43c1dd99a9f7b71bd95b1e3/cachebox-5.2.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ebd0f8d4ebc3943c1ddcbbdc54f1a8ddf95505c862ed5731319cebd1eb98ae41", size = 353362, upload-time = "2026-04-10T12:19:04.536Z" }, - { url = "https://files.pythonhosted.org/packages/dd/52/95bf883ec9b69a76f3a7d9fb14d015d9a4bdab0143a3eff62ceebc8b1419/cachebox-5.2.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:569966efcc6309aa7d774443e3513cdbb8671efae0158138ba2ebb7d8cc9d8ed", size = 371007, upload-time = "2026-04-10T12:19:17.484Z" }, - { url = "https://files.pythonhosted.org/packages/4b/3d/cc02066d5ccfcb8b35adbaf867977fdb54572cda56ace56da396f0caa3bf/cachebox-5.2.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5774d06f0da37dd566239a4376d6ca8cf983d3e4c3228712ec22b4130f662f21", size = 390670, upload-time = "2026-04-10T12:19:29.685Z" }, - { url = "https://files.pythonhosted.org/packages/b3/50/8e4d59b3e344405d8393d6cc5cc92754d3cc1d81134041ebffd3f5ab73e6/cachebox-5.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae5bf8755bc66bcf42e7ca5c42d703a041a7aaad58f9a0c3be54d5b1cefd2641", size = 395765, upload-time = "2026-04-10T12:19:56.169Z" }, - { url = "https://files.pythonhosted.org/packages/e5/d4/d731cff1c4cec22404bd3ddda05b233c5efaa5f13d7abf4e2728905b7cdd/cachebox-5.2.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63f061cc6a5ca70bbce2e6be0588fe2fee00a93a1b0581b1086d54b10288cdb6", size = 425707, upload-time = "2026-04-10T12:19:42.714Z" }, - { url = "https://files.pythonhosted.org/packages/36/01/3ec8aadceb0dcc66dbd0b9b32966cf7b6928ed84471424c24d21b0af62d0/cachebox-5.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:577c781f18b559f4dc9eea176c6aed008843ef4b8e045cf61bb519e09dccc9ef", size = 564759, upload-time = "2026-04-10T12:20:36.268Z" }, - { url = "https://files.pythonhosted.org/packages/db/23/31cbc8623ecc2e25900f7e8f20f11bfb84786989a59a8046e70b27cbea6d/cachebox-5.2.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:7f691e25572a3ddbb018e19d796f774713bd6b0f7ce9be2e71f6e18572de264a", size = 669309, upload-time = "2026-04-10T12:20:51.117Z" }, - { url = "https://files.pythonhosted.org/packages/34/29/5a9e92bdc7b32dc865e73dd776638244f900136daee5bb0591a67e1530fa/cachebox-5.2.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:33368adf86669c29b936fbae5d6219cf90aacd4b1db71dae2e23d584a8219cd6", size = 643705, upload-time = "2026-04-10T12:21:05.882Z" }, - { url = "https://files.pythonhosted.org/packages/04/90/5273a412855fdc11f674e4749aee6d5ec0a91f5c1a9f6e922f7fa0cb7a83/cachebox-5.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:38ce67b7b45713e49459a09411d07f82de04022c04aecde6202cd32f934c2b1f", size = 609751, upload-time = "2026-04-10T12:21:21.331Z" }, - { url = "https://files.pythonhosted.org/packages/a1/a4/0fadb5e6a00f373cc3fe56b4415cdea2fc0147f6ec475611762d16eb4b05/cachebox-5.2.3-cp311-cp311-win32.whl", hash = "sha256:a7cd2c81347063ab6c512d0f569aeb5f75fc2dfe686c8486258ffd08052324f4", size = 275485, upload-time = "2026-04-10T12:21:51.563Z" }, - { url = "https://files.pythonhosted.org/packages/03/83/67c1bf83f815294d2c3acd7631f25b5cbe6067e1d56495f76829dd60057b/cachebox-5.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:7e45798d6b969794840bb302857946d710ecb32af78dfcb3ab40f4e68ee7fdaf", size = 288024, upload-time = "2026-04-10T12:21:37.999Z" }, - { url = "https://files.pythonhosted.org/packages/e4/e7/6fa6abfc9c4c07b88f09a88466fa93c7081fd679d8e06f8f558bb4ac845c/cachebox-5.2.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:09c0340e9daa7b4530801e5a570cb0c1a1ad941a85d245d360020d3986d0e787", size = 377791, upload-time = "2026-04-10T12:20:23.87Z" }, - { url = "https://files.pythonhosted.org/packages/3a/79/89e4423352d0ca33bbf80fc1b4b665e654a93de8b16cf41e96fcac81801a/cachebox-5.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3162758792626685ec34950eedd565d015b115d0ff0d751d2716031fc32d51b", size = 359562, upload-time = "2026-04-10T12:20:10.626Z" }, - { url = "https://files.pythonhosted.org/packages/d2/ab/e533c2751e6a3411ebe369277aaed03199b9e4586a48f0a3712a1f4b418b/cachebox-5.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a189a780c3ccd7b9d157074ba6bf3e191e522b39abbdb590075111851f02d50d", size = 397910, upload-time = "2026-04-10T12:18:53.336Z" }, - { url = "https://files.pythonhosted.org/packages/7a/0d/b8492d6ca53278499a37c9f9d51afd4ad77bfbe813d6281944d45b97a1e7/cachebox-5.2.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:410b67baa99d433644199b11289627f7ebba4ee5786f95ca9858f238afcee157", size = 353699, upload-time = "2026-04-10T12:19:06.248Z" }, - { url = "https://files.pythonhosted.org/packages/78/d4/fd20b3a5362651303fa12d3ee62f56af2bd396e4a7303d7014a1a1e5b392/cachebox-5.2.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f81474dc19d3865fa5e57263f834bc6bbc00e471a594fb9d934ed552732c02fd", size = 372510, upload-time = "2026-04-10T12:19:18.997Z" }, - { url = "https://files.pythonhosted.org/packages/71/94/3ec55c946d300cc4eaed3a0f79740051ac6e11ef4032421332c6ca15f5d5/cachebox-5.2.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:85ccd827193b3e3e887a88a16b88ef7ed174e7e65be515b5253322aa75e665c3", size = 392802, upload-time = "2026-04-10T12:19:31.196Z" }, - { url = "https://files.pythonhosted.org/packages/01/b1/1a3c4e436ad8a4c4ba3e70f4c62e1f927cbbb3c943a9bba5813b8b815bde/cachebox-5.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a1e7d3cb8a5e7e68996a8619e3ef8771a124d14568c251f9e586eba88d759c1", size = 398223, upload-time = "2026-04-10T12:19:57.583Z" }, - { url = "https://files.pythonhosted.org/packages/0a/ea/d36ad3976c4396b350b96a1582411b7a00e56c144eec0bb5ba5f36ce7d86/cachebox-5.2.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:adcedfcfcb933b21e7fdcfe560c79887bc8287abceab0586aa3730417dd0277d", size = 427696, upload-time = "2026-04-10T12:19:44.361Z" }, - { url = "https://files.pythonhosted.org/packages/a8/36/71845b5c7a9ffbd85e6fdb470c11a174f499bd5238fa37b1214157c2454d/cachebox-5.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c7f0c72c51a3a9e7049ea6ff2a43cd3877ab7fee966eb65771a59621563b75e3", size = 567854, upload-time = "2026-04-10T12:20:38.357Z" }, - { url = "https://files.pythonhosted.org/packages/e8/a2/baf0e5a8392e64e352b137ccd7356b3d98068c842fd19f510a7790c05d34/cachebox-5.2.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c48c10e498d573511aafbd545570e7f43b40a7428dc282183bf5adc334d9e1a8", size = 670306, upload-time = "2026-04-10T12:20:52.903Z" }, - { url = "https://files.pythonhosted.org/packages/a5/22/cd4e4c1d624b8ef9fb4b8bebf0bf5d2d74a399cf1ac46b667bb79d15359a/cachebox-5.2.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2f1e086ab5ffd082a68bb63699d517655a59b06414927bfc84e01df91b81e34d", size = 645943, upload-time = "2026-04-10T12:21:08.238Z" }, - { url = "https://files.pythonhosted.org/packages/0a/d6/55859981f5ec6a9e412baaa4db6aa5973a00008750b3f054cdefcb6491fc/cachebox-5.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:649d18399f13735bb82daa33800196f815529c49e967767c40ca221723e68afa", size = 612309, upload-time = "2026-04-10T12:21:23.404Z" }, - { url = "https://files.pythonhosted.org/packages/d7/1e/313f650467ac85824c4199188f8f1ee3386cd12eb665dbf7c88d372e4956/cachebox-5.2.3-cp312-cp312-win32.whl", hash = "sha256:0a17aeb4e5b1c6ef1c3db8fc5186f9986e215ba5ea5a5d08baa45bcf55f261b2", size = 279789, upload-time = "2026-04-10T12:21:53.215Z" }, - { url = "https://files.pythonhosted.org/packages/c5/50/3b334f887accfa811cf5c7533b8ce22c523eb009363a86401198899dadd2/cachebox-5.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:cfd69114141ab362acaa2099e425a1b965cf7b021a539a4e953143d593930b74", size = 290917, upload-time = "2026-04-10T12:21:39.696Z" }, - { url = "https://files.pythonhosted.org/packages/31/3b/16d5c295f6ec2913ef595b39986dc7b7cc179fdd2e73f5ebd1814c38fd51/cachebox-5.2.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:9527c5c70f8735f2d696331d8bcf77254f03b4dc8542046807823bd36ed4e8ba", size = 377408, upload-time = "2026-04-10T12:20:25.444Z" }, - { url = "https://files.pythonhosted.org/packages/cd/87/45f834154f79721e5b64a80ffab4f9710834c4f9c01fa977f94a9116c32a/cachebox-5.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:40ac878af00d5969862c1f6bc076de1e34ca248662fce6aecca1761f52e33e32", size = 359274, upload-time = "2026-04-10T12:20:12.127Z" }, - { url = "https://files.pythonhosted.org/packages/46/17/794e5f93e0a172aa14ecd692f6d89bdf094f71eb35fa923d0a0af25cef1c/cachebox-5.2.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5ff26bfd8f7e95b3becf6d5f65c25edaca50fa68078868648b70d79bcccc260", size = 397520, upload-time = "2026-04-10T12:18:54.807Z" }, - { url = "https://files.pythonhosted.org/packages/23/19/9470b1a96de6e480192b1a92b2fafa72aa052efc2509a5418a5652205b33/cachebox-5.2.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82e7002dd343afeeba2fcf0e483131b342a27ec3bc34b2214dc617691bda40d6", size = 353183, upload-time = "2026-04-10T12:19:07.797Z" }, - { url = "https://files.pythonhosted.org/packages/6c/2b/72813f80397ed4640e337cbd1a14ab7eaafe33e479291d3623b6a6a55fec/cachebox-5.2.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ccbdc54a6c4b5758408c1083bdfa217bd382894a8331c7d0a54b84ba0cf51e5b", size = 372239, upload-time = "2026-04-10T12:19:20.44Z" }, - { url = "https://files.pythonhosted.org/packages/05/17/47dc9687288fa55486573627089ecd9aae124de5924a4bce008af96d80b6/cachebox-5.2.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df5135a168f143d186b1cc3be0ca16b66446897ab5cedc03bd80bcc926fcd403", size = 392568, upload-time = "2026-04-10T12:19:32.73Z" }, - { url = "https://files.pythonhosted.org/packages/13/95/450765b971a3bed9d7cf003c3833c1976482eb83b0241b6dbb840a25b43b/cachebox-5.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10bedf96db8f9766cc956f9adcc623e604264e5d6fa2e255432f8c2ed7519143", size = 397920, upload-time = "2026-04-10T12:19:59.314Z" }, - { url = "https://files.pythonhosted.org/packages/5f/3e/dd8f4c1f92e58d479913ce9cbaa3227c911128e6046c82f4fd44309f685a/cachebox-5.2.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f22732d0d69bb84ad2dca7480bffdfd0430c647152d488936e152ecbbfee52fb", size = 427332, upload-time = "2026-04-10T12:19:45.888Z" }, - { url = "https://files.pythonhosted.org/packages/7e/20/80d8c26ce63e78da3874a5bb07a3a78de53a2b0356ba80583a4927f0a074/cachebox-5.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:26ae0b68979204d360327f4c0725cfdc95cfc34ab73ab1a8f528e3bd2f6d023c", size = 567494, upload-time = "2026-04-10T12:20:40.373Z" }, - { url = "https://files.pythonhosted.org/packages/10/35/7249885dfed3602b3b48c1e67781197dcdc536c50f72caeabe3944348af8/cachebox-5.2.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:f3d628b816e28a6e7661d460e02dd5b421247cc2cd275814f80ea79621245fc4", size = 669968, upload-time = "2026-04-10T12:20:55.155Z" }, - { url = "https://files.pythonhosted.org/packages/2d/8a/e5b58f0bbd6fef74da5d8e5ab49e67898ce7e6df28c16280a0f2b78461f7/cachebox-5.2.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:64057caa6b741320655cd3c5997fe642dae5dbff571eb530e6f53e58272bb43b", size = 645547, upload-time = "2026-04-10T12:21:09.948Z" }, - { url = "https://files.pythonhosted.org/packages/d8/25/51783a4c6f25ca87ef1b4b762ff0364bd98053a02d597b30d26ff4cf13c5/cachebox-5.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa325306084aa2dc0b21e07723d7700f4d43dece3732c7fdaf7a269dc5e35aa7", size = 611844, upload-time = "2026-04-10T12:21:25.286Z" }, - { url = "https://files.pythonhosted.org/packages/c5/c5/b26c4b046e296d0e249448fe297626b3caca2e851837712f03c358662cb7/cachebox-5.2.3-cp313-cp313-win32.whl", hash = "sha256:55003089d21c2f5515089c307be063b45558e884a4a1cc9593944374c89975c4", size = 279421, upload-time = "2026-04-10T12:21:54.921Z" }, - { url = "https://files.pythonhosted.org/packages/e0/7f/a49420670393bfea618de7a893d45cae9294cf3293d7b158e7af20e8f39e/cachebox-5.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:dcc5edb6ecf2b516e90b773d232360c5e4ed8fdcda038b19441da2ed9cf208ab", size = 290702, upload-time = "2026-04-10T12:21:41.458Z" }, - { url = "https://files.pythonhosted.org/packages/c9/0b/bf83bda13ef6fc490d208a1d4dd712034624526a88f61713cca0edc9884f/cachebox-5.2.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:a4b7559fa4994c4032dd07466c2041d57e055feb814762e1f73f4e8beef188d0", size = 371704, upload-time = "2026-04-10T12:20:27.253Z" }, - { url = "https://files.pythonhosted.org/packages/8e/ea/aa5162273238e84f9e41b33600c69299572dc1c8f0f768d07660b71be07d/cachebox-5.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f57afada3d9327adf87f3b5cf0094348c6fd49354ab2e9bd20b044648eb094ae", size = 353385, upload-time = "2026-04-10T12:20:13.668Z" }, - { url = "https://files.pythonhosted.org/packages/47/96/3ca013e2e48df5c1d7855669b208f4bf8014ccb842ccf7a3a0eaac07bee0/cachebox-5.2.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8342ff350ce86f062492752d612e9f056ac5dc56375713d75c3bf6e83b4d18db", size = 392181, upload-time = "2026-04-10T12:18:56.385Z" }, - { url = "https://files.pythonhosted.org/packages/63/ca/1bacb4efa0b0ce8065d1fb7c8dc7c382ec4e1cc3f007eb08417732be2725/cachebox-5.2.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:405f9cc8492fc9d953b5a6b9e2b661e99583755c6639ab8d09a287fdf336503c", size = 349494, upload-time = "2026-04-10T12:19:09.505Z" }, - { url = "https://files.pythonhosted.org/packages/d7/2e/75db4bda3768658f5baa5a54f6a4f643bc2de1a16788e40581a080e803c7/cachebox-5.2.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:94aae393ec1d9b26565d346445bb6afa3963d2a0d3eb5e4188d0e510fab871a0", size = 369216, upload-time = "2026-04-10T12:19:22.224Z" }, - { url = "https://files.pythonhosted.org/packages/f5/82/e1f833be0d57e29a8c5eb0a0275cd34b962f3c7f5b9e0517ec4bf75e7cc3/cachebox-5.2.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8b0b575066fc09f6fae0d4bd30d6ff56584a6870cbe7d202916c5e0d725cfd4", size = 385922, upload-time = "2026-04-10T12:19:34.198Z" }, - { url = "https://files.pythonhosted.org/packages/53/d6/615a3c16c1d63839f2c67644eb414c4dc9769ab2e169d935110fd8e268d5/cachebox-5.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41e99c1240106d39b63ce7868a6cd8c9da9243fef08848b85d428164e0769fd2", size = 393276, upload-time = "2026-04-10T12:20:00.925Z" }, - { url = "https://files.pythonhosted.org/packages/2f/a6/7844c9c84b170dae1005b22da174639968e64c8055d66a209a1598663771/cachebox-5.2.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:432ca62b99f7eafc21af669d76c88c1b7377db179b89fb6fca3ea93b8f9fff19", size = 421355, upload-time = "2026-04-10T12:19:47.691Z" }, - { url = "https://files.pythonhosted.org/packages/c9/0f/43f62355846cae3dc41cb4daccac0a4bb2b7b8b3c7d77d1b6a220bae6d54/cachebox-5.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e51d9c59006b53447f806145406eb37a7fc3c25553d4fd24c3887f3b268d214e", size = 561656, upload-time = "2026-04-10T12:20:42.161Z" }, - { url = "https://files.pythonhosted.org/packages/9b/fc/a453813c6d000d69a41a06c6a3143a6c4d0d0e41f23c155db2f82ea0edfa/cachebox-5.2.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:5e48a405f699fb001b8af120a6e0b4a981277f84eb5dd66a1faa21e4b6fe9485", size = 665791, upload-time = "2026-04-10T12:20:56.842Z" }, - { url = "https://files.pythonhosted.org/packages/aa/a3/f6a9e75f1e602b67b6d67088a9a766adfc4e0a740a9c4b68e4e6207c1006/cachebox-5.2.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8cbfc007ea78af61d75d7d26e5854df53dc5da6877d074afd4b4696c074f4ee7", size = 640975, upload-time = "2026-04-10T12:21:11.641Z" }, - { url = "https://files.pythonhosted.org/packages/a3/15/4ac98277f7fd9d855c8ed337e8e2a3386d17997cce2dd3eadb23dedc08e3/cachebox-5.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6a94d0da8133b3a0707ae11c9ea321f8fc37e3b5a14517019a05d632218b0f56", size = 607242, upload-time = "2026-04-10T12:21:27.27Z" }, - { url = "https://files.pythonhosted.org/packages/9c/0b/ce61907a803f75854e0cc91b84c16e14dce0e4e939efbda26293eb4c8784/cachebox-5.2.3-cp313-cp313t-win32.whl", hash = "sha256:5fee33549877c03c2494ec5359a57a7667f872fe8e296a7f39d3dfe08dd3914c", size = 271619, upload-time = "2026-04-10T12:21:56.768Z" }, - { url = "https://files.pythonhosted.org/packages/b0/06/fece190ad5173d06b2779494aaad5528907f2e55c809618e5b67c2e3dbb5/cachebox-5.2.3-cp313-cp313t-win_amd64.whl", hash = "sha256:67548a05cd41fcc4f7af80a2f97f742fef3d436537ac2e1a1dce0fcba5d41190", size = 283133, upload-time = "2026-04-10T12:21:43.037Z" }, - { url = "https://files.pythonhosted.org/packages/b8/8b/72c0e80aad08e09867ce14a621bce689a733552f20cdf2ef96d4b052da10/cachebox-5.2.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:37fa0891f0defee053c09f5f43f802f731e36e6e6ca055d7d174af07f77232ca", size = 380523, upload-time = "2026-04-10T12:20:29.345Z" }, - { url = "https://files.pythonhosted.org/packages/fc/62/33aaade81b181d5191cc39c867c297aa7c65f3191aa9749bf99b77496b88/cachebox-5.2.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:dc6315902f2ef4afbf10bc8e08c54ff34de5ce124546b8e0016c9b0d327be21e", size = 362424, upload-time = "2026-04-10T12:20:15.215Z" }, - { url = "https://files.pythonhosted.org/packages/9e/0b/3eedaf9ea4b41c931f4340bfa42056efe2bb5fe3a79649d6c8a1dce585a5/cachebox-5.2.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7df1735ca778480d51b8232fed397ffe3935158f20d34fb1c5ed171b53d5a6e2", size = 399572, upload-time = "2026-04-10T12:18:58.331Z" }, - { url = "https://files.pythonhosted.org/packages/be/69/c79b8a6a5b889ac4a60800bacea3553cb3b86f6fd13b2262bade1cb962c6/cachebox-5.2.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e22451cde8f884051e941b21870e4fc91fcf58d0d8c285bb8964107e1f02445c", size = 353803, upload-time = "2026-04-10T12:19:11.21Z" }, - { url = "https://files.pythonhosted.org/packages/d4/c3/bc7838de51039f8c50506d8dc82f22ff9a652794339a223b12af595e1d2f/cachebox-5.2.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dcbccf3015d9a42bcf41260fa5cc048a5bdb75aa10997d514d6c976117f30ee2", size = 374474, upload-time = "2026-04-10T12:19:23.658Z" }, - { url = "https://files.pythonhosted.org/packages/65/61/e5231ad2ae952ca482f9b9df55df4b96add1a80de28de537c5f574605987/cachebox-5.2.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:311eae5079e256cbbfafdc3dcff1714b6598a767f9c1ef8c3709e74ea0cc12b0", size = 393045, upload-time = "2026-04-10T12:19:35.651Z" }, - { url = "https://files.pythonhosted.org/packages/78/c4/c9b3fa764ac5420a9e079ad53fa8840d4a26b74c4ccda56acbef49cf76ff/cachebox-5.2.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f4d2a80a5cd3380739c67f7d89e596634f5897b8d5a4a3dc1598312cb077535", size = 398700, upload-time = "2026-04-10T12:20:02.513Z" }, - { url = "https://files.pythonhosted.org/packages/9b/3e/c4e3acd4cb04e01c5fb7cc7a4de16059b9594d90672fff85af8670275267/cachebox-5.2.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3977515b727a5203f494c44c4566fb936c4b940351c01d3d8e7b5d104dff4f53", size = 426725, upload-time = "2026-04-10T12:19:49.385Z" }, - { url = "https://files.pythonhosted.org/packages/25/5d/610b79479719951581109d985244d34c97f86a308c3d7c83443e2b1dac46/cachebox-5.2.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c5be17dd5c4fabcfecd5bcf6d54f9c6fb719daed3ef01ac1c03a14af0e2b26c1", size = 570042, upload-time = "2026-04-10T12:20:43.793Z" }, - { url = "https://files.pythonhosted.org/packages/8c/63/cad8a05db4d0c0f5ba6bccb32e57d15c472276de9476f56004445b40711f/cachebox-5.2.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:6d37334fc218fdaee31db8a4f938938716e7c3b1b4059e25de27c8447fc95fde", size = 670974, upload-time = "2026-04-10T12:20:58.528Z" }, - { url = "https://files.pythonhosted.org/packages/54/d1/9cff7c2b9048d1c38b7ad8199ce856596d09720b3bea74043f3bad71970b/cachebox-5.2.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:1e5f1b7e23411b748d919348c3b65db1f9f8927ab8f6f3acae19bd617543df2d", size = 646213, upload-time = "2026-04-10T12:21:13.619Z" }, - { url = "https://files.pythonhosted.org/packages/27/ae/2e1ad162ec13903e84469c8a753baf385f1bc324279d6c7cb6365e7099df/cachebox-5.2.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e7b06a75a898b31fd73c4d8bf727a9b9f8b5b7738cccd0ab5e6fd2a9cf659d3c", size = 612787, upload-time = "2026-04-10T12:21:29.271Z" }, - { url = "https://files.pythonhosted.org/packages/c8/8a/07b5ffd841e1ff534bb6e8721c39fdfe0d7cdaac1398e1783b2a0c37bd22/cachebox-5.2.3-cp314-cp314-win32.whl", hash = "sha256:3b798052719f09a2ce7bf9fa9452dc0a7d4dc53b50a2d3aba6ce6ebc12d39df7", size = 278559, upload-time = "2026-04-10T12:21:58.482Z" }, - { url = "https://files.pythonhosted.org/packages/c4/f8/b88a82ce9ec7a2fa0f09ed1cdd031692c8664c41f9ab71831e177c7ce2df/cachebox-5.2.3-cp314-cp314-win_amd64.whl", hash = "sha256:4afc8b8575e3228a42ad8d819de5fbbecc6bd0b521295966b00244be37ae3b9b", size = 291928, upload-time = "2026-04-10T12:21:44.621Z" }, - { url = "https://files.pythonhosted.org/packages/4a/01/8c79c07c8c6517fb2fe7d479dd87044e38aac5b9af0245b33fcd695eae37/cachebox-5.2.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:0e8a34b82be30d3d9fb7dfaf9a86ec2b3ab9bc264715909ef27fc3d3587324d2", size = 374325, upload-time = "2026-04-10T12:20:30.923Z" }, - { url = "https://files.pythonhosted.org/packages/7f/51/0fc26b923e80ab857ac99d5f7f3784dc941e7b4de361c204835233176ddf/cachebox-5.2.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4d4e336aebf866463878ccd28a4d0ef4003ea216708cf4a02a7f198481b3af81", size = 355444, upload-time = "2026-04-10T12:20:16.879Z" }, - { url = "https://files.pythonhosted.org/packages/c1/6d/a6b399221f8dc4b3e01b37d3240ef5b8a7eb78cd9bfbb99b0e655dd01649/cachebox-5.2.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b102fcdd97b0602bf5d6ba1a571bba3e3d6fa912b89fd768b0da5427408eab8", size = 393978, upload-time = "2026-04-10T12:18:59.753Z" }, - { url = "https://files.pythonhosted.org/packages/bd/f1/4c8f998c117c1941a82bd824d6687280c50167f21fea6392e41531d641e2/cachebox-5.2.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:245a79fb2c5d3bff252f4263f76210ef3ad7c2ff9b0234859b26974830a80491", size = 349298, upload-time = "2026-04-10T12:19:12.843Z" }, - { url = "https://files.pythonhosted.org/packages/d1/dd/683bc5a32a0da660d02fa248b880b71a2b834e9b54b8d272b5801282f402/cachebox-5.2.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd0e8dbd8fd4cf664c645c08f9e10508e133353756705c4a738e90a5406224b5", size = 370619, upload-time = "2026-04-10T12:19:25.298Z" }, - { url = "https://files.pythonhosted.org/packages/81/49/d6c47c78a7769b355076c5b635c2b538c8b88e8ceeb408e104d0f269b515/cachebox-5.2.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdb74294bdc33e39e26606919a9b2229038d5fac0edb80c9056683c08584d4a9", size = 385988, upload-time = "2026-04-10T12:19:37.638Z" }, - { url = "https://files.pythonhosted.org/packages/70/e2/b669555ada7fa1392e4cdb8a19f3367db5c6abef0fde8ab034a9747760df/cachebox-5.2.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bba3e9a7f52fa196b434522f39675f3b32a076976ef2373ded6f1065e99f4d20", size = 394090, upload-time = "2026-04-10T12:20:03.978Z" }, - { url = "https://files.pythonhosted.org/packages/8f/01/42916249e53fe4fcbdf0419fb55dbc09b9f377475376e1d7f4ae9c9bd6cd/cachebox-5.2.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abb21f0f937fb66528f1b9f1a04874d6aa503e78bbb26f4cf33bf67faddbdd68", size = 421632, upload-time = "2026-04-10T12:19:51.048Z" }, - { url = "https://files.pythonhosted.org/packages/a1/54/34eebe18c6ed8ba27b1331b5e3d08bd8bb62f03ba81fbf47a2db0fa646f7/cachebox-5.2.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:dab6fd3189b0c746fb03e1915fd947aaca9112cedf26ef3a0c39383acf87d2e5", size = 563871, upload-time = "2026-04-10T12:20:45.417Z" }, - { url = "https://files.pythonhosted.org/packages/ba/b2/f92da0d54e4f18609588709090de8c81dd7c8b20ed6ac30f9b91bedbedf5/cachebox-5.2.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:b4e7d2935b9df11d3717f99c7237b6780f1f8c70e6a99b69b8430d89929ec825", size = 665677, upload-time = "2026-04-10T12:21:00.512Z" }, - { url = "https://files.pythonhosted.org/packages/43/9d/bf2d3dc949afe4d21fc7eb15b7524255e834b9252df6bba111e6686d1c6f/cachebox-5.2.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:611aa260fe1b2506330ff72f415e2cb4053c9c4e3776ac68fe2eedee0e1b91b1", size = 642067, upload-time = "2026-04-10T12:21:15.727Z" }, - { url = "https://files.pythonhosted.org/packages/6e/4f/a789eda189550d239fbaf165b9810f148e733e97a2a4eda7c4192295c7f8/cachebox-5.2.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a424ffb8514a9cb49bacff7995b7c767625cb2239692bd6524245e8579e375cc", size = 608048, upload-time = "2026-04-10T12:21:31.156Z" }, - { url = "https://files.pythonhosted.org/packages/41/c3/590e161c04ffbd36e33933e6dcca5ffa40b5548e3121a21d77aad42af138/cachebox-5.2.3-cp314-cp314t-win32.whl", hash = "sha256:83988dd8e9075ee837e8407e26db49a9944ae74924d5db57b477444d7d98622c", size = 271694, upload-time = "2026-04-10T12:22:00.589Z" }, - { url = "https://files.pythonhosted.org/packages/66/f4/f60b8506df467261178afe918801df37c02c46ec2b8ce019760a14e2abe7/cachebox-5.2.3-cp314-cp314t-win_amd64.whl", hash = "sha256:dbda6390fa5070a19157ae35ab8066d3fe468634e0e9e21452c68ce7999c7d0c", size = 284212, upload-time = "2026-04-10T12:21:46.241Z" }, - { url = "https://files.pythonhosted.org/packages/ce/7b/5eead1ca0d437b1993a742c6571079ae58ae4db50d94d42e87b514aed6c3/cachebox-5.2.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c798cddfb780156db09d3d96ed5da4c2d5fc01dad4bc7b54db5b20c34f221926", size = 376199, upload-time = "2026-04-10T12:20:32.674Z" }, - { url = "https://files.pythonhosted.org/packages/77/e3/5e45042f9b552a5087cafc2e0fed834e632531fca17818201d72e78593ce/cachebox-5.2.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:c8f3de4afeb3fd721620be3d02f2338bcbc3fdbd464ca14e1c474088c9669db0", size = 357109, upload-time = "2026-04-10T12:20:18.554Z" }, - { url = "https://files.pythonhosted.org/packages/d4/51/3c4743b718b42e4b80166fa61f8722b603eba7bf206768a7892c4699dce7/cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b39022c258872185327acffa9ad42d6bdf42f37d006d35c825a684eb5fa98d40", size = 396433, upload-time = "2026-04-10T12:19:01.463Z" }, - { url = "https://files.pythonhosted.org/packages/f8/9b/678da91187bdb2836db2b8da62519da75359b46bc28697799a7caa314519/cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5a0599fb85dcb6df9a86502435643fe90c793bbcd50b5d85217c70f2bc2e38fc", size = 354287, upload-time = "2026-04-10T12:19:14.55Z" }, - { url = "https://files.pythonhosted.org/packages/df/06/769446da6c9f2855499aaa19e2d7260aa47934bc2e15a931e5b737f8685a/cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3cdbe8f1b7716a44dc82ef3a6830a612260c7379478cfa80804632e2e6252b8e", size = 372507, upload-time = "2026-04-10T12:19:26.763Z" }, - { url = "https://files.pythonhosted.org/packages/79/cf/86c60994a7be734abef0395e440dc11714f84ffcd369cbcd8e61c3d58126/cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:783d1b9a0b3c77c43e7ae331b9d6561ad75827e16b2484e2a6cc289ec4d392ee", size = 390831, upload-time = "2026-04-10T12:19:39.591Z" }, - { url = "https://files.pythonhosted.org/packages/9d/db/acfb55f8d5ee4ea1c5f2d32ede25d4d04e944ba09d2832c27c085022490d/cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c6476a2a842906fee782d92f8fbcb03ecfd22eecc39adb7fb5b047d7e1cf020", size = 396277, upload-time = "2026-04-10T12:20:05.735Z" }, - { url = "https://files.pythonhosted.org/packages/dc/4f/35e27e85a48e15671c5863addcabde910eb311800a621c3e47c04bd36d17/cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:184bbcfa1370415b6d1f09e4fb74ab697dac8df09f522aa217a2fac65f973744", size = 426980, upload-time = "2026-04-10T12:19:52.622Z" }, - { url = "https://files.pythonhosted.org/packages/09/4b/50f2cadf20c02db9e449f2e9fee95f3eb5768ab1804dd0a5eba6c98119ad/cachebox-5.2.3-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f89df36b46f8f5e11c0c49701ec3cebddf51191f96afb7bb75c394faf3c1cbc8", size = 565539, upload-time = "2026-04-10T12:20:47.051Z" }, - { url = "https://files.pythonhosted.org/packages/43/53/b8e948cadb48b8bcf1d13c2aa4a788ff0e95b50ddb808c18e998499b4680/cachebox-5.2.3-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:fb0bdcd9e28686e3b91d5210c843542858f0f10de151181aee27a7978fe4992e", size = 670870, upload-time = "2026-04-10T12:21:02.141Z" }, - { url = "https://files.pythonhosted.org/packages/29/7b/d68ca3f59a9d6963c2f6b19bc4b1926a37db2e4a4f6c9891d12788e49ce2/cachebox-5.2.3-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:5196f0d2c2f99c92ddf0d2c37803ff90509d14a5df211b7754feb8b61ffd8740", size = 644542, upload-time = "2026-04-10T12:21:17.541Z" }, - { url = "https://files.pythonhosted.org/packages/f8/c8/44ae6d5dff09f044d61a92591e6a8db17f3b2ee51a54d375cce90271527b/cachebox-5.2.3-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:73671850d8c3634ab217398c83715d3feb52589ec97bd8e2f4d22e472741ea48", size = 610235, upload-time = "2026-04-10T12:21:32.93Z" }, - { url = "https://files.pythonhosted.org/packages/9a/1b/31cf2449da9a296f6c6c0002c7ae91a25c3a4bfef071763bbeb85300b402/cachebox-5.2.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:70c718f6bb77e6ba142b9a055b81ce85412a0c0e5e82a154489b45e6f91d09ec", size = 287614, upload-time = "2026-04-10T12:21:47.909Z" }, -] - [[package]] name = "cachetools" version = "7.2.1" @@ -1105,19 +998,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ca/1d/1271f287ff7170ddafc2aad36260c4eec20ccd2fea70f38455e9d56d427b/cryptography-50.0.2-pp311-pypy311_pp80-win_amd64.whl", hash = "sha256:7b75de3c8b3be1cdb1052747c929440c3eea46c1bc2cb8a6e3a48388e9b7b452", size = 3805376, upload-time = "2026-09-30T15:29:58.729Z" }, ] -[[package]] -name = "deepdiff" -version = "9.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cachebox" }, - { name = "orderly-set" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f9/6b/6a4a5aaf38535eb332c2856aa08e73ed7c549d0851b1215401af0a2db1a7/deepdiff-9.1.0.tar.gz", hash = "sha256:07e9e366fab4297755153c4eab795ad4ef3cbd0d51660e847f5751c6bd727687", size = 382149, upload-time = "2026-05-15T20:18:05.751Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/26/4a2bad8eb430d8d805a4642c4bff25103a37548d74ab346f8b1e024abcc5/deepdiff-9.1.0-py3-none-any.whl", hash = "sha256:80c0460e1993b04f6f0ca79abf25548b129fd218478c4ebb08f80560f5d10610", size = 184662, upload-time = "2026-05-15T20:18:03.956Z" }, -] - [[package]] name = "distlib" version = "0.4.4" @@ -1909,15 +1789,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/44/b9/040d1a1c7836922828e6480cd2366bb8fe0ebf75b413d2bb51a9b0e7f78f/opentelemetry_api-1.45.0-py3-none-any.whl", hash = "sha256:80e068aba7cd56c8b58512d6a36f8d25cb1dfaa0c0a4cc1c938ccf9f362d9cb3", size = 60020, upload-time = "2026-09-25T12:32:03.192Z" }, ] -[[package]] -name = "orderly-set" -version = "5.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4a/88/39c83c35d5e97cc203e9e77a4f93bf87ec89cf6a22ac4818fdcc65d66584/orderly_set-5.5.0.tar.gz", hash = "sha256:e87185c8e4d8afa64e7f8160ee2c542a475b738bc891dc3f58102e654125e6ce", size = 27414, upload-time = "2025-07-10T20:10:55.885Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/12/27/fb8d7338b4d551900fa3e580acbe7a0cf655d940e164cb5c00ec31961094/orderly_set-5.5.0-py3-none-any.whl", hash = "sha256:46f0b801948e98f427b412fcabb831677194c05c3b699b80de260374baa0b1e7", size = 13068, upload-time = "2025-07-10T20:10:54.377Z" }, -] - [[package]] name = "orjson" version = "3.13.0" From e5cca9655e9adfb1c823833f2cca78f20ee67952 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Mon, 2 Nov 2026 12:47:18 -0500 Subject: [PATCH 27/28] Bump ansible-core --- uv.lock | 109 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 93 insertions(+), 16 deletions(-) diff --git a/uv.lock b/uv.lock index 36982ca586..22c324efa6 100644 --- a/uv.lock +++ b/uv.lock @@ -2,7 +2,8 @@ version = 1 revision = 3 requires-python = ">=3.11, <3.16" resolution-markers = [ - "python_full_version >= '3.12'", + "python_full_version >= '3.13'", + "python_full_version == '3.12.*'", "python_full_version >= '3.11.5' and python_full_version < '3.12'", "python_full_version < '3.11.5'", ] @@ -30,7 +31,7 @@ wheels = [ [[package]] name = "ansible-core" -version = "2.19.14" +version = "2.19.15" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.11.5' and python_full_version < '3.12'", @@ -43,28 +44,47 @@ dependencies = [ { name = "pyyaml", marker = "python_full_version < '3.12'" }, { name = "resolvelib", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c6/c7/e426d9955a69be0c4fd9d62fa756ef0cea6a7aa5467274ed46ea3316e1b3/ansible_core-2.19.14.tar.gz", hash = "sha256:1e7612788eaa6b3c87a3670ce86c64b830eba0ae2b3fcb25a772f276704163b4", size = 3432616, upload-time = "2026-10-05T15:08:31.102Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/ed/919710271c8e4f6ecf0760f3994aee36be2668b29df0214a44ecdeb14075/ansible_core-2.19.15.tar.gz", hash = "sha256:05fa7f0730199b8e0dd9204f258075992143bd51dae71f68965b832a50d422fe", size = 3434021, upload-time = "2026-11-02T17:12:02.49Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/6e/14ec1ce25816a8f4ee105140f82ea34fcd2057b3de429fef62cd2c87d8c3/ansible_core-2.19.14-py3-none-any.whl", hash = "sha256:d518d0e96fa75bedfe9b0a96d5b158aa712d092961824c115140c8677b88ff06", size = 2426850, upload-time = "2026-10-05T15:08:28.617Z" }, + { url = "https://files.pythonhosted.org/packages/21/2d/3ac042e1220d85aca4c8db87793131689abf12c7ac7a5b8ee44418e03baf/ansible_core-2.19.15-py3-none-any.whl", hash = "sha256:076385c72c2a9f721b9f293e9c3cfac8106d7e130d17aadce6952634db50ffff", size = 2427065, upload-time = "2026-11-02T17:12:00.252Z" }, ] [[package]] name = "ansible-core" -version = "2.21.5" +version = "2.21.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.12'", + "python_full_version == '3.12.*'", ] dependencies = [ - { name = "cryptography", marker = "python_full_version >= '3.12'" }, - { name = "jinja2", marker = "python_full_version >= '3.12'" }, - { name = "packaging", marker = "python_full_version >= '3.12'" }, - { name = "pyyaml", marker = "python_full_version >= '3.12'" }, - { name = "resolvelib", marker = "python_full_version >= '3.12'" }, + { name = "cryptography", marker = "python_full_version == '3.12.*'" }, + { name = "jinja2", marker = "python_full_version == '3.12.*'" }, + { name = "packaging", marker = "python_full_version == '3.12.*'" }, + { name = "pyyaml", marker = "python_full_version == '3.12.*'" }, + { name = "resolvelib", marker = "python_full_version == '3.12.*'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0b/27/d02c3f75e9f1468b5efbe49667574f68331b17e8a9f2bb99e1d18be70052/ansible_core-2.21.5.tar.gz", hash = "sha256:65bb3148c58ebb843cd5074004c805f404f152114d98476dd823324616c9c6cb", size = 3395026, upload-time = "2026-10-05T15:11:00.15Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ed/9f/c3f578633cd374db6ed981f8abc401885819e94e3d6a8548a1bd0095c575/ansible_core-2.21.6.tar.gz", hash = "sha256:3fa05b4b1af69f2fa19b49dde8edd5a23e693c2c1c3bda2d85fce73bd6cfc36d", size = 3399162, upload-time = "2026-11-02T17:33:27.104Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/57/6f/7321059b2d1a5ea3c7e60807a5269942d93b2c11a2fc89ba8e4a3e827891/ansible_core-2.21.5-py3-none-any.whl", hash = "sha256:08886f9f3e23d129aa98a01271c4a47833516e1cb7c737a246788cb474f41222", size = 2457267, upload-time = "2026-10-05T15:10:58.444Z" }, + { url = "https://files.pythonhosted.org/packages/20/5a/9e6cc7686b40bec066211200b6c393a7a333dfcfa91aa67a07c031df87c8/ansible_core-2.21.6-py3-none-any.whl", hash = "sha256:c1fc3cbe821176ba4227b1cae8c748e1d28d42dde605e807d23c58f71b6d1a74", size = 2457874, upload-time = "2026-11-02T17:33:24.88Z" }, +] + +[[package]] +name = "ansible-core" +version = "2.22.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.13'", +] +dependencies = [ + { name = "cryptography", marker = "python_full_version >= '3.13'" }, + { name = "jinja2", marker = "python_full_version >= '3.13'" }, + { name = "packaging", marker = "python_full_version >= '3.13'" }, + { name = "pyyaml", marker = "python_full_version >= '3.13'" }, + { name = "resolvelib", marker = "python_full_version >= '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/9c/320090b2f1542122259cd759d5148678fd98945913837ee05718920f73ea/ansible_core-2.22.0.tar.gz", hash = "sha256:bf50b4a0cfa985e30585c7ba301897ea7050d224ca49d2816cab10e33a160e1c", size = 3476434, upload-time = "2026-11-02T17:35:11.837Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/98/3dc2d37181dc6a4b39d7badffaa0ef6e95be638d618372a11c316a2f8983/ansible_core-2.22.0-py3-none-any.whl", hash = "sha256:8285d4cc81c3e3eb2d954e75531724fe0ae154d228475638123451f034a74657", size = 2488530, upload-time = "2026-11-02T17:35:09.491Z" }, ] [[package]] @@ -159,8 +179,9 @@ name = "bbot" version = "3.0.2" source = { editable = "." } dependencies = [ - { name = "ansible-core", version = "2.19.14", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, - { name = "ansible-core", version = "2.21.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "ansible-core", version = "2.19.15", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "ansible-core", version = "2.21.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.12.*'" }, + { name = "ansible-core", version = "2.22.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, { name = "ansible-runner" }, { name = "asndb" }, { name = "beautifulsoup4" }, @@ -773,6 +794,11 @@ sdist = { url = "https://files.pythonhosted.org/packages/83/1a/9a1e0c52781c4b600 wheels = [ { url = "https://files.pythonhosted.org/packages/03/3c/d5edb1c270842e4da3acdefd8bf004c4ae8096cdfb8a3b70f585fac2894a/cloudcheck-11.2.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c3cecc0d4cbe287176dd8ecb5c5dd5a65524455ba31a95bc2ac247b0b0f1923e", size = 1605163, upload-time = "2026-10-20T22:03:51.757Z" }, { url = "https://files.pythonhosted.org/packages/aa/64/72a83311438f3c6376f9dff4e7eaac3e686ab71f011d96121a96f16f8a14/cloudcheck-11.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:131f8370569c4270c5efbdeaa98613071d07478242f6ea42db3ebb22d22d6937", size = 1587019, upload-time = "2026-10-20T22:03:43.319Z" }, + { url = "https://files.pythonhosted.org/packages/4a/2c/ab5752de40975eeadcbef779cfc3ee34298a6a12d3fd6db8f7cd758ae9b8/cloudcheck-11.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:aaa0a04cf3e3f3f2f0ef8f875ad8cebedb5fe413f78b224afd9eca06af8a5b9b", size = 4229162, upload-time = "2026-10-30T06:47:53.648Z" }, + { url = "https://files.pythonhosted.org/packages/b3/12/e3fa4002a1debd678863cafd1c1dc778de77daf22120b8252072924b6f3c/cloudcheck-11.2.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:5dfeaaf95d033fb79ee2a090bdd765ef73898b670b3c41ce663201ea120ff5f3", size = 3590580, upload-time = "2026-10-30T06:48:06.953Z" }, + { url = "https://files.pythonhosted.org/packages/20/41/950de7fd16f661d0fd14c773978bfe887ce80d441b286d0e31225508a0bf/cloudcheck-11.2.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ebda1acfba3f4376c57b3490c451690e773b75b30ecf52bc126f97cf7e10103c", size = 4169401, upload-time = "2026-10-30T06:48:33.782Z" }, + { url = "https://files.pythonhosted.org/packages/d2/b5/dcbfaabef2b8a54677c07ac259b9bd7fb41d14daa3001eaf43839c2ca0b2/cloudcheck-11.2.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e3501ee1ff6a88b04ac84fb58e63390c0792f375b2ccbe97eff02e47e6b5d4c0", size = 4086784, upload-time = "2026-10-30T06:48:19.828Z" }, + { url = "https://files.pythonhosted.org/packages/b5/6e/5e90e0f31b00068cdffd2c52ba9c75d0218aa4fba69798df195df03f114c/cloudcheck-11.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:226892c15bd4955f035c60a5a0a7bc59a7f11ed87bd13e34c8cdb820097f0e62", size = 4001542, upload-time = "2026-10-30T06:48:45.344Z" }, { url = "https://files.pythonhosted.org/packages/16/f9/f130069582c0336af798e0dab8ba2af53f7200bc3ea2b5b26a311baf605f/cloudcheck-11.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa2d8f8a8c476a9677793b58a569685d4522167c4e25ea22fe40e14da5b08e9d", size = 4229160, upload-time = "2026-10-20T22:02:42.574Z" }, { url = "https://files.pythonhosted.org/packages/e2/44/195e5dadef8777ef1ff658b11639910ca25e516b0662a17b159093ba231b/cloudcheck-11.2.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5320aba38ddfe5331739d883c4fe62a5156a496bef42bbb82018004136c5c277", size = 3590579, upload-time = "2026-10-20T22:02:54.532Z" }, { url = "https://files.pythonhosted.org/packages/4b/ea/745b386b5c252f4f840ee73de26af82f0a7e4a62d358a2c170cc9be7e3c0/cloudcheck-11.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:981ba74405a1a7690cb42c1640d1a5a821ec7bebe811fdf86d852ea9f1cfab6d", size = 4169402, upload-time = "2026-10-20T22:03:17.839Z" }, @@ -785,6 +811,11 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ae/03/159dd2f5e8bf7003144982442d96a8cb12aa097b2804a1ff58647b0490a0/cloudcheck-11.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:d2d78012770df160c7696eca10300ad094a06c69219826525541c3865ba80bec", size = 1426369, upload-time = "2026-10-20T22:04:38.476Z" }, { url = "https://files.pythonhosted.org/packages/9b/34/7fa7f6c01572bb42f28c8c337b7096c2410c9154e9f943f8e809eea9e6e5/cloudcheck-11.2.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:284f4656038cb001f1e81e4221e9077e1d23ba4c0951e5deb1d36da9b52a4bb0", size = 1605419, upload-time = "2026-10-20T22:03:53.603Z" }, { url = "https://files.pythonhosted.org/packages/58/1e/4c1df2672c29992848fe2f43c9d6af27f764e4f8607a15fcecba187e5482/cloudcheck-11.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d5681044373d3069f005e319c147d649b632b544337310479ff91d71954c51b7", size = 1578977, upload-time = "2026-10-20T22:03:45.277Z" }, + { url = "https://files.pythonhosted.org/packages/a3/aa/1006a759c36987dcaf42b590aba83787c77c73334f8919ebfc06af6af4f9/cloudcheck-11.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:780d196d06a61d4778a4e13c0d8a71e3fbdb00c7e63af3433a1d4106cd75ab61", size = 4227324, upload-time = "2026-10-30T06:47:55.372Z" }, + { url = "https://files.pythonhosted.org/packages/d2/59/5e96c5465d172dafced2bd62c9e25dd05913b4af5c68ba69b8d6e6fab0c4/cloudcheck-11.2.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:686d79e75ba4b6532fdb08538cafec6218c05f6792639974b1f93d62328ffe17", size = 3583692, upload-time = "2026-10-30T06:48:08.557Z" }, + { url = "https://files.pythonhosted.org/packages/96/32/642667e4838c2a166bbee6669b07ca5ee12c71ad1aa0b36951fdb52df2cc/cloudcheck-11.2.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:d5c8d53f73fc9da0b00b72236554ea0c655a11b09cb9e76eeaebf8ba71ec7907", size = 4165597, upload-time = "2026-10-30T06:48:35.195Z" }, + { url = "https://files.pythonhosted.org/packages/5c/3b/e4b17bc27312118f753091813ffe01d629fd2e6ae828f6bc4cf18e185cf4/cloudcheck-11.2.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:df11998f3383bf4db4540941fb2cc22930d4d9ed4be8fbabe2a153a80b4d1992", size = 4079752, upload-time = "2026-10-30T06:48:21.198Z" }, + { url = "https://files.pythonhosted.org/packages/26/ff/1b81a26f6daabfe866a9b4c384de886f8368ccf5ebe2ea04a97c3cef94ea/cloudcheck-11.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8238e96eb26490e28ed50fcade16913eb26b4517fd842c5c68a09fadafdfdb48", size = 3997469, upload-time = "2026-10-30T06:48:46.916Z" }, { url = "https://files.pythonhosted.org/packages/fb/15/fd18b79569796dd22d963fa6e68b0796daed7e1074a6df04da984e2ca991/cloudcheck-11.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dac30e3a6b17fc4e58418ff918df74328840d2d54b5f94fe69f5f20df2da2fb5", size = 4227327, upload-time = "2026-10-20T22:02:45.036Z" }, { url = "https://files.pythonhosted.org/packages/93/e8/152b133010ecb61571f801544795a9118524ba675e039faa0ffc18f826ac/cloudcheck-11.2.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc0ad9552cfea148f770b8072a0f7bdf77033c2359919f955cfd871496032772", size = 3583693, upload-time = "2026-10-20T22:02:57.509Z" }, { url = "https://files.pythonhosted.org/packages/71/b4/3403497f3701078cc851a6f3d0b81b8da614734503da632e0633bdd9cfd0/cloudcheck-11.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:67e088193c787e3e9ab1298aaeb79bb657662f8c5844f31d125775b1b45fbff0", size = 4165599, upload-time = "2026-10-20T22:03:19.42Z" }, @@ -797,6 +828,11 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/45/ce/f99a0f7d6b7a64d1bfa893a41446e63b46ea92513be0da9d8727a0ed0431/cloudcheck-11.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:f229356ba548bf616852e16fcbf86b939767dca9d6238ddf7dd160a33213eaa0", size = 1422982, upload-time = "2026-10-20T22:04:40.022Z" }, { url = "https://files.pythonhosted.org/packages/83/5b/e4e98a45a4957cd74a40b5cbb760d4d565b61133c87cf4a5ed1322d744d8/cloudcheck-11.2.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:8d38291827e863b479ed66018c2141e2c8d3b32c5c40021d945a6dee9dc3cdac", size = 1600271, upload-time = "2026-10-20T22:03:55.037Z" }, { url = "https://files.pythonhosted.org/packages/c0/14/c5eafcdb0dc62ba36b2b028d3134f4661c5e7c13f5c0d12afc246f751ee6/cloudcheck-11.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:080d3d04ab2e78507b63d98e57c2c397c609aeaf6eddd73d35d253ffddf32d86", size = 1579135, upload-time = "2026-10-20T22:03:47.028Z" }, + { url = "https://files.pythonhosted.org/packages/4a/ef/c70b9c3bdd71960b6430c981da8fea2656c2de7b62fed91351716ba6e0dc/cloudcheck-11.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c10e80e8f5332fe23445fb6bd86a865af17233bd790f8a2561689a7595a1d968", size = 4225642, upload-time = "2026-10-30T06:47:56.774Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c2/7015be82e669a117cac8b466aea4aff656364f47792a7570239ffea2204d/cloudcheck-11.2.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:e617455633e4078e332f47c73afe9ab92f5cc16ee956faeb149abf8be42d3f65", size = 3585590, upload-time = "2026-10-30T06:48:09.954Z" }, + { url = "https://files.pythonhosted.org/packages/7e/10/7f4c56101750dbf242e38b4ee7fb4f990db4e9296b77751f3f59147b69b0/cloudcheck-11.2.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:be9a0daede37c6fe9a3b320338c84f717aaaee49a31f97ec1cd2fa8e4d15efb1", size = 4167193, upload-time = "2026-10-30T06:48:36.592Z" }, + { url = "https://files.pythonhosted.org/packages/ae/cc/308f44741b15e59802c24b00a1146ca93a7ca551baba212eace66582457f/cloudcheck-11.2.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:935acbe0d4ce13ef6721865692ec71724aa3936e80a587b159cfd7aa444534ea", size = 4082587, upload-time = "2026-10-30T06:48:22.772Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a5/e70f2576edd12132c86cf12ca7bebd0c5a06e444aa66479e22b5b4d4316c/cloudcheck-11.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:588cc75be35cb7bdc5de55b092742fed398abebc941fdb06a142d69759059d00", size = 3997462, upload-time = "2026-10-30T06:48:48.341Z" }, { url = "https://files.pythonhosted.org/packages/29/af/e404464dbb6d31dbdd7a3aca00806bf3baf2820b0725da8752bee8f09b11/cloudcheck-11.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a810325944cd1d1692b928f75ffc5cb16e909c258bc73941985538c7b45a148", size = 4225643, upload-time = "2026-10-20T22:02:46.929Z" }, { url = "https://files.pythonhosted.org/packages/77/f8/ae4bb28474c19535368a1f1645cf4598eb4e840e155358679db5445358ac/cloudcheck-11.2.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b137825881252b59231049c22571fdae049d436b0239ac20bac4eef54bb346fc", size = 3585592, upload-time = "2026-10-20T22:02:59.122Z" }, { url = "https://files.pythonhosted.org/packages/dd/f5/bbd6c9dded6b41a1f8b55e60181e77bae6039a2edbbfc3625f89a72611c5/cloudcheck-11.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db305cbf9f668b39cc0eb1e0bd9ef6623c5b0fea72f2845accc8f11e68001fb7", size = 4167190, upload-time = "2026-10-20T22:03:20.855Z" }, @@ -809,6 +845,11 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c3/6a/59d99cef1bf7303302afd6f7cc3b0ac2808383c8da593020cbc253f9297b/cloudcheck-11.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:2ea4a675ab368036d6ee437ae52f5994f0d70728bf72f05d2c874c466fa2c556", size = 1422894, upload-time = "2026-10-20T22:04:41.478Z" }, { url = "https://files.pythonhosted.org/packages/00/05/87a4b484fe2c7ef6789e4780ce9572554b172510759b2dc872ade44af39f/cloudcheck-11.2.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:b76da03118f441009e94683ea74cec82a1a3e1790b5abbc252b53d1fa1b9e2f9", size = 1601481, upload-time = "2026-10-20T22:03:56.523Z" }, { url = "https://files.pythonhosted.org/packages/3a/17/f01a4646caa0848d08ac796e58918acd525ef46f3f0a7e8e5511d56ecac8/cloudcheck-11.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4370f8c250030942f6fc9ff1f128e88d457e2791c92d5ce6239992d450045495", size = 1582655, upload-time = "2026-10-20T22:03:48.645Z" }, + { url = "https://files.pythonhosted.org/packages/9f/bf/53b5d21b6a8591f9bfb42e25669fe4a5c6219404453affd8ab09bab58eb9/cloudcheck-11.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e9743130a5ad6d9e6653169632b62b697afa5396d46a9ff3e4e03e5f44223f36", size = 4228394, upload-time = "2026-10-30T06:47:58.173Z" }, + { url = "https://files.pythonhosted.org/packages/fd/6a/d0c6bf0a0c278908a610d0ee6c2443c1322516457cd124b578aebbfe6a16/cloudcheck-11.2.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:77f9d00cb389a46096e237a1f3028a9df98a6c5d62a1f7c4fd90b6b613cb3bae", size = 3587027, upload-time = "2026-10-30T06:48:11.654Z" }, + { url = "https://files.pythonhosted.org/packages/f2/2b/a0fff65d5a9dc249e873de63a8321bb1d7993d9adcd80f922380de818ed8/cloudcheck-11.2.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:4fc2d5ab71fadeaa7dd23936f4888442426e12306c4e4bce5e76e763f48b937d", size = 4167963, upload-time = "2026-10-30T06:48:37.865Z" }, + { url = "https://files.pythonhosted.org/packages/c9/54/cefadc8b1e47cbd47b4a954831e31c5e6efb3ddfe2516dc06984721df359/cloudcheck-11.2.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:a6469bc193f9c0b3273b5fadf728b165670df6154e127f78b5bc26e6956931a1", size = 4082775, upload-time = "2026-10-30T06:48:24.556Z" }, + { url = "https://files.pythonhosted.org/packages/c0/e1/583a72ac1316c639637ac04582435c12add88d07b4560d0a4d77866009f9/cloudcheck-11.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3bbdede095e7a843a914ab6670a46ba6c15b15a2aa1f35df013640b2a1e895a9", size = 3997452, upload-time = "2026-10-30T06:48:50.403Z" }, { url = "https://files.pythonhosted.org/packages/56/01/e2565b1875f85982ad958f9c281693b4b971d0fdb35d72daa367f0ae96a6/cloudcheck-11.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a514139cf3641d8e9be749a4f6bc79219e50e23fdd16346f77ad5a12bac35aff", size = 4228396, upload-time = "2026-10-20T22:02:48.859Z" }, { url = "https://files.pythonhosted.org/packages/4a/40/73dc51ab553bc50946bf12e65b5428fce3003c756514792581977209906c/cloudcheck-11.2.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b7e85fa6105748bd91c0fb82b8e46f65ccb733fd44e274819016560bfd5a4c26", size = 3587029, upload-time = "2026-10-20T22:03:01.268Z" }, { url = "https://files.pythonhosted.org/packages/a4/99/7a390e325f3cb310f9e842cafb1210f20d64434f8eab2e536d51249fc286/cloudcheck-11.2.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7b2d043f1c20f3fb42fa45807a0718bbe3051dbc23fbe2f2065cf0dac0268a3", size = 4167966, upload-time = "2026-10-20T22:03:22.317Z" }, @@ -820,6 +861,11 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/58/51/01d79d469d42a8feb27c3e3d20468748ef40e2c5f383ded4afcc470cafdf/cloudcheck-11.2.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a2e9333470b431c608a5cfcf78e9fbf1e3021fabcf42f40b3dfe751a65c1757c", size = 4261933, upload-time = "2026-10-20T22:04:23.423Z" }, { url = "https://files.pythonhosted.org/packages/c6/86/19fcc02bac1ad74a03ca3c3f480532232a30f6133870f5243e6379a419ff/cloudcheck-11.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:09a3b46cddfeca6764a907d3e89ae8b664e66158afc63579bc95e708e805474b", size = 4288135, upload-time = "2026-10-20T22:04:32.803Z" }, { url = "https://files.pythonhosted.org/packages/ea/58/5afb78a1a141863f45c9d7c80963e32496b79b13470dd90a35976e25787c/cloudcheck-11.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:a18b0a11b7d2f8074b1d6d1d789212f2706b25cc7017ededcab91c792042c576", size = 1422824, upload-time = "2026-10-20T22:04:43.075Z" }, + { url = "https://files.pythonhosted.org/packages/da/1a/ff20135e9c8753d93858e7d4e822080b801bda47a5f78a91ef2ae79b003f/cloudcheck-11.2.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5eb6cce23f841fe77318ccc328321bcb95239b1d6cddeffeac70d32ebf29ce2a", size = 4226007, upload-time = "2026-10-30T06:47:59.536Z" }, + { url = "https://files.pythonhosted.org/packages/4d/99/9f7814310dc630bd6981c9a241b1e7a8759acce19c5f8e4ffaef43207e68/cloudcheck-11.2.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:a840bf66a8002f257d865f723281d94a8f0ff59e5347127390221eeb43bebcee", size = 3579867, upload-time = "2026-10-30T06:48:13.018Z" }, + { url = "https://files.pythonhosted.org/packages/57/61/00ca7bafd4eab4fc00334be9f09a631b6e48280723689d53c7b45e1a7d78/cloudcheck-11.2.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:eee87d3607050a7b18aa21d657795d60015228bd7851418701a280f750e41293", size = 4160237, upload-time = "2026-10-30T06:48:39.466Z" }, + { url = "https://files.pythonhosted.org/packages/2a/4a/ceadfce8e98874ba11ab68338e9e4109442870055658cf3b86b00d66c37e/cloudcheck-11.2.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:587368e094fe1422081d26713cb27a47c31a87d66c7f812808b0b5fbdded20f5", size = 4082294, upload-time = "2026-10-30T06:48:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/67/72/ed6b2792e67c3f8fed338a794180d76fc5e4e09135f3fca57206d8908891/cloudcheck-11.2.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:462841434734824f50ca88f0bcf198b0694b46043e71e4ec72af5de5d6404fb9", size = 3999178, upload-time = "2026-10-30T06:48:51.987Z" }, { url = "https://files.pythonhosted.org/packages/87/92/d444bdc4ea089bbcb5858f9def1e53f263e2fe0a8d4b819e50ff6b044719/cloudcheck-11.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3282d046d29d59619c3a8d5a56dd9bd7b84d4b28f22464e53b4bd76a7e95120c", size = 4226009, upload-time = "2026-10-20T22:02:51.052Z" }, { url = "https://files.pythonhosted.org/packages/51/d6/923d272ceb898cca51ade85eb0ad4622f2a34aa3416952c360fc271e75f7/cloudcheck-11.2.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3b09aca7cb8c7f477d15243bc3ca4041b6f56d43faa1964c6497b4408bff762d", size = 3579868, upload-time = "2026-10-20T22:03:02.963Z" }, { url = "https://files.pythonhosted.org/packages/02/d2/53849d7dc64ec5b37d385e727441355e9ac0999d7cb630ccfd110c59b3dc/cloudcheck-11.2.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2acb9c4679c2a820b9f502f08880984bd01410edaa198c9c87bc0ffaf8af24ad", size = 4160237, upload-time = "2026-10-20T22:03:23.937Z" }, @@ -830,12 +876,35 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1b/33/e17471996dd3a1317cf5cae509af8f928da7fdcfce5dfcf424ee7c80d492/cloudcheck-11.2.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf6a4bddd0732186d93838eb743d70f633cd82d23a4c93180ecf4a5b1f1e5f74", size = 4254296, upload-time = "2026-10-20T22:04:24.943Z" }, { url = "https://files.pythonhosted.org/packages/f8/09/78bc8ad0c0f0b9c68288b018143217a8827ff34b14c311d45b508903712f/cloudcheck-11.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3d7f32b834e357820a43a7a5ca0059aab5b89ebf5b985a195a4227a77604def7", size = 4289111, upload-time = "2026-10-20T22:04:34.593Z" }, { url = "https://files.pythonhosted.org/packages/0b/1e/221714844b528c8434e1ac3de2e2b3535d6439402966614c09a3c5d9ad5b/cloudcheck-11.2.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:13678bdca0bf18a8d2ab26464e06498c7dfc7b8fcb50d5b097d085b217f3d2c4", size = 1582457, upload-time = "2026-10-20T22:03:50.363Z" }, + { url = "https://files.pythonhosted.org/packages/7b/57/be3feec481908a512fe6604f165406dea47bc62f620588742b6981f8767b/cloudcheck-11.2.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad432681c8fa455c87d32b89f979dcab85cfef191f02e66b000b642eb0917f8c", size = 4227827, upload-time = "2026-10-30T06:48:00.947Z" }, + { url = "https://files.pythonhosted.org/packages/3b/72/03154ac16f79d5b7a7b7b398340a0e5a643075cfe3bd579d29a727733c68/cloudcheck-11.2.0-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:830e930aabc06fb30ef993ec7f7854ec9a13e2bc96b7dbdb8f82035a40fa35f5", size = 3588361, upload-time = "2026-10-30T06:48:14.282Z" }, + { url = "https://files.pythonhosted.org/packages/3a/b1/b5c1f4cce456a4c960bc31a7ac85e13e83f3dd577883e5dcb8f89fbbc5af/cloudcheck-11.2.0-cp315-cp315-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1503a6fde2f6be0ec80a26d2e54ddcd1c051b369a41026ea755fee4932b99998", size = 4169344, upload-time = "2026-10-30T06:48:40.895Z" }, + { url = "https://files.pythonhosted.org/packages/54/15/cd13268a03e66625cb41cc2cab8dc082cc421f308c100d254104e777c058/cloudcheck-11.2.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:8ca529660c00b76d4c8483d80fcb8c0094ce8b93689536f90094aadcb4636a88", size = 4085068, upload-time = "2026-10-30T06:48:28.109Z" }, + { url = "https://files.pythonhosted.org/packages/a5/a5/f3d7d9eeb6930d05e794d9035b94fc8e0fd96956adaf57b0ab3eb58c13f6/cloudcheck-11.2.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:83c6bb81a2517f41a8e0281f8e2b0a8ac855a12e1e2aed65b162921b8d5b665f", size = 3997537, upload-time = "2026-10-30T06:48:53.279Z" }, { url = "https://files.pythonhosted.org/packages/a9/15/3453dfc0087c999a3fe6df5a1a9fb9819373ed4b99508f294be6a5b16bbb/cloudcheck-11.2.0-cp315-cp315-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf94548075a8ae837c2a3ad33b391c9d4bf842c3e39380803cef1ad005f68081", size = 4169348, upload-time = "2026-10-20T22:03:25.632Z" }, { url = "https://files.pythonhosted.org/packages/97/d9/69e126d83883596841816b26093714fbdb1caf6398b1baaae091de0d6b6c/cloudcheck-11.2.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9c3af0f162d70f18749105e86eb71406a8cd7c4ac0b2b784370ff378dcf0069", size = 3997555, upload-time = "2026-10-20T22:03:38.418Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8e/6b623b572c5f2bfabcf40f2fed9f8c184d0abdd80b37ebfcf0e6a908871b/cloudcheck-11.2.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:ed83df11f4ed4a3a755d1e9c1c8411dafd464f92fd76f614a7fcddac9748e815", size = 4629467, upload-time = "2026-10-30T06:49:01.911Z" }, + { url = "https://files.pythonhosted.org/packages/82/c4/cdb06ce349789e5798e861d5a5608b04fd881a1ccc60e13cf4a408e5ca83/cloudcheck-11.2.0-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:56e50e0941b5811610f2e2a367393cb8d197628ef79e9145e322815fddc00dae", size = 3919056, upload-time = "2026-10-30T06:49:08.356Z" }, + { url = "https://files.pythonhosted.org/packages/65/f3/cc847c97a2d975d1a7b3f71a065a2d4c88ab9d2c2c59406da87d6d85b836/cloudcheck-11.2.0-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:ec891ce17f835f25c5c45737befc78614de5b6964af6c7301dba90034eeec784", size = 4262849, upload-time = "2026-10-30T06:49:14.617Z" }, + { url = "https://files.pythonhosted.org/packages/eb/94/1eb63341444ca358b19ac63df150eaa92ebcec6cfb03caaa13b1f6b14198/cloudcheck-11.2.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:f22854e1ec2a26d8facde15ffe782a7a23fbfccc7148204c3b55be543c553108", size = 4287550, upload-time = "2026-10-30T06:49:20.559Z" }, { url = "https://files.pythonhosted.org/packages/67/a9/fdbcc45f03a4d6ec8f4c592aa64e67f6adea33dfb61877531e8edb80d3b0/cloudcheck-11.2.0-cp315-cp315-win32.whl", hash = "sha256:c6d361dcbf540d32c211c9a7b900b31385abed4e50b6e7147be6c4e572fb24ac", size = 1326083, upload-time = "2026-10-20T22:04:46.007Z" }, { url = "https://files.pythonhosted.org/packages/b1/87/9b9039fdbd774b43a1537057385480dc486cc836b8070293e19d185784a7/cloudcheck-11.2.0-cp315-cp315-win_amd64.whl", hash = "sha256:2660a7730f7b79d3a6e2f3def102d0b63546cd2d46fc44b2bc58dda366c91fb2", size = 1423006, upload-time = "2026-10-20T22:04:44.364Z" }, + { url = "https://files.pythonhosted.org/packages/4f/1a/fa23e0c56e3fc5953175c9d75b942e0514ebea6583fd9070407865075b8c/cloudcheck-11.2.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:beddc2b4fcdd39b4d94e1a8b8824b8ab45912fa410e776b2707c10fbf041c16b", size = 4223999, upload-time = "2026-10-30T06:48:02.347Z" }, + { url = "https://files.pythonhosted.org/packages/ca/13/84677b83f97e4cd26baf7fd5b0b0ddf9afb165dace1ae7fc12c7d7d4516e/cloudcheck-11.2.0-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:ebf0bfc5f8a2346275e52b1909ca50eb3e8b19b83e00fa18ff388347edc7d847", size = 3580482, upload-time = "2026-10-30T06:48:15.58Z" }, + { url = "https://files.pythonhosted.org/packages/88/fd/b2b74ca94dffebbbf3bd45e936cfbe1a80b430bd2795f21b584a28727965/cloudcheck-11.2.0-cp315-cp315t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:270300edeeab06c31c0c88923078a3d520f6a8f831e99cdcdfa80f3a67d5cbe0", size = 4161021, upload-time = "2026-10-30T06:48:42.545Z" }, + { url = "https://files.pythonhosted.org/packages/18/aa/faa49acd7122b3cf0758e01cff8d325afce5c568253a1f061e1b5b13f468/cloudcheck-11.2.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3895f24af7d8cc8be9a943353624d2de212077f87afd9c9a1771fe6ed08a21a7", size = 4082436, upload-time = "2026-10-30T06:48:29.431Z" }, + { url = "https://files.pythonhosted.org/packages/db/99/56117afedded4e2de84bd8b373db5f935e9e771bc3237c27c466483eb722/cloudcheck-11.2.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9a5602721952a44bc25c4298c4127177c089a929672f703d7217a04eee53a89d", size = 3998394, upload-time = "2026-10-30T06:48:54.651Z" }, { url = "https://files.pythonhosted.org/packages/36/04/4d6e3b5d286105a230b9bb5de136aa00a2586762415e662011f2c8ecc4b2/cloudcheck-11.2.0-cp315-cp315t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f04809725e2cf3e3b47c6550132f55065831f0c8c1568d3d1b4e2a9dec375687", size = 4161023, upload-time = "2026-10-20T22:03:27.313Z" }, { url = "https://files.pythonhosted.org/packages/53/1c/96d6e51e7e11a9d8ca1637ec23533412df02d4ddf330b0f353bb402c5847/cloudcheck-11.2.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c336fa395b3f3610de38ae43f7912ec743ec82288881f4cf7c7d4cfd95e34d6a", size = 3998418, upload-time = "2026-10-20T22:03:39.875Z" }, + { url = "https://files.pythonhosted.org/packages/67/0d/d97a0a69c395f4aa1649afe576f674c4830efc53958010b3efe4df7622d4/cloudcheck-11.2.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:6ace147cb6f89276d556a62c054f39b1a3f22949d8e5a3a39560eea3e14e47c1", size = 4628109, upload-time = "2026-10-30T06:49:03.282Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/3274984b70a311fa222340c5f9e6bc80c36aaaef054e0e1cf24c74b8aaab/cloudcheck-11.2.0-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:8e372c433a48e56e2e632a096348a10800fac369a8a8c0b033c5933496f88c97", size = 3911150, upload-time = "2026-10-30T06:49:09.912Z" }, + { url = "https://files.pythonhosted.org/packages/56/ae/8064abb3962a49b2c8573af29bc3e41779de0a4d750ee32649b6c9e6f78a/cloudcheck-11.2.0-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:302be288156b8adfe8c9e8de33a6383214f4b99efed88038c9ee4dd4fe16d3ea", size = 4254418, upload-time = "2026-10-30T06:49:15.986Z" }, + { url = "https://files.pythonhosted.org/packages/c3/3e/19532f76020b466f61f3f4894b3255d94e4777419ac73d10563e071ba0f1/cloudcheck-11.2.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:a0f5f5f3831c5557855ab9996cccbbe36079527c8f76f0a621491c7b7572578d", size = 4287586, upload-time = "2026-10-30T06:49:22.096Z" }, + { url = "https://files.pythonhosted.org/packages/6f/9d/d04f3c83d5e1d9fb2d6b0c1bc050dbe6ffdf48a1bdd398b2054196f34979/cloudcheck-11.2.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd2d096a6c2e3daefc0b2a724056738aa7c703a6895007b4e7916004cdd0d585", size = 4228704, upload-time = "2026-10-30T06:48:03.798Z" }, + { url = "https://files.pythonhosted.org/packages/bd/11/c062281f44251b8aeca7e7c76db9f982a299d034d1b82e67ad1be08fd75f/cloudcheck-11.2.0-pp311-pypy311_pp73-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:29fe6f0bea68fdcf6ce491066b3830498420cc25547e4396ea690fb96800f77b", size = 3589191, upload-time = "2026-10-30T06:48:17.036Z" }, + { url = "https://files.pythonhosted.org/packages/ae/f4/364b66f451f541ad5f9ef5d6118ee6343136f804537f0ce1592a59dbaccd/cloudcheck-11.2.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:8b6656be18adfc19289e038573b342f792264db0554290d42a528fc0034c2c3d", size = 4170438, upload-time = "2026-10-30T06:48:43.801Z" }, + { url = "https://files.pythonhosted.org/packages/71/01/5841364d8e6193f4b07533ed0cf7181debb52dac21886f1ef51fe0bca32a/cloudcheck-11.2.0-pp311-pypy311_pp73-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:db009b218bd1b6686668846e2af3637413b4b8aae39b1805a875f2b368ca20d5", size = 4087648, upload-time = "2026-10-30T06:48:30.864Z" }, + { url = "https://files.pythonhosted.org/packages/e9/d2/df8833a4f15e0e3cee329d9bd9af1ea28fa154d6fa262706c1af9277b33e/cloudcheck-11.2.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1367c2ddba3d5bbcdd2e3121822b055698ac87a18ae03df3a471c0315b4c8374", size = 4005148, upload-time = "2026-10-30T06:48:56.249Z" }, { url = "https://files.pythonhosted.org/packages/bc/b2/88391dc949d7fdd9c405bc7c79e9e83752ef592ff74dfefff1e2ce87e849/cloudcheck-11.2.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d986a24ba563ef44a8c7e2f49a09c4e9692ca5e278d14468037b17dfcf032796", size = 4228705, upload-time = "2026-10-20T22:02:52.999Z" }, { url = "https://files.pythonhosted.org/packages/17/6f/4cfc9fb7360eb4457a2fe39e058adfdc2ae84ae0ecbc6ba550c9246ac6f2/cloudcheck-11.2.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:583880be734f2fcbc1ef55f9e1a05355427ee53a99390861746e008eddfb6153", size = 3589196, upload-time = "2026-10-20T22:03:05.321Z" }, { url = "https://files.pythonhosted.org/packages/48/47/bdde318e5971337c328f30c50597fb2c79fba8525b752c5944df0e31b32f/cloudcheck-11.2.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:158d516d39c94ab3954b085db74b39e176cad9d13f0349f46a079d3125d52171", size = 4170436, upload-time = "2026-10-20T22:03:28.886Z" }, @@ -845,6 +914,13 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/62/a9/0310e4e304196e63536b7575d9008493efa4a5dbc35c8ed4a568f8b58c6e/cloudcheck-11.2.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:73706117b5fee402e3a9a69c639ee6e3d1718b18b0169c6ac8f8037df7c57c21", size = 3921186, upload-time = "2026-10-20T22:04:16.997Z" }, { url = "https://files.pythonhosted.org/packages/9a/4f/cae603209067b0e4ae3bf7d0ba4104a4dadd2892869f2b59ee97c3fb2d5c/cloudcheck-11.2.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1db5379cdee879aba236bc8d7ef806f9a5ec9ad014c031e64acdfa7fd89e19f7", size = 4264891, upload-time = "2026-10-20T22:04:26.417Z" }, { url = "https://files.pythonhosted.org/packages/ea/54/9800c59c5d8f3895ad8ffee439f7fd1f585f1e6e7b158c863a5c315c7742/cloudcheck-11.2.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:16b70fa359d3467a62408ddf54db567a24add3b7658428fbddda250aeff7aec6", size = 4295494, upload-time = "2026-10-20T22:04:36.408Z" }, + { url = "https://files.pythonhosted.org/packages/c1/de/7a4fec4227c71977be0c183657967b0d6976b49b9d1caf46b01c2da9a989/cloudcheck-11.2.0-pp312-pypy312_pp80-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e89ce70431523e1b863400cf0097cf2dde4791bf0f4a1a7f04b618e0c9516782", size = 4223927, upload-time = "2026-10-30T06:48:05.348Z" }, + { url = "https://files.pythonhosted.org/packages/71/17/a7554cee3fd9ca725144995748e89a728a1d49e83aff440c9326250337e0/cloudcheck-11.2.0-pp312-pypy312_pp80-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:2ec26038f711c4cb9c95ccf8cf373fb42021cb05949cbcd4e9973854c65d4775", size = 3585724, upload-time = "2026-10-30T06:48:18.445Z" }, + { url = "https://files.pythonhosted.org/packages/74/65/234cdab63ebf839551c5926ce25c2ca0849bf478955bbf52cb2b1a01a0fe/cloudcheck-11.2.0-pp312-pypy312_pp80-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:11cc88442a8048fd16edd57b7e4c067b91b450c48f45d5bc12dcc649b87bbe80", size = 4082206, upload-time = "2026-10-30T06:48:32.271Z" }, + { url = "https://files.pythonhosted.org/packages/31/41/bacb0a9cb9c80ac11a342131e838bd4020b54e00c79bdacabe4fec8a17bb/cloudcheck-11.2.0-pp312-pypy312_pp80-musllinux_1_2_aarch64.whl", hash = "sha256:84f6c23e75a590b8c56e9ce9b589b3850362aabd484d03ab061bb4b32bbe243c", size = 4629137, upload-time = "2026-10-30T06:49:04.971Z" }, + { url = "https://files.pythonhosted.org/packages/5f/32/7096a9b815c26843d641d8496d2f19c40ed3a4947bd55699256630f32ce5/cloudcheck-11.2.0-pp312-pypy312_pp80-musllinux_1_2_armv7l.whl", hash = "sha256:72d24ff001129a611515346e922ed06f220ffb049e0d5f6624e4971768e0eae8", size = 3915679, upload-time = "2026-10-30T06:49:11.604Z" }, + { url = "https://files.pythonhosted.org/packages/27/e3/54e13abfbf7a8c916c344b472f79f4584d2eb590ae2a9bb173f93fd1d8a7/cloudcheck-11.2.0-pp312-pypy312_pp80-musllinux_1_2_i686.whl", hash = "sha256:0f376541d50a741ea89fcd3ebdec9dea72d5a6a3bed64397d73477878192ff71", size = 4260471, upload-time = "2026-10-30T06:49:17.598Z" }, + { url = "https://files.pythonhosted.org/packages/06/fa/1585b6ab6d1cbd3b3f994bc32294f7d1e68b37ef805faabe66b1a5bcc03e/cloudcheck-11.2.0-pp312-pypy312_pp80-musllinux_1_2_x86_64.whl", hash = "sha256:bd01012ff96a098d25bbe0328733599ae3751dc36303729f2631928d08a35034", size = 4286171, upload-time = "2026-10-30T06:49:23.748Z" }, ] [[package]] @@ -3012,7 +3088,8 @@ name = "soupsieve" version = "3.0.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.12'", + "python_full_version >= '3.13'", + "python_full_version == '3.12.*'", "python_full_version >= '3.11.5' and python_full_version < '3.12'", ] sdist = { url = "https://files.pythonhosted.org/packages/5e/77/2dcfa996b01702ab8fd0763d84098f6a640d6162a328f1c04c2697579a1a/soupsieve-3.0.3.tar.gz", hash = "sha256:7dcf6022eed0399eb9934a75e020148f7a2024c37b7dfcd3cf2c5505d69c364e", size = 115923, upload-time = "2026-10-12T13:21:17.696Z" } From f4213f7f3c33b1f5848c154a864df446e55a3c22 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Mon, 2 Nov 2026 15:22:58 -0500 Subject: [PATCH 28/28] Match brute nameserver exclusions by host --- bbot/core/helpers/dns/brute.py | 10 +++++++++- bbot/test/test_step_1/test_dns.py | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/bbot/core/helpers/dns/brute.py b/bbot/core/helpers/dns/brute.py index 32b7811023..0dfcd49678 100644 --- a/bbot/core/helpers/dns/brute.py +++ b/bbot/core/helpers/dns/brute.py @@ -214,10 +214,18 @@ async def resolver_file(self): nameservers = set(self.parent_helper.read_file(self._resolver_file_original)) # exclude whatever the main DNS path is using, custom or system # this helps prevent rate-limiting which might cause BBOT's main dns queries to fail - nameservers.difference_update(self.parent_helper.dns.resolvers) + # compare by host, since our resolvers may carry a port (8.8.8.8:53) while the brute list is bare IPs + excluded_hosts = {self._resolver_host(r) for r in self.parent_helper.dns.resolvers} + nameservers = {n for n in nameservers if self._resolver_host(n) not in excluded_hosts} self._resolver_file = self.parent_helper.tempfile(nameservers, pipe=False) return self._resolver_file + def _resolver_host(self, resolver): + try: + return str(self.parent_helper.split_host_port(resolver)[0]) + except ValueError: + return resolver + def gen_random_subdomains(self, n=50): delimiters = (".", "-") lengths = list(range(3, 8)) diff --git a/bbot/test/test_step_1/test_dns.py b/bbot/test/test_step_1/test_dns.py index 04e29f03e4..e58be9d574 100644 --- a/bbot/test/test_step_1/test_dns.py +++ b/bbot/test/test_step_1/test_dns.py @@ -980,6 +980,20 @@ async def test_dns_helpers(bbot_scanner): resolver_file = await scan.helpers.dns.brute.resolver_file() assert set(scan.helpers.read_file(resolver_file)) == {"1.2.3.4", "4.3.2.1"} + # custom nameservers given with a port are matched by host against the bare-IP brute list + brute_nameservers = tempwordlist(["1.2.3.4", "8.8.4.4", "4.3.2.1", "8.8.8.8", "2001:4860:4860::8888"]) + scan = bbot_scanner( + config={ + "dns": { + "nameservers": ["8.8.8.8:53", "8.8.4.4:5353", "[2001:4860:4860::8888]:53"], + "brute_nameservers": brute_nameservers, + } + } + ) + await scan._prep() + resolver_file = await scan.helpers.dns.brute.resolver_file() + assert set(scan.helpers.read_file(resolver_file)) == {"1.2.3.4", "4.3.2.1"} + # with no custom nameservers, the system ones are used scan = bbot_scanner() await scan._prep()