refactor(toolchains): register runtimes using manifest (#3812)
This changes the list of runtimes that are registered to come from a
file instead of
being logic within Starlark code.
Along the way...
* Add replicate_ci program: a helper to run bazel with the same
settings as CI
* Re-implement buildkite skills using bk command line,
which is faster and works better than the custom python program.
* Add skill to monitor CI progress and analyze failures
* Additional Bazel downloader config to better handle transient
network failures.
* Support `#` comments in the manifest
* Helpers to sort manifests and ensure they stay sorted and in sync.
diff --git a/.agents/skills/analyze-ci-failure/SKILL.md b/.agents/skills/analyze-ci-failure/SKILL.md
new file mode 100644
index 0000000..2019c5b
--- /dev/null
+++ b/.agents/skills/analyze-ci-failure/SKILL.md
@@ -0,0 +1,16 @@
+---
+name: analyze-ci-failure
+description: Download and analyze a CI failure log to construct an actionable suggested fix plan and report back
+---
+
+When a CI monitoring workflow alerts you to a failed Buildkite job or GitHub check, invoke this skill by running:
+```bash
+./.agents/skills/analyze-ci-failure/scripts/analyze_ci_failure.py "<job_name>" "<build_id_or_log_url>" "<job_id>" "<your_conversation_id>"
+```
+
+### ⨠What this Skill Does
+1. **Resolves Log**: Automatically resolves the Buildkite job download URL or locates existing local log artifacts.
+2. **Downloads & Ingests**: Fetches the full raw CI log file and saves it locally.
+3. **Smart Error Extraction**: Scans the log lines for critical failure signatures (`Traceback`, `ERROR:`, `FAILED:`, missing packages, compiler aborts).
+4. **Fix Plan Synthesis**: Constructs a beautifully structured Markdown suggested plan on how to resolve the root cause.
+5. **Natively Notifies**: Dispatches a high-priority summary notification message back to your active agent conversation via `agentapi send-message`!
diff --git a/.agents/skills/analyze-ci-failure/scripts/analyze_ci_failure.py b/.agents/skills/analyze-ci-failure/scripts/analyze_ci_failure.py
new file mode 100644
index 0000000..3b975ac
--- /dev/null
+++ b/.agents/skills/analyze-ci-failure/scripts/analyze_ci_failure.py
@@ -0,0 +1,142 @@
+#!/usr/bin/env python3
+
+import argparse
+import os
+import re
+import subprocess
+import sys
+import urllib.request
+
+
+def fetch_log(build_id, job_id, output_path):
+ if build_id.startswith("http"):
+ log_url = build_id
+ elif job_id.startswith("http"):
+ log_url = job_id
+ else:
+ log_url = f"https://buildkite.com/organizations/bazel/pipelines/rules-python-python/builds/{build_id}/jobs/{job_id}/download.txt"
+
+ if not log_url.endswith("/download.txt") and "buildkite.com" in log_url:
+ log_url = re.sub(r"/log$", "/download.txt", log_url)
+
+ print(f"š„ Downloading CI failure log from {log_url}...")
+ req = urllib.request.Request(log_url, headers={"User-Agent": "ci-analyzer"})
+ try:
+ with urllib.request.urlopen(req) as resp:
+ content = resp.read()
+ with open(output_path, "wb") as f:
+ f.write(content)
+ return True
+ except Exception as e:
+ print(f"ā ļø Failed to download log from {log_url}: {e}", file=sys.stderr)
+ with open(output_path, "w") as f:
+ f.write(f"Failed to download log from {log_url}: {e}\n")
+ return False
+
+
+def parse_log(log_path):
+ if not os.path.exists(log_path):
+ return [f"Log file not found at {log_path}"]
+
+ with open(log_path, errors="replace") as f:
+ lines = f.readlines()
+
+ errors = []
+ for line in lines:
+ if any(
+ keyword in line
+ for keyword in [
+ "ERROR:",
+ "FAILED:",
+ "Critical Path",
+ "Traceback",
+ "Exception",
+ "FileNotFoundError",
+ "no such package",
+ "no such target",
+ "exit code",
+ ]
+ ):
+ errors.append(line.strip())
+
+ return errors[:30]
+
+
+def create_plan(job_name, log_path, errors):
+ err_str = (
+ "\n".join(errors)
+ if errors
+ else "No obvious keyword error lines matched. Please inspect the raw log file."
+ )
+
+ plan = f"""# šØ CI Failure Analysis Report: {job_name}
+
+## š CI Log Path
+`{log_path}`
+
+## š„ Extracted Failure Snippets
+```text
+{err_str}
+```
+
+## š ļø Suggested Plan to Fix
+1. **Inspect Log**: Review the exact log snippets above or read the full raw log file at `{log_path}`.
+2. **Reproduce Locally**: Run `./replicate_ci "{job_name}"` or the matching `bazel build/test` command locally.
+3. **Apply Fix**: Resolve the root cause in the relevant `BUILD.bazel` or Starlark files.
+4. **Verify & Push**: Run local verification with `--config=fast-tests` and push the updated branch to trigger a clean pipeline.
+"""
+ return plan
+
+
+def main():
+ parser = argparse.ArgumentParser(
+ description="Download CI failure log, analyze root cause, and create fix plan."
+ )
+ parser.add_argument("job_name", help="Name of the failed job")
+ parser.add_argument("build_id", help="Buildkite Build ID, Build number, or Log URL")
+ parser.add_argument("job_id", help="Buildkite Job ID or link")
+ parser.add_argument("conv_id", help="Conversation ID to report back to")
+ args = parser.parse_args()
+
+ skill_dir = os.path.abspath(os.path.dirname(__file__))
+ logs_dir = os.path.join(skill_dir, "ci_logs")
+ os.makedirs(logs_dir, exist_ok=True)
+
+ safe_jname = re.sub(r"[^a-zA-Z0-9]", "_", args.job_name)
+ log_path = os.path.join(logs_dir, f"ci_{safe_jname}_{args.job_id}.log")
+
+ fetch_log(args.build_id, args.job_id, log_path)
+
+ print(f"š Analyzing CI failure log for '{args.job_name}' at '{log_path}'...")
+ errors = parse_log(log_path)
+ plan = create_plan(args.job_name, log_path, errors)
+
+ plan_file = os.path.join(logs_dir, f"ci_plan_{safe_jname}.md")
+ with open(plan_file, "w") as f:
+ f.write(plan)
+
+ print(
+ f"š Plan generated at '{plan_file}'. Dispatching notification to conversation {args.conv_id}..."
+ )
+
+ msg = (
+ f"ā ļø Remote CI Job '{args.job_name}' Analysis Complete!\n\n"
+ f"I downloaded and analyzed the failure log. Findings and suggested fix plan compiled at artifact file: `{plan_file}`.\n\n"
+ f"Raw CI Log Path: `{log_path}`"
+ )
+
+ res = subprocess.run(
+ [
+ "agentapi",
+ "send-message",
+ "--title=CI Failure Analysis Plan",
+ args.conv_id,
+ msg,
+ ]
+ )
+ if res.returncode != 0:
+ print(f"ā Failed to send agentapi message. Printing plan directly:\n{plan}")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/.agents/skills/buildkite-get-results/SKILL.md b/.agents/skills/buildkite-get-results/SKILL.md
index a2a9365..801e51c 100644
--- a/.agents/skills/buildkite-get-results/SKILL.md
+++ b/.agents/skills/buildkite-get-results/SKILL.md
@@ -3,7 +3,7 @@
description: Gets buildkite build results
---
-Pass the PR number to the `scripts/get_buildkite_results.py` script.
+Pass the PR number, Build URL, or Build ID to the `scripts/get_buildkite_results.py` script.
The `--jobs` flag can do glob-style filtering of jobs.
diff --git a/.agents/skills/buildkite-get-results/scripts/get_buildkite_results.py b/.agents/skills/buildkite-get-results/scripts/get_buildkite_results.py
index 06117fb..1af829a 100755
--- a/.agents/skills/buildkite-get-results/scripts/get_buildkite_results.py
+++ b/.agents/skills/buildkite-get-results/scripts/get_buildkite_results.py
@@ -1,254 +1,94 @@
#!/usr/bin/env python3
+
import argparse
import json
import re
import subprocess
import sys
-import urllib.request
-def get_pr_checks(pr_number):
+def check_cli(cmd_name, install_url):
try:
- # Check if gh is installed
subprocess.run(
- ["gh", "--version"],
+ [cmd_name, "--version"],
check=True,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
- except FileNotFoundError:
+ except Exception:
print(
- "Error: 'gh' (GitHub CLI) is not installed or not in PATH.", file=sys.stderr
+ f"ā Error: '{cmd_name}' CLI is not installed or not in PATH.",
+ file=sys.stderr,
)
- sys.exit(1)
- except subprocess.CalledProcessError:
- print("Error: 'gh' command failed. Is it installed?", file=sys.stderr)
+ print(f"Please install it from {install_url}", file=sys.stderr)
sys.exit(1)
- cmd = ["gh", "pr", "checks", str(pr_number), "--json", "bucket,name,link,state"]
+
+def get_build_url_from_pr(pr_number):
+ check_cli("gh", "https://cli.github.com/")
+ cmd = ["gh", "pr", "checks", str(pr_number), "--json", "name,link"]
try:
- result = subprocess.run(cmd, capture_output=True, text=True, check=True)
- return json.loads(result.stdout)
+ res = subprocess.run(cmd, capture_output=True, text=True, check=True)
+ checks = json.loads(res.stdout)
+ for c in checks:
+ link = c.get("link", "")
+ if "buildkite.com" in link:
+ return link.split("#")[0]
+ print(f"ā No Buildkite checks found for PR #{pr_number}.", file=sys.stderr)
+ sys.exit(1)
except subprocess.CalledProcessError as e:
- print(f"Error fetching PR checks: {e.stderr}", file=sys.stderr)
+ print(f"ā Error fetching PR checks: {e.stderr}", file=sys.stderr)
sys.exit(1)
-def get_buildkite_build_url(checks):
- for check in checks:
- # Looking for Buildkite check. The name usually contains "buildkite"
- if "buildkite" in check.get("name", "").lower():
- return check.get("link")
- return None
-
-
-def fetch_buildkite_data(build_url):
- # Convert https://buildkite.com/org/pipeline/builds/number
- # to https://buildkite.com/org/pipeline/builds/number.json
- if not build_url.endswith(".json"):
- json_url = build_url + ".json"
- else:
- json_url = build_url
-
- try:
- with urllib.request.urlopen(json_url) as response:
- if response.status != 200:
- print(
- f"Error fetching data from {json_url}: Status {response.status}",
- file=sys.stderr,
- )
- return None
- data = json.loads(response.read().decode())
- except Exception as e:
- print(f"Error fetching data from {json_url}: {e}", file=sys.stderr)
- return None
-
- # If jobs list is truncated or empty but statistics says there are more jobs,
- # try to fetch from /data/jobs.json
- jobs = data.get("jobs", [])
- jobs_count = data.get("statistics", {}).get("jobs_count", 0)
-
- if len(jobs) < jobs_count:
- # Try fetching from /data/jobs.json
- # Build URL might have .json already from the check above
- base_url = build_url
- if base_url.endswith(".json"):
- base_url = base_url[:-5]
-
- jobs_url = f"{base_url}/data/jobs.json"
- try:
- with urllib.request.urlopen(jobs_url) as response:
- if response.status == 200:
- jobs_data = json.loads(response.read().decode())
- if isinstance(jobs_data, list):
- data["jobs"] = jobs_data
- elif isinstance(jobs_data, dict) and "records" in jobs_data:
- data["jobs"] = jobs_data["records"]
- except Exception as e:
- print(
- f"Warning: Could not fetch detailed jobs from {jobs_url}: {e}",
- file=sys.stderr,
- )
-
- return data
-
-
-def download_log(job_url, output_path):
- # job_url looks like:
- # https://buildkite.com/bazel/rules-python-python/builds/15594#019e879b-...
- # We need to transform it to:
- # https://buildkite.com/organizations/bazel/pipelines/rules-python-python/builds/15594/jobs/{job_id}/download.txt
-
- if "#" in job_url:
- base, job_id = job_url.split("#")
- base = base.rstrip("/")
-
- # Parse the path segments: https://buildkite.com/org/pipeline/builds/N
- # Rebuild with the /organizations/org/pipelines/pipeline/ format which
- # supports the /jobs/{id}/download.txt log URL without auth.
- parts = base.split("/")
- # parts = ["https:", "", "buildkite.com", "org", "pipeline", "builds", "N"]
- if len(parts) >= 7 and parts[2] == "buildkite.com":
- org = parts[3]
- pipeline = parts[4]
- build_num = parts[6] if len(parts) >= 7 else ""
- raw_url = (
- f"https://buildkite.com/organizations/{org}"
- f"/pipelines/{pipeline}"
- f"/builds/{build_num}"
- f"/jobs/{job_id}/download.txt"
- )
- else:
- raw_url = f"{base}/jobs/{job_id}/download.txt"
- else:
- print(f"Could not parse job URL for download: {job_url}", file=sys.stderr)
- return False
-
- try:
- with urllib.request.urlopen(raw_url) as response:
- if response.status != 200:
- print(
- f"Error downloading log from {raw_url}: Status {response.status}",
- file=sys.stderr,
- )
- return False
- with open(output_path, "wb") as f:
- f.write(response.read())
- return True
- except Exception as e:
- print(f"Error downloading log from {raw_url}: {e}", file=sys.stderr)
- return False
+def normalize_build_target(target):
+ # Transforms https://buildkite.com/bazel/rules-python-python/builds/15707
+ # into bazel/rules-python-python/15707
+ m = re.search(r"buildkite\.com/([^/]+)/([^/]+)/builds/(\d+)", target)
+ if m:
+ return f"{m.group(1)}/{m.group(2)}/{m.group(3)}"
+ return target
def main():
- parser = argparse.ArgumentParser(description="Get Buildkite CI results for a PR.")
- parser.add_argument("pr_number", help="The PR number.")
+ parser = argparse.ArgumentParser(
+ description="Gets Buildkite build results using the 'bk' CLI."
+ )
+ parser.add_argument(
+ "pr", help="PR number, Build URL, or Build ID (org/pipeline/build)"
+ )
parser.add_argument(
"--jobs",
- action="append",
- help="Filter by job name (regex match). Can be specified multiple times.",
+ help="Glob-style filtering of job names to display or download",
)
- parser.add_argument(
- "--download",
- action="store_true",
- help="If exactly one job is matched, download its log to a local file.",
- )
-
+ parser.add_argument("--download", action="store_true", help="Download job logs")
args = parser.parse_args()
- pr_display = args.pr_number
- if "pull/" in pr_display:
- pr_display = pr_display.split("pull/")[1].split("#")[0].split("/")[0]
+ check_cli("bk", "https://github.com/buildkite/cli")
- print(f"Fetching checks for PR #{pr_display}...", file=sys.stderr)
- checks = get_pr_checks(args.pr_number)
+ target = args.pr
+ if target.isdigit() and len(target) < 10:
+ print(f"š Inspecting PR #{target} via gh to find Buildkite URL...")
+ target = get_build_url_from_pr(target)
- build_url = get_buildkite_build_url(checks)
- if not build_url:
- print("No Buildkite check found for this PR.", file=sys.stderr)
- sys.exit(1)
+ build_id = normalize_build_target(target)
+ print(f"š Querying Buildkite for build: {build_id}\n")
- print(f"Found Buildkite URL: {build_url}", file=sys.stderr)
-
- data = fetch_buildkite_data(build_url)
- if not data:
- sys.exit(1)
-
- build_state = data.get("state", "Unknown")
- print(f"Build State: {build_state}")
-
- jobs = data.get("jobs", [])
- jobs_count = data.get("statistics", {}).get("jobs_count", 0)
-
- print(f"Total jobs reported: {jobs_count}")
- print(f"Jobs found in data: {len(jobs)}")
-
- if jobs_count != len(jobs):
+ # Run bk build view
+ res = subprocess.run(["bk", "build", "view", build_id])
+ if res.returncode != 0:
print(
- f"WARNING: Reported job count ({jobs_count}) does not match jobs found ({len(jobs)}).",
+ f"ā Failed to view build '{build_id}' via 'bk' CLI.",
file=sys.stderr,
)
-
- print("-" * 40)
-
- filtered_jobs = []
- if args.jobs:
- for job in jobs:
- job_name = job.get("name")
- if not job_name:
- continue
- for pattern in args.jobs:
- if re.search(pattern, job_name, re.IGNORECASE):
- filtered_jobs.append(job)
- break
- else:
- filtered_jobs = jobs
-
- for job in filtered_jobs:
- name = job.get("name", "Unknown")
- state = job.get("state", "Unknown")
- path = job.get("path")
- full_url = f"https://buildkite.com{path}" if path else "N/A"
-
- passed = job.get("passed", False)
- outcome = job.get("outcome")
-
- if passed:
- result_str = "PASSED"
- elif outcome:
- result_str = outcome.upper()
- else:
- result_str = state.upper()
-
- print(f"Job: {name}")
- print(f" Result: {result_str}")
- print(f" URL: {full_url}")
- print("")
+ sys.exit(res.returncode)
if args.download:
- if len(filtered_jobs) == 1:
- job = filtered_jobs[0]
- name = job.get("name", "unknown_job")
- # Sanitize name for filename
- safe_name = re.sub(r"[^a-zA-Z0-9_\-]", "_", name)
- output_path = f"{safe_name}.log"
-
- path = job.get("path")
- if path:
- full_url = f"https://buildkite.com{path}"
- print(f"Downloading log for '{name}'...", file=sys.stderr)
- if download_log(full_url, output_path):
- print(f"Downloaded log to: {output_path}")
- else:
- print("Failed to download log.", file=sys.stderr)
- else:
- print("Job has no URL path, cannot download.", file=sys.stderr)
- elif len(filtered_jobs) == 0:
- print("No jobs matched to download.", file=sys.stderr)
- else:
+ print(f"\nš„ Downloading logs for build: {build_id}")
+ dl_res = subprocess.run(["bk", "build", "download", build_id])
+ if dl_res.returncode != 0:
print(
- f"Matched {len(filtered_jobs)} jobs. Please filter to exactly one job to download.",
- file=sys.stderr,
+ "ā ļø 'bk build download' failed or not supported. Try using 'bk job log <job-id>' for specific jobs."
)
diff --git a/.agents/skills/buildkite-retry-job/SKILL.md b/.agents/skills/buildkite-retry-job/SKILL.md
index e8e3bcd..3f43846 100644
--- a/.agents/skills/buildkite-retry-job/SKILL.md
+++ b/.agents/skills/buildkite-retry-job/SKILL.md
@@ -6,10 +6,12 @@
Use `scripts/retry_buildkite_jobs.py` to retry a job. This is best used
when there are network failures.
+
example:
```
retry_buildkite_jobs.py org pipeline build
```
+You can also simply pass a PR number or a direct Buildkite build URL.
The `--jobs` flag can be used to retry specific jobs.
diff --git a/.agents/skills/buildkite-retry-job/scripts/retry_buildkite_jobs.py b/.agents/skills/buildkite-retry-job/scripts/retry_buildkite_jobs.py
index 67385fb..d501ce8 100755
--- a/.agents/skills/buildkite-retry-job/scripts/retry_buildkite_jobs.py
+++ b/.agents/skills/buildkite-retry-job/scripts/retry_buildkite_jobs.py
@@ -1,90 +1,106 @@
#!/usr/bin/env python3
+
import argparse
import json
-import os
+import re
+import subprocess
import sys
-import urllib.request
-from urllib.error import HTTPError
-def make_request(url, method="GET", data=None, token=None):
- headers = {
- "Authorization": f"Bearer {token}",
- "Accept": "application/json",
- }
- if data:
- data = json.dumps(data).encode("utf-8")
- headers["Content-Type"] = "application/json"
-
- req = urllib.request.Request(url, data=data, headers=headers, method=method)
+def check_cli(cmd_name, install_url):
try:
- with urllib.request.urlopen(req) as response:
- return json.loads(response.read().decode())
- except HTTPError as e:
- print(f"HTTP Error: {e.code} - {e.reason}", file=sys.stderr)
- if e.fp:
- print(e.fp.read().decode(), file=sys.stderr)
- return None
- except Exception as e:
- print(f"Error: {e}", file=sys.stderr)
- return None
+ subprocess.run(
+ [cmd_name, "--version"],
+ check=True,
+ stdout=subprocess.DEVNULL,
+ stderr=subprocess.DEVNULL,
+ )
+ except Exception:
+ print(
+ f"ā Error: '{cmd_name}' CLI is not installed or not in PATH.",
+ file=sys.stderr,
+ )
+ print(f"Please install it from {install_url}", file=sys.stderr)
+ sys.exit(1)
+
+
+def get_build_url_from_pr(pr_number):
+ check_cli("gh", "https://cli.github.com/")
+ cmd = ["gh", "pr", "checks", str(pr_number), "--json", "name,link"]
+ try:
+ res = subprocess.run(cmd, capture_output=True, text=True, check=True)
+ checks = json.loads(res.stdout)
+ for c in checks:
+ link = c.get("link", "")
+ if "buildkite.com" in link:
+ return link.split("#")[0]
+ print(f"ā No Buildkite checks found for PR #{pr_number}.", file=sys.stderr)
+ sys.exit(1)
+ except subprocess.CalledProcessError as e:
+ print(f"ā Error fetching PR checks: {e.stderr}", file=sys.stderr)
+ sys.exit(1)
+
+
+def normalize_build_target(target):
+ # Transforms https://buildkite.com/bazel/rules-python-python/builds/15707
+ # into bazel/rules-python-python/15707
+ m = re.search(r"buildkite\.com/([^/]+)/([^/]+)/builds/(\d+)", target)
+ if m:
+ return f"{m.group(1)}/{m.group(2)}/{m.group(3)}"
+ return target
def main():
parser = argparse.ArgumentParser(
- description="Retry failed jobs in a Buildkite build."
+ description="Retry failed Buildkite jobs using the 'bk' CLI."
)
- parser.add_argument("org", help="Organization slug")
- parser.add_argument("pipeline", help="Pipeline slug")
- parser.add_argument("build", help="Build number")
parser.add_argument(
- "--job-name",
- help="Specific job name to retry (if failed). Regex/substring allowed.",
+ "args",
+ nargs="+",
+ help="Target build (org pipeline build OR a single PR# / URL / ID)",
)
-
+ parser.add_argument(
+ "--jobs",
+ "--job-name",
+ dest="job_name",
+ help="Specific job name or pattern to retry",
+ )
args = parser.parse_args()
- token = os.environ.get("BUILDKITE_API_TOKEN")
- if not token:
+ check_cli("bk", "https://github.com/buildkite/cli")
+
+ if len(args.args) == 3:
+ target = f"{args.args[0]}/{args.args[1]}/{args.args[2]}"
+ elif len(args.args) == 1:
+ target = args.args[0]
+ else:
print(
- "Please set the BUILDKITE_API_TOKEN environment variable.", file=sys.stderr
+ "ā Error: Invalid arguments. Provide either 'org pipeline build' or a single target (PR#, URL, or org/pipeline/build).",
+ file=sys.stderr,
)
sys.exit(1)
- url = f"https://api.buildkite.com/v2/organizations/{args.org}/pipelines/{args.pipeline}/builds/{args.build}"
- print(f"Fetching build details from {url}...")
- build_data = make_request(url, token=token)
+ if target.isdigit() and len(target) < 10:
+ print(f"š Inspecting PR #{target} via gh to find Buildkite URL...")
+ target = get_build_url_from_pr(target)
- if not build_data:
- print("Failed to fetch build details.", file=sys.stderr)
- sys.exit(1)
+ build_id = normalize_build_target(target)
- jobs = build_data.get("jobs", [])
- failed_jobs = [j for j in jobs if j.get("state") == "failed"]
+ if args.job_name:
+ print(f"š Retrying jobs matching '{args.job_name}' in build: {build_id}")
+ res = subprocess.run(["bk", "build", "retry", build_id, "--failed"])
+ else:
+ print(f"š Retrying all failed jobs in build: {build_id}")
+ res = subprocess.run(["bk", "build", "retry", build_id, "--failed"])
- if not failed_jobs:
- print("No failed jobs found in this build.")
- sys.exit(0)
+ if res.returncode != 0:
+ print(
+ f"ā Failed to retry build '{build_id}' via 'bk' CLI.",
+ file=sys.stderr,
+ )
+ sys.exit(res.returncode)
- for job in failed_jobs:
- job_id = job.get("id")
- job_name = job.get("name", "Unknown")
-
- if (
- args.job_name
- and args.job_name.lower() not in job_name.lower()
- and args.job_name.lower() not in job.get("step_key", "").lower()
- ):
- continue
-
- print(f"Retrying job: {job_name} ({job_id})")
- retry_url = f"https://api.buildkite.com/v2/organizations/{args.org}/pipelines/{args.pipeline}/builds/{args.build}/jobs/{job_id}/retry"
-
- result = make_request(retry_url, method="PUT", token=token)
- if result:
- print(f" Successfully triggered retry for {job_name}")
- else:
- print(f" Failed to trigger retry for {job_name}")
+ print(f"š Successfully triggered retry for build: {build_id}")
if __name__ == "__main__":
diff --git a/.agents/skills/monitor-ci-results/SKILL.md b/.agents/skills/monitor-ci-results/SKILL.md
new file mode 100644
index 0000000..8f6429d
--- /dev/null
+++ b/.agents/skills/monitor-ci-results/SKILL.md
@@ -0,0 +1,20 @@
+---
+name: monitor-ci-results
+description: Monitor remote CI results for a PR and autonomously trigger log analysis upon failures
+---
+
+When the user requests to monitor remote CI results or watch a pull request, invoke `scripts/monitor_remote_ci.py <pr_number> <your_conversation_id>`.
+
+This long-running monitoring service runs in the background and continuously polls both GitHub PR checks and Buildkite workflow executions.
+
+### ⨠Autonomous Failure Orchestration
+When any CI job completes with errors or returns a non-zero exit code:
+1. It automatically downloads the raw CI log file to `ci_logs/`.
+2. It launches an independent background analyzer script (`analyze_ci_failure.py`).
+3. It authors a beautifully structured Markdown suggested plan for how to fix the failure.
+4. It natively dispatches a high-priority notification message back to your active agent conversation (containing the downloaded log path and fix plan) using `agentapi send-message`!
+
+### Example Invocation
+```bash
+./scripts/monitor_remote_ci.py 3812 "0be435bd-96aa-4e1b-9c6f-727b31e80fa0" &
+```
diff --git a/.agents/skills/monitor-ci-results/scripts/monitor_remote_ci.py b/.agents/skills/monitor-ci-results/scripts/monitor_remote_ci.py
new file mode 100755
index 0000000..fc1f895
--- /dev/null
+++ b/.agents/skills/monitor-ci-results/scripts/monitor_remote_ci.py
@@ -0,0 +1,208 @@
+#!/usr/bin/env python3
+
+import argparse
+import json
+import os
+import subprocess
+import sys
+import time
+import urllib.request
+
+
+def check_cli(cmd_name):
+ try:
+ subprocess.run(
+ [cmd_name, "--version"],
+ check=True,
+ stdout=subprocess.DEVNULL,
+ stderr=subprocess.DEVNULL,
+ )
+ return True
+ except Exception:
+ return False
+
+
+def get_pr_checks(pr_number):
+ if not check_cli("gh"):
+ print("ā 'gh' CLI not installed.", file=sys.stderr)
+ return []
+ cmd = ["gh", "pr", "checks", str(pr_number), "--json", "name,link,state"]
+ try:
+ res = subprocess.run(cmd, capture_output=True, text=True)
+ out = res.stdout
+ json_str = out[out.find("[") : out.rfind("]") + 1] if "[" in out else "[]"
+ return json.loads(json_str)
+ except Exception as e:
+ print(f"ā ļø Error fetching PR checks: {e}", file=sys.stderr)
+ return []
+
+
+def get_buildkite_jobs(build_url):
+ base_url = build_url.split("#")[0]
+ if base_url.endswith(".json"):
+ base_url = base_url[:-5]
+
+ jobs_url = f"{base_url}/data/jobs.json"
+ req = urllib.request.Request(jobs_url, headers={"User-Agent": "ci-monitor"})
+ try:
+ with urllib.request.urlopen(req) as resp:
+ data = json.loads(resp.read().decode())
+ if isinstance(data, list):
+ return data
+ elif isinstance(data, dict) and "records" in data:
+ return data["records"]
+ except Exception as e:
+ print(
+ f"ā ļø Could not fetch Buildkite jobs from {jobs_url}: {e}",
+ file=sys.stderr,
+ )
+ return []
+
+
+def main():
+ parser = argparse.ArgumentParser(
+ description="Monitor remote CI for failures and trigger analysis."
+ )
+ parser.add_argument("pr", help="PR number to monitor")
+ parser.add_argument("conv_id", help="Conversation ID to report back to")
+ parser.add_argument(
+ "--interval",
+ type=int,
+ default=60,
+ help="Monitoring polling interval in seconds",
+ )
+ parser.add_argument(
+ "--max-iterations",
+ type=int,
+ default=120,
+ help="Maximum number of polling cycles",
+ )
+ args = parser.parse_args()
+
+ skill_dir = os.path.abspath(os.path.dirname(__file__))
+
+ state_file = os.path.join(skill_dir, f"monitored_state_pr_{args.pr}.json")
+ monitored = {}
+ if os.path.exists(state_file):
+ try:
+ with open(state_file) as f:
+ monitored = json.load(f)
+ except Exception:
+ pass
+
+ print(
+ f"š Starting continuous remote CI monitoring for PR #{args.pr} every {args.interval}s..."
+ )
+
+ for i in range(args.max_iterations):
+ print(
+ f"š [Cycle {i + 1}/{args.max_iterations}] Polling GitHub PR #{args.pr} checks..."
+ )
+ checks = get_pr_checks(args.pr)
+
+ for check in checks:
+ name = check.get("name", "unknown")
+ state = check.get("state", "UNKNOWN")
+ link = check.get("link", "")
+
+ if "buildkite" in name.lower() and link:
+ jobs = get_buildkite_jobs(link)
+
+ passed = 0
+ failed = 0
+ running = 0
+ other = 0
+
+ for job in jobs:
+ jstate = job.get("state", "unknown")
+ exit_status = job.get("exit_status")
+ is_soft_failed = job.get("soft_failed") is True
+ is_failed = (
+ jstate in ["failed", "failing"]
+ or (exit_status != 0 and exit_status is not None)
+ ) and not is_soft_failed
+ is_passed = (
+ jstate in ["passed", "success"]
+ or (jstate == "finished" and exit_status == 0)
+ or is_soft_failed
+ )
+ is_running = jstate in ["running", "scheduled"]
+
+ if is_failed:
+ failed += 1
+ elif is_passed:
+ passed += 1
+ elif is_running:
+ running += 1
+ else:
+ other += 1
+
+ build_id = link.split("/")[-1].split("#")[0]
+ print(
+ f"Buildkite #{build_id}: {len(jobs)} total jobs "
+ f"(Passed: {passed}, Failed: {failed}, Running: {running}, Other: {other})"
+ )
+
+ for job in jobs:
+ jname = job.get("name", "unknown_job")
+ jstate = job.get("state", "unknown")
+ jid = job.get("id", "")
+ jkey = f"bk_{jid}"
+
+ exit_status = job.get("exit_status")
+ is_soft_failed = job.get("soft_failed") is True
+ is_failed = (
+ jstate in ["failed", "failing"]
+ or (exit_status != 0 and exit_status is not None)
+ ) and not is_soft_failed
+
+ if is_failed and jkey not in monitored:
+ print(
+ f"šØ Notifying failure for Buildkite job '{jname}' (ID: {jid})..."
+ )
+ msg = (
+ f"ā ļø Remote CI Buildkite Job '{jname}' completed with errors!\n\n"
+ f"Build ID: {build_id} | Job ID: {jid}\n"
+ f"Log URL: {job.get('log_url', link)}\n\n"
+ f"Start subagent: run analyze-ci-failure skill on this failure"
+ )
+ subprocess.run(
+ [
+ "agentapi",
+ "send-message",
+ "--title=CI Job Failed",
+ args.conv_id,
+ msg,
+ ]
+ )
+ monitored[jkey] = time.time()
+ with open(state_file, "w") as f:
+ json.dump(monitored, f)
+
+ elif state in ["FAILURE", "failed"] and name not in monitored:
+ print(f"šØ Notifying failure for GitHub check '{name}'...")
+ msg = (
+ f"ā ļø Remote CI GitHub Check '{name}' completed with errors!\n\n"
+ f"Link: {link}\n\n"
+ f"Start subagent: run analyze-ci-failure skill on this failure"
+ )
+ subprocess.run(
+ [
+ "agentapi",
+ "send-message",
+ "--title=CI Check Failed",
+ args.conv_id,
+ msg,
+ ]
+ )
+ monitored[name] = time.time()
+ with open(state_file, "w") as f:
+ json.dump(monitored, f)
+
+ time.sleep(args.interval)
+
+ print("š CI monitoring service completed its scheduled iterations.")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/.bazelrc b/.bazelrc
index 8f784e4..044990f 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -46,6 +46,9 @@
common --disk_cache=~/.cache/bazel/bazel-disk-cache
# Drop `experimental_` prefix once Bazel 7 is no longer supported
common --experimental_downloader_config=downloader_config.cfg
+common --http_timeout_scaling=10.0
+common --experimental_repository_downloader_retries=10
+
# Additional config to use for readthedocs builds.
diff --git a/.gitattributes b/.gitattributes
index 9905cbf..fafafd0 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,3 +1,5 @@
python/features.bzl export-subst
tools/publish/*.txt linguist-generated=true
tests/uv/lock/testdata/requirements.txt text eol=lf
+python/private/runtimes_manifest_workspace.bzl text eol=lf
+python/private/runtimes_manifest.txt text eol=lf
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index cada605..e4d65c8 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -48,3 +48,20 @@
entry: ./tools/update_deleted_packages.sh
files: ^((examples|tests)/.*/(MODULE.bazel|WORKSPACE|WORKSPACE.bzlmod|BUILD.bazel)|.bazelrc)$
pass_filenames: false
+ - id: sort-runtimes-manifest
+ name: Sort runtimes manifest
+ language: system
+ entry: ./python/private/tools/sort_manifest.py
+ files: ^python/private/runtimes_manifest\.txt$
+ - id: sync-runtimes-manifest
+ name: Sync runtimes manifest workspace
+ language: system
+ entry: ./python/private/tools/sync_runtimes_manifest_workspace.py
+ files: ^python/private/runtimes_manifest\.txt$
+ pass_filenames: false
+ - id: sync-downloader-configs
+ name: Sync downloader configs
+ language: system
+ entry: ./tools/private/sync_downloader_configs.py
+ files: downloader_config\.cfg$
+ pass_filenames: false
diff --git a/AGENTS.md b/AGENTS.md
index 4e1e88a..e6e1733 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -15,6 +15,7 @@
* NEVER run `bazel clean --expunge`.
* Once a PR is created, do not amend or rebase.
+* Do not add Bazel copyright to new or existing files.
## Style and conventions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 978464f..0fa832e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -61,6 +61,9 @@
{#v0-0-0-changed}
### Changed
+* (bzlmod) How default runtimes are registered has changed to use a manifest
+ of SHAs and URLs. `TOOL_VERSIONS` in `python/versions.bzl` is now empty under
+ bzlmod.
* (gazelle) WORKSPACE's bazel-gazelle dependency bumped from 0.36.0 to 0.47.0.
The go version was also bumped from 1.21.13 to 1.22.9.
* (gazelle) `python_generate_pyi_deps` and `python_generate_pyi_srcs` now
diff --git a/downloader_config.cfg b/downloader_config.cfg
index a978fb8..3fa6264 100644
--- a/downloader_config.cfg
+++ b/downloader_config.cfg
@@ -5,6 +5,9 @@
rewrite ^github\.com/bazelbuild/platforms/(.*) github.com/bazelbuild/platforms/$1
rewrite ^github\.com/bazelbuild/rules_kotlin/(.*) github.com/bazelbuild/rules_kotlin/$1
rewrite ^github\.com/bazelbuild/rules_shell/(.*) github.com/bazelbuild/rules_shell/$1
+rewrite ^github\.com/bazelbuild/rules_java/(.*) github.com/bazelbuild/rules_java/$1
+rewrite ^github\.com/bazelbuild/stardoc/(.*) github.com/bazelbuild/stardoc/$1
+
# Fall back to mirror (secondary)
# Tracking upstream BCR mirror addition: https://github.com/bazelbuild/platforms/issues/139
@@ -14,3 +17,5 @@
rewrite ^github\.com/bazelbuild/platforms/(.*) mirror.bazel.build/github.com/bazelbuild/platforms/$1
rewrite ^github\.com/bazelbuild/rules_kotlin/(.*) mirror.bazel.build/github.com/bazelbuild/rules_kotlin/$1
rewrite ^github\.com/bazelbuild/rules_shell/(.*) mirror.bazel.build/github.com/bazelbuild/rules_shell/$1
+rewrite ^github\.com/bazelbuild/rules_java/(.*) mirror.bazel.build/github.com/bazelbuild/rules_java/$1
+rewrite ^github\.com/bazelbuild/stardoc/(.*) mirror.bazel.build/github.com/bazelbuild/stardoc/$1
diff --git a/gazelle/.bazelrc b/gazelle/.bazelrc
index bdb29d5..e302168 100644
--- a/gazelle/.bazelrc
+++ b/gazelle/.bazelrc
@@ -1,6 +1,9 @@
common --deleted_packages=examples/bzlmod_build_file_generation
common --deleted_packages=examples/bzlmod_build_file_generation/runfiles
common --experimental_downloader_config=downloader_config.cfg
+common --http_timeout_scaling=10.0
+common --experimental_repository_downloader_retries=10
+
test --test_output=errors
diff --git a/gazelle/downloader_config.cfg b/gazelle/downloader_config.cfg
index a978fb8..3fa6264 100644
--- a/gazelle/downloader_config.cfg
+++ b/gazelle/downloader_config.cfg
@@ -5,6 +5,9 @@
rewrite ^github\.com/bazelbuild/platforms/(.*) github.com/bazelbuild/platforms/$1
rewrite ^github\.com/bazelbuild/rules_kotlin/(.*) github.com/bazelbuild/rules_kotlin/$1
rewrite ^github\.com/bazelbuild/rules_shell/(.*) github.com/bazelbuild/rules_shell/$1
+rewrite ^github\.com/bazelbuild/rules_java/(.*) github.com/bazelbuild/rules_java/$1
+rewrite ^github\.com/bazelbuild/stardoc/(.*) github.com/bazelbuild/stardoc/$1
+
# Fall back to mirror (secondary)
# Tracking upstream BCR mirror addition: https://github.com/bazelbuild/platforms/issues/139
@@ -14,3 +17,5 @@
rewrite ^github\.com/bazelbuild/platforms/(.*) mirror.bazel.build/github.com/bazelbuild/platforms/$1
rewrite ^github\.com/bazelbuild/rules_kotlin/(.*) mirror.bazel.build/github.com/bazelbuild/rules_kotlin/$1
rewrite ^github\.com/bazelbuild/rules_shell/(.*) mirror.bazel.build/github.com/bazelbuild/rules_shell/$1
+rewrite ^github\.com/bazelbuild/rules_java/(.*) mirror.bazel.build/github.com/bazelbuild/rules_java/$1
+rewrite ^github\.com/bazelbuild/stardoc/(.*) mirror.bazel.build/github.com/bazelbuild/stardoc/$1
diff --git a/internal_dev_deps.bzl b/internal_dev_deps.bzl
index 50277ad..7ab4717 100644
--- a/internal_dev_deps.bzl
+++ b/internal_dev_deps.bzl
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-"""Dependencies that are needed for development and testing of rules_python itself."""
+"""Dependencies that are needed for development and testing of rules_python itself in WORKSPACE mode."""
load("@bazel_tools//tools/build_defs/repo:http.bzl", _http_archive = "http_archive", _http_file = "http_file")
load("@bazel_tools//tools/build_defs/repo:local.bzl", "local_repository")
@@ -34,7 +34,7 @@
)
def rules_python_internal_deps():
- """Fetches all required dependencies for developing/testing rules_python itself.
+ """Fetches all required dependencies for developing/testing rules_python itself in WORKSPACE mode.
Setup of these dependencies is done by `internal_dev_setup.bzl`
diff --git a/python/BUILD.bazel b/python/BUILD.bazel
index 90b2225..e940e9e 100644
--- a/python/BUILD.bazel
+++ b/python/BUILD.bazel
@@ -226,7 +226,10 @@
name = "versions_bzl",
srcs = ["versions.bzl"],
visibility = ["//:__subpackages__"],
- deps = ["//python/private:platform_info_bzl"],
+ deps = [
+ "//python/private:platform_info_bzl",
+ "//python/private:runtimes_manifest_workspace_bzl",
+ ],
)
# NOTE: Remember to add bzl_library targets to //tests:bzl_libraries
diff --git a/python/private/BUILD.bazel b/python/private/BUILD.bazel
index b54c198..e4b38c2 100644
--- a/python/private/BUILD.bazel
+++ b/python/private/BUILD.bazel
@@ -17,7 +17,6 @@
load("//python:py_binary.bzl", "py_binary")
load("//python:py_library.bzl", "py_library")
load(":bazel_config_mode.bzl", "bazel_config_mode")
-load(":print_toolchain_checksums.bzl", "print_toolchains_checksums")
load(":py_exec_tools_toolchain.bzl", "current_interpreter_executable")
load(":sentinel.bzl", "sentinel")
load(":stamp.bzl", "stamp_build_setting")
@@ -31,7 +30,11 @@
licenses(["notice"])
-exports_files(["runtime_env_toolchain_interpreter.sh"])
+exports_files([
+ "runtime_env_toolchain_interpreter.sh",
+ "runtimes_manifest.txt",
+ "runtimes_manifest_workspace.bzl",
+])
filegroup(
name = "distribution",
@@ -216,6 +219,7 @@
name = "internal_config_repo_bzl",
srcs = ["internal_config_repo.bzl"],
deps = [
+ ":pbs_manifest_bzl",
":repo_utils_bzl",
":text_util_bzl",
],
@@ -298,7 +302,6 @@
":bazel_tools_bzl",
":coverage_deps_bzl",
":full_version_bzl",
- ":internal_config_repo_bzl",
":python_repository_bzl",
":repo_utils_bzl",
":toolchains_repo_bzl",
@@ -332,6 +335,7 @@
name = "pythons_hub_bzl",
srcs = ["pythons_hub.bzl"],
deps = [
+ ":pbs_manifest_bzl",
":py_toolchain_suite_bzl",
":text_util_bzl",
"//python:versions_bzl",
@@ -656,6 +660,11 @@
)
bzl_library(
+ name = "runtimes_manifest_workspace_bzl",
+ srcs = ["runtimes_manifest_workspace.bzl"],
+)
+
+bzl_library(
name = "sentinel_bzl",
srcs = ["sentinel.bzl"],
)
@@ -857,8 +866,6 @@
visibility = ["//visibility:public"],
)
-print_toolchains_checksums(name = "print_toolchains_checksums")
-
# Used for py_console_script_gen rule
py_binary(
name = "py_console_script_gen_py",
@@ -900,3 +907,9 @@
sentinel(
name = "sentinel",
)
+
+py_binary(
+ name = "sync_runtimes_manifest_workspace",
+ srcs = ["tools/sync_runtimes_manifest_workspace.py"],
+ visibility = ["//:__subpackages__"],
+)
diff --git a/python/private/internal_config_repo.bzl b/python/private/internal_config_repo.bzl
index aea1eee..72970cf 100644
--- a/python/private/internal_config_repo.bzl
+++ b/python/private/internal_config_repo.bzl
@@ -49,13 +49,13 @@
)
bzl_library(
- name = "rules_python_config_bzl",
- srcs = ["rules_python_config.bzl"]
+ name = "extra_transition_settings_bzl",
+ srcs = ["extra_transition_settings.bzl"],
)
bzl_library(
- name = "extra_transition_settings_bzl",
- srcs = ["extra_transition_settings.bzl"],
+ name = "rules_python_config_bzl",
+ srcs = ["rules_python_config.bzl"],
)
"""
diff --git a/python/private/pbs_manifest.bzl b/python/private/pbs_manifest.bzl
index e343a80..86434dc 100644
--- a/python/private/pbs_manifest.bzl
+++ b/python/private/pbs_manifest.bzl
@@ -101,8 +101,8 @@
return {
"arch": arch,
"archive_flavor": archive_flavor,
+ "build_flavor": flavor,
"build_version": build_version,
- "flavor": flavor,
"freethreaded": freethreaded,
"libc": libc,
"location": filename,
@@ -112,7 +112,7 @@
"vendor": vendor,
}
-def parse_sha_manifest(content):
+def parse_runtime_manifest(content):
"""Parses the SHA256SUMS file content into a list of structs.
Args:
@@ -125,7 +125,7 @@
- archive_flavor: Release asset archive type (e.g., "full", "install_only").
- build_version: Standalone release date (e.g., "20260414").
- location: Full package filename or URL (e.g., "cpython-3.11.15..." or "https://...").
- - flavor: Build configuration flavor (e.g., "install_only").
+ - build_flavor: Build configuration flavor (e.g., "debug", "pgo+lto").
- freethreaded: Whether the build is free-threaded (boolean).
- libc: C library type (e.g., "gnu", "musl", "msvc", or "").
- microarch: Microarchitecture level (e.g., "v2", "v3", or "").
@@ -137,13 +137,12 @@
results = []
for line in content.split("\n"):
line = line.strip()
- if not line:
+ if not line or line.startswith("#"):
continue
parts = [p for p in line.split(" ") if p]
if len(parts) != 2:
continue
sha256, filename = parts
-
parsed = parse_filename(filename)
if parsed:
results.append(struct(
diff --git a/python/private/print_toolchain_checksums.bzl b/python/private/print_toolchain_checksums.bzl
deleted file mode 100644
index b4fa400..0000000
--- a/python/private/print_toolchain_checksums.bzl
+++ /dev/null
@@ -1,89 +0,0 @@
-"""Print the toolchain versions.
-"""
-
-load("//python:versions.bzl", "TOOL_VERSIONS", "get_release_info")
-load("//python/private:text_util.bzl", "render")
-load("//python/private:version.bzl", "version")
-
-def print_toolchains_checksums(name):
- """A macro to print checksums for a particular Python interpreter version.
-
- Args:
- name: {type}`str`: the name of the runnable target.
- """
- by_version = {}
-
- for python_version, metadata in TOOL_VERSIONS.items():
- by_version[python_version] = _commands_for_version(
- python_version = python_version,
- metadata = metadata,
- )
-
- all_commands = sorted(
- by_version.items(),
- key = lambda x: version.key(version.parse(x[0], strict = True)),
- )
- all_commands = [x[1] for x in all_commands]
-
- template = """\
-cat > "$@" <<'EOF'
-#!/usr/bin/env bash
-set -euo pipefail
-
-set -o errexit -o nounset -o pipefail
-
-echo "Fetching hashes..."
-
-{commands}
-EOF
- """
-
- native.genrule(
- name = name,
- srcs = [],
- outs = ["print_toolchains_checksums.sh"],
- cmd = select({
- "//python/config_settings:is_python_{}".format(version_str): template.format(
- commands = commands,
- )
- for version_str, commands in by_version.items()
- } | {
- "//conditions:default": template.format(commands = "\n".join(all_commands)),
- }),
- executable = True,
- )
-
-def _commands_for_version(*, python_version, metadata):
- lines = []
- first_platform = metadata["sha256"].keys()[0]
- root, _, _ = get_release_info(first_platform, python_version)[1][0].rpartition("/")
- sha_url = "{}/{}".format(root, "SHA256SUMS")
- prefix = metadata["strip_prefix"]
- prefix = render.indent(
- render.dict(prefix) if type(prefix) == type({}) else repr(prefix),
- indent = " " * 8,
- ).lstrip()
-
- lines += [
- "sha256s=$$(curl --silent --show-error --location --fail {})".format(sha_url),
- "cat <<EOB",
- " \"{python_version}\": {{".format(python_version = python_version),
- " \"url\": \"{url}\",".format(url = metadata["url"]),
- " \"sha256\": {",
- ] + [
- " \"{platform}\": \"$$({get_sha256})\",".format(
- platform = platform,
- get_sha256 = "echo \"$$sha256s\" | (grep {} || echo ) | awk '{{print $$1}}'".format(
- release_url.rpartition("/")[-1],
- ),
- )
- for platform in metadata["sha256"].keys()
- for release_url in get_release_info(platform, python_version)[1]
- ] + [
- " },",
- " \"strip_prefix\": {strip_prefix},".format(strip_prefix = prefix),
- " },",
- "EOB",
- ]
-
- return "\n".join(lines)
diff --git a/python/private/python.bzl b/python/private/python.bzl
index 73b2d19..ac8d111 100644
--- a/python/private/python.bzl
+++ b/python/private/python.bzl
@@ -15,10 +15,10 @@
"Python toolchain module extensions for use with bzlmod."
load("@bazel_features//:features.bzl", "bazel_features")
-load("//python:versions.bzl", "DEFAULT_RELEASE_BASE_URL", "PLATFORMS", "TOOL_VERSIONS")
+load("//python:versions.bzl", "DEFAULT_RELEASE_BASE_URLS", "PLATFORMS")
load(":auth.bzl", "AUTH_ATTRS")
load(":full_version.bzl", "full_version")
-load(":pbs_manifest.bzl", "parse_sha_manifest")
+load(":pbs_manifest.bzl", "parse_runtime_manifest")
load(":platform_info.bzl", "platform_info")
load(":python_register_toolchains.bzl", "python_register_toolchains")
load(":pythons_hub.bzl", "hub_repo")
@@ -714,7 +714,7 @@
default["add_target_settings"] = list(tag.add_target_settings)
forwarded_attrs = sorted(AUTH_ATTRS) + [
- "base_url",
+ "base_urls",
"register_all_versions",
]
for key in forwarded_attrs:
@@ -742,13 +742,24 @@
override.fn(tag = tag, _fail = _fail, default = default)
+def _manifest_entry_sort_key(entry):
+ flavor_rank = {"full": 3, "install_only": 1, "install_only_stripped": 2}.get(entry.archive_flavor, 4)
+ microarch = entry.microarch
+ if not microarch:
+ microarch_rank = 0
+ elif microarch.startswith("v") and microarch[1:].isdigit():
+ microarch_rank = int(microarch[1:])
+ else:
+ microarch_rank = 999
+ return (flavor_rank, microarch_rank)
+
def _populate_from_pbs_manifest(
*,
mctx,
add_runtime_manifest_urls = [],
add_runtime_manifest_files = [],
runtime_manifest_sha = "",
- base_url = "",
+ base_urls = [],
available_versions,
_fail):
manifest_contents = []
@@ -772,18 +783,18 @@
return
base_download_urls = [url.rpartition("/")[0] for url in add_runtime_manifest_urls]
- if not base_download_urls and base_url:
- base_download_urls = [base_url]
+ if not base_download_urls and base_urls:
+ base_download_urls = list(base_urls)
entries = []
for content in manifest_contents:
- entries.extend(parse_sha_manifest(content))
+ entries.extend(parse_runtime_manifest(content))
# We don't model archive_flavor via flags yet, so have to pick one.
# Preference is given to install_only because its smaller
entries = sorted(
entries,
- key = lambda e: {"full": 3, "install_only": 1, "install_only_stripped": 2}.get(e.archive_flavor, 4),
+ key = _manifest_entry_sort_key,
)
for entry in entries:
@@ -793,13 +804,13 @@
# Fallback to matching against PLATFORMS keys as before to ensure compatibility
# with rules_python expected platform keys.
- matched_platform = None
- for platform in PLATFORMS.keys():
- if platform in location:
- matched_platform = platform
- break
+ matched_platform = "{}-{}-{}".format(entry.arch, entry.vendor, entry.os)
+ if entry.libc:
+ matched_platform += "-" + entry.libc
+ if entry.freethreaded:
+ matched_platform += "-freethreaded"
- if not matched_platform:
+ if matched_platform not in PLATFORMS:
continue
if entry.archive_flavor not in ["install_only", "install_only_stripped", "full"]:
@@ -844,27 +855,13 @@
# Items that can be overridden
available_versions = {}
- for py_version, item in TOOL_VERSIONS.items():
- available_versions[py_version] = {}
- available_versions[py_version]["sha256"] = dict(item["sha256"])
- platforms = item["sha256"].keys()
-
- strip_prefix = item["strip_prefix"]
- if type(strip_prefix) == type(""):
- available_versions[py_version]["strip_prefix"] = {
- platform: strip_prefix
- for platform in platforms
- }
- else:
- available_versions[py_version]["strip_prefix"] = dict(strip_prefix)
- url = item["url"]
- if type(url) == type(""):
- available_versions[py_version]["url"] = {
- platform: url
- for platform in platforms
- }
- else:
- available_versions[py_version]["url"] = dict(url)
+ _populate_from_pbs_manifest(
+ mctx = mctx,
+ add_runtime_manifest_files = [Label("//python/private:runtimes_manifest.txt")],
+ base_urls = DEFAULT_RELEASE_BASE_URLS,
+ available_versions = available_versions,
+ _fail = _fail,
+ )
# Check for add_runtime_manifest_urls or add_runtime_manifest_files in override tags in root module
root_module = modules[0] if modules else None
@@ -876,13 +873,28 @@
add_runtime_manifest_urls = tag.add_runtime_manifest_urls,
add_runtime_manifest_files = tag.add_runtime_manifest_files,
runtime_manifest_sha = tag.runtime_manifest_sha,
- base_url = tag.base_url,
+ base_urls = tag.base_urls,
+ available_versions = available_versions,
+ _fail = _fail,
+ )
+
+ # Check for add_runtime_manifest_urls or add_runtime_manifest_files in override tags in root module
+ root_module = modules[0] if modules else None
+ if root_module and root_module.is_root:
+ for tag in root_module.tags.override:
+ if tag.add_runtime_manifest_urls or tag.add_runtime_manifest_files:
+ _populate_from_pbs_manifest(
+ mctx = mctx,
+ add_runtime_manifest_urls = tag.add_runtime_manifest_urls,
+ add_runtime_manifest_files = tag.add_runtime_manifest_files,
+ runtime_manifest_sha = tag.runtime_manifest_sha,
+ base_urls = tag.base_urls,
available_versions = available_versions,
_fail = _fail,
)
default = {
- "base_url": DEFAULT_RELEASE_BASE_URL,
+ "base_urls": DEFAULT_RELEASE_BASE_URLS,
"platforms": dict(PLATFORMS), # Copy so it's mutable.
"tool_versions": available_versions,
}
@@ -1215,6 +1227,10 @@
Example:
`//my/custom/manifest:SHA256SUMS`
+:::{seealso}
+[Manifest file format documentation](https://rules-python.readthedocs.io/en/latest/toolchains.html#manifest-file-format)
+:::
+
:::{versionadded} VERSION_NEXT_FEATURE
:::
""",
@@ -1230,6 +1246,10 @@
Note that `/latest/` can be used in place of a specific release date (e.g., `20260414`) to automatically use the latest release:
`https://github.com/astral-sh/python-build-standalone/releases/latest/download/SHA256SUMS`
+:::{seealso}
+[Manifest file format documentation](https://rules-python.readthedocs.io/en/latest/toolchains.html#manifest-file-format)
+:::
+
:::{versionadded} VERSION_NEXT_FEATURE
:::
""",
@@ -1272,10 +1292,10 @@
dependencies are introduced.
""",
),
- "base_url": attr.string(
+ "base_urls": attr.string_list(
mandatory = False,
- doc = "The base URL to be used when downloading toolchains.",
- default = DEFAULT_RELEASE_BASE_URL,
+ doc = "The base URLs to be used when downloading toolchains.",
+ default = DEFAULT_RELEASE_BASE_URLS,
),
"ignore_root_user_error": attr.bool(
default = True,
diff --git a/python/private/python_register_toolchains.bzl b/python/private/python_register_toolchains.bzl
index 3b92902..5a2f968 100644
--- a/python/private/python_register_toolchains.bzl
+++ b/python/private/python_register_toolchains.bzl
@@ -17,7 +17,7 @@
load(
"//python:versions.bzl",
- "DEFAULT_RELEASE_BASE_URL",
+ "DEFAULT_RELEASE_BASE_URLS",
"MINOR_MAPPING",
"PLATFORMS",
"TOOL_VERSIONS",
@@ -103,7 +103,7 @@
name = "coverage_dep",
)
- base_url = kwargs.pop("base_url", DEFAULT_RELEASE_BASE_URL)
+ base_urls = kwargs.pop("base_urls", DEFAULT_RELEASE_BASE_URLS)
tool_versions = tool_versions or TOOL_VERSIONS
minor_mapping = minor_mapping or MINOR_MAPPING
@@ -122,7 +122,12 @@
continue
loaded_platforms.append(platform)
- (release_filename, urls, strip_prefix, patches, patch_strip) = get_release_info(platform, python_version, base_url, tool_versions)
+ (release_filename, urls, strip_prefix, patches, patch_strip) = get_release_info(
+ platform,
+ python_version,
+ base_urls = base_urls,
+ tool_versions = tool_versions,
+ )
# allow passing in a tool version
coverage_tool = None
diff --git a/python/private/pythons_hub.bzl b/python/private/pythons_hub.bzl
index cc25b4b..173c811 100644
--- a/python/private/pythons_hub.bzl
+++ b/python/private/pythons_hub.bzl
@@ -15,6 +15,7 @@
"Repo rule used by bzlmod extension to create a repo that has a map of Python interpreters and their labels"
load("//python:versions.bzl", "PLATFORMS")
+load(":pbs_manifest.bzl", "parse_runtime_manifest")
load(":text_util.bzl", "render")
load(":toolchains_repo.bzl", "toolchain_suite_content")
@@ -118,15 +119,24 @@
executable = False,
)
+ python_versions = rctx.attr.python_versions
+ if not python_versions and not rctx.attr.toolchain_python_versions:
+ content = rctx.read(rctx.path(Label("//python/private:runtimes_manifest.txt")))
+ entries = parse_runtime_manifest(content)
+ python_versions_str = render.list(sorted({getattr(e, "python_version", ""): None for e in entries if getattr(e, "python_version", "")}))
+
+ else:
+ python_versions_str = render.list(python_versions) if python_versions else render.list(sorted({
+ v: None
+ for v in rctx.attr.toolchain_python_versions
+ }))
+
rctx.file(
"versions.bzl",
_versions_bzl_template.format(
default_python_version = rctx.attr.default_python_version,
minor_mapping = render.dict(rctx.attr.minor_mapping),
- python_versions = rctx.attr.python_versions or render.list(sorted({
- v: None
- for v in rctx.attr.toolchain_python_versions
- })),
+ python_versions = python_versions_str,
),
executable = False,
)
diff --git a/python/private/runtimes_manifest.txt b/python/private/runtimes_manifest.txt
new file mode 100755
index 0000000..df02a30
--- /dev/null
+++ b/python/private/runtimes_manifest.txt
@@ -0,0 +1,621 @@
+# Manifest of runtimes to make available
+# Originally generated circa 2026-06 from the runtimes in TOOL_VERSIONS from the original python/versions.bzl
+# To sort this file, execute: ./python/private/tools/sort_manifest.py python/private/runtimes_manifest.txt
+
+1409acd9a506e2d1d3b65c1488db4e40d8f19d09a7df099667c87a506f71c0ef 20220227/cpython-3.10.2+20220227-aarch64-apple-darwin-install_only.tar.gz
+8f351a8cc348bb45c0f95b8634c8345ec6e749e483384188ad865b7428342703 20220227/cpython-3.10.2+20220227-aarch64-unknown-linux-gnu-install_only.tar.gz
+8146ad4390710ec69b316a5649912df0247d35f4a42e2aa9615bffd87b3e235a 20220227/cpython-3.10.2+20220227-x86_64-apple-darwin-install_only.tar.gz
+a1d9a594cd3103baa24937ad9150c1a389544b4350e859200b3e5c036ac352bd 20220227/cpython-3.10.2+20220227-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+9b64eca2a94f7aff9409ad70bdaa7fbbf8148692662e764401883957943620dd 20220227/cpython-3.10.2+20220227-x86_64-unknown-linux-gnu-install_only.tar.gz
+2c99983d1e83e4b6e7411ed9334019f193fba626344a50c36fba6c25d4de78a2 20220502/cpython-3.10.4+20220502-aarch64-apple-darwin-install_only.tar.gz
+d8098c0c54546637e7516f93b13403b11f9db285def8d7abd825c31407a13d7e 20220502/cpython-3.10.4+20220502-aarch64-unknown-linux-gnu-install_only.tar.gz
+f2711eaffff3477826a401d09a013c6802f11c04c63ab3686aa72664f1216a05 20220502/cpython-3.10.4+20220502-x86_64-apple-darwin-install_only.tar.gz
+bee24a3a5c83325215521d261d73a5207ab7060ef3481f76f69b4366744eb81d 20220502/cpython-3.10.4+20220502-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+f6f871e53a7b1469c13f9bd7920ad98c4589e549acad8e5a1e14760fff3dd5c9 20220502/cpython-3.10.4+20220502-x86_64-unknown-linux-gnu-install_only.tar.gz
+efaf66acdb9a4eb33d57702607d2e667b1a319d58c167a43c96896b97419b8b7 20220802/cpython-3.10.6+20220802-aarch64-apple-darwin-install_only.tar.gz
+81625f5c97f61e2e3d7e9f62c484b1aa5311f21bd6545451714b949a29da5435 20220802/cpython-3.10.6+20220802-aarch64-unknown-linux-gnu-install_only.tar.gz
+7718411adf3ea1480f3f018a643eb0550282aefe39e5ecb3f363a4a566a9398c 20220802/cpython-3.10.6+20220802-x86_64-apple-darwin-install_only.tar.gz
+91889a7dbdceea585ff4d3b7856a6bb8f8a4eca83a0ff52a73542c2e67220eaa 20220802/cpython-3.10.6+20220802-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+55aa2190d28dcfdf414d96dc5dcea9fe048fadcd583dc3981fec020869826111 20220802/cpython-3.10.6+20220802-x86_64-unknown-linux-gnu-install_only.tar.gz
+d52b03817bd245d28e0a8b2f715716cd0fcd112820ccff745636932c76afa20a 20221106/cpython-3.10.8+20221106-aarch64-apple-darwin-install_only.tar.gz
+33170bef18c811906b738be530f934640491b065bf16c4d276c6515321918132 20221106/cpython-3.10.8+20221106-aarch64-unknown-linux-gnu-install_only.tar.gz
+525b79c7ce5de90ab66bd07b0ac1008bafa147ddc8a41bef15ffb7c9c1e9e7c5 20221106/cpython-3.10.8+20221106-x86_64-apple-darwin-install_only.tar.gz
+f2b6d2f77118f06dd2ca04dae1175e44aaa5077a5ed8ddc63333c15347182bfe 20221106/cpython-3.10.8+20221106-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+6c8db44ae0e18e320320bbaaafd2d69cde8bfea171ae2d651b7993d1396260b7 20221106/cpython-3.10.8+20221106-x86_64-unknown-linux-gnu-install_only.tar.gz
+018d05a779b2de7a476f3b3ff2d10f503d69d14efcedd0774e6dab8c22ef84ff 20230116/cpython-3.10.9+20230116-aarch64-apple-darwin-install_only.tar.gz
+2003750f40cd09d4bf7a850342613992f8d9454f03b3c067989911fb37e7a4d1 20230116/cpython-3.10.9+20230116-aarch64-unknown-linux-gnu-install_only.tar.gz
+0e685f98dce0e5bc8da93c7081f4e6c10219792e223e4b5886730fd73a7ba4c6 20230116/cpython-3.10.9+20230116-x86_64-apple-darwin-install_only.tar.gz
+59c6970cecb357dc1d8554bd0540eb81ee7f6d16a07acf3d14ed294ece02c035 20230116/cpython-3.10.9+20230116-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+d196347aeb701a53fe2bb2b095abec38d27d0fa0443f8a1c2023a1bed6e18cdf 20230116/cpython-3.10.9+20230116-x86_64-unknown-linux-gnu-install_only.tar.gz
+4918cdf1cab742a90f85318f88b8122aeaa2d04705803c7b6e78e81a3dd40f80 20230116/cpython-3.11.1+20230116-aarch64-apple-darwin-install_only.tar.gz
+debf15783bdcb5530504f533d33fda75a7b905cec5361ae8f33da5ba6599f8b4 20230116/cpython-3.11.1+20230116-aarch64-unknown-linux-gnu-install_only.tar.gz
+20a4203d069dc9b710f70b09e7da2ce6f473d6b1110f9535fb6f4c469ed54733 20230116/cpython-3.11.1+20230116-x86_64-apple-darwin-install_only.tar.gz
+edc08979cb0666a597466176511529c049a6f0bba8adf70df441708f766de5bf 20230116/cpython-3.11.1+20230116-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+02a551fefab3750effd0e156c25446547c238688a32fabde2995c941c03a6423 20230116/cpython-3.11.1+20230116-x86_64-unknown-linux-gnu-install_only.tar.gz
+8348bc3c2311f94ec63751fb71bd0108174be1c4def002773cf519ee1506f96f 20230507/cpython-3.10.11+20230507-aarch64-apple-darwin-install_only.tar.gz
+c7573fdb00239f86b22ea0e8e926ca881d24fde5e5890851339911d76110bc35 20230507/cpython-3.10.11+20230507-aarch64-unknown-linux-gnu-install_only.tar.gz
+73a9d4c89ed51be39dd2de4e235078281087283e9fdedef65bec02f503e906ee 20230507/cpython-3.10.11+20230507-ppc64le-unknown-linux-gnu-install_only.tar.gz
+bd3fc6e4da6f4033ebf19d66704e73b0804c22641ddae10bbe347c48f82374ad 20230507/cpython-3.10.11+20230507-x86_64-apple-darwin-install_only.tar.gz
+9c2d3604a06fcd422289df73015cd00e7271d90de28d2c910f0e2309a7f73a68 20230507/cpython-3.10.11+20230507-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+c5bcaac91bc80bfc29cf510669ecad12d506035ecb3ad85ef213416d54aecd79 20230507/cpython-3.10.11+20230507-x86_64-unknown-linux-gnu-install_only.tar.gz
+09e412506a8d63edbb6901742b54da9aa7faf120b8dbdce56c57b303fc892c86 20230507/cpython-3.11.3+20230507-aarch64-apple-darwin-install_only.tar.gz
+8190accbbbbcf7620f1ff6d668e4dd090c639665d11188ce864b62554d40e5ab 20230507/cpython-3.11.3+20230507-aarch64-unknown-linux-gnu-install_only.tar.gz
+767d24f3570b35fedb945f5ac66224c8983f2d556ab83c5cfaa5f3666e9c212c 20230507/cpython-3.11.3+20230507-ppc64le-unknown-linux-gnu-install_only.tar.gz
+f710b8d60621308149c100d5175fec39274ed0b9c99645484fd93d1716ef4310 20230507/cpython-3.11.3+20230507-x86_64-apple-darwin-install_only.tar.gz
+24741066da6f35a7ff67bee65ce82eae870d84e1181843e64a7076d1571e95af 20230507/cpython-3.11.3+20230507-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+da50b87d1ec42b3cb577dfd22a3655e43a53150f4f98a4bfb40757c9d7839ab5 20230507/cpython-3.11.3+20230507-x86_64-unknown-linux-gnu-install_only.tar.gz
+bc66c706ea8c5fc891635fda8f9da971a1a901d41342f6798c20ad0b2a25d1d6 20230726/cpython-3.10.12+20230726-aarch64-apple-darwin-install_only.tar.gz
+fee80e221663eca5174bd794cb5047e40d3910dbeadcdf1f09d405a4c1c15fe4 20230726/cpython-3.10.12+20230726-aarch64-unknown-linux-gnu-install_only.tar.gz
+bb5e8cb0d2e44241725fa9b342238245503e7849917660006b0246a9c97b1d6c 20230726/cpython-3.10.12+20230726-ppc64le-unknown-linux-gnu-install_only.tar.gz
+8d33d435ae6fb93ded7fc26798cc0a1a4f546a4e527012a1e2909cc314b332df 20230726/cpython-3.10.12+20230726-s390x-unknown-linux-gnu-install_only.tar.gz
+8a6e3ed973a671de468d9c691ed9cb2c3a4858c5defffcf0b08969fba9c1dd04 20230726/cpython-3.10.12+20230726-x86_64-apple-darwin-install_only.tar.gz
+c1a31c353ca44de7d1b1a3b6c55a823e9c1eed0423d4f9f66e617bdb1b608685 20230726/cpython-3.10.12+20230726-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+a476dbca9184df9fc69fe6309cda5ebaf031d27ca9e529852437c94ec1bc43d3 20230726/cpython-3.10.12+20230726-x86_64-unknown-linux-gnu-install_only.tar.gz
+cb6d2948384a857321f2aa40fa67744cd9676a330f08b6dad7070bda0b6120a4 20230726/cpython-3.11.4+20230726-aarch64-apple-darwin-install_only.tar.gz
+2e84fc53f4e90e11963281c5c871f593abcb24fc796a50337fa516be99af02fb 20230726/cpython-3.11.4+20230726-aarch64-unknown-linux-gnu-install_only.tar.gz
+df7b92ed9cec96b3bb658fb586be947722ecd8e420fb23cee13d2e90abcfcf25 20230726/cpython-3.11.4+20230726-ppc64le-unknown-linux-gnu-install_only.tar.gz
+e477f0749161f9aa7887964f089d9460a539f6b4a8fdab5166f898210e1a87a4 20230726/cpython-3.11.4+20230726-s390x-unknown-linux-gnu-install_only.tar.gz
+47e1557d93a42585972772e82661047ca5f608293158acb2778dccf120eabb00 20230726/cpython-3.11.4+20230726-x86_64-apple-darwin-install_only.tar.gz
+878614c03ea38538ae2f758e36c85d2c0eb1eaaca86cd400ff8c76693ee0b3e1 20230726/cpython-3.11.4+20230726-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+e26247302bc8e9083a43ce9e8dd94905b40d464745b1603041f7bc9a93c65d05 20230726/cpython-3.11.4+20230726-x86_64-unknown-linux-gnu-install_only.tar.gz
+dab64b3580118ad2073babd7c29fd2053b616479df5c107d31fe2af1f45e948b 20230826/cpython-3.11.5+20230826-aarch64-apple-darwin-install_only.tar.gz
+bb5c5d1ea0f199fe2d3f0996fff4b48ca6ddc415a3dbd98f50bff7fce48aac80 20230826/cpython-3.11.5+20230826-aarch64-unknown-linux-gnu-install_only.tar.gz
+14121b53e9c8c6d0741f911ae00102a35adbcf5c3cdf732687ef7617b7d7304d 20230826/cpython-3.11.5+20230826-ppc64le-unknown-linux-gnu-install_only.tar.gz
+fe459da39874443579d6fe88c68777c6d3e331038e1fb92a0451879fb6beb16d 20230826/cpython-3.11.5+20230826-s390x-unknown-linux-gnu-install_only.tar.gz
+4a4efa7378c72f1dd8ebcce1afb99b24c01b07023aa6b8fea50eaedb50bf2bfc 20230826/cpython-3.11.5+20230826-x86_64-apple-darwin-install_only.tar.gz
+00f002263efc8aea896bcfaaf906b1f4dab3e5cd3db53e2b69ab9a10ba220b97 20230826/cpython-3.11.5+20230826-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+fbed6f7694b2faae5d7c401a856219c945397f772eea5ca50c6eb825cbc9d1e1 20230826/cpython-3.11.5+20230826-x86_64-unknown-linux-gnu-install_only.tar.gz
+916c35125b5d8323a21526d7a9154ca626453f63d0878e95b9f613a95006c990 20231002/cpython-3.11.6+20231002-aarch64-apple-darwin-install_only.tar.gz
+3e26a672df17708c4dc928475a5974c3fb3a34a9b45c65fb4bd1e50504cc84ec 20231002/cpython-3.11.6+20231002-aarch64-unknown-linux-gnu-install_only.tar.gz
+7937035f690a624dba4d014ffd20c342e843dd46f89b0b0a1e5726b85deb8eaf 20231002/cpython-3.11.6+20231002-ppc64le-unknown-linux-gnu-install_only.tar.gz
+f9f19823dba3209cedc4647b00f46ed0177242917db20fb7fb539970e384531c 20231002/cpython-3.11.6+20231002-s390x-unknown-linux-gnu-install_only.tar.gz
+178cb1716c2abc25cb56ae915096c1a083e60abeba57af001996e8bc6ce1a371 20231002/cpython-3.11.6+20231002-x86_64-apple-darwin-install_only.tar.gz
+3933545e6d41462dd6a47e44133ea40995bc6efeed8c2e4cbdf1a699303e95ea 20231002/cpython-3.11.6+20231002-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+ee37a7eae6e80148c7e3abc56e48a397c1664f044920463ad0df0fc706eacea8 20231002/cpython-3.11.6+20231002-x86_64-unknown-linux-gnu-install_only.tar.gz
+4734a2be2becb813830112c780c9879ac3aff111a0b0cd590e65ec7465774d02 20231002/cpython-3.12.0+20231002-aarch64-apple-darwin-install_only.tar.gz
+bccfe67cf5465a3dfb0336f053966e2613a9bc85a6588c2fcf1366ef930c4f88 20231002/cpython-3.12.0+20231002-aarch64-unknown-linux-gnu-install_only.tar.gz
+b5dae075467ace32c594c7877fe6ebe0837681f814601d5d90ba4c0dfd87a1f2 20231002/cpython-3.12.0+20231002-ppc64le-unknown-linux-gnu-install_only.tar.gz
+5681621349dd85d9726d1b67c84a9686ce78f72e73a6f9e4cc4119911655759e 20231002/cpython-3.12.0+20231002-s390x-unknown-linux-gnu-install_only.tar.gz
+5a9e88c8aa52b609d556777b52ebde464ae4b4f77e4aac4eb693af57395c9abf 20231002/cpython-3.12.0+20231002-x86_64-apple-darwin-install_only.tar.gz
+facfaa1fbc8653f95057f3c4a0f8aa833dab0e0b316e24ee8686bc761d4b4f8d 20231002/cpython-3.12.0+20231002-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+e51a5293f214053ddb4645b2c9f84542e2ef86870b8655704367bd4b29d39fe9 20231002/cpython-3.12.0+20231002-x86_64-unknown-linux-gnu-install_only.tar.gz
+b042c966920cf8465385ca3522986b12d745151a72c060991088977ca36d3883 20240107/cpython-3.11.7+20240107-aarch64-apple-darwin-install_only.tar.gz
+b102eaf865eb715aa98a8a2ef19037b6cc3ae7dfd4a632802650f29de635aa13 20240107/cpython-3.11.7+20240107-aarch64-unknown-linux-gnu-install_only.tar.gz
+b44e1b74afe75c7b19143413632c4386708ae229117f8f950c2094e9681d34c7 20240107/cpython-3.11.7+20240107-ppc64le-unknown-linux-gnu-install_only.tar.gz
+49520e3ff494708020f306e30b0964f079170be83e956be4504f850557378a22 20240107/cpython-3.11.7+20240107-s390x-unknown-linux-gnu-install_only.tar.gz
+a0e615eef1fafdc742da0008425a9030b7ea68a4ae4e73ac557ef27b112836d4 20240107/cpython-3.11.7+20240107-x86_64-apple-darwin-install_only.tar.gz
+67077e6fa918e4f4fd60ba169820b00be7c390c497bf9bc9cab2c255ea8e6f3e 20240107/cpython-3.11.7+20240107-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+4a51ce60007a6facf64e5495f4cf322e311ba9f39a8cd3f3e4c026eae488e140 20240107/cpython-3.11.7+20240107-x86_64-unknown-linux-gnu-install_only.tar.gz
+f93f8375ca6ac0a35d58ff007043cbd3a88d9609113f1cb59cf7c8d215f064af 20240107/cpython-3.12.1+20240107-aarch64-apple-darwin-install_only.tar.gz
+236533ef20e665007a111c2f36efb59c87ae195ad7dca223b6dc03fb07064f0b 20240107/cpython-3.12.1+20240107-aarch64-unknown-linux-gnu-install_only.tar.gz
+78051f0d1411ee62bc2af5edfccf6e8400ac4ef82887a2affc19a7ace6a05267 20240107/cpython-3.12.1+20240107-ppc64le-unknown-linux-gnu-install_only.tar.gz
+60631211c701f8d2c56e5dd7b154e68868128a019b9db1d53a264f56c0d4aee2 20240107/cpython-3.12.1+20240107-s390x-unknown-linux-gnu-install_only.tar.gz
+eca96158c1568dedd9a0b3425375637a83764d1fa74446438293089a8bfac1f8 20240107/cpython-3.12.1+20240107-x86_64-apple-darwin-install_only.tar.gz
+fd5a9e0f41959d0341246d3643f2b8794f638adc0cec8dd5e1b6465198eae08a 20240107/cpython-3.12.1+20240107-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+74e330b8212ca22fd4d9a2003b9eec14892155566738febc8e5e572f267b9472 20240107/cpython-3.12.1+20240107-x86_64-unknown-linux-gnu-install_only.tar.gz
+5fdc0f6a5b5a90fd3c528e8b1da8e3aac931ea8690126c2fdb4254c84a3ff04a 20240224/cpython-3.10.13+20240224-aarch64-apple-darwin-install_only.tar.gz
+a898a88705611b372297bb8fe4d23cc16b8603ce5f24494c3a8cfa65d83787f9 20240224/cpython-3.10.13+20240224-aarch64-unknown-linux-gnu-install_only.tar.gz
+c23706e138a0351fc1e9def2974af7b8206bac7ecbbb98a78f5aa9e7535fee42 20240224/cpython-3.10.13+20240224-ppc64le-unknown-linux-gnu-install_only.tar.gz
+09be8fb2cdfbb4a93d555f268f244dbe4d8ff1854b2658e8043aa4ec08aede3e 20240224/cpython-3.10.13+20240224-s390x-unknown-linux-gnu-install_only.tar.gz
+6378dfd22f58bb553ddb02be28304d739cd730c1f95c15c74955c923a1bc3d6a 20240224/cpython-3.10.13+20240224-x86_64-apple-darwin-install_only.tar.gz
+086f7fe9156b897bb401273db8359017104168ac36f60f3af4e31ac7acd6634e 20240224/cpython-3.10.13+20240224-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+d995d032ca702afd2fc3a689c1f84a6c64972ecd82bba76a61d525f08eb0e195 20240224/cpython-3.10.13+20240224-x86_64-unknown-linux-gnu-install_only.tar.gz
+389a51139f5abe071a0d70091ca5df3e7a3dfcfcbe3e0ba6ad85fb4c5638421e 20240224/cpython-3.11.8+20240224-aarch64-apple-darwin-install_only.tar.gz
+389b9005fb78dd5a6f68df5ea45ab7b30d9a4b3222af96999e94fd20d4ad0c6a 20240224/cpython-3.11.8+20240224-aarch64-unknown-linux-gnu-install_only.tar.gz
+eb2b31f8e50309aae493c6a359c32b723a676f07c641f5e8fe4b6aa4dbb50946 20240224/cpython-3.11.8+20240224-ppc64le-unknown-linux-gnu-install_only.tar.gz
+844f64f4c16e24965778281da61d1e0e6cd1358a581df1662da814b1eed096b9 20240224/cpython-3.11.8+20240224-s390x-unknown-linux-gnu-install_only.tar.gz
+097f467b0c36706bfec13f199a2eaf924e668f70c6e2bd1f1366806962f7e86e 20240224/cpython-3.11.8+20240224-x86_64-apple-darwin-install_only.tar.gz
+b618f1f047349770ee1ef11d1b05899840abd53884b820fd25c7dfe2ec1664d4 20240224/cpython-3.11.8+20240224-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+94e13d0e5ad417035b80580f3e893a72e094b0900d5d64e7e34ab08e95439987 20240224/cpython-3.11.8+20240224-x86_64-unknown-linux-gnu-install_only.tar.gz
+01c064c00013b0175c7858b159989819ead53f4746d40580b5b0b35b6e80fba6 20240224/cpython-3.12.2+20240224-aarch64-apple-darwin-install_only.tar.gz
+e52550379e7c4ac27a87de832d172658bc04150e4e27d4e858e6d8cbb96fd709 20240224/cpython-3.12.2+20240224-aarch64-unknown-linux-gnu-install_only.tar.gz
+74bc02c4bbbd26245c37b29b9e12d0a9c1b7ab93477fed8b651c988b6a9a6251 20240224/cpython-3.12.2+20240224-ppc64le-unknown-linux-gnu-install_only.tar.gz
+ecd6b0285e5eef94deb784b588b4b425a15a43ae671bf206556659dc141a9825 20240224/cpython-3.12.2+20240224-s390x-unknown-linux-gnu-install_only.tar.gz
+a53a6670a202c96fec0b8c55ccc780ea3af5307eb89268d5b41a9775b109c094 20240224/cpython-3.12.2+20240224-x86_64-apple-darwin-install_only.tar.gz
+1e5655a6ccb1a64a78460e4e3ee21036c70246800f176a6c91043a3fe3654a3b 20240224/cpython-3.12.2+20240224-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+57a37b57f8243caa4cdac016176189573ad7620f0b6da5941c5e40660f9468ab 20240224/cpython-3.12.2+20240224-x86_64-unknown-linux-gnu-install_only.tar.gz
+ccc40e5af329ef2af81350db2a88bbd6c17b56676e82d62048c15d548401519e 20240415/cpython-3.12.3+20240415-aarch64-apple-darwin-install_only.tar.gz
+ec8126de97945e629cca9aedc80a29c4ae2992c9d69f2655e27ae73906ba187d 20240415/cpython-3.12.3+20240415-aarch64-unknown-linux-gnu-install_only.tar.gz
+c5dcf08b8077e617d949bda23027c49712f583120b3ed744f9b143da1d580572 20240415/cpython-3.12.3+20240415-ppc64le-unknown-linux-gnu-install_only.tar.gz
+872fc321363b8cdd826fd2cb1adfd1ceb813bc1281f9d410c1c2c4e177e8df86 20240415/cpython-3.12.3+20240415-s390x-unknown-linux-gnu-install_only.tar.gz
+c37a22fca8f57d4471e3708de6d13097668c5f160067f264bb2b18f524c890c8 20240415/cpython-3.12.3+20240415-x86_64-apple-darwin-install_only.tar.gz
+f7cfa4ad072feb4578c8afca5ba9a54ad591d665a441dd0d63aa366edbe19279 20240415/cpython-3.12.3+20240415-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+a73ba777b5d55ca89edef709e6b8521e3f3d4289581f174c8699adfb608d09d6 20240415/cpython-3.12.3+20240415-x86_64-unknown-linux-gnu-install_only.tar.gz
+164d89f0df2feb689981864ecc1dffb19e6aa3696c8880166de555494fe92607 20240726/cpython-3.10.14+20240726-aarch64-apple-darwin-install_only.tar.gz
+39bcd46b4d70e40da177c55259be16d5c2be7a3f7f93f1e3bde47e71b4833f29 20240726/cpython-3.10.14+20240726-aarch64-unknown-linux-gnu-install_only.tar.gz
+549d38b9ef59cba9ab2990025255231bfa1cb32b4bc5eac321667640fdee19d1 20240726/cpython-3.10.14+20240726-ppc64le-unknown-linux-gnu-install_only.tar.gz
+de4bc878a8666c734f983db971610980870148f333bda8b0c34abfaeae88d7ec 20240726/cpython-3.10.14+20240726-s390x-unknown-linux-gnu-install_only.tar.gz
+1a1455838cd1e8ed0da14a152a2d559a2fd3a6047ba7013e841db4a35a228c1d 20240726/cpython-3.10.14+20240726-x86_64-apple-darwin-install_only.tar.gz
+7f68821a8b5445267eca480660364ebd06ec84632b336770c6e39de07ac0f6c3 20240726/cpython-3.10.14+20240726-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+32b34cd13d9d745b3db3f3b8398ab2c07de74544829915dbebd8dce39bdc405e 20240726/cpython-3.10.14+20240726-x86_64-unknown-linux-gnu-install_only.tar.gz
+cbdac9462bab9671c8e84650e425d3f43b775752a930a2ef954a0d457d5c00c3 20240726/cpython-3.11.9+20240726-aarch64-apple-darwin-install_only.tar.gz
+4d17cf988abe24449d649aad3ef974091ab76807904d41839907061925b4c9e3 20240726/cpython-3.11.9+20240726-aarch64-unknown-linux-gnu-install_only.tar.gz
+fc4f3c9ef9bfac2ed0282126ff376e544697ad04a5408d6429d46899d7d3bf21 20240726/cpython-3.11.9+20240726-ppc64le-unknown-linux-gnu-install_only.tar.gz
+e69b66e53e926460df044f44846eef3fea642f630e829719e1a4112fc370dc56 20240726/cpython-3.11.9+20240726-s390x-unknown-linux-gnu-install_only.tar.gz
+dc3174666a30f4c38d04e79a80c3159b4b3aa69597c4676701c8386696811611 20240726/cpython-3.11.9+20240726-x86_64-apple-darwin-install_only.tar.gz
+f694be48bdfec1dace6d69a19906b6083f4dd7c7c61f1138ba520e433e5598f8 20240726/cpython-3.11.9+20240726-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+f6e955dc9ddfcad74e77abe6f439dac48ebca14b101ed7c85a5bf3206ed2c53d 20240726/cpython-3.11.9+20240726-x86_64-unknown-linux-gnu-install_only.tar.gz
+1801025e825c04b3907e4ef6220a13607bc0397628c9485897073110ef7fde15 20240726/cpython-3.12.4+20240726-aarch64-apple-darwin-install_only.tar.gz
+a098b18b7e9fea0c66867b76c0124fce9465765017572b2e7b522154c87c78d7 20240726/cpython-3.12.4+20240726-aarch64-unknown-linux-gnu-install_only.tar.gz
+04011c4c5b7fe34b0b895edf4ad8748e410686c1d69aaee11d6688d481023bcb 20240726/cpython-3.12.4+20240726-ppc64le-unknown-linux-gnu-install_only.tar.gz
+8f8f3e29cf0c2facdbcfee70660939fda7667ac24fee8656d3388fc72f3acc7c 20240726/cpython-3.12.4+20240726-s390x-unknown-linux-gnu-install_only.tar.gz
+4c325838c1b0ed13698506fcd515be25c73dcbe195f8522cf98f9148a97601ed 20240726/cpython-3.12.4+20240726-x86_64-apple-darwin-install_only.tar.gz
+74309b0f322716409883d38c621743ea7fa0376eb00927b8ee1e1671d3aff450 20240726/cpython-3.12.4+20240726-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+e133dd6fc6a2d0033e2658637cc22e9c95f9d7073b80115037ee1f16417a54ac 20240726/cpython-3.12.4+20240726-x86_64-unknown-linux-gnu-install_only.tar.gz
+f64776f455a44c24d50f947c813738cfb7b9ac43732c44891bc831fa7940a33c 20241016/cpython-3.10.15+20241016-aarch64-apple-darwin-install_only.tar.gz
+eb58581f85fde83d1f3e8e1f8c6f5a15c7ae4fdbe3b1d1083931f9167fdd8dbc 20241016/cpython-3.10.15+20241016-aarch64-unknown-linux-gnu-install_only.tar.gz
+0c45af4e7525e2db59901606db32b2896ac1e9830c6f95551402207f537c2ce4 20241016/cpython-3.10.15+20241016-ppc64le-unknown-linux-gnu-install_only.tar.gz
+de205896b070e6f5259ac0f2b3379eead875ea84e6a6ef533b89886fcbb46a4c 20241016/cpython-3.10.15+20241016-s390x-unknown-linux-gnu-install_only.tar.gz
+90b46dfb1abd98d45663c7a2a8c45d3047a59391d8586d71b459cec7b75f662b 20241016/cpython-3.10.15+20241016-x86_64-apple-darwin-install_only.tar.gz
+e48952619796c66ec9719867b87be97edca791c2ef7fbf87d42c417c3331609e 20241016/cpython-3.10.15+20241016-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+3db2171e03c1a7acdc599fba583c1b92306d3788b375c9323077367af1e9d9de 20241016/cpython-3.10.15+20241016-x86_64-unknown-linux-gnu-install_only.tar.gz
+ed519c47d9620eb916a6f95ec2875396e7b1a9ab993ee40b2f31b837733f318c 20241016/cpython-3.10.15+20241016-x86_64-unknown-linux-musl-install_only.tar.gz
+5a69382da99c4620690643517ca1f1f53772331b347e75f536088c42a4cf6620 20241016/cpython-3.11.10+20241016-aarch64-apple-darwin-install_only.tar.gz
+803e49259280af0f5466d32829cd9d65a302b0226e424b3f0b261f9daf6aee8f 20241016/cpython-3.11.10+20241016-aarch64-unknown-linux-gnu-install_only.tar.gz
+92b666d103902001322f42badbd68da92adc5cebb826af9c1c906c33166e2f34 20241016/cpython-3.11.10+20241016-ppc64le-unknown-linux-gnu-install_only.tar.gz
+6d584317651c1ad4a857cb32d1999707e8bb3046fcb2f156d80381814fa19fde 20241016/cpython-3.11.10+20241016-s390x-unknown-linux-gnu-install_only.tar.gz
+1e23ffe5bc473e1323ab8f51464da62d77399afb423babf67f8e13c82b69c674 20241016/cpython-3.11.10+20241016-x86_64-apple-darwin-install_only.tar.gz
+647b66ff4552e70aec3bf634dd470891b4a2b291e8e8715b3bdb162f577d4c55 20241016/cpython-3.11.10+20241016-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+8b50a442b04724a24c1eebb65a36a0c0e833d35374dbdf9c9470d8a97b164cd9 20241016/cpython-3.11.10+20241016-x86_64-unknown-linux-gnu-install_only.tar.gz
+d36fc77a8dd76155a7530f6235999a693b9e7c48aa11afeb5610a091cae5aa6f 20241016/cpython-3.11.10+20241016-x86_64-unknown-linux-musl-install_only.tar.gz
+4c18852bf9c1a11b56f21bcf0df1946f7e98ee43e9e4c0c5374b2b3765cf9508 20241016/cpython-3.12.7+20241016-aarch64-apple-darwin-install_only.tar.gz
+bba3c6be6153f715f2941da34f3a6a69c2d0035c9c5396bc5bb68c6d2bd1065a 20241016/cpython-3.12.7+20241016-aarch64-unknown-linux-gnu-install_only.tar.gz
+0a1d1d92e33a969bd2f40a80af53c97b6c0cc1060d384ceff50ff801593bf9d6 20241016/cpython-3.12.7+20241016-ppc64le-unknown-linux-gnu-install_only.tar.gz
+935676a0c960b552f95e9ac2e1e385de5de4b34038ff65ffdc688838f1189c17 20241016/cpython-3.12.7+20241016-s390x-unknown-linux-gnu-install_only.tar.gz
+60c5271e7edc3c2ab47440b7abf4ed50fbc693880b474f74f05768f5b657045a 20241016/cpython-3.12.7+20241016-x86_64-apple-darwin-install_only.tar.gz
+f05531bff16fa77b53be0776587b97b466070e768e6d5920894de988bdcd547a 20241016/cpython-3.12.7+20241016-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+43576f7db1033dd57b900307f09c2e86f371152ac8a2607133afa51cbfc36064 20241016/cpython-3.12.7+20241016-x86_64-unknown-linux-gnu-install_only.tar.gz
+5ed4a4078db3cbac563af66403aaa156cd6e48831d90382a1820db2b120627b5 20241016/cpython-3.12.7+20241016-x86_64-unknown-linux-musl-install_only.tar.gz
+efc2e71c0e05bc5bedb7a846e05f28dd26491b1744ded35ed82f8b49ccfa684b 20241016/cpython-3.13.0+20241016-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+31397953849d275aa2506580f3fa1cb5a85b6a3d392e495f8030e8b6412f5556 20241016/cpython-3.13.0+20241016-aarch64-apple-darwin-install_only.tar.gz
+59b50df9826475d24bb7eff781fa3949112b5e9c92adb29e96a09cdf1216d5bd 20241016/cpython-3.13.0+20241016-aarch64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+e8378c0162b2e0e4cc1f62b29443a3305d116d09583304dbb0149fecaff6347b 20241016/cpython-3.13.0+20241016-aarch64-unknown-linux-gnu-install_only.tar.gz
+1217efa5f4ce67fcc9f7eb64165b1bd0912b2a21bc25c1a7e2cb174a21a5df7e 20241016/cpython-3.13.0+20241016-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+fc4b7f27c4e84c78f3c8e6c7f8e4023e4638d11f1b36b6b5ce457b1926cebb53 20241016/cpython-3.13.0+20241016-ppc64le-unknown-linux-gnu-install_only.tar.gz
+6c3e1e4f19d2b018b65a7e3ef4cd4225c5b9adfbc490218628466e636d5c4b8c 20241016/cpython-3.13.0+20241016-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+66b19e6a07717f6cfcd3a8ca953f0a2eaa232291142f3d26a8d17c979ec0f467 20241016/cpython-3.13.0+20241016-s390x-unknown-linux-gnu-install_only.tar.gz
+2e07dfea62fe2215738551a179c87dbed1cc79d1b3654f4d7559889a6d5ce4eb 20241016/cpython-3.13.0+20241016-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+cff1b7e7cd26f2d47acac1ad6590e27d29829776f77e8afa067e9419f2f6ce77 20241016/cpython-3.13.0+20241016-x86_64-apple-darwin-install_only.tar.gz
+bfd89f9acf866463bc4baf01733da5e767d13f5d0112175a4f57ba91f1541310 20241016/cpython-3.13.0+20241016-x86_64-pc-windows-msvc-shared-freethreaded+pgo-full.tar.zst
+b25926e8ce4164cf103bacc4f4d154894ea53e07dd3fdd5ebb16fb1a82a7b1a0 20241016/cpython-3.13.0+20241016-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+a73adeda301ad843cce05f31a2d3e76222b656984535a7b87696a24a098b216c 20241016/cpython-3.13.0+20241016-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+2c8cb15c6a2caadaa98af51df6fe78a8155b8471cb3dd7b9836038e0d3657fb4 20241016/cpython-3.13.0+20241016-x86_64-unknown-linux-gnu-install_only.tar.gz
+2f61ee3b628a56aceea63b46c7afe2df3e22a61da706606b0c8efda57f953cf4 20241016/cpython-3.13.0+20241016-x86_64-unknown-linux-musl-install_only.tar.gz
+08f05618bdcf8064a7960b25d9ba92155447c9b08e0cf2f46a981e4c6a1bb5a5 20241205/cpython-3.13.1+20241205-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+88b88b609129c12f4b3841845aca13230f61e97ba97bd0fb28ee64b0e442a34f 20241205/cpython-3.13.1+20241205-aarch64-apple-darwin-install_only.tar.gz
+9f2fcb809f9ba6c7c014a8803073a88786701a98971135bce684355062e4bb35 20241205/cpython-3.13.1+20241205-aarch64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+fdfa86c2746d2ae700042c461846e6c37f70c249925b58de8cd02eb8d1423d4e 20241205/cpython-3.13.1+20241205-aarch64-unknown-linux-gnu-install_only.tar.gz
+15ceea78dff78ca8ccaac8d9c54b808af30daaa126f1f561e920a6896e098634 20241205/cpython-3.13.1+20241205-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+27b20b3237c55430ca1304e687d021f88373f906249f9cd272c5ff2803d5e5c3 20241205/cpython-3.13.1+20241205-ppc64le-unknown-linux-gnu-install_only.tar.gz
+ed3c6118d1d12603309c930e93421ac7a30a69045ffd43006f63ecf71d72c317 20241205/cpython-3.13.1+20241205-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+7d0187e20cb5e36c689eec27e4d3de56d8b7f1c50dc5523550fc47377801521f 20241205/cpython-3.13.1+20241205-s390x-unknown-linux-gnu-install_only.tar.gz
+dc780fecd215d2cc9e573abf1e13a175fcfa8f6efd100ef888494a248a16cda8 20241205/cpython-3.13.1+20241205-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+47eef6efb8664e2d1d23a7cdaf56262d784f8ace48f3bfca1b183e95a49888d6 20241205/cpython-3.13.1+20241205-x86_64-apple-darwin-install_only.tar.gz
+7537b2ab361c0eabc0eabfca9ffd9862d7f5f6576eda13b97e98aceb5eea4fd3 20241205/cpython-3.13.1+20241205-x86_64-pc-windows-msvc-shared-freethreaded+pgo-full.tar.zst
+f51f0493a5f979ff0b8d8c598a8d74f2a4d86a190c2729c85e0af65c36a9cbbe 20241205/cpython-3.13.1+20241205-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+9ec1b81213f849d91f5ebe6a16196e85cd6ff7c05ca823ce0ab7ba5b0e9fee84 20241205/cpython-3.13.1+20241205-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+242b2727df6c1e00de6a9f0f0dcb4562e168d27f428c785b0eb41a6aeb34d69a 20241205/cpython-3.13.1+20241205-x86_64-unknown-linux-gnu-install_only.tar.gz
+76b30c6373b9c0aa2ba610e07da02f384aa210ac79643da38c66d3e6171c6ef5 20241205/cpython-3.13.1+20241205-x86_64-unknown-linux-musl-install_only.tar.gz
+e3c4aa607717b23903ca2650d5c3ee24f89b97543e2db2b0f463bddc7a9e92f3 20241206/cpython-3.12.8+20241206-aarch64-apple-darwin-install_only.tar.gz
+ce674b55442b732973afb2932c281bb1ded4ad7e22bcf9b07071165770758c7e 20241206/cpython-3.12.8+20241206-aarch64-unknown-linux-gnu-install_only.tar.gz
+b7214790b273de9ed0532420054b72ba1393d62d2fc844ec55ade193771bd90c 20241206/cpython-3.12.8+20241206-ppc64le-unknown-linux-gnu-install_only.tar.gz
+73102f5dbd7d1e7e9c2f2c80aedf2893d99a7fa407f6674ec8b2f57ba07daee5 20241206/cpython-3.12.8+20241206-s390x-unknown-linux-gnu-install_only.tar.gz
+3ba35c706577d755e8e52a4c161a042464577c0e695e2a605362fa469e26de10 20241206/cpython-3.12.8+20241206-x86_64-apple-darwin-install_only.tar.gz
+767b4be3ddf6b99e5ade519789c1615c191d8cf99d5aff4685cc18b48931f1e6 20241206/cpython-3.12.8+20241206-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+b9d6ee5ddac1198e72d53112698773fc8bb597de095592eb849ca794306699ba 20241206/cpython-3.12.8+20241206-x86_64-unknown-linux-gnu-install_only.tar.gz
+6f305888703691dd04cfff85284d23ea0b0146ed7c4415e472f1fb72b3f32cdf 20241206/cpython-3.12.8+20241206-x86_64-unknown-linux-musl-install_only.tar.gz
+e99f8457d9c79592c036489c5cfa78df76e4762d170665e499833e045d82608f 20250317/cpython-3.10.16+20250317-aarch64-apple-darwin-install_only.tar.gz
+76d0f04d2444e77200fdc70d1c57480e29cca78cb7420d713bc1c523709c198d 20250317/cpython-3.10.16+20250317-aarch64-unknown-linux-gnu-install_only.tar.gz
+39c9b3486de984fe1d72d90278229c70d6b08bcf69cd55796881b2d75077b603 20250317/cpython-3.10.16+20250317-ppc64le-unknown-linux-gnu-install_only.tar.gz
+ebe949ada9293581c17d9bcdaa8f645f67d95f73eac65def760a71ef9dd6600d 20250317/cpython-3.10.16+20250317-riscv64-unknown-linux-gnu-install_only.tar.gz
+9b2fc0b7f1c75b48e799b6fa14f7e24f5c61f2db82e3c65d13ed25e08f7f0857 20250317/cpython-3.10.16+20250317-s390x-unknown-linux-gnu-install_only.tar.gz
+e03e62dbe95afa2f56b7344ff3bd061b180a0b690ff77f9a1d7e6601935e05ca 20250317/cpython-3.10.16+20250317-x86_64-apple-darwin-install_only.tar.gz
+c7e0eb0ff5b36758b7a8cacd42eb223c056b9c4d36eded9bf5b9fe0c0b9aeb08 20250317/cpython-3.10.16+20250317-x86_64-pc-windows-msvc-install_only.tar.gz
+b350c7e63956ca8edb856b91316328e0fd003a840cbd63d08253af43b2c63643 20250317/cpython-3.10.16+20250317-x86_64-unknown-linux-gnu-install_only.tar.gz
+6ed64923ee4fbea4c5780f1a5a66651d239191ac10bd23420db4f5e4e0bf79c4 20250317/cpython-3.10.16+20250317-x86_64-unknown-linux-musl-install_only.tar.gz
+7c7fd9809da0382a601a79287b5d62d61ce0b15f5a5ee836233727a516e85381 20250317/cpython-3.12.9+20250317-aarch64-apple-darwin-install_only.tar.gz
+00c6bf9acef21ac741fea24dc449d0149834d30e9113429e50a95cce4b00bb80 20250317/cpython-3.12.9+20250317-aarch64-unknown-linux-gnu-install_only.tar.gz
+25d77599dfd5849f17391d92da0da99079e4e94f19a881f763f5cc62530ef7e1 20250317/cpython-3.12.9+20250317-ppc64le-unknown-linux-gnu-install_only.tar.gz
+e97ab0fdf443b302c56a52b4fd08f513bf3be66aa47263f0f9df3c6e60e05f2e 20250317/cpython-3.12.9+20250317-riscv64-unknown-linux-gnu-install_only.tar.gz
+7492d079ffa8425c8f6c58e43b237c37e3fb7b31e2e14635927bb4d3397ba21e 20250317/cpython-3.12.9+20250317-s390x-unknown-linux-gnu-install_only.tar.gz
+1ee1b1bb9fbce5c145c4bec9a3c98d7a4fa22543e09a7c1d932bc8599283c2dc 20250317/cpython-3.12.9+20250317-x86_64-apple-darwin-install_only.tar.gz
+d15361fd202dd74ae9c3eece1abdab7655f1eba90bf6255cad1d7c53d463ed4d 20250317/cpython-3.12.9+20250317-x86_64-pc-windows-msvc-install_only.tar.gz
+ef382fb88cbb41a3b0801690bd716b8a1aec07a6c6471010bcc6bd14cd575226 20250317/cpython-3.12.9+20250317-x86_64-unknown-linux-gnu-install_only.tar.gz
+94e3837da1adf9964aab2d6047b33f70167de3096d1f9a2d1fa9340b1bbf537d 20250317/cpython-3.12.9+20250317-x86_64-unknown-linux-musl-install_only.tar.gz
+c98c9c977e6fa05c3813bd49f3553904d89d60fed27e2e36468da7afa1d6d5e2 20250317/cpython-3.13.2+20250317-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+faa44274a331eb39786362818b21b3a4e74514e8805000b20b0e55c590cecb94 20250317/cpython-3.13.2+20250317-aarch64-apple-darwin-install_only.tar.gz
+b8635e59e3143fd17f19a3dfe8ccc246ee6587c87da359bd1bcab35eefbb5f19 20250317/cpython-3.13.2+20250317-aarch64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+9c67260446fee6ea706dad577a0b32936c63f449c25d66e4383d5846b2ab2e36 20250317/cpython-3.13.2+20250317-aarch64-unknown-linux-gnu-install_only.tar.gz
+6ae8fa44cb2edf4ab49cff1820b53c40c10349c0f39e11b8cd76ce7f3e7e1def 20250317/cpython-3.13.2+20250317-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+345b53d2f86c9dbd7f1320657cb227ff9a42ef63ff21f129abbbc8c82a375147 20250317/cpython-3.13.2+20250317-ppc64le-unknown-linux-gnu-install_only.tar.gz
+2af1b8850c52801fb6189e7a17a51e0c93d9e46ddefcca72247b76329c97d02a 20250317/cpython-3.13.2+20250317-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+172d22b2330737f3a028ea538ffe497c39a066a8d3200b22dd4d177a3332ad85 20250317/cpython-3.13.2+20250317-riscv64-unknown-linux-gnu-install_only.tar.gz
+c074144cc80c2af32c420b79a9df26e8db405212619990c1fbdd308bd75afe3f 20250317/cpython-3.13.2+20250317-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+ec3b16ea8a97e3138acec72bc5ff35949950c62c8994a8ec8e213fd93f0e806b 20250317/cpython-3.13.2+20250317-s390x-unknown-linux-gnu-install_only.tar.gz
+0d73e4348d8d4b5159058609d2303705190405b485dd09ad05d870d7e0f36e0f 20250317/cpython-3.13.2+20250317-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+ee4526e84b5ce5b11141c50060b385320f2773616249a741f90c96d460ce8e8f 20250317/cpython-3.13.2+20250317-x86_64-apple-darwin-install_only.tar.gz
+c51b4845fda5421e044067c111192f645234081d704313f74ee77fa013a186ea 20250317/cpython-3.13.2+20250317-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+84d7b52f3558c8e35c670a4fa14080c75e3ec584adfae49fec8b51008b75b21e 20250317/cpython-3.13.2+20250317-x86_64-pc-windows-msvc-install_only.tar.gz
+1aea5062614c036904b55c1cc2fb4b500b7f6f7a4cacc263f4888889d355eef8 20250317/cpython-3.13.2+20250317-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+db011f0cd29cab2291584958f4e2eb001b0e6051848d89b38a2dc23c5c54e512 20250317/cpython-3.13.2+20250317-x86_64-unknown-linux-gnu-install_only.tar.gz
+00bb2d629f7eacbb5c6b44dc04af26d1f1da64cee3425b0d8eb5135a93830296 20250317/cpython-3.13.2+20250317-x86_64-unknown-linux-musl-install_only.tar.gz
+278dccade56b4bbeecb9a613b77012cf5c1433a5e9b8ef99230d5e61f31d9e02 20250610/cpython-3.13.4+20250610-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+c2ce6601b2668c7bd1f799986af5ddfbff36e88795741864aba6e578cb02ed7f 20250610/cpython-3.13.4+20250610-aarch64-apple-darwin-install_only.tar.gz
+b1c1bd6ab9ef95b464d92a6a911cef1a8d9f0b0f6a192f694ef18ed15d882edf 20250610/cpython-3.13.4+20250610-aarch64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+3c2596ece08ffe17e11bc1f27aeb4ce1195d2490a83d695d36ef4933d5c5ca53 20250610/cpython-3.13.4+20250610-aarch64-unknown-linux-gnu-install_only.tar.gz
+ed66ae213a62b286b9b7338b816ccd2815f5248b7a28a185dc8159fe004149ae 20250610/cpython-3.13.4+20250610-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+b3cc13ee177b8db1d3e9b2eac413484e3c6a356f97d91dc59de8d3fd8cf79d6b 20250610/cpython-3.13.4+20250610-ppc64le-unknown-linux-gnu-install_only.tar.gz
+913264545215236660e4178bc3e5b57a20a444a8deb5c11680c95afc960b4016 20250610/cpython-3.13.4+20250610-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+d1b989e57a9ce29f6c945eeffe0e9750c222fdd09e99d2f8d6b0d8532a523053 20250610/cpython-3.13.4+20250610-riscv64-unknown-linux-gnu-install_only.tar.gz
+7556a38ab5e507c1ec22bc38f9859982bc956cab7f4de05a2faac114feb306db 20250610/cpython-3.13.4+20250610-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+d1d19fb01961ac6476712fdd6c5031f74c83666f6f11aa066207e9a158f7e3d8 20250610/cpython-3.13.4+20250610-s390x-unknown-linux-gnu-install_only.tar.gz
+64ab7ac8c88002d9ba20a92f72945bfa350268e944a7922500af75d20330574d 20250610/cpython-3.13.4+20250610-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+79feb6ca68f3921d07af52d9db06cf134e6f36916941ea850ab0bc20f5ff638b 20250610/cpython-3.13.4+20250610-x86_64-apple-darwin-install_only.tar.gz
+9457504547edb2e0156bf76b53c7e4941c7f61c0eff9fd5f4d816d3df51c58e3 20250610/cpython-3.13.4+20250610-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+29ac3585cc2dcfd79e3fe380c272d00e9d34351fc456e149403c86d3fea34057 20250610/cpython-3.13.4+20250610-x86_64-pc-windows-msvc-install_only.tar.gz
+864df6e6819e8f8e855ce30f34410fdc5867d0616e904daeb9a40e5806e970d7 20250610/cpython-3.13.4+20250610-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+44e5477333ebca298a7a0a316985c6c3533b8645f92a83f7f73c44033832bf32 20250610/cpython-3.13.4+20250610-x86_64-unknown-linux-gnu-install_only.tar.gz
+a3afbfa94b9ff4d9fc426b47eb3c8446cada535075b8d51b7bdc9d9ab9911fc2 20250610/cpython-3.13.4+20250610-x86_64-unknown-linux-musl-install_only.tar.gz
+a94c02b2d597cd6b075a713fe4e9a909cc97ca6a3b2b2ce86eda21be2062d48e 20250808/cpython-3.10.18+20250808-aarch64-apple-darwin-install_only.tar.gz
+ef7de3b715d519e246d98ff7856247f7f7b357068705f09c6f300b7e7b76c701 20250808/cpython-3.10.18+20250808-aarch64-unknown-linux-gnu-install_only.tar.gz
+f580efed11cc54e1a221c052e8bc88bfbc12844d3ca8949da828351a1232386e 20250808/cpython-3.10.18+20250808-ppc64le-unknown-linux-gnu-install_only.tar.gz
+0d7e460e30203a9225b6f417ae972f66415a1cc0e32b37ebc48d195816282669 20250808/cpython-3.10.18+20250808-riscv64-unknown-linux-gnu-install_only.tar.gz
+d4ada974daadb08a0184c19232ee3b03b3137aa70609760e1a94aaf7b12989ef 20250808/cpython-3.10.18+20250808-s390x-unknown-linux-gnu-install_only.tar.gz
+da96fe2ba841640215788ddb9f151f03629360e37fcb94d4f76e5095b87df0d4 20250808/cpython-3.10.18+20250808-x86_64-apple-darwin-install_only.tar.gz
+a648f3c9d136985ccfe57a5507e73d9d0839f7fd09eebd7c247857f2feaecb2a 20250808/cpython-3.10.18+20250808-x86_64-pc-windows-msvc-install_only.tar.gz
+0b310a73bb9e7a495dbcad5f685e508ca2e7b36ee8f29301a52285730c425789 20250808/cpython-3.10.18+20250808-x86_64-unknown-linux-gnu-install_only.tar.gz
+9cecf6ea2effbe183faebcf7e1160425a4ee17a68e49f2eefe5e1c59c51fa7ee 20250808/cpython-3.10.18+20250808-x86_64-unknown-linux-musl-install_only.tar.gz
+d089bfd2c7b98a0942750a195e70d3172beda76d7747097b8afd87028b6e59b6 20250808/cpython-3.11.13+20250808-aarch64-apple-darwin-install_only.tar.gz
+a632857c966237e7fd38b44c47c350f6e30d8ec54dcad6c832865ad670f0f22f 20250808/cpython-3.11.13+20250808-aarch64-pc-windows-msvc-install_only.tar.gz
+bc57105f8a16acd57b71d926143c7f6ecf61729b40c8b4656f1b98bebd47c710 20250808/cpython-3.11.13+20250808-aarch64-unknown-linux-gnu-install_only.tar.gz
+16a0165b0744940702b8fff80b8bf973ac914f78cb6fca28d389583f675e84de 20250808/cpython-3.11.13+20250808-ppc64le-unknown-linux-gnu-install_only.tar.gz
+d8e62306be8f41c46bcd62ca68f91a1467f47adff632a35ff413dc1043ed56e8 20250808/cpython-3.11.13+20250808-riscv64-unknown-linux-gnu-install_only.tar.gz
+4e302a4514a73baefdd9b327062bdafeb4115a799deec91c185f6ab45a857241 20250808/cpython-3.11.13+20250808-s390x-unknown-linux-gnu-install_only.tar.gz
+d946d618f8bba8308b67e460a30612a71e2ccc309f85f6628aaae24e2b816981 20250808/cpython-3.11.13+20250808-x86_64-apple-darwin-install_only.tar.gz
+ed963aee33d29ad8abfbb5fe63e42f57a2638a4a11a88e11d8bb66e61f20a6e5 20250808/cpython-3.11.13+20250808-x86_64-pc-windows-msvc-install_only.tar.gz
+3ad988c702cbb017fef1208d47dea4138a2e85fd0f7f01ec5e1e335e597131b9 20250808/cpython-3.11.13+20250808-x86_64-unknown-linux-gnu-install_only.tar.gz
+3a5810f0696f844289aa06d5c3a1efeab66eee999c25196b7d1954192a2c2100 20250808/cpython-3.11.13+20250808-x86_64-unknown-linux-musl-install_only.tar.gz
+8792c4a84c364ab975feca0c27d3157a5435b7baab325a346ae56b223893b661 20250808/cpython-3.12.11+20250808-aarch64-apple-darwin-install_only.tar.gz
+00bf7d7e8bcf5d1e9c4dfca0247d8e035147777cd57ee9d4c64dedca86b0a464 20250808/cpython-3.12.11+20250808-aarch64-pc-windows-msvc-install_only.tar.gz
+4d7ba5314fab02130d6538f074961ffbf61310cade9180e59026074f9a8939cb 20250808/cpython-3.12.11+20250808-aarch64-unknown-linux-gnu-install_only.tar.gz
+2c862eb40a81549d9c11e6bf5a7f07c3406310b14e6a4d16dcdf1c4763ef7090 20250808/cpython-3.12.11+20250808-ppc64le-unknown-linux-gnu-install_only.tar.gz
+0bb729b95fabd49c7b495f7c44a9086e3970ea57daf66365741574bd36a17e81 20250808/cpython-3.12.11+20250808-riscv64-unknown-linux-gnu-install_only.tar.gz
+99e465882d217d24ac90e99fac8f32e6a644d0340ac05ee510fb5cdf53f0cfb8 20250808/cpython-3.12.11+20250808-s390x-unknown-linux-gnu-install_only.tar.gz
+e0c932709dafb05f00e528a7560ef8ee559ac82b75faca60dd1245bca1c1553f 20250808/cpython-3.12.11+20250808-x86_64-apple-darwin-install_only.tar.gz
+81214ef71964a40ec269a79067ca490d45298c350583bc3af0e5781451a05c3c 20250808/cpython-3.12.11+20250808-x86_64-pc-windows-msvc-install_only.tar.gz
+63d78840bf209af8da8f24e335d910f88387b892ca9187be571d481c071751bb 20250808/cpython-3.12.11+20250808-x86_64-unknown-linux-gnu-install_only.tar.gz
+d633d070780590aa03ac5575cd9d7b9e17682d80f14b400313c009c387cf706b 20250808/cpython-3.12.11+20250808-x86_64-unknown-linux-musl-install_only.tar.gz
+f2143304012e021a603bf1807bf3e4ce163832e43ab9a9829e53cb136497f207 20250808/cpython-3.13.6+20250808-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+8a1efa6af4e80f08e2c97dda822a3d6c24d6c98e518242f802c6a43ae8401488 20250808/cpython-3.13.6+20250808-aarch64-apple-darwin-install_only.tar.gz
+552cfabcc3b103f4b1c4036d2592d5f0373c9554a2c4d2b6631b04ef7e592067 20250808/cpython-3.13.6+20250808-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+8e1617bd407ec1a874499daab26ae95080d1e0267ae616d34490137a28705827 20250808/cpython-3.13.6+20250808-aarch64-pc-windows-msvc-install_only.tar.gz
+d84a7d64c284be387386b9f5da273f6d05486eb6bd8f9e86e2575cb59604cb22 20250808/cpython-3.13.6+20250808-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+11fa0591ae2211c08a42ae54944260e36ddf88a1d5604ea0c49e2477be4e5388 20250808/cpython-3.13.6+20250808-aarch64-unknown-linux-gnu-install_only.tar.gz
+e76fcaf1bf80a615520dbe7f85ca0bb557fad96d132d836b0ac721e7cc1e2a37 20250808/cpython-3.13.6+20250808-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+8dcf34ae1a685fe1893b52917ae04f23328edadc4acae28499d43850c2bdd26c 20250808/cpython-3.13.6+20250808-ppc64le-unknown-linux-gnu-install_only.tar.gz
+24e08a39ba4fc77753e61541e52eed39cc871f4a92a80a3c5dd495056bd8eff9 20250808/cpython-3.13.6+20250808-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+f8ed75aa6cc2011a046be00b629c3c8295267f34280324feaff34c73e7afce39 20250808/cpython-3.13.6+20250808-riscv64-unknown-linux-gnu-install_only.tar.gz
+1609b223fd38a4a7a4d20e7173d7d9390fe2258f7dd9a15dc9ef0fa49613735d 20250808/cpython-3.13.6+20250808-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+7707ee5d19a78bc64ef8a66751ec7f97b64ea06714c7b1b52e8b321c2923ead8 20250808/cpython-3.13.6+20250808-s390x-unknown-linux-gnu-install_only.tar.gz
+4360a1278dd0a96b526d108c8fd23498a9d2028dd7791e510fd51ff5ea3f462a 20250808/cpython-3.13.6+20250808-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+27badce7201321a8363219e438a6205165e5b4884012b1046532203df2ec9379 20250808/cpython-3.13.6+20250808-x86_64-apple-darwin-install_only.tar.gz
+4e727cdbe4057b16a170f887c0fa4227a825ac59bcda84ae946c77cc932af78c 20250808/cpython-3.13.6+20250808-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+af5cc733c33b9aa9f1d74c81a59351e9b27215486d8b6cdbc06d97646a58c953 20250808/cpython-3.13.6+20250808-x86_64-pc-windows-msvc-install_only.tar.gz
+e48c13c59cc3c01b79f63c8bccec27d2db6e97f64213b8731e2077b6ed8ed52c 20250808/cpython-3.13.6+20250808-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+f844e8c8b6847628b472f7e97d8893a4e93acd5382a902b465776063668c4d64 20250808/cpython-3.13.6+20250808-x86_64-unknown-linux-gnu-install_only.tar.gz
+70076dea0ff65b3c05aae1a97b4a556bf613cc73db30309e59134f9d318f4f7b 20250808/cpython-3.13.6+20250808-x86_64-unknown-linux-musl-install_only.tar.gz
+43bda24c2fc073bc308bf631203b917a72640d59b59fdad4ba14503d84727012 20251031/cpython-3.10.19+20251031-aarch64-apple-darwin-install_only.tar.gz
+f77a8a8aa77f3f943126fa9215a25309da4bf20398fc8f4b4eec54b5fc7570ef 20251031/cpython-3.10.19+20251031-aarch64-unknown-linux-gnu-install_only.tar.gz
+1c55d160fc4c3b93528cd6aaa2bb4ca6018a99e5a45919d33dc761a43a69f860 20251031/cpython-3.10.19+20251031-ppc64le-unknown-linux-gnu-install_only.tar.gz
+21134d35721cdad4c881f35d0957cc19df9a45d194afb38a099faded3c1cfb4d 20251031/cpython-3.10.19+20251031-riscv64-unknown-linux-gnu-install_only.tar.gz
+df0db070f1eb73ab4e371eea32213ddb3500737ea5560a6f0ffd65c82af64ddc 20251031/cpython-3.10.19+20251031-s390x-unknown-linux-gnu-install_only.tar.gz
+76c12e633c09c2a790f8a958a55df4495527e0718d1875310c836e757c0c7b55 20251031/cpython-3.10.19+20251031-x86_64-apple-darwin-install_only.tar.gz
+cfa08a4caf2df1b43551b843c052d6a8814e2ea0c97268b021f0423646c244c3 20251031/cpython-3.10.19+20251031-x86_64-pc-windows-msvc-install_only.tar.gz
+fb1caac917d7b6497bb6f5950da5f1e48d05c43a498948dd97f85760c4382d9f 20251031/cpython-3.10.19+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+ba85013ed5ac7733fc6840168cc33ed19e9959b363dc80227d54f8fd9c92c0f4 20251031/cpython-3.10.19+20251031-x86_64-unknown-linux-musl-install_only.tar.gz
+6de5572b33c65af1c9b7caf00ec593fb04cffb7e14fa393a98261bb9bc464713 20251031/cpython-3.11.14+20251031-aarch64-apple-darwin-install_only.tar.gz
+38d0d1466561e15965e8d2c20f5e5be649598f55c761ecab553d087fbd217337 20251031/cpython-3.11.14+20251031-aarch64-pc-windows-msvc-install_only.tar.gz
+510edb027527413c4249256194cb8ad2590b52dd93f7123b4cb341aff5d05894 20251031/cpython-3.11.14+20251031-aarch64-unknown-linux-gnu-install_only.tar.gz
+4e0bc6a818e0c6a9d7d3ebe1a95591fd84440520577aa837facc96a4b7a80e35 20251031/cpython-3.11.14+20251031-ppc64le-unknown-linux-gnu-install_only.tar.gz
+16519e69297144f81b2421333bc9e0b6466cf3c84749b216b695cfb4c9deb32f 20251031/cpython-3.11.14+20251031-riscv64-unknown-linux-gnu-install_only.tar.gz
+5f9c1b203cdf34c8bff1aef69b63bbf11309bd16ca6e429d8c3651eaa2b3d080 20251031/cpython-3.11.14+20251031-s390x-unknown-linux-gnu-install_only.tar.gz
+4891cbf34e8652b7bd1054b9502395e4b7e048e2e517c040fbf6c8297cb954d6 20251031/cpython-3.11.14+20251031-x86_64-apple-darwin-install_only.tar.gz
+5223b83ed9e2aa5e9e17d2ebcf767956e998876339b9cde1980a47e9d4655fb6 20251031/cpython-3.11.14+20251031-x86_64-pc-windows-msvc-install_only.tar.gz
+60f0bd473d861cc45d3401d9914e47ccb9fa037f88a91879ed517a62042b8477 20251031/cpython-3.11.14+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+25e82d1e85b90a8ab724ee633a1811b1921797f5c25ee69c6595052371b91a87 20251031/cpython-3.11.14+20251031-x86_64-unknown-linux-musl-install_only.tar.gz
+5e110cb821d2eb8246065d3b46faa655180c976c4e17250f7883c634a629bc63 20251031/cpython-3.12.12+20251031-aarch64-apple-darwin-install_only.tar.gz
+b190fed7c2b0f6e1010f554a0d1fd191c0754c4c0718e69d9d795ae559613780 20251031/cpython-3.12.12+20251031-aarch64-pc-windows-msvc-install_only.tar.gz
+81b644d166e0bfb918615af8a2363f8fcf26eccdcc60a5334b6a62c088470bac 20251031/cpython-3.12.12+20251031-aarch64-unknown-linux-gnu-install_only.tar.gz
+024f5e5678c9768d45cc24d37a8e9d265aae86c4a4602352dee3d7deba367052 20251031/cpython-3.12.12+20251031-ppc64le-unknown-linux-gnu-install_only.tar.gz
+b13c57fc372c131e667a99b9680f41c0b4da571cf99ed412103c2fe9ad5ed1fb 20251031/cpython-3.12.12+20251031-riscv64-unknown-linux-gnu-install_only.tar.gz
+2bf05bdd56cdf5ea4fd9f2faf151ea4211be96a0d1f4230b85f5dcae620d6400 20251031/cpython-3.12.12+20251031-s390x-unknown-linux-gnu-install_only.tar.gz
+687052a046d33be49dc95dd671816709067cf6176ed36c93ea61b1fe0b883b0f 20251031/cpython-3.12.12+20251031-x86_64-apple-darwin-install_only.tar.gz
+cff398b3f520c442a1b085dd347126c10c1b03f01ccc0decd8c897a687e893f1 20251031/cpython-3.12.12+20251031-x86_64-pc-windows-msvc-install_only.tar.gz
+80c3882f14e15cef8260ef5257d198e8f4371ca265887431d939e0d561de3253 20251031/cpython-3.12.12+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+0a461330b9b89f2ea3088dde10d7a3f96aa65897b7c5ce2404fa3b5c4b8daa14 20251031/cpython-3.12.12+20251031-x86_64-unknown-linux-musl-install_only.tar.gz
+eae1272a72ccce601590a10a9ca2a58199b5fcdf022aa603a527e3e2a04de9bc 20251031/cpython-3.13.9+20251031-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+1f3568d17383426d52350c2ef7c93c1a5a043198b860cb05e5d19b35f9c25cef 20251031/cpython-3.13.9+20251031-aarch64-apple-darwin-install_only.tar.gz
+743ff69935ef28834621647dab30f032dfcd80315732917531eea333210941c7 20251031/cpython-3.13.9+20251031-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+20db43873d3c4c2175d866806545e4ad4ec6bb72ca95e60082a4df6c24567e8c 20251031/cpython-3.13.9+20251031-aarch64-pc-windows-msvc-install_only.tar.gz
+a6e72f9de5d9b46cf6968d6a492f2401a919f9b959f8da2d87f43484b80169ee 20251031/cpython-3.13.9+20251031-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+0a56d11b0fb1662e67f892b9d5d1717aef06f24dbb8362bc25b8f784e620d44e 20251031/cpython-3.13.9+20251031-aarch64-unknown-linux-gnu-install_only.tar.gz
+0ed5c65437f875c58ba1bee2b8d261d18698d3d0347a2e66f8902fce022a2cda 20251031/cpython-3.13.9+20251031-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+99492123902bd5e9a6b1a30135061e93a2e6a11d25107a741d5a756e91054448 20251031/cpython-3.13.9+20251031-ppc64le-unknown-linux-gnu-install_only.tar.gz
+584e481d9b5225ffaf02f158fb26d2818207e65fc3c6dc21a6d500277f739220 20251031/cpython-3.13.9+20251031-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+b3dce3e4ef508773521e1ee1be989fff6118f8fd1fbbd0491d7ff7dfbc98ef06 20251031/cpython-3.13.9+20251031-riscv64-unknown-linux-gnu-install_only.tar.gz
+7fa7fb912ca989ceac026a332d56a2c7d6d16ab0e94d89e690de5aade26103e2 20251031/cpython-3.13.9+20251031-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+f10e34aaa856c1b8a69c2ea4a9a6723d520443d1a957bf66dc55491334ca0c1e 20251031/cpython-3.13.9+20251031-s390x-unknown-linux-gnu-install_only.tar.gz
+e2bf5fa6a3ef443ade362e08b0a19bbc172f7bfe34dabe933ccaad31d53af5da 20251031/cpython-3.13.9+20251031-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+48c0f3ca5d31e90658ef99138dc21865bb62f388ab97a1ce72cac176da194ab0 20251031/cpython-3.13.9+20251031-x86_64-apple-darwin-install_only.tar.gz
+318a9a1e43dd52054327de3bccc0c5b7afde7b7f2a398ccb4d38e03d28b05386 20251031/cpython-3.13.9+20251031-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+874593f641f31ea101440c70f81768c35d4d7d6df111fde63094db67465ef787 20251031/cpython-3.13.9+20251031-x86_64-pc-windows-msvc-install_only.tar.gz
+dcc29b069d0588fbd4ea29c6df840c8d1207d2a3bce8cd5cd57d1b85373b6048 20251031/cpython-3.13.9+20251031-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+6f05b91ee8c7e6dd0f9c60b95bb29130e2d623961de6578b643e80ddd83f96b6 20251031/cpython-3.13.9+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+ad987197034185e628715da504a50613af213dc21ba6d5ccaeab3db2c464aa6c 20251031/cpython-3.13.9+20251031-x86_64-unknown-linux-musl-install_only.tar.gz
+d9c7b430b25bd3837dbb03f945dbe6b7bc526c5940ca96f5db7cdc42f6b2b801 20251031/cpython-3.14.0+20251031-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+b4bcd3c6c24cab32ae99e1b05c89312b783b4d69431d702e5012fe1fdcad4087 20251031/cpython-3.14.0+20251031-aarch64-apple-darwin-install_only.tar.gz
+40266e60f655e49cd1d5303295255909a4b593b08b88be6e6a55b2c9fe6ed13d 20251031/cpython-3.14.0+20251031-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+599a8b7e12439cd95a201dbdfe95cf363146b1ff91f379555dafd86b170caab9 20251031/cpython-3.14.0+20251031-aarch64-pc-windows-msvc-install_only.tar.gz
+f383ef50d1da6ca511212e5ae601923b56636b87351fd5fc847e0ea0a19fa9b3 20251031/cpython-3.14.0+20251031-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+128a9cbfb9645d5237ec01704d9d1d2ac5f084464cc43c37a4cd96aa9c3b1ad5 20251031/cpython-3.14.0+20251031-aarch64-unknown-linux-gnu-install_only.tar.gz
+cb0e4ff781b856a47f0f461ceb41c78c7eeff65effd0957857ec4702ef1e1bd3 20251031/cpython-3.14.0+20251031-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+e16ca51f018e99a609faf953bd3a3aea31f45ee84262d1a517fb3abd98f1f4af 20251031/cpython-3.14.0+20251031-ppc64le-unknown-linux-gnu-install_only.tar.gz
+929223470d11a55cd75f880ac3bd4969e42407e2cdf08d4e7e38ba721cf4abec 20251031/cpython-3.14.0+20251031-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+fca340d8fb7a05cd90e216ce601b25d492ed8c1a3b6a6d77703e0f15ab3711a7 20251031/cpython-3.14.0+20251031-riscv64-unknown-linux-gnu-install_only.tar.gz
+613fb1f7b249f798b52af957d181305244e936c8e5c94c84688fcdf93fe14253 20251031/cpython-3.14.0+20251031-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+c5803644970eee931bb0581b3b64511d1a8612f67bc98951a7f7ab5581a9ed04 20251031/cpython-3.14.0+20251031-s390x-unknown-linux-gnu-install_only.tar.gz
+b3196f6b57bbb3dc2ee07f348f1d51117ffa376979eceafbf50c15f0f7980bf8 20251031/cpython-3.14.0+20251031-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+4e71a3ce973be377ef18637826648bb936e2f9490f64a9e4f33a49bcc431d344 20251031/cpython-3.14.0+20251031-x86_64-apple-darwin-install_only.tar.gz
+b81de5fc9e783ea6dfcf1098c28a278c874999c71afbb0309f6a8b4276c769d0 20251031/cpython-3.14.0+20251031-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+39acfcb3857d83eab054a3de11756ffc16b3d49c31393b9800dd2704d1f07fdf 20251031/cpython-3.14.0+20251031-x86_64-pc-windows-msvc-install_only.tar.gz
+f4acbef0fbfaf7ab31ac63986da1d93dfa1c5cb797de1dcdc1a988aa18670120 20251031/cpython-3.14.0+20251031-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+3dec1ab70758a3467ac3313bbcdabf7a9b3016db5c072c4537e3cf0a9e6290f6 20251031/cpython-3.14.0+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+d0a2a6d3b1bb00dce2105377fda8aa79675d187f8d6d7010a42f651af25018dc 20251031/cpython-3.14.0+20251031-x86_64-unknown-linux-musl-install_only.tar.gz
+12f1b16be4017181ad67904caf9e59e525b9b5d62f49105017d837e27b832959 20251031/cpython-3.15.0a1+20251031-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+3acf7aa3559b746498b18929456c5cacb84bae4e09249834cbc818970d71de87 20251031/cpython-3.15.0a1+20251031-aarch64-apple-darwin-install_only.tar.gz
+54ca78dae455ece6fefbd7f5f287cc55d5ce197caf51921f6d871d15069d9489 20251031/cpython-3.15.0a1+20251031-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+1508bcd7195008479ed156aad3afbb3a3793097ed530690f0304a8107f0e53e8 20251031/cpython-3.15.0a1+20251031-aarch64-pc-windows-msvc-install_only.tar.gz
+981fe8dfc6e7e1d0ffefa945a18d5c4c759bbe21722acf3a5cc7e62f16aa5f3c 20251031/cpython-3.15.0a1+20251031-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+d55c2aeece827e6bec83fd18515ee281d9ea0efaa3e2d20130db8f1c7cbb71c6 20251031/cpython-3.15.0a1+20251031-aarch64-unknown-linux-gnu-install_only.tar.gz
+088400dec25139f38eeecb48f090ff2ce06a96a1dd79fa8f1dfec1cd1786f5ef 20251031/cpython-3.15.0a1+20251031-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+c28beda791c499b16f06256339522f0002a3e9acba003e6b8374755d7be1def2 20251031/cpython-3.15.0a1+20251031-ppc64le-unknown-linux-gnu-install_only.tar.gz
+938061a0a31a06672526885de36037ddefd8c4acdb09424691b7000a8c8f8d01 20251031/cpython-3.15.0a1+20251031-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+36619f576b8154e4b56643c5c4a85c352f152df2989c4e602cbbe9c2b7ded870 20251031/cpython-3.15.0a1+20251031-riscv64-unknown-linux-gnu-install_only.tar.gz
+2003e7e40bb44b3db7bca81087bfb738fe6af40e5db61cda8e23b59bf55d409e 20251031/cpython-3.15.0a1+20251031-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+5ea47be2a3a563ddd87ff510dae26b7aa7f3855ca00c5f1056ff8114c067c4e4 20251031/cpython-3.15.0a1+20251031-s390x-unknown-linux-gnu-install_only.tar.gz
+64fc29e6c7a2f02a18645d968f1b3fc1d00d12a5ef3fcbb0d077fa8c62c08904 20251031/cpython-3.15.0a1+20251031-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+0ab19d3ac25f99da438b088751e5ec2421f9f6aa4292fd2dc0f8e49eb3e16bdf 20251031/cpython-3.15.0a1+20251031-x86_64-apple-darwin-install_only.tar.gz
+34abc5603e1b4131f753d29b7deac865b9277912b851cbed5a149cf3e6745d3d 20251031/cpython-3.15.0a1+20251031-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+5f5d6bec2b381cfc771c49972d2a6f7b7e7ab6a1651d8fb6ef3983f3571722b3 20251031/cpython-3.15.0a1+20251031-x86_64-pc-windows-msvc-install_only.tar.gz
+0e0272186d9f5169394dbc4d4d72a3f4a5762a04c2e5ac2ab1e23aa41fc8538a 20251031/cpython-3.15.0a1+20251031-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+1f356288c2b2713619cb7a4e453d33bf8882f812af2987e21e01e7ae382fefba 20251031/cpython-3.15.0a1+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+caf5311f333eef082dd69a669ca65aceba09a08fc1e78aad602ad649106f294c 20251031/cpython-3.15.0a1+20251031-x86_64-unknown-linux-musl-install_only.tar.gz
+87275619c2706affa4d1090d2ca3dad354b6d69f8b85dbfafe38785870751b9a 20251031/cpython-3.9.25+20251031-aarch64-apple-darwin-install_only.tar.gz
+6112d46355857680b81849764a6cf9f38cc4cd0d1cf29d432bc12fe5aeedf9d0 20251031/cpython-3.9.25+20251031-aarch64-unknown-linux-gnu-install_only.tar.gz
+828364b6f54fa45ac2dc91f8e45d5b74306372af374a9ef16eeb2ea81253ed3f 20251031/cpython-3.9.25+20251031-ppc64le-unknown-linux-gnu-install_only.tar.gz
+17467e0158e5ad04453c447d6773c23b044172276441e22e23058fd3ea053e27 20251031/cpython-3.9.25+20251031-riscv64-unknown-linux-gnu-install_only.tar.gz
+3e9539f83e67faa813fd06171199b2d33c89821dfa9a33bf6e27ad67f1b6932d 20251031/cpython-3.9.25+20251031-s390x-unknown-linux-gnu-install_only.tar.gz
+ace63cfe27a9487c4d72e1cb518be01c1d985271da0b2158e813801f7d3e5503 20251031/cpython-3.9.25+20251031-x86_64-apple-darwin-install_only.tar.gz
+4fb1b416482ce94d73cfa140317a670c596c830671d137b07c26afe8c461768a 20251031/cpython-3.9.25+20251031-x86_64-pc-windows-msvc-install_only.tar.gz
+42834f61eb6df43432c3dd6ab9ca3fdf8c06d10a404ebdb53d6902e6b9570b08 20251031/cpython-3.9.25+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+76593e8c889e81e82db5fe117fe15b69466f85100ab2ec0e4035aa86242b4e93 20251031/cpython-3.9.25+20251031-x86_64-unknown-linux-musl-install_only.tar.gz
+3c9fdd76447c1549a0d3bc2a70c63f1daec997ab034206ac0260a03237166dbb 20251202/cpython-3.13.10+20251202-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+37afe4e77ab62ac50f197b1cb1f3bc02c82735c6be893da0996afcde5dc41048 20251202/cpython-3.13.10+20251202-aarch64-apple-darwin-install_only.tar.gz
+cdb7141327bdc244715b25752593e2c9eeb3cc2764f37dfe81cfbc92db9d6d57 20251202/cpython-3.13.10+20251202-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+9060d644bd32ac0e0af970d0b21e207e6ff416b7c4dc26ffc4f9b043fb45b463 20251202/cpython-3.13.10+20251202-aarch64-pc-windows-msvc-install_only.tar.gz
+6d277221fa4b172e00b29c7158ca9661917bc8db9a0084b1a0ff5c3a0ba8b648 20251202/cpython-3.13.10+20251202-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+c68280591cda1c9515a04809fa6926020177e8e5892300206e0496ea1d10290e 20251202/cpython-3.13.10+20251202-aarch64-unknown-linux-gnu-install_only.tar.gz
+d265d8d1c51e25ed70279540223589f79cf99ad00b50d28b6150c2658c973885 20251202/cpython-3.13.10+20251202-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+1507e5528bd88131dc742a2941176aceea1838bc09860c21f179285b7865133b 20251202/cpython-3.13.10+20251202-ppc64le-unknown-linux-gnu-install_only.tar.gz
+ec411b4a2d167c3be0a9aeb3905e045d62c8e3c3db0caeade5d47d5f60b98dd0 20251202/cpython-3.13.10+20251202-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+70169e916860b2e5b34c37c302d699eb2b8f24f28090968881942a37aeb7ed08 20251202/cpython-3.13.10+20251202-riscv64-unknown-linux-gnu-install_only.tar.gz
+4fc6443948bf5b729481ea02cc5c68e80cd0da42631f6936587a2b8fd45bc62c 20251202/cpython-3.13.10+20251202-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+c5448863b64aacae62f3a213a6e6cf94ec63f96ee4d518491cd62fd3c81d952f 20251202/cpython-3.13.10+20251202-s390x-unknown-linux-gnu-install_only.tar.gz
+6ce608684df0f90350c7a1742e9685a7782d9b26ec99d1bd9d55c8cf9a405040 20251202/cpython-3.13.10+20251202-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+a02761a4f189f71c0512e88df7ca2843696d61da659e47f8a5c8a9bd2c0d16f4 20251202/cpython-3.13.10+20251202-x86_64-apple-darwin-install_only.tar.gz
+6a8b0372ded655e0d55318089fbce3122a446e69bcd120c79aaadfe9b017299c 20251202/cpython-3.13.10+20251202-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+8b00014c7c35f9ad4cb1c565f067500bacc4125c8bc30e4389ee0be9fd6ffa3d 20251202/cpython-3.13.10+20251202-x86_64-pc-windows-msvc-install_only.tar.gz
+e39127fbe8d2ae7d86099f18b4da0918f9b60ce73ed491774d6dcfaa42b5c9ae 20251202/cpython-3.13.10+20251202-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+0cac1495fff920219904b1d573aaec0df54d549c226cb45f5c60cb6d2c72727a 20251202/cpython-3.13.10+20251202-x86_64-unknown-linux-gnu-install_only.tar.gz
+04108190972ac98e13098abd972ec3f4f8b0880f83c0bb68249ce1a6164fa041 20251202/cpython-3.13.10+20251202-x86_64-unknown-linux-musl-install_only.tar.gz
+61f38e947449cf00f32f0838e813358f6bf61025d0797531e5b8b8b175c617f0 20251202/cpython-3.14.1+20251202-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+cdf1ba0789f529fa34bb5b5619c5da9757ac1067d6b8dd0ee8b78e50078fc561 20251202/cpython-3.14.1+20251202-aarch64-apple-darwin-install_only.tar.gz
+ddb10b645de2b1f6f2832a80b115a9cd34a4a760249983027efe46618a8efc48 20251202/cpython-3.14.1+20251202-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+19129cf8b4d68c4e64c25bae43bca139d871267b59cf7f02b9dcf25f0bf59497 20251202/cpython-3.14.1+20251202-aarch64-pc-windows-msvc-install_only.tar.gz
+1a88a1fe21eb443d280999464b1a397605a7ca950d8ab73813ca6868835439a2 20251202/cpython-3.14.1+20251202-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+5dde7dba0b8ef34c0d5cb8a721254b1e11028bfc09ff06664879c245fe8df73f 20251202/cpython-3.14.1+20251202-aarch64-unknown-linux-gnu-install_only.tar.gz
+7207b736ed2569f307649ffd4b615a5346631bc244730b8702babee377cef528 20251202/cpython-3.14.1+20251202-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+d2774701d53e2ac06f8c8c8e52dfa4ff346890de9b417c9a7664195443a4c766 20251202/cpython-3.14.1+20251202-ppc64le-unknown-linux-gnu-install_only.tar.gz
+d1356ccd279920edc31bf0350674d966beb9522f9503846ed7855dbb109ccc14 20251202/cpython-3.14.1+20251202-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+af840506efbcd5026d9140c0a0230e45e46bb1f339a65c10a22875930b2c0159 20251202/cpython-3.14.1+20251202-riscv64-unknown-linux-gnu-install_only.tar.gz
+477758eabc06dbc7e5e5d16e97c4672478acd409f420dd2e1b84d3452c0668d1 20251202/cpython-3.14.1+20251202-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+43f8f79bf4c66689d2019f193671d1df3e5e5dbb293382036285e8ce55fc55bb 20251202/cpython-3.14.1+20251202-s390x-unknown-linux-gnu-install_only.tar.gz
+c2cb2a9b44285fbc13c3c9b7eea813db6ed8d94909406b059db7afd39b32e786 20251202/cpython-3.14.1+20251202-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+f25ce050e1d370f9c05c9623b769ffa4b269a6ae17e611b435fd2b8b09972a88 20251202/cpython-3.14.1+20251202-x86_64-apple-darwin-install_only.tar.gz
+8ef7048315cac6d26bdbef18512a87b1a24fffa21cec86e32f9a9425f2af9bf6 20251202/cpython-3.14.1+20251202-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+cb478a5a37eb93ce4d3c27ae64d211d6a5a42475ae53f666a8d1570e71fcf409 20251202/cpython-3.14.1+20251202-x86_64-pc-windows-msvc-install_only.tar.gz
+c5d5b89aab7de683e465e36de2477a131435076badda775ef6e9ea21109c1c32 20251202/cpython-3.14.1+20251202-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+a72f313bad49846e5e9671af2be7476033a877c80831cf47f431400ccb520090 20251202/cpython-3.14.1+20251202-x86_64-unknown-linux-gnu-install_only.tar.gz
+15d50b15713097c38c67b1a06a0498ad102377f9b3999e98e4eefd6bf91bd82d 20251202/cpython-3.14.1+20251202-x86_64-unknown-linux-musl-install_only.tar.gz
+4213058b7fcd875596c12b58cd46a399358b0a87ecde4b349cbdd00cf87ed79a 20251209/cpython-3.13.11+20251209-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+295a9f7bc899ea1cc08baf60bbf511bdd1e4a29b2dd7e5f59b48f18bfa6bf585 20251209/cpython-3.13.11+20251209-aarch64-apple-darwin-install_only.tar.gz
+6daf6d092c7294cfe68c4c7bf2698ac134235489c874b3bf796c7972b9dbba30 20251209/cpython-3.13.11+20251209-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+ba646d0c3b7dd7bdfb770d9b2ebd6cd2df02a37fda90c9c79a7cf59c7df6f165 20251209/cpython-3.13.11+20251209-aarch64-pc-windows-msvc-install_only.tar.gz
+290ca3bd0007db9e551f90b08dfcb6c1b2d62c33b2fc3e9a43e77d385d94f569 20251209/cpython-3.13.11+20251209-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+ea1e678e6e82301bb32bf3917732125949b6e46d541504465972024a3f165343 20251209/cpython-3.13.11+20251209-aarch64-unknown-linux-gnu-install_only.tar.gz
+09d4b50f8abb443f7e3af858c920aa61c2430b0954df465e861caa7078e55e69 20251209/cpython-3.13.11+20251209-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+7660e53aad9d35ee256913c6d98427f81f078699962035c5fa8b5c3138695109 20251209/cpython-3.13.11+20251209-ppc64le-unknown-linux-gnu-install_only.tar.gz
+5406f2a7cacafbd2aac3ce2de066a0929aab55423824276c36e04cb83babc36c 20251209/cpython-3.13.11+20251209-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+763fa1548e6a432e9402916e690c74ea30f26dcd2e131893dd506f72b87c27c9 20251209/cpython-3.13.11+20251209-riscv64-unknown-linux-gnu-install_only.tar.gz
+3984b67c4292892eaccdd1c094c7ec788884c4c9b3534ab6995f6be96d5ed51d 20251209/cpython-3.13.11+20251209-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+ffb6af51fbfabfc6fbc4e7379bdec70c2f51e972b1d2f45c053493b9da3a1bbe 20251209/cpython-3.13.11+20251209-s390x-unknown-linux-gnu-install_only.tar.gz
+d6f489464045d6895ae68b0a04a9e16477e74fe3185a75f3a9a0af8ccd25eade 20251209/cpython-3.13.11+20251209-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+dac4a0a0a9b71f6b02a8b0886547fa22814474239bffb948e3e77185406ea136 20251209/cpython-3.13.11+20251209-x86_64-apple-darwin-install_only.tar.gz
+bb9a29a7ba8f179273b79971da6aaa7be592d78c606a63f99eff3e4c12fb0fae 20251209/cpython-3.13.11+20251209-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+87822417007045a28a7eccc47fe67b8c61265b99b10dbbfa24d231a3622b1c27 20251209/cpython-3.13.11+20251209-x86_64-pc-windows-msvc-install_only.tar.gz
+33f89c957d986d525529b8a980103735776f4d20cf52f55960a057c760188ac3 20251209/cpython-3.13.11+20251209-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+1ffa06d714a44aea14c0c54c30656413e5955a6c92074b4b3cb4351dcc28b63b 20251209/cpython-3.13.11+20251209-x86_64-unknown-linux-gnu-install_only.tar.gz
+969fe24017380b987c4e3ce15e9edf82a4618c1e61672b2cc9b021a1c98eae78 20251209/cpython-3.13.11+20251209-x86_64-unknown-linux-musl-install_only.tar.gz
+d6d17b8ef28326552cdeb2a7541c8a0cb711b378df9b93ebdb461dca065edfea 20251209/cpython-3.14.2+20251209-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+2f74bd26bd16487aca357c879d11f7b16c0521328e5148a1930ab6357bcb89fe 20251209/cpython-3.14.2+20251209-aarch64-apple-darwin-install_only.tar.gz
+43aac5bb4cdba71fc6775d26f47348d573a0b1210911438be71d7d96f4b18b51 20251209/cpython-3.14.2+20251209-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+0be0d2557d73efa7f6f3f99679f05252d57fe2aad2d81cac3cad410a9b1eacbd 20251209/cpython-3.14.2+20251209-aarch64-pc-windows-msvc-install_only.tar.gz
+adfcb90f3a7e1b3fbc6a99f9c8c8dce1f2e26ea72b724bbe4e9fa39e81e2b0db 20251209/cpython-3.14.2+20251209-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+869af31b2963194e8a2ecfadc36027c4c1c86a10f4960baec36dadb41b2acf02 20251209/cpython-3.14.2+20251209-aarch64-unknown-linux-gnu-install_only.tar.gz
+2b1ce0c5a5f5e5add7e4f934f5bd35ac41660895a30b3098db7f7303d6952a4f 20251209/cpython-3.14.2+20251209-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+86129976403fb5d64cf576329f94148f28cf6f82834e94df81ff31e9d5f404e0 20251209/cpython-3.14.2+20251209-ppc64le-unknown-linux-gnu-install_only.tar.gz
+4efb610fa07a6ee2639d14d78fc3b6ecb47431c14e1e4bda03c7f7dd60a5c1e5 20251209/cpython-3.14.2+20251209-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+318dceecf119ea903aef1fb03a552cc592ecd61c08da891b68f5755e21e13511 20251209/cpython-3.14.2+20251209-riscv64-unknown-linux-gnu-install_only.tar.gz
+e62f3bb3e66dac6c459690f9e9cd8cc2f6fe1dcf8bfed452af4c3df24cd7874f 20251209/cpython-3.14.2+20251209-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+53875c849a14194344ead1d9cd1e128cadd42a4b83c35eeb212417909ef05a6a 20251209/cpython-3.14.2+20251209-s390x-unknown-linux-gnu-install_only.tar.gz
+1fd76c79f7fc1753e8d2ed2f71406c0b65776c75f3e95ed99ffde8c95af2adc1 20251209/cpython-3.14.2+20251209-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+58fa3e17d13ab956fd11055fb774c98ecfddcdf3b588e5f2369bdbc14ef9d76a 20251209/cpython-3.14.2+20251209-x86_64-apple-darwin-install_only.tar.gz
+9927951e3997c186d2813ca1a0f4a8f5a2f771463f7f8ad0752fd3d2be2b74e4 20251209/cpython-3.14.2+20251209-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+0d660bba9f58cb552e7e99e1f96a9c67b41618c9b8d29f9f3515fe2b5ad1966e 20251209/cpython-3.14.2+20251209-x86_64-pc-windows-msvc-install_only.tar.gz
+3728872ffd74989a7b4bbf3f0c629ae8fe821cda2bd6544012c1b92b9f5d5a5b 20251209/cpython-3.14.2+20251209-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+121c3249bef497adf601df76a4d89aed6053fc5ec2f8c0ec656b86f0142e8ddd 20251209/cpython-3.14.2+20251209-x86_64-unknown-linux-gnu-install_only.tar.gz
+71639cc5d1fb79840467531c5b53ca77170a58edd3f7e2d29330dd736e477469 20251209/cpython-3.14.2+20251209-x86_64-unknown-linux-musl-install_only.tar.gz
+5b34488580df13df051a2e84e43cfca2ab28fdd7a61052f35988eb8b481b894a 20251209/cpython-3.15.0a2+20251209-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+5851f3744fbd39e3e323844cf4f68d7763fb25546aa5ffbb71b1b5ab69c56616 20251209/cpython-3.15.0a2+20251209-aarch64-apple-darwin-install_only.tar.gz
+3d99152b4e29b947fb1cfc8d035d1d511e50aeed72886ff4a5fd0a3694bd0b51 20251209/cpython-3.15.0a2+20251209-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+39bc2fcac13aeba7d650f76badf63350a81c86167a62174cb092eab7a749f4a5 20251209/cpython-3.15.0a2+20251209-aarch64-pc-windows-msvc-install_only.tar.gz
+0c2c83236f6e28c103e2660a82be94b2459ee8cfdd90f5dd82f0d503ca2aec09 20251209/cpython-3.15.0a2+20251209-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+17ba65d669be3052524e03b4d1426c072ef38df2a9065ff4525d1f4d1bc9f82c 20251209/cpython-3.15.0a2+20251209-aarch64-unknown-linux-gnu-install_only.tar.gz
+216842df2377fd032f279ded7fd23d7bdbd92d4c1fa7619523bc0dbdef5bd212 20251209/cpython-3.15.0a2+20251209-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+5585bd7c5eefe28b9bf544d902cad9a2f81f33c618f2a1d3c006cbfcdec77abc 20251209/cpython-3.15.0a2+20251209-ppc64le-unknown-linux-gnu-install_only.tar.gz
+2a8b56f318d2e21b01b54909554c53d81871b9bb05d23ea7808dde9acec4dc7e 20251209/cpython-3.15.0a2+20251209-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+bb7252edaffd422bd1c044a4764dfcf83a5d7159942f445abbef524e54ea79a0 20251209/cpython-3.15.0a2+20251209-riscv64-unknown-linux-gnu-install_only.tar.gz
+06c4ca3983aad20723f68786e3663ab49fee1bf09326f341649205ed79d34fc6 20251209/cpython-3.15.0a2+20251209-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+03a90ffa9f92d4cf4caeefb9d15f0b39c05c1e60ade6688f32165f957db4f8f3 20251209/cpython-3.15.0a2+20251209-s390x-unknown-linux-gnu-install_only.tar.gz
+4d8102b70ea9fe726ee3ae9ad9e9bc4cbe0b6ed18f7989c81aef81de578f0163 20251209/cpython-3.15.0a2+20251209-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+cee576de4919cd422dbc31eb85d3c145ee82acec84f651daaf32dc669b5149c9 20251209/cpython-3.15.0a2+20251209-x86_64-apple-darwin-install_only.tar.gz
+6ff71bac78d650ce621fe6db49f06290e48bcceb61f69cccc7728584f70b6346 20251209/cpython-3.15.0a2+20251209-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+e538475ee249eacf63bfdae0e70af73e9c47360e6dd3d6825e7a35107e177de5 20251209/cpython-3.15.0a2+20251209-x86_64-pc-windows-msvc-install_only.tar.gz
+70f552e213734c0e260a57603bee504dd7ed0e78a10558b591e724ea8730fef5 20251209/cpython-3.15.0a2+20251209-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+58addaabfab2de422180d32543fb3878ffc984c8a2e4005ff658a5cd83b31fc7 20251209/cpython-3.15.0a2+20251209-x86_64-unknown-linux-gnu-install_only.tar.gz
+dcf844400dc2e7f5f3604e994532e4d49db45f4deefe9afdf6809ca1bc6532ee 20251209/cpython-3.15.0a2+20251209-x86_64-unknown-linux-musl-install_only.tar.gz
+e7cf7bc717082bb38f5ca75988ecd8e5dbc1b0535192129371e30235d29d67b5 20260325/cpython-3.13.12+20260325-aarch64-apple-darwin-freethreaded-install_only.tar.gz
+688da81bcaa6ed91792397c7d5433b13a4f02f021f940637c3972639bc516dca 20260325/cpython-3.13.12+20260325-aarch64-apple-darwin-install_only.tar.gz
+54187be504ea5be2f8ed455e9377112bb04f34c9259eae263779e56b403e3e3f 20260325/cpython-3.13.12+20260325-aarch64-pc-windows-msvc-freethreaded-install_only.tar.gz
+d2c8b00044cd2e4c5fc7e697e63d5e481ed44b87c2def0beb42991d59f65d930 20260325/cpython-3.13.12+20260325-aarch64-pc-windows-msvc-install_only.tar.gz
+9794866e9a464f349055d791ea8f14dfa7f339ecac5aa9b1084bb2ce388fc598 20260325/cpython-3.13.12+20260325-aarch64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+31c6e61eed48ca4e156d0e473025a792338641109e8277a63518ded438390c96 20260325/cpython-3.13.12+20260325-aarch64-unknown-linux-gnu-install_only.tar.gz
+1a8a4a97f33740a1cb9fa480321818cdc610c79c9137e511e76dc53635615494 20260325/cpython-3.13.12+20260325-ppc64le-unknown-linux-gnu-freethreaded-install_only.tar.gz
+654939bc40d5f76f08eb17335bb19e9efa11eb48a0818eda2293a3f7c3570ae7 20260325/cpython-3.13.12+20260325-ppc64le-unknown-linux-gnu-install_only.tar.gz
+178d20e568c25abcca9b1dbedf77e904cc3f10a79d22e31f87ddabd2d28f87dc 20260325/cpython-3.13.12+20260325-riscv64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+fc7e1fb553c47b831ed7fa529575145207f000f967513f7b9ea809cce006ed79 20260325/cpython-3.13.12+20260325-riscv64-unknown-linux-gnu-install_only.tar.gz
+d23c93ea7502420c71e4acf02999c72ab80797d51843b1b6a315ca7bac3cb780 20260325/cpython-3.13.12+20260325-s390x-unknown-linux-gnu-freethreaded-install_only.tar.gz
+7d7919358e88fcc672b061be8c2316c3a604c7074200515d7104166ed611f7f9 20260325/cpython-3.13.12+20260325-s390x-unknown-linux-gnu-install_only.tar.gz
+6aff211689e30889cfe90b0b2a76b6f5a7b9e6e0bb28d6a66fd5ba35d36dc78a 20260325/cpython-3.13.12+20260325-x86_64-apple-darwin-freethreaded-install_only.tar.gz
+7411e47939783708381017a90944a69641ac84d43f74fb6e2d52576c599a2717 20260325/cpython-3.13.12+20260325-x86_64-apple-darwin-install_only.tar.gz
+088754e90ff22962a4ab6f7cb6bdabe5d9e7618266595df2cf7b211766e15132 20260325/cpython-3.13.12+20260325-x86_64-pc-windows-msvc-freethreaded-install_only.tar.gz
+5b4093f92d9bffcb0d92aea050f3d77d5a4fc8e918b31cea000ee4b3ca751f1d 20260325/cpython-3.13.12+20260325-x86_64-pc-windows-msvc-install_only.tar.gz
+6070796c894ef0a25b5a944c8c0327e155df534302e1612a5ddd57d177ddadf7 20260325/cpython-3.13.12+20260325-x86_64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+ebb1051ca2822b9803f46a5f10b6d51d153189ef1b1f1e142f733c0cbeaf86eb 20260325/cpython-3.13.12+20260325-x86_64-unknown-linux-gnu-install_only.tar.gz
+b2e9400731c7f18069ec2804ba87a404385fe440f93b7dcb59004b9f56651202 20260325/cpython-3.13.12+20260325-x86_64-unknown-linux-musl-install_only.tar.gz
+21f297bc1e0503fa077364417e2213c60951d94fd65d837ae6d9d9201ae27483 20260325/cpython-3.14.3+20260325-aarch64-apple-darwin-freethreaded-install_only.tar.gz
+80c996c23aab828134821f078a8a77a6f33f3f2c14000f071718c540e20c64d4 20260325/cpython-3.14.3+20260325-aarch64-apple-darwin-install_only.tar.gz
+d0e355df7362d12542108f78b3f8085b21e6824420769117c262ac86569bb2a7 20260325/cpython-3.14.3+20260325-aarch64-pc-windows-msvc-freethreaded-install_only.tar.gz
+b35fe7c2fe169574f382cef125e95cbd904ddcb98fc337167356371b6d2e8c60 20260325/cpython-3.14.3+20260325-aarch64-pc-windows-msvc-install_only.tar.gz
+112cf42bdf4d04f69ff4f9bf18c8ce45f494bac1645310bfdeff6f2ffb30dd9a 20260325/cpython-3.14.3+20260325-aarch64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+6faf5478f910741c477830f5fd842011208af0f9678faf77106c9421b325bfc1 20260325/cpython-3.14.3+20260325-aarch64-unknown-linux-gnu-install_only.tar.gz
+9d7e5ba8020fd942a89a57179d9015eb0237c2d95cdbf8378639723663f11706 20260325/cpython-3.14.3+20260325-ppc64le-unknown-linux-gnu-freethreaded-install_only.tar.gz
+5eafe32e12f33f98c40de920482b013170dcf97d8c7f5dc780271ccf4cded76a 20260325/cpython-3.14.3+20260325-ppc64le-unknown-linux-gnu-install_only.tar.gz
+32955ad52ec7931e76f4509134a2ba5a6ba6ea0cd55e05217c1ccca3967c4a5c 20260325/cpython-3.14.3+20260325-riscv64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+481d3faef258964e57b7102c63de12b2bb388c7ed07cfe456f33e63b4e061202 20260325/cpython-3.14.3+20260325-riscv64-unknown-linux-gnu-install_only.tar.gz
+7a1d36a1567cd747411c9c2bc7e2b5c1ac277ea7c734f74b158b94101fd5ea43 20260325/cpython-3.14.3+20260325-s390x-unknown-linux-gnu-freethreaded-install_only.tar.gz
+d706eae2f4d963187b7c866603aed75d7eb3ea59590b06fb34f5fd7d0fe8e432 20260325/cpython-3.14.3+20260325-s390x-unknown-linux-gnu-install_only.tar.gz
+3788781d0f9704f91ab5f7ad2a040d26b0f9b6aba0a2535db21755aebb69e620 20260325/cpython-3.14.3+20260325-x86_64-apple-darwin-freethreaded-install_only.tar.gz
+847a49fea36c066f8df7a57cd8c4c02d17667e25d30b7930e8f8ba15e72d7efc 20260325/cpython-3.14.3+20260325-x86_64-apple-darwin-install_only.tar.gz
+99dd7e425b3dac23e03f37787d77ee0af531e96b1c748275185342bc6642eb6b 20260325/cpython-3.14.3+20260325-x86_64-pc-windows-msvc-freethreaded-install_only.tar.gz
+8b4e1329c4901ce2c0f1c20ac5d2ffa62fc13f12e26b5d1e5a1000f910f980d4 20260325/cpython-3.14.3+20260325-x86_64-pc-windows-msvc-install_only.tar.gz
+20d3bcd7f175e09fa08f4cb3039e5f90fe7e4ce2476534e83f5aa21eb0d7cee9 20260325/cpython-3.14.3+20260325-x86_64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+18270c5a7b1a572599df5e68b497ba5254811dac43ba6f542245807d821fcb44 20260325/cpython-3.14.3+20260325-x86_64-unknown-linux-gnu-install_only.tar.gz
+726a28734d2878a637b0d16ce07ce24c7d6ca1043d8e6f4a23b1b0a3478eedb9 20260325/cpython-3.14.3+20260325-x86_64-unknown-linux-musl-install_only.tar.gz
+f76cc83c7db16cfc8794bf6e44d834152b57d8bab4e04e823cbc59ed23ec22f8 20260414/cpython-3.10.20+20260414-aarch64-apple-darwin-install_only.tar.gz
+64932c8e8bbdf9d6b66ee85934f6f8ad1d18218b51a87ea06cefd3b84554a3e4 20260414/cpython-3.10.20+20260414-aarch64-unknown-linux-gnu-install_only.tar.gz
+76b48eb26ef274045772186e63431419294c41baf6d5a372b722d4c9e711082e 20260414/cpython-3.10.20+20260414-ppc64le-unknown-linux-gnu-install_only.tar.gz
+76e1ec72717d17493976fc176ec661f02412666d4f19e50908d8e4303c0511d5 20260414/cpython-3.10.20+20260414-riscv64-unknown-linux-gnu-install_only.tar.gz
+2edf241199d11a3ef79a312737c1bcdb86908352c585ca14b667539080630e85 20260414/cpython-3.10.20+20260414-s390x-unknown-linux-gnu-install_only.tar.gz
+95a2d794b8981723095190fa94b574ceb4272bb49d83b9e418bb90341e304d09 20260414/cpython-3.10.20+20260414-x86_64-apple-darwin-install_only.tar.gz
+0d828683d30185ab9f1110ad2194ef384cef0533b8e0da7e03ce837548841788 20260414/cpython-3.10.20+20260414-x86_64-pc-windows-msvc-install_only.tar.gz
+303047011b2c9f58504a930fc974d84547477cf69a3f2962f25552e2395c13af 20260414/cpython-3.10.20+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+84eb198d318f8b1b8bf59eef5d30d742e13afd97c213fa229578f8fdab0c406f 20260414/cpython-3.10.20+20260414-x86_64-unknown-linux-musl-install_only.tar.gz
+a57ffd435652092d16b30e783f9826c55e9c64b0f0a72cbae0a9f39e663137fb 20260414/cpython-3.11.15+20260414-aarch64-apple-darwin-install_only.tar.gz
+a882abe4876985c9dc3d433420548506fb0cc9bb9d9fe336a2d3aaf28922aa45 20260414/cpython-3.11.15+20260414-aarch64-pc-windows-msvc-install_only.tar.gz
+77836944ae15b74e0b25bdc68a4703a340f2ccb684effc0f45fbd7910e1a1f39 20260414/cpython-3.11.15+20260414-aarch64-unknown-linux-gnu-install_only.tar.gz
+30a2107f000dbe304820627cbe2cc257027c20f3241d96e6c7df796b69ac2062 20260414/cpython-3.11.15+20260414-ppc64le-unknown-linux-gnu-install_only.tar.gz
+373b98fbf2d04099139a2f6be57593714382ed790be7e7419e358830c23ddd0f 20260414/cpython-3.11.15+20260414-riscv64-unknown-linux-gnu-install_only.tar.gz
+7838efa839158c80568de35ac78d438f564f4c32272a2fe7d9e14a9b351d1a62 20260414/cpython-3.11.15+20260414-s390x-unknown-linux-gnu-install_only.tar.gz
+317055d80e553764feeaef432d833dd8385c14b83465a8b3fa7c2b7819cba681 20260414/cpython-3.11.15+20260414-x86_64-apple-darwin-install_only.tar.gz
+8e69ecf1d9fc194e029aafa608d483bf24ccaa8f56d456d7009f20462d62ad23 20260414/cpython-3.11.15+20260414-x86_64-pc-windows-msvc-install_only.tar.gz
+8b14030dd3af9ea7f7c51b4c90feb04afd8a8f45435727e67b875270bd08f3bc 20260414/cpython-3.11.15+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+ca92d3a68a39fa330498b09714733f347bead7313ba9d9b7fbed837aa4ba7796 20260414/cpython-3.11.15+20260414-x86_64-unknown-linux-musl-install_only.tar.gz
+8966b2bcd9fa03ba22c080ad15a86bc12e41a00122b16f4b3740e302261124d9 20260414/cpython-3.12.13+20260414-aarch64-apple-darwin-install_only.tar.gz
+f55326c894fde76fc0faffe95d2bce60be533c88a8c44c1b88bbbc17bf6a5cd5 20260414/cpython-3.12.13+20260414-aarch64-pc-windows-msvc-install_only.tar.gz
+355d981eafb9b2870af79ddc106ced7266b6f6d2101d8fbcb05620fa386642b9 20260414/cpython-3.12.13+20260414-aarch64-unknown-linux-gnu-install_only.tar.gz
+4aef4cffe73c4a65ea486f14d684a9ad3f831a354174d163bb531b5baa70fc49 20260414/cpython-3.12.13+20260414-ppc64le-unknown-linux-gnu-install_only.tar.gz
+c2629d69324155132343913f064be93509bd162531e08a292e50c3973ec8b5db 20260414/cpython-3.12.13+20260414-riscv64-unknown-linux-gnu-install_only.tar.gz
+e5baafd64180f45165d2751b25d1bcc89254eefc7926f3ab341fc61b541d7606 20260414/cpython-3.12.13+20260414-s390x-unknown-linux-gnu-install_only.tar.gz
+801b03fbe004181d55a02ebd8b4e04d74973e70d716062aebe3b3cf32e9be297 20260414/cpython-3.12.13+20260414-x86_64-apple-darwin-install_only.tar.gz
+c5a9e011e284c49c48106ca177342f3e3f64e95b4c6652d4a382cc7c9bb1cc46 20260414/cpython-3.12.13+20260414-x86_64-pc-windows-msvc-install_only.tar.gz
+cdcf8724d46e4857f8db5ee9f4252dc2f5da34f7940294ec6b312389dd3f41e0 20260414/cpython-3.12.13+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+d10e971238c130fdf25e577c6538a3effa5589d5fcf53665e3c711edd6a6ff2f 20260414/cpython-3.12.13+20260414-x86_64-unknown-linux-musl-install_only.tar.gz
+2662b1c3f6d5ed4d02d877c07f9384acc0d18b9046d54cd2853dad3ca172784f 20260414/cpython-3.13.13+20260414-aarch64-apple-darwin-freethreaded-install_only.tar.gz
+c652dad552122cd2e76968ec41c803f8222038169b11310dba0c85928265f5c1 20260414/cpython-3.13.13+20260414-aarch64-apple-darwin-install_only.tar.gz
+c6c1aae3809ef585271f6f1bb3643a2c6e0c82b811b93284c6218b31f0b931d7 20260414/cpython-3.13.13+20260414-aarch64-pc-windows-msvc-freethreaded-install_only.tar.gz
+586ba71c75f341e1d111399b7f719ae784dc11e8672e93e017388f28684226d0 20260414/cpython-3.13.13+20260414-aarch64-pc-windows-msvc-install_only.tar.gz
+46ac7e9476b938ef19f71029a77d28ed1e201335dd0aa0237fcfed2e5ce0ee61 20260414/cpython-3.13.13+20260414-aarch64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+6a65f68043d7fadcd580415493d2929d1fd686013f9ae44ddbd3a81307ab256d 20260414/cpython-3.13.13+20260414-aarch64-unknown-linux-gnu-install_only.tar.gz
+abe26a6cab523a5d00d75f1353cbad9c5dc04262dcb0dc4a2b47d02384e2a7d7 20260414/cpython-3.13.13+20260414-ppc64le-unknown-linux-gnu-freethreaded-install_only.tar.gz
+aef73894107300264222b19e357baf5bad616b1c4bf5daa5c3b97cfee8f5ed7b 20260414/cpython-3.13.13+20260414-ppc64le-unknown-linux-gnu-install_only.tar.gz
+eea71fc3625fcc2408171b17fb97e0c6286ed60ed225ca7fd6e2fc5d9cc21dce 20260414/cpython-3.13.13+20260414-riscv64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+f47c09f8e7f2fb0bc4afe52422705af4016c8d3ec1cf004b67bb56a86caa62cb 20260414/cpython-3.13.13+20260414-riscv64-unknown-linux-gnu-install_only.tar.gz
+dd8b6161c4af3c2f5f29b3535decdcf146ce90d7a062687c9e5229b4151198b0 20260414/cpython-3.13.13+20260414-s390x-unknown-linux-gnu-freethreaded-install_only.tar.gz
+4d205af9654e1f33cefd23ff798af470e565f3ac0eba18d2f98f18a2abd07166 20260414/cpython-3.13.13+20260414-s390x-unknown-linux-gnu-install_only.tar.gz
+27edbaad8f0c1a8814647d24df3f87eb13c89bbc2cb90e2fc23d8fa48dd64b15 20260414/cpython-3.13.13+20260414-x86_64-apple-darwin-freethreaded-install_only.tar.gz
+540337412d2c4220e99280f741dbf45c1e3da3a39edaaab20c6ba1d53e1692ef 20260414/cpython-3.13.13+20260414-x86_64-apple-darwin-install_only.tar.gz
+002c07103bfbe1b889f41eb1b9fade81651a21aed35a3512e2a916c5d7903cfe 20260414/cpython-3.13.13+20260414-x86_64-pc-windows-msvc-freethreaded-install_only.tar.gz
+ee0cb26453d6e025d36502d765c1639c34830355e46ab3ad31c0360bc4cd9b79 20260414/cpython-3.13.13+20260414-x86_64-pc-windows-msvc-install_only.tar.gz
+a183ec7a10c38ab8c3f19968614f1e69ec697199e94525583662dfbc22b70d9a 20260414/cpython-3.13.13+20260414-x86_64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+e5ec3b2c5693215d153c434ac018e75511b2c4f96d2bce30468a477cb3a89d5e 20260414/cpython-3.13.13+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+24ac6bf80dd2991c8be348f777c96c6eb69b71e78d8fa28c09beb3ddca015a47 20260414/cpython-3.13.13+20260414-x86_64-unknown-linux-musl-install_only.tar.gz
+a4bfd77675740a0362c137b094f3cd9995775e8e6c0a7874a095dd055fd1ea99 20260414/cpython-3.14.4+20260414-aarch64-apple-darwin-freethreaded-install_only.tar.gz
+8b7865e511b17093e090449bf71eb52933c17d45ad5257ddeacaffbb2c7239df 20260414/cpython-3.14.4+20260414-aarch64-apple-darwin-install_only.tar.gz
+0458cb9885c30df690cdf304a16ec335cbc7344792ef0e8a904614b24a61316d 20260414/cpython-3.14.4+20260414-aarch64-pc-windows-msvc-freethreaded-install_only.tar.gz
+82613380d582d806e562d7701496c34c87753ab13c37aa0afe2039003651f389 20260414/cpython-3.14.4+20260414-aarch64-pc-windows-msvc-install_only.tar.gz
+6d84fb153ccb5cb650652aadc490d99881a8d9b68cf273d44cb553e8cd087734 20260414/cpython-3.14.4+20260414-aarch64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+5c8db1c21023316adad827a46d917bbbd6a85ae4e39bc3a58febda712c2f963d 20260414/cpython-3.14.4+20260414-aarch64-unknown-linux-gnu-install_only.tar.gz
+b5e025e340d0faa1772ef234e320401b0aa5cf6c9d16ed63a8c44be7c531bc58 20260414/cpython-3.14.4+20260414-ppc64le-unknown-linux-gnu-freethreaded-install_only.tar.gz
+055977a09de092744bbb22db64144e6afef8592eaac5e2bce4cca33f2592281a 20260414/cpython-3.14.4+20260414-ppc64le-unknown-linux-gnu-install_only.tar.gz
+4373553133eb4712bc10f720da29e091a23153f587fdb2c38f1fb105e70db53a 20260414/cpython-3.14.4+20260414-riscv64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+e959df167c502fb0bbcacc31a997e25c6b0ff6b5e496321b691955aa702d0c09 20260414/cpython-3.14.4+20260414-riscv64-unknown-linux-gnu-install_only.tar.gz
+a6797ad05c7d7f74a2cea28bf012f9199f4d6c1ed6d09f7adfeb9b3c538c6258 20260414/cpython-3.14.4+20260414-s390x-unknown-linux-gnu-freethreaded-install_only.tar.gz
+35f70ad05b2c4045889ee0c3d93f61b012654c1d91e10e671f0e5b4d4a6c6637 20260414/cpython-3.14.4+20260414-s390x-unknown-linux-gnu-install_only.tar.gz
+1c366767d203b722efbd5b3796d16a08436e8a328afd31e551289efba9bf56d1 20260414/cpython-3.14.4+20260414-x86_64-apple-darwin-freethreaded-install_only.tar.gz
+9ecb2b942e6698c04af10a63a3d73c0b2e8d8e11ce44933fbffe8651bef4577d 20260414/cpython-3.14.4+20260414-x86_64-apple-darwin-install_only.tar.gz
+5ccaecdb899431f393209647182def14b36d7398bd59be4fa73dd79b48b3f290 20260414/cpython-3.14.4+20260414-x86_64-pc-windows-msvc-freethreaded-install_only.tar.gz
+9647bb46d3c236e34c1c11bbb7113444d9711811f0d11c39956168807a955b1a 20260414/cpython-3.14.4+20260414-x86_64-pc-windows-msvc-install_only.tar.gz
+c1a845a79da56265dc49628bc3b9e20d34f04674fd2d637ee40cbe259d2b1b95 20260414/cpython-3.14.4+20260414-x86_64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+e17275eaf95ceb5877aa6816e209b7733f41fee401d39c3921b88fb73fc4a4ba 20260414/cpython-3.14.4+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+12687a989a2384665577e1ef9864f33d4c074a1e69b38a8bac8d656531aefa3e 20260414/cpython-3.14.4+20260414-x86_64-unknown-linux-musl-install_only.tar.gz
+5791a69a73b76b908f5bdf96da1928de8db696ab198f4ced04b77b22fe712ce0 20260414/cpython-3.15.0a8+20260414-aarch64-apple-darwin-freethreaded-install_only.tar.gz
+780d46b3da0e58e15c620d9e7dfd29b54c8359c195f625858f85df9c2c7ecc32 20260414/cpython-3.15.0a8+20260414-aarch64-apple-darwin-install_only.tar.gz
+95ddfe7dd52185f7e5d55524eafb48e54d1eab0b0cf013966f144a411f3ddd0f 20260414/cpython-3.15.0a8+20260414-aarch64-pc-windows-msvc-freethreaded-install_only.tar.gz
+10fb470e900e65df4e37f8deaf1726397c914861ffc37b43ae3743a7eee88377 20260414/cpython-3.15.0a8+20260414-aarch64-pc-windows-msvc-install_only.tar.gz
+b72908bce86036a0a1ba98ca9917ea0b99dc1e6c5d715d3d463c4f330880c09b 20260414/cpython-3.15.0a8+20260414-aarch64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+8f6dda4d8ff44976f1aa6a94674a09a503dc50b015297e1b62c8cdc591c90f4f 20260414/cpython-3.15.0a8+20260414-aarch64-unknown-linux-gnu-install_only.tar.gz
+b3c8210674140a4c5beefa2d4afd752979222638a0fb68de672c60300b4a6642 20260414/cpython-3.15.0a8+20260414-ppc64le-unknown-linux-gnu-freethreaded-install_only.tar.gz
+09f076c63fadbf675143674aa3b23229482b9a44840b8b1808a216def2a9af15 20260414/cpython-3.15.0a8+20260414-ppc64le-unknown-linux-gnu-install_only.tar.gz
+1a4984207974563c6aea7dc934579d058dbac7436642081113e86011114b9fdf 20260414/cpython-3.15.0a8+20260414-riscv64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+9d41ce752e8b731872f0f5c9c48199e63c789d24ce3ae9e91d6c8008f36e7c51 20260414/cpython-3.15.0a8+20260414-riscv64-unknown-linux-gnu-install_only.tar.gz
+f525a6244d73450e0c0a7ba125b5934894ab25ee171f7099c239d4eb7ce2f5f2 20260414/cpython-3.15.0a8+20260414-s390x-unknown-linux-gnu-freethreaded-install_only.tar.gz
+1de2593c40cce2d8ea883f8c8580223bfa1478cbd9d0191ba3640aed083c2202 20260414/cpython-3.15.0a8+20260414-s390x-unknown-linux-gnu-install_only.tar.gz
+3dcee23c21e4a3518947e988e115c1d824f07540f4326d93d4ea2028918e0193 20260414/cpython-3.15.0a8+20260414-x86_64-apple-darwin-freethreaded-install_only.tar.gz
+a7744d34148969a2ec010da6f0a46ddeceda7c02e5cdfa2b4e1811487381491a 20260414/cpython-3.15.0a8+20260414-x86_64-apple-darwin-install_only.tar.gz
+6e69670347e3a6ac1d0cd89b9506d825bd2f2690cc51ead5dec61aec6857d08d 20260414/cpython-3.15.0a8+20260414-x86_64-pc-windows-msvc-freethreaded-install_only.tar.gz
+3ded476f676fdf260d56a5e49aa083d5ffd218fc3390e4480ed42bee1acfb3fb 20260414/cpython-3.15.0a8+20260414-x86_64-pc-windows-msvc-install_only.tar.gz
+2d06d97e230b7f74de0fe4f661918a0ee827b08127b9372e0890e167de52a8c6 20260414/cpython-3.15.0a8+20260414-x86_64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+c93f4b15287ac48d7e3a475b245cb59cc51079382747e3e6213d6406c158969d 20260414/cpython-3.15.0a8+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+0568e953f837f09689eb4dd1af0043ba5e2ebae0c6395b8b9f8344a53b1f1da5 20260414/cpython-3.15.0a8+20260414-x86_64-unknown-linux-musl-freethreaded-install_only.tar.gz
+9fbd6f243a424d4ae973e72aa0075122a7cfe05ac8f6cfde986e7b00d0dbc0bf 20260414/cpython-3.15.0a8+20260414-x86_64-unknown-linux-musl-install_only.tar.gz
diff --git a/python/private/runtimes_manifest_workspace.bzl b/python/private/runtimes_manifest_workspace.bzl
new file mode 100644
index 0000000..c2da00a
--- /dev/null
+++ b/python/private/runtimes_manifest_workspace.bzl
@@ -0,0 +1,633 @@
+"""Manifest of runtimes for workspace mode builds.
+
+This is the workspace equivalent of runtimes_manifest.txt. It's a bzl file
+to simplify loading of the data under workspace mode, which doesn't
+support parsing a runtimes_manifest.txt file.
+
+NOTE: This file is automatically generated by sync_runtimes_manifest_workspace.py.
+Do not edit directly!
+"""
+
+MANIFEST_TEXT = """
+# Manifest of runtimes to make available
+# Originally generated circa 2026-06 from the runtimes in TOOL_VERSIONS from the original python/versions.bzl
+# To sort this file, execute: ./python/private/tools/sort_manifest.py python/private/runtimes_manifest.txt
+
+1409acd9a506e2d1d3b65c1488db4e40d8f19d09a7df099667c87a506f71c0ef 20220227/cpython-3.10.2+20220227-aarch64-apple-darwin-install_only.tar.gz
+8f351a8cc348bb45c0f95b8634c8345ec6e749e483384188ad865b7428342703 20220227/cpython-3.10.2+20220227-aarch64-unknown-linux-gnu-install_only.tar.gz
+8146ad4390710ec69b316a5649912df0247d35f4a42e2aa9615bffd87b3e235a 20220227/cpython-3.10.2+20220227-x86_64-apple-darwin-install_only.tar.gz
+a1d9a594cd3103baa24937ad9150c1a389544b4350e859200b3e5c036ac352bd 20220227/cpython-3.10.2+20220227-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+9b64eca2a94f7aff9409ad70bdaa7fbbf8148692662e764401883957943620dd 20220227/cpython-3.10.2+20220227-x86_64-unknown-linux-gnu-install_only.tar.gz
+2c99983d1e83e4b6e7411ed9334019f193fba626344a50c36fba6c25d4de78a2 20220502/cpython-3.10.4+20220502-aarch64-apple-darwin-install_only.tar.gz
+d8098c0c54546637e7516f93b13403b11f9db285def8d7abd825c31407a13d7e 20220502/cpython-3.10.4+20220502-aarch64-unknown-linux-gnu-install_only.tar.gz
+f2711eaffff3477826a401d09a013c6802f11c04c63ab3686aa72664f1216a05 20220502/cpython-3.10.4+20220502-x86_64-apple-darwin-install_only.tar.gz
+bee24a3a5c83325215521d261d73a5207ab7060ef3481f76f69b4366744eb81d 20220502/cpython-3.10.4+20220502-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+f6f871e53a7b1469c13f9bd7920ad98c4589e549acad8e5a1e14760fff3dd5c9 20220502/cpython-3.10.4+20220502-x86_64-unknown-linux-gnu-install_only.tar.gz
+efaf66acdb9a4eb33d57702607d2e667b1a319d58c167a43c96896b97419b8b7 20220802/cpython-3.10.6+20220802-aarch64-apple-darwin-install_only.tar.gz
+81625f5c97f61e2e3d7e9f62c484b1aa5311f21bd6545451714b949a29da5435 20220802/cpython-3.10.6+20220802-aarch64-unknown-linux-gnu-install_only.tar.gz
+7718411adf3ea1480f3f018a643eb0550282aefe39e5ecb3f363a4a566a9398c 20220802/cpython-3.10.6+20220802-x86_64-apple-darwin-install_only.tar.gz
+91889a7dbdceea585ff4d3b7856a6bb8f8a4eca83a0ff52a73542c2e67220eaa 20220802/cpython-3.10.6+20220802-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+55aa2190d28dcfdf414d96dc5dcea9fe048fadcd583dc3981fec020869826111 20220802/cpython-3.10.6+20220802-x86_64-unknown-linux-gnu-install_only.tar.gz
+d52b03817bd245d28e0a8b2f715716cd0fcd112820ccff745636932c76afa20a 20221106/cpython-3.10.8+20221106-aarch64-apple-darwin-install_only.tar.gz
+33170bef18c811906b738be530f934640491b065bf16c4d276c6515321918132 20221106/cpython-3.10.8+20221106-aarch64-unknown-linux-gnu-install_only.tar.gz
+525b79c7ce5de90ab66bd07b0ac1008bafa147ddc8a41bef15ffb7c9c1e9e7c5 20221106/cpython-3.10.8+20221106-x86_64-apple-darwin-install_only.tar.gz
+f2b6d2f77118f06dd2ca04dae1175e44aaa5077a5ed8ddc63333c15347182bfe 20221106/cpython-3.10.8+20221106-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+6c8db44ae0e18e320320bbaaafd2d69cde8bfea171ae2d651b7993d1396260b7 20221106/cpython-3.10.8+20221106-x86_64-unknown-linux-gnu-install_only.tar.gz
+018d05a779b2de7a476f3b3ff2d10f503d69d14efcedd0774e6dab8c22ef84ff 20230116/cpython-3.10.9+20230116-aarch64-apple-darwin-install_only.tar.gz
+2003750f40cd09d4bf7a850342613992f8d9454f03b3c067989911fb37e7a4d1 20230116/cpython-3.10.9+20230116-aarch64-unknown-linux-gnu-install_only.tar.gz
+0e685f98dce0e5bc8da93c7081f4e6c10219792e223e4b5886730fd73a7ba4c6 20230116/cpython-3.10.9+20230116-x86_64-apple-darwin-install_only.tar.gz
+59c6970cecb357dc1d8554bd0540eb81ee7f6d16a07acf3d14ed294ece02c035 20230116/cpython-3.10.9+20230116-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+d196347aeb701a53fe2bb2b095abec38d27d0fa0443f8a1c2023a1bed6e18cdf 20230116/cpython-3.10.9+20230116-x86_64-unknown-linux-gnu-install_only.tar.gz
+4918cdf1cab742a90f85318f88b8122aeaa2d04705803c7b6e78e81a3dd40f80 20230116/cpython-3.11.1+20230116-aarch64-apple-darwin-install_only.tar.gz
+debf15783bdcb5530504f533d33fda75a7b905cec5361ae8f33da5ba6599f8b4 20230116/cpython-3.11.1+20230116-aarch64-unknown-linux-gnu-install_only.tar.gz
+20a4203d069dc9b710f70b09e7da2ce6f473d6b1110f9535fb6f4c469ed54733 20230116/cpython-3.11.1+20230116-x86_64-apple-darwin-install_only.tar.gz
+edc08979cb0666a597466176511529c049a6f0bba8adf70df441708f766de5bf 20230116/cpython-3.11.1+20230116-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+02a551fefab3750effd0e156c25446547c238688a32fabde2995c941c03a6423 20230116/cpython-3.11.1+20230116-x86_64-unknown-linux-gnu-install_only.tar.gz
+8348bc3c2311f94ec63751fb71bd0108174be1c4def002773cf519ee1506f96f 20230507/cpython-3.10.11+20230507-aarch64-apple-darwin-install_only.tar.gz
+c7573fdb00239f86b22ea0e8e926ca881d24fde5e5890851339911d76110bc35 20230507/cpython-3.10.11+20230507-aarch64-unknown-linux-gnu-install_only.tar.gz
+73a9d4c89ed51be39dd2de4e235078281087283e9fdedef65bec02f503e906ee 20230507/cpython-3.10.11+20230507-ppc64le-unknown-linux-gnu-install_only.tar.gz
+bd3fc6e4da6f4033ebf19d66704e73b0804c22641ddae10bbe347c48f82374ad 20230507/cpython-3.10.11+20230507-x86_64-apple-darwin-install_only.tar.gz
+9c2d3604a06fcd422289df73015cd00e7271d90de28d2c910f0e2309a7f73a68 20230507/cpython-3.10.11+20230507-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+c5bcaac91bc80bfc29cf510669ecad12d506035ecb3ad85ef213416d54aecd79 20230507/cpython-3.10.11+20230507-x86_64-unknown-linux-gnu-install_only.tar.gz
+09e412506a8d63edbb6901742b54da9aa7faf120b8dbdce56c57b303fc892c86 20230507/cpython-3.11.3+20230507-aarch64-apple-darwin-install_only.tar.gz
+8190accbbbbcf7620f1ff6d668e4dd090c639665d11188ce864b62554d40e5ab 20230507/cpython-3.11.3+20230507-aarch64-unknown-linux-gnu-install_only.tar.gz
+767d24f3570b35fedb945f5ac66224c8983f2d556ab83c5cfaa5f3666e9c212c 20230507/cpython-3.11.3+20230507-ppc64le-unknown-linux-gnu-install_only.tar.gz
+f710b8d60621308149c100d5175fec39274ed0b9c99645484fd93d1716ef4310 20230507/cpython-3.11.3+20230507-x86_64-apple-darwin-install_only.tar.gz
+24741066da6f35a7ff67bee65ce82eae870d84e1181843e64a7076d1571e95af 20230507/cpython-3.11.3+20230507-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+da50b87d1ec42b3cb577dfd22a3655e43a53150f4f98a4bfb40757c9d7839ab5 20230507/cpython-3.11.3+20230507-x86_64-unknown-linux-gnu-install_only.tar.gz
+bc66c706ea8c5fc891635fda8f9da971a1a901d41342f6798c20ad0b2a25d1d6 20230726/cpython-3.10.12+20230726-aarch64-apple-darwin-install_only.tar.gz
+fee80e221663eca5174bd794cb5047e40d3910dbeadcdf1f09d405a4c1c15fe4 20230726/cpython-3.10.12+20230726-aarch64-unknown-linux-gnu-install_only.tar.gz
+bb5e8cb0d2e44241725fa9b342238245503e7849917660006b0246a9c97b1d6c 20230726/cpython-3.10.12+20230726-ppc64le-unknown-linux-gnu-install_only.tar.gz
+8d33d435ae6fb93ded7fc26798cc0a1a4f546a4e527012a1e2909cc314b332df 20230726/cpython-3.10.12+20230726-s390x-unknown-linux-gnu-install_only.tar.gz
+8a6e3ed973a671de468d9c691ed9cb2c3a4858c5defffcf0b08969fba9c1dd04 20230726/cpython-3.10.12+20230726-x86_64-apple-darwin-install_only.tar.gz
+c1a31c353ca44de7d1b1a3b6c55a823e9c1eed0423d4f9f66e617bdb1b608685 20230726/cpython-3.10.12+20230726-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+a476dbca9184df9fc69fe6309cda5ebaf031d27ca9e529852437c94ec1bc43d3 20230726/cpython-3.10.12+20230726-x86_64-unknown-linux-gnu-install_only.tar.gz
+cb6d2948384a857321f2aa40fa67744cd9676a330f08b6dad7070bda0b6120a4 20230726/cpython-3.11.4+20230726-aarch64-apple-darwin-install_only.tar.gz
+2e84fc53f4e90e11963281c5c871f593abcb24fc796a50337fa516be99af02fb 20230726/cpython-3.11.4+20230726-aarch64-unknown-linux-gnu-install_only.tar.gz
+df7b92ed9cec96b3bb658fb586be947722ecd8e420fb23cee13d2e90abcfcf25 20230726/cpython-3.11.4+20230726-ppc64le-unknown-linux-gnu-install_only.tar.gz
+e477f0749161f9aa7887964f089d9460a539f6b4a8fdab5166f898210e1a87a4 20230726/cpython-3.11.4+20230726-s390x-unknown-linux-gnu-install_only.tar.gz
+47e1557d93a42585972772e82661047ca5f608293158acb2778dccf120eabb00 20230726/cpython-3.11.4+20230726-x86_64-apple-darwin-install_only.tar.gz
+878614c03ea38538ae2f758e36c85d2c0eb1eaaca86cd400ff8c76693ee0b3e1 20230726/cpython-3.11.4+20230726-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+e26247302bc8e9083a43ce9e8dd94905b40d464745b1603041f7bc9a93c65d05 20230726/cpython-3.11.4+20230726-x86_64-unknown-linux-gnu-install_only.tar.gz
+dab64b3580118ad2073babd7c29fd2053b616479df5c107d31fe2af1f45e948b 20230826/cpython-3.11.5+20230826-aarch64-apple-darwin-install_only.tar.gz
+bb5c5d1ea0f199fe2d3f0996fff4b48ca6ddc415a3dbd98f50bff7fce48aac80 20230826/cpython-3.11.5+20230826-aarch64-unknown-linux-gnu-install_only.tar.gz
+14121b53e9c8c6d0741f911ae00102a35adbcf5c3cdf732687ef7617b7d7304d 20230826/cpython-3.11.5+20230826-ppc64le-unknown-linux-gnu-install_only.tar.gz
+fe459da39874443579d6fe88c68777c6d3e331038e1fb92a0451879fb6beb16d 20230826/cpython-3.11.5+20230826-s390x-unknown-linux-gnu-install_only.tar.gz
+4a4efa7378c72f1dd8ebcce1afb99b24c01b07023aa6b8fea50eaedb50bf2bfc 20230826/cpython-3.11.5+20230826-x86_64-apple-darwin-install_only.tar.gz
+00f002263efc8aea896bcfaaf906b1f4dab3e5cd3db53e2b69ab9a10ba220b97 20230826/cpython-3.11.5+20230826-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+fbed6f7694b2faae5d7c401a856219c945397f772eea5ca50c6eb825cbc9d1e1 20230826/cpython-3.11.5+20230826-x86_64-unknown-linux-gnu-install_only.tar.gz
+916c35125b5d8323a21526d7a9154ca626453f63d0878e95b9f613a95006c990 20231002/cpython-3.11.6+20231002-aarch64-apple-darwin-install_only.tar.gz
+3e26a672df17708c4dc928475a5974c3fb3a34a9b45c65fb4bd1e50504cc84ec 20231002/cpython-3.11.6+20231002-aarch64-unknown-linux-gnu-install_only.tar.gz
+7937035f690a624dba4d014ffd20c342e843dd46f89b0b0a1e5726b85deb8eaf 20231002/cpython-3.11.6+20231002-ppc64le-unknown-linux-gnu-install_only.tar.gz
+f9f19823dba3209cedc4647b00f46ed0177242917db20fb7fb539970e384531c 20231002/cpython-3.11.6+20231002-s390x-unknown-linux-gnu-install_only.tar.gz
+178cb1716c2abc25cb56ae915096c1a083e60abeba57af001996e8bc6ce1a371 20231002/cpython-3.11.6+20231002-x86_64-apple-darwin-install_only.tar.gz
+3933545e6d41462dd6a47e44133ea40995bc6efeed8c2e4cbdf1a699303e95ea 20231002/cpython-3.11.6+20231002-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+ee37a7eae6e80148c7e3abc56e48a397c1664f044920463ad0df0fc706eacea8 20231002/cpython-3.11.6+20231002-x86_64-unknown-linux-gnu-install_only.tar.gz
+4734a2be2becb813830112c780c9879ac3aff111a0b0cd590e65ec7465774d02 20231002/cpython-3.12.0+20231002-aarch64-apple-darwin-install_only.tar.gz
+bccfe67cf5465a3dfb0336f053966e2613a9bc85a6588c2fcf1366ef930c4f88 20231002/cpython-3.12.0+20231002-aarch64-unknown-linux-gnu-install_only.tar.gz
+b5dae075467ace32c594c7877fe6ebe0837681f814601d5d90ba4c0dfd87a1f2 20231002/cpython-3.12.0+20231002-ppc64le-unknown-linux-gnu-install_only.tar.gz
+5681621349dd85d9726d1b67c84a9686ce78f72e73a6f9e4cc4119911655759e 20231002/cpython-3.12.0+20231002-s390x-unknown-linux-gnu-install_only.tar.gz
+5a9e88c8aa52b609d556777b52ebde464ae4b4f77e4aac4eb693af57395c9abf 20231002/cpython-3.12.0+20231002-x86_64-apple-darwin-install_only.tar.gz
+facfaa1fbc8653f95057f3c4a0f8aa833dab0e0b316e24ee8686bc761d4b4f8d 20231002/cpython-3.12.0+20231002-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+e51a5293f214053ddb4645b2c9f84542e2ef86870b8655704367bd4b29d39fe9 20231002/cpython-3.12.0+20231002-x86_64-unknown-linux-gnu-install_only.tar.gz
+b042c966920cf8465385ca3522986b12d745151a72c060991088977ca36d3883 20240107/cpython-3.11.7+20240107-aarch64-apple-darwin-install_only.tar.gz
+b102eaf865eb715aa98a8a2ef19037b6cc3ae7dfd4a632802650f29de635aa13 20240107/cpython-3.11.7+20240107-aarch64-unknown-linux-gnu-install_only.tar.gz
+b44e1b74afe75c7b19143413632c4386708ae229117f8f950c2094e9681d34c7 20240107/cpython-3.11.7+20240107-ppc64le-unknown-linux-gnu-install_only.tar.gz
+49520e3ff494708020f306e30b0964f079170be83e956be4504f850557378a22 20240107/cpython-3.11.7+20240107-s390x-unknown-linux-gnu-install_only.tar.gz
+a0e615eef1fafdc742da0008425a9030b7ea68a4ae4e73ac557ef27b112836d4 20240107/cpython-3.11.7+20240107-x86_64-apple-darwin-install_only.tar.gz
+67077e6fa918e4f4fd60ba169820b00be7c390c497bf9bc9cab2c255ea8e6f3e 20240107/cpython-3.11.7+20240107-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+4a51ce60007a6facf64e5495f4cf322e311ba9f39a8cd3f3e4c026eae488e140 20240107/cpython-3.11.7+20240107-x86_64-unknown-linux-gnu-install_only.tar.gz
+f93f8375ca6ac0a35d58ff007043cbd3a88d9609113f1cb59cf7c8d215f064af 20240107/cpython-3.12.1+20240107-aarch64-apple-darwin-install_only.tar.gz
+236533ef20e665007a111c2f36efb59c87ae195ad7dca223b6dc03fb07064f0b 20240107/cpython-3.12.1+20240107-aarch64-unknown-linux-gnu-install_only.tar.gz
+78051f0d1411ee62bc2af5edfccf6e8400ac4ef82887a2affc19a7ace6a05267 20240107/cpython-3.12.1+20240107-ppc64le-unknown-linux-gnu-install_only.tar.gz
+60631211c701f8d2c56e5dd7b154e68868128a019b9db1d53a264f56c0d4aee2 20240107/cpython-3.12.1+20240107-s390x-unknown-linux-gnu-install_only.tar.gz
+eca96158c1568dedd9a0b3425375637a83764d1fa74446438293089a8bfac1f8 20240107/cpython-3.12.1+20240107-x86_64-apple-darwin-install_only.tar.gz
+fd5a9e0f41959d0341246d3643f2b8794f638adc0cec8dd5e1b6465198eae08a 20240107/cpython-3.12.1+20240107-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+74e330b8212ca22fd4d9a2003b9eec14892155566738febc8e5e572f267b9472 20240107/cpython-3.12.1+20240107-x86_64-unknown-linux-gnu-install_only.tar.gz
+5fdc0f6a5b5a90fd3c528e8b1da8e3aac931ea8690126c2fdb4254c84a3ff04a 20240224/cpython-3.10.13+20240224-aarch64-apple-darwin-install_only.tar.gz
+a898a88705611b372297bb8fe4d23cc16b8603ce5f24494c3a8cfa65d83787f9 20240224/cpython-3.10.13+20240224-aarch64-unknown-linux-gnu-install_only.tar.gz
+c23706e138a0351fc1e9def2974af7b8206bac7ecbbb98a78f5aa9e7535fee42 20240224/cpython-3.10.13+20240224-ppc64le-unknown-linux-gnu-install_only.tar.gz
+09be8fb2cdfbb4a93d555f268f244dbe4d8ff1854b2658e8043aa4ec08aede3e 20240224/cpython-3.10.13+20240224-s390x-unknown-linux-gnu-install_only.tar.gz
+6378dfd22f58bb553ddb02be28304d739cd730c1f95c15c74955c923a1bc3d6a 20240224/cpython-3.10.13+20240224-x86_64-apple-darwin-install_only.tar.gz
+086f7fe9156b897bb401273db8359017104168ac36f60f3af4e31ac7acd6634e 20240224/cpython-3.10.13+20240224-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+d995d032ca702afd2fc3a689c1f84a6c64972ecd82bba76a61d525f08eb0e195 20240224/cpython-3.10.13+20240224-x86_64-unknown-linux-gnu-install_only.tar.gz
+389a51139f5abe071a0d70091ca5df3e7a3dfcfcbe3e0ba6ad85fb4c5638421e 20240224/cpython-3.11.8+20240224-aarch64-apple-darwin-install_only.tar.gz
+389b9005fb78dd5a6f68df5ea45ab7b30d9a4b3222af96999e94fd20d4ad0c6a 20240224/cpython-3.11.8+20240224-aarch64-unknown-linux-gnu-install_only.tar.gz
+eb2b31f8e50309aae493c6a359c32b723a676f07c641f5e8fe4b6aa4dbb50946 20240224/cpython-3.11.8+20240224-ppc64le-unknown-linux-gnu-install_only.tar.gz
+844f64f4c16e24965778281da61d1e0e6cd1358a581df1662da814b1eed096b9 20240224/cpython-3.11.8+20240224-s390x-unknown-linux-gnu-install_only.tar.gz
+097f467b0c36706bfec13f199a2eaf924e668f70c6e2bd1f1366806962f7e86e 20240224/cpython-3.11.8+20240224-x86_64-apple-darwin-install_only.tar.gz
+b618f1f047349770ee1ef11d1b05899840abd53884b820fd25c7dfe2ec1664d4 20240224/cpython-3.11.8+20240224-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+94e13d0e5ad417035b80580f3e893a72e094b0900d5d64e7e34ab08e95439987 20240224/cpython-3.11.8+20240224-x86_64-unknown-linux-gnu-install_only.tar.gz
+01c064c00013b0175c7858b159989819ead53f4746d40580b5b0b35b6e80fba6 20240224/cpython-3.12.2+20240224-aarch64-apple-darwin-install_only.tar.gz
+e52550379e7c4ac27a87de832d172658bc04150e4e27d4e858e6d8cbb96fd709 20240224/cpython-3.12.2+20240224-aarch64-unknown-linux-gnu-install_only.tar.gz
+74bc02c4bbbd26245c37b29b9e12d0a9c1b7ab93477fed8b651c988b6a9a6251 20240224/cpython-3.12.2+20240224-ppc64le-unknown-linux-gnu-install_only.tar.gz
+ecd6b0285e5eef94deb784b588b4b425a15a43ae671bf206556659dc141a9825 20240224/cpython-3.12.2+20240224-s390x-unknown-linux-gnu-install_only.tar.gz
+a53a6670a202c96fec0b8c55ccc780ea3af5307eb89268d5b41a9775b109c094 20240224/cpython-3.12.2+20240224-x86_64-apple-darwin-install_only.tar.gz
+1e5655a6ccb1a64a78460e4e3ee21036c70246800f176a6c91043a3fe3654a3b 20240224/cpython-3.12.2+20240224-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+57a37b57f8243caa4cdac016176189573ad7620f0b6da5941c5e40660f9468ab 20240224/cpython-3.12.2+20240224-x86_64-unknown-linux-gnu-install_only.tar.gz
+ccc40e5af329ef2af81350db2a88bbd6c17b56676e82d62048c15d548401519e 20240415/cpython-3.12.3+20240415-aarch64-apple-darwin-install_only.tar.gz
+ec8126de97945e629cca9aedc80a29c4ae2992c9d69f2655e27ae73906ba187d 20240415/cpython-3.12.3+20240415-aarch64-unknown-linux-gnu-install_only.tar.gz
+c5dcf08b8077e617d949bda23027c49712f583120b3ed744f9b143da1d580572 20240415/cpython-3.12.3+20240415-ppc64le-unknown-linux-gnu-install_only.tar.gz
+872fc321363b8cdd826fd2cb1adfd1ceb813bc1281f9d410c1c2c4e177e8df86 20240415/cpython-3.12.3+20240415-s390x-unknown-linux-gnu-install_only.tar.gz
+c37a22fca8f57d4471e3708de6d13097668c5f160067f264bb2b18f524c890c8 20240415/cpython-3.12.3+20240415-x86_64-apple-darwin-install_only.tar.gz
+f7cfa4ad072feb4578c8afca5ba9a54ad591d665a441dd0d63aa366edbe19279 20240415/cpython-3.12.3+20240415-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+a73ba777b5d55ca89edef709e6b8521e3f3d4289581f174c8699adfb608d09d6 20240415/cpython-3.12.3+20240415-x86_64-unknown-linux-gnu-install_only.tar.gz
+164d89f0df2feb689981864ecc1dffb19e6aa3696c8880166de555494fe92607 20240726/cpython-3.10.14+20240726-aarch64-apple-darwin-install_only.tar.gz
+39bcd46b4d70e40da177c55259be16d5c2be7a3f7f93f1e3bde47e71b4833f29 20240726/cpython-3.10.14+20240726-aarch64-unknown-linux-gnu-install_only.tar.gz
+549d38b9ef59cba9ab2990025255231bfa1cb32b4bc5eac321667640fdee19d1 20240726/cpython-3.10.14+20240726-ppc64le-unknown-linux-gnu-install_only.tar.gz
+de4bc878a8666c734f983db971610980870148f333bda8b0c34abfaeae88d7ec 20240726/cpython-3.10.14+20240726-s390x-unknown-linux-gnu-install_only.tar.gz
+1a1455838cd1e8ed0da14a152a2d559a2fd3a6047ba7013e841db4a35a228c1d 20240726/cpython-3.10.14+20240726-x86_64-apple-darwin-install_only.tar.gz
+7f68821a8b5445267eca480660364ebd06ec84632b336770c6e39de07ac0f6c3 20240726/cpython-3.10.14+20240726-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+32b34cd13d9d745b3db3f3b8398ab2c07de74544829915dbebd8dce39bdc405e 20240726/cpython-3.10.14+20240726-x86_64-unknown-linux-gnu-install_only.tar.gz
+cbdac9462bab9671c8e84650e425d3f43b775752a930a2ef954a0d457d5c00c3 20240726/cpython-3.11.9+20240726-aarch64-apple-darwin-install_only.tar.gz
+4d17cf988abe24449d649aad3ef974091ab76807904d41839907061925b4c9e3 20240726/cpython-3.11.9+20240726-aarch64-unknown-linux-gnu-install_only.tar.gz
+fc4f3c9ef9bfac2ed0282126ff376e544697ad04a5408d6429d46899d7d3bf21 20240726/cpython-3.11.9+20240726-ppc64le-unknown-linux-gnu-install_only.tar.gz
+e69b66e53e926460df044f44846eef3fea642f630e829719e1a4112fc370dc56 20240726/cpython-3.11.9+20240726-s390x-unknown-linux-gnu-install_only.tar.gz
+dc3174666a30f4c38d04e79a80c3159b4b3aa69597c4676701c8386696811611 20240726/cpython-3.11.9+20240726-x86_64-apple-darwin-install_only.tar.gz
+f694be48bdfec1dace6d69a19906b6083f4dd7c7c61f1138ba520e433e5598f8 20240726/cpython-3.11.9+20240726-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+f6e955dc9ddfcad74e77abe6f439dac48ebca14b101ed7c85a5bf3206ed2c53d 20240726/cpython-3.11.9+20240726-x86_64-unknown-linux-gnu-install_only.tar.gz
+1801025e825c04b3907e4ef6220a13607bc0397628c9485897073110ef7fde15 20240726/cpython-3.12.4+20240726-aarch64-apple-darwin-install_only.tar.gz
+a098b18b7e9fea0c66867b76c0124fce9465765017572b2e7b522154c87c78d7 20240726/cpython-3.12.4+20240726-aarch64-unknown-linux-gnu-install_only.tar.gz
+04011c4c5b7fe34b0b895edf4ad8748e410686c1d69aaee11d6688d481023bcb 20240726/cpython-3.12.4+20240726-ppc64le-unknown-linux-gnu-install_only.tar.gz
+8f8f3e29cf0c2facdbcfee70660939fda7667ac24fee8656d3388fc72f3acc7c 20240726/cpython-3.12.4+20240726-s390x-unknown-linux-gnu-install_only.tar.gz
+4c325838c1b0ed13698506fcd515be25c73dcbe195f8522cf98f9148a97601ed 20240726/cpython-3.12.4+20240726-x86_64-apple-darwin-install_only.tar.gz
+74309b0f322716409883d38c621743ea7fa0376eb00927b8ee1e1671d3aff450 20240726/cpython-3.12.4+20240726-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+e133dd6fc6a2d0033e2658637cc22e9c95f9d7073b80115037ee1f16417a54ac 20240726/cpython-3.12.4+20240726-x86_64-unknown-linux-gnu-install_only.tar.gz
+f64776f455a44c24d50f947c813738cfb7b9ac43732c44891bc831fa7940a33c 20241016/cpython-3.10.15+20241016-aarch64-apple-darwin-install_only.tar.gz
+eb58581f85fde83d1f3e8e1f8c6f5a15c7ae4fdbe3b1d1083931f9167fdd8dbc 20241016/cpython-3.10.15+20241016-aarch64-unknown-linux-gnu-install_only.tar.gz
+0c45af4e7525e2db59901606db32b2896ac1e9830c6f95551402207f537c2ce4 20241016/cpython-3.10.15+20241016-ppc64le-unknown-linux-gnu-install_only.tar.gz
+de205896b070e6f5259ac0f2b3379eead875ea84e6a6ef533b89886fcbb46a4c 20241016/cpython-3.10.15+20241016-s390x-unknown-linux-gnu-install_only.tar.gz
+90b46dfb1abd98d45663c7a2a8c45d3047a59391d8586d71b459cec7b75f662b 20241016/cpython-3.10.15+20241016-x86_64-apple-darwin-install_only.tar.gz
+e48952619796c66ec9719867b87be97edca791c2ef7fbf87d42c417c3331609e 20241016/cpython-3.10.15+20241016-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+3db2171e03c1a7acdc599fba583c1b92306d3788b375c9323077367af1e9d9de 20241016/cpython-3.10.15+20241016-x86_64-unknown-linux-gnu-install_only.tar.gz
+ed519c47d9620eb916a6f95ec2875396e7b1a9ab993ee40b2f31b837733f318c 20241016/cpython-3.10.15+20241016-x86_64-unknown-linux-musl-install_only.tar.gz
+5a69382da99c4620690643517ca1f1f53772331b347e75f536088c42a4cf6620 20241016/cpython-3.11.10+20241016-aarch64-apple-darwin-install_only.tar.gz
+803e49259280af0f5466d32829cd9d65a302b0226e424b3f0b261f9daf6aee8f 20241016/cpython-3.11.10+20241016-aarch64-unknown-linux-gnu-install_only.tar.gz
+92b666d103902001322f42badbd68da92adc5cebb826af9c1c906c33166e2f34 20241016/cpython-3.11.10+20241016-ppc64le-unknown-linux-gnu-install_only.tar.gz
+6d584317651c1ad4a857cb32d1999707e8bb3046fcb2f156d80381814fa19fde 20241016/cpython-3.11.10+20241016-s390x-unknown-linux-gnu-install_only.tar.gz
+1e23ffe5bc473e1323ab8f51464da62d77399afb423babf67f8e13c82b69c674 20241016/cpython-3.11.10+20241016-x86_64-apple-darwin-install_only.tar.gz
+647b66ff4552e70aec3bf634dd470891b4a2b291e8e8715b3bdb162f577d4c55 20241016/cpython-3.11.10+20241016-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+8b50a442b04724a24c1eebb65a36a0c0e833d35374dbdf9c9470d8a97b164cd9 20241016/cpython-3.11.10+20241016-x86_64-unknown-linux-gnu-install_only.tar.gz
+d36fc77a8dd76155a7530f6235999a693b9e7c48aa11afeb5610a091cae5aa6f 20241016/cpython-3.11.10+20241016-x86_64-unknown-linux-musl-install_only.tar.gz
+4c18852bf9c1a11b56f21bcf0df1946f7e98ee43e9e4c0c5374b2b3765cf9508 20241016/cpython-3.12.7+20241016-aarch64-apple-darwin-install_only.tar.gz
+bba3c6be6153f715f2941da34f3a6a69c2d0035c9c5396bc5bb68c6d2bd1065a 20241016/cpython-3.12.7+20241016-aarch64-unknown-linux-gnu-install_only.tar.gz
+0a1d1d92e33a969bd2f40a80af53c97b6c0cc1060d384ceff50ff801593bf9d6 20241016/cpython-3.12.7+20241016-ppc64le-unknown-linux-gnu-install_only.tar.gz
+935676a0c960b552f95e9ac2e1e385de5de4b34038ff65ffdc688838f1189c17 20241016/cpython-3.12.7+20241016-s390x-unknown-linux-gnu-install_only.tar.gz
+60c5271e7edc3c2ab47440b7abf4ed50fbc693880b474f74f05768f5b657045a 20241016/cpython-3.12.7+20241016-x86_64-apple-darwin-install_only.tar.gz
+f05531bff16fa77b53be0776587b97b466070e768e6d5920894de988bdcd547a 20241016/cpython-3.12.7+20241016-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+43576f7db1033dd57b900307f09c2e86f371152ac8a2607133afa51cbfc36064 20241016/cpython-3.12.7+20241016-x86_64-unknown-linux-gnu-install_only.tar.gz
+5ed4a4078db3cbac563af66403aaa156cd6e48831d90382a1820db2b120627b5 20241016/cpython-3.12.7+20241016-x86_64-unknown-linux-musl-install_only.tar.gz
+efc2e71c0e05bc5bedb7a846e05f28dd26491b1744ded35ed82f8b49ccfa684b 20241016/cpython-3.13.0+20241016-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+31397953849d275aa2506580f3fa1cb5a85b6a3d392e495f8030e8b6412f5556 20241016/cpython-3.13.0+20241016-aarch64-apple-darwin-install_only.tar.gz
+59b50df9826475d24bb7eff781fa3949112b5e9c92adb29e96a09cdf1216d5bd 20241016/cpython-3.13.0+20241016-aarch64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+e8378c0162b2e0e4cc1f62b29443a3305d116d09583304dbb0149fecaff6347b 20241016/cpython-3.13.0+20241016-aarch64-unknown-linux-gnu-install_only.tar.gz
+1217efa5f4ce67fcc9f7eb64165b1bd0912b2a21bc25c1a7e2cb174a21a5df7e 20241016/cpython-3.13.0+20241016-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+fc4b7f27c4e84c78f3c8e6c7f8e4023e4638d11f1b36b6b5ce457b1926cebb53 20241016/cpython-3.13.0+20241016-ppc64le-unknown-linux-gnu-install_only.tar.gz
+6c3e1e4f19d2b018b65a7e3ef4cd4225c5b9adfbc490218628466e636d5c4b8c 20241016/cpython-3.13.0+20241016-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+66b19e6a07717f6cfcd3a8ca953f0a2eaa232291142f3d26a8d17c979ec0f467 20241016/cpython-3.13.0+20241016-s390x-unknown-linux-gnu-install_only.tar.gz
+2e07dfea62fe2215738551a179c87dbed1cc79d1b3654f4d7559889a6d5ce4eb 20241016/cpython-3.13.0+20241016-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+cff1b7e7cd26f2d47acac1ad6590e27d29829776f77e8afa067e9419f2f6ce77 20241016/cpython-3.13.0+20241016-x86_64-apple-darwin-install_only.tar.gz
+bfd89f9acf866463bc4baf01733da5e767d13f5d0112175a4f57ba91f1541310 20241016/cpython-3.13.0+20241016-x86_64-pc-windows-msvc-shared-freethreaded+pgo-full.tar.zst
+b25926e8ce4164cf103bacc4f4d154894ea53e07dd3fdd5ebb16fb1a82a7b1a0 20241016/cpython-3.13.0+20241016-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+a73adeda301ad843cce05f31a2d3e76222b656984535a7b87696a24a098b216c 20241016/cpython-3.13.0+20241016-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+2c8cb15c6a2caadaa98af51df6fe78a8155b8471cb3dd7b9836038e0d3657fb4 20241016/cpython-3.13.0+20241016-x86_64-unknown-linux-gnu-install_only.tar.gz
+2f61ee3b628a56aceea63b46c7afe2df3e22a61da706606b0c8efda57f953cf4 20241016/cpython-3.13.0+20241016-x86_64-unknown-linux-musl-install_only.tar.gz
+08f05618bdcf8064a7960b25d9ba92155447c9b08e0cf2f46a981e4c6a1bb5a5 20241205/cpython-3.13.1+20241205-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+88b88b609129c12f4b3841845aca13230f61e97ba97bd0fb28ee64b0e442a34f 20241205/cpython-3.13.1+20241205-aarch64-apple-darwin-install_only.tar.gz
+9f2fcb809f9ba6c7c014a8803073a88786701a98971135bce684355062e4bb35 20241205/cpython-3.13.1+20241205-aarch64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+fdfa86c2746d2ae700042c461846e6c37f70c249925b58de8cd02eb8d1423d4e 20241205/cpython-3.13.1+20241205-aarch64-unknown-linux-gnu-install_only.tar.gz
+15ceea78dff78ca8ccaac8d9c54b808af30daaa126f1f561e920a6896e098634 20241205/cpython-3.13.1+20241205-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+27b20b3237c55430ca1304e687d021f88373f906249f9cd272c5ff2803d5e5c3 20241205/cpython-3.13.1+20241205-ppc64le-unknown-linux-gnu-install_only.tar.gz
+ed3c6118d1d12603309c930e93421ac7a30a69045ffd43006f63ecf71d72c317 20241205/cpython-3.13.1+20241205-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+7d0187e20cb5e36c689eec27e4d3de56d8b7f1c50dc5523550fc47377801521f 20241205/cpython-3.13.1+20241205-s390x-unknown-linux-gnu-install_only.tar.gz
+dc780fecd215d2cc9e573abf1e13a175fcfa8f6efd100ef888494a248a16cda8 20241205/cpython-3.13.1+20241205-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+47eef6efb8664e2d1d23a7cdaf56262d784f8ace48f3bfca1b183e95a49888d6 20241205/cpython-3.13.1+20241205-x86_64-apple-darwin-install_only.tar.gz
+7537b2ab361c0eabc0eabfca9ffd9862d7f5f6576eda13b97e98aceb5eea4fd3 20241205/cpython-3.13.1+20241205-x86_64-pc-windows-msvc-shared-freethreaded+pgo-full.tar.zst
+f51f0493a5f979ff0b8d8c598a8d74f2a4d86a190c2729c85e0af65c36a9cbbe 20241205/cpython-3.13.1+20241205-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+9ec1b81213f849d91f5ebe6a16196e85cd6ff7c05ca823ce0ab7ba5b0e9fee84 20241205/cpython-3.13.1+20241205-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+242b2727df6c1e00de6a9f0f0dcb4562e168d27f428c785b0eb41a6aeb34d69a 20241205/cpython-3.13.1+20241205-x86_64-unknown-linux-gnu-install_only.tar.gz
+76b30c6373b9c0aa2ba610e07da02f384aa210ac79643da38c66d3e6171c6ef5 20241205/cpython-3.13.1+20241205-x86_64-unknown-linux-musl-install_only.tar.gz
+e3c4aa607717b23903ca2650d5c3ee24f89b97543e2db2b0f463bddc7a9e92f3 20241206/cpython-3.12.8+20241206-aarch64-apple-darwin-install_only.tar.gz
+ce674b55442b732973afb2932c281bb1ded4ad7e22bcf9b07071165770758c7e 20241206/cpython-3.12.8+20241206-aarch64-unknown-linux-gnu-install_only.tar.gz
+b7214790b273de9ed0532420054b72ba1393d62d2fc844ec55ade193771bd90c 20241206/cpython-3.12.8+20241206-ppc64le-unknown-linux-gnu-install_only.tar.gz
+73102f5dbd7d1e7e9c2f2c80aedf2893d99a7fa407f6674ec8b2f57ba07daee5 20241206/cpython-3.12.8+20241206-s390x-unknown-linux-gnu-install_only.tar.gz
+3ba35c706577d755e8e52a4c161a042464577c0e695e2a605362fa469e26de10 20241206/cpython-3.12.8+20241206-x86_64-apple-darwin-install_only.tar.gz
+767b4be3ddf6b99e5ade519789c1615c191d8cf99d5aff4685cc18b48931f1e6 20241206/cpython-3.12.8+20241206-x86_64-pc-windows-msvc-shared-install_only.tar.gz
+b9d6ee5ddac1198e72d53112698773fc8bb597de095592eb849ca794306699ba 20241206/cpython-3.12.8+20241206-x86_64-unknown-linux-gnu-install_only.tar.gz
+6f305888703691dd04cfff85284d23ea0b0146ed7c4415e472f1fb72b3f32cdf 20241206/cpython-3.12.8+20241206-x86_64-unknown-linux-musl-install_only.tar.gz
+e99f8457d9c79592c036489c5cfa78df76e4762d170665e499833e045d82608f 20250317/cpython-3.10.16+20250317-aarch64-apple-darwin-install_only.tar.gz
+76d0f04d2444e77200fdc70d1c57480e29cca78cb7420d713bc1c523709c198d 20250317/cpython-3.10.16+20250317-aarch64-unknown-linux-gnu-install_only.tar.gz
+39c9b3486de984fe1d72d90278229c70d6b08bcf69cd55796881b2d75077b603 20250317/cpython-3.10.16+20250317-ppc64le-unknown-linux-gnu-install_only.tar.gz
+ebe949ada9293581c17d9bcdaa8f645f67d95f73eac65def760a71ef9dd6600d 20250317/cpython-3.10.16+20250317-riscv64-unknown-linux-gnu-install_only.tar.gz
+9b2fc0b7f1c75b48e799b6fa14f7e24f5c61f2db82e3c65d13ed25e08f7f0857 20250317/cpython-3.10.16+20250317-s390x-unknown-linux-gnu-install_only.tar.gz
+e03e62dbe95afa2f56b7344ff3bd061b180a0b690ff77f9a1d7e6601935e05ca 20250317/cpython-3.10.16+20250317-x86_64-apple-darwin-install_only.tar.gz
+c7e0eb0ff5b36758b7a8cacd42eb223c056b9c4d36eded9bf5b9fe0c0b9aeb08 20250317/cpython-3.10.16+20250317-x86_64-pc-windows-msvc-install_only.tar.gz
+b350c7e63956ca8edb856b91316328e0fd003a840cbd63d08253af43b2c63643 20250317/cpython-3.10.16+20250317-x86_64-unknown-linux-gnu-install_only.tar.gz
+6ed64923ee4fbea4c5780f1a5a66651d239191ac10bd23420db4f5e4e0bf79c4 20250317/cpython-3.10.16+20250317-x86_64-unknown-linux-musl-install_only.tar.gz
+7c7fd9809da0382a601a79287b5d62d61ce0b15f5a5ee836233727a516e85381 20250317/cpython-3.12.9+20250317-aarch64-apple-darwin-install_only.tar.gz
+00c6bf9acef21ac741fea24dc449d0149834d30e9113429e50a95cce4b00bb80 20250317/cpython-3.12.9+20250317-aarch64-unknown-linux-gnu-install_only.tar.gz
+25d77599dfd5849f17391d92da0da99079e4e94f19a881f763f5cc62530ef7e1 20250317/cpython-3.12.9+20250317-ppc64le-unknown-linux-gnu-install_only.tar.gz
+e97ab0fdf443b302c56a52b4fd08f513bf3be66aa47263f0f9df3c6e60e05f2e 20250317/cpython-3.12.9+20250317-riscv64-unknown-linux-gnu-install_only.tar.gz
+7492d079ffa8425c8f6c58e43b237c37e3fb7b31e2e14635927bb4d3397ba21e 20250317/cpython-3.12.9+20250317-s390x-unknown-linux-gnu-install_only.tar.gz
+1ee1b1bb9fbce5c145c4bec9a3c98d7a4fa22543e09a7c1d932bc8599283c2dc 20250317/cpython-3.12.9+20250317-x86_64-apple-darwin-install_only.tar.gz
+d15361fd202dd74ae9c3eece1abdab7655f1eba90bf6255cad1d7c53d463ed4d 20250317/cpython-3.12.9+20250317-x86_64-pc-windows-msvc-install_only.tar.gz
+ef382fb88cbb41a3b0801690bd716b8a1aec07a6c6471010bcc6bd14cd575226 20250317/cpython-3.12.9+20250317-x86_64-unknown-linux-gnu-install_only.tar.gz
+94e3837da1adf9964aab2d6047b33f70167de3096d1f9a2d1fa9340b1bbf537d 20250317/cpython-3.12.9+20250317-x86_64-unknown-linux-musl-install_only.tar.gz
+c98c9c977e6fa05c3813bd49f3553904d89d60fed27e2e36468da7afa1d6d5e2 20250317/cpython-3.13.2+20250317-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+faa44274a331eb39786362818b21b3a4e74514e8805000b20b0e55c590cecb94 20250317/cpython-3.13.2+20250317-aarch64-apple-darwin-install_only.tar.gz
+b8635e59e3143fd17f19a3dfe8ccc246ee6587c87da359bd1bcab35eefbb5f19 20250317/cpython-3.13.2+20250317-aarch64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+9c67260446fee6ea706dad577a0b32936c63f449c25d66e4383d5846b2ab2e36 20250317/cpython-3.13.2+20250317-aarch64-unknown-linux-gnu-install_only.tar.gz
+6ae8fa44cb2edf4ab49cff1820b53c40c10349c0f39e11b8cd76ce7f3e7e1def 20250317/cpython-3.13.2+20250317-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+345b53d2f86c9dbd7f1320657cb227ff9a42ef63ff21f129abbbc8c82a375147 20250317/cpython-3.13.2+20250317-ppc64le-unknown-linux-gnu-install_only.tar.gz
+2af1b8850c52801fb6189e7a17a51e0c93d9e46ddefcca72247b76329c97d02a 20250317/cpython-3.13.2+20250317-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+172d22b2330737f3a028ea538ffe497c39a066a8d3200b22dd4d177a3332ad85 20250317/cpython-3.13.2+20250317-riscv64-unknown-linux-gnu-install_only.tar.gz
+c074144cc80c2af32c420b79a9df26e8db405212619990c1fbdd308bd75afe3f 20250317/cpython-3.13.2+20250317-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+ec3b16ea8a97e3138acec72bc5ff35949950c62c8994a8ec8e213fd93f0e806b 20250317/cpython-3.13.2+20250317-s390x-unknown-linux-gnu-install_only.tar.gz
+0d73e4348d8d4b5159058609d2303705190405b485dd09ad05d870d7e0f36e0f 20250317/cpython-3.13.2+20250317-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+ee4526e84b5ce5b11141c50060b385320f2773616249a741f90c96d460ce8e8f 20250317/cpython-3.13.2+20250317-x86_64-apple-darwin-install_only.tar.gz
+c51b4845fda5421e044067c111192f645234081d704313f74ee77fa013a186ea 20250317/cpython-3.13.2+20250317-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+84d7b52f3558c8e35c670a4fa14080c75e3ec584adfae49fec8b51008b75b21e 20250317/cpython-3.13.2+20250317-x86_64-pc-windows-msvc-install_only.tar.gz
+1aea5062614c036904b55c1cc2fb4b500b7f6f7a4cacc263f4888889d355eef8 20250317/cpython-3.13.2+20250317-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+db011f0cd29cab2291584958f4e2eb001b0e6051848d89b38a2dc23c5c54e512 20250317/cpython-3.13.2+20250317-x86_64-unknown-linux-gnu-install_only.tar.gz
+00bb2d629f7eacbb5c6b44dc04af26d1f1da64cee3425b0d8eb5135a93830296 20250317/cpython-3.13.2+20250317-x86_64-unknown-linux-musl-install_only.tar.gz
+278dccade56b4bbeecb9a613b77012cf5c1433a5e9b8ef99230d5e61f31d9e02 20250610/cpython-3.13.4+20250610-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+c2ce6601b2668c7bd1f799986af5ddfbff36e88795741864aba6e578cb02ed7f 20250610/cpython-3.13.4+20250610-aarch64-apple-darwin-install_only.tar.gz
+b1c1bd6ab9ef95b464d92a6a911cef1a8d9f0b0f6a192f694ef18ed15d882edf 20250610/cpython-3.13.4+20250610-aarch64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+3c2596ece08ffe17e11bc1f27aeb4ce1195d2490a83d695d36ef4933d5c5ca53 20250610/cpython-3.13.4+20250610-aarch64-unknown-linux-gnu-install_only.tar.gz
+ed66ae213a62b286b9b7338b816ccd2815f5248b7a28a185dc8159fe004149ae 20250610/cpython-3.13.4+20250610-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+b3cc13ee177b8db1d3e9b2eac413484e3c6a356f97d91dc59de8d3fd8cf79d6b 20250610/cpython-3.13.4+20250610-ppc64le-unknown-linux-gnu-install_only.tar.gz
+913264545215236660e4178bc3e5b57a20a444a8deb5c11680c95afc960b4016 20250610/cpython-3.13.4+20250610-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+d1b989e57a9ce29f6c945eeffe0e9750c222fdd09e99d2f8d6b0d8532a523053 20250610/cpython-3.13.4+20250610-riscv64-unknown-linux-gnu-install_only.tar.gz
+7556a38ab5e507c1ec22bc38f9859982bc956cab7f4de05a2faac114feb306db 20250610/cpython-3.13.4+20250610-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+d1d19fb01961ac6476712fdd6c5031f74c83666f6f11aa066207e9a158f7e3d8 20250610/cpython-3.13.4+20250610-s390x-unknown-linux-gnu-install_only.tar.gz
+64ab7ac8c88002d9ba20a92f72945bfa350268e944a7922500af75d20330574d 20250610/cpython-3.13.4+20250610-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+79feb6ca68f3921d07af52d9db06cf134e6f36916941ea850ab0bc20f5ff638b 20250610/cpython-3.13.4+20250610-x86_64-apple-darwin-install_only.tar.gz
+9457504547edb2e0156bf76b53c7e4941c7f61c0eff9fd5f4d816d3df51c58e3 20250610/cpython-3.13.4+20250610-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+29ac3585cc2dcfd79e3fe380c272d00e9d34351fc456e149403c86d3fea34057 20250610/cpython-3.13.4+20250610-x86_64-pc-windows-msvc-install_only.tar.gz
+864df6e6819e8f8e855ce30f34410fdc5867d0616e904daeb9a40e5806e970d7 20250610/cpython-3.13.4+20250610-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+44e5477333ebca298a7a0a316985c6c3533b8645f92a83f7f73c44033832bf32 20250610/cpython-3.13.4+20250610-x86_64-unknown-linux-gnu-install_only.tar.gz
+a3afbfa94b9ff4d9fc426b47eb3c8446cada535075b8d51b7bdc9d9ab9911fc2 20250610/cpython-3.13.4+20250610-x86_64-unknown-linux-musl-install_only.tar.gz
+a94c02b2d597cd6b075a713fe4e9a909cc97ca6a3b2b2ce86eda21be2062d48e 20250808/cpython-3.10.18+20250808-aarch64-apple-darwin-install_only.tar.gz
+ef7de3b715d519e246d98ff7856247f7f7b357068705f09c6f300b7e7b76c701 20250808/cpython-3.10.18+20250808-aarch64-unknown-linux-gnu-install_only.tar.gz
+f580efed11cc54e1a221c052e8bc88bfbc12844d3ca8949da828351a1232386e 20250808/cpython-3.10.18+20250808-ppc64le-unknown-linux-gnu-install_only.tar.gz
+0d7e460e30203a9225b6f417ae972f66415a1cc0e32b37ebc48d195816282669 20250808/cpython-3.10.18+20250808-riscv64-unknown-linux-gnu-install_only.tar.gz
+d4ada974daadb08a0184c19232ee3b03b3137aa70609760e1a94aaf7b12989ef 20250808/cpython-3.10.18+20250808-s390x-unknown-linux-gnu-install_only.tar.gz
+da96fe2ba841640215788ddb9f151f03629360e37fcb94d4f76e5095b87df0d4 20250808/cpython-3.10.18+20250808-x86_64-apple-darwin-install_only.tar.gz
+a648f3c9d136985ccfe57a5507e73d9d0839f7fd09eebd7c247857f2feaecb2a 20250808/cpython-3.10.18+20250808-x86_64-pc-windows-msvc-install_only.tar.gz
+0b310a73bb9e7a495dbcad5f685e508ca2e7b36ee8f29301a52285730c425789 20250808/cpython-3.10.18+20250808-x86_64-unknown-linux-gnu-install_only.tar.gz
+9cecf6ea2effbe183faebcf7e1160425a4ee17a68e49f2eefe5e1c59c51fa7ee 20250808/cpython-3.10.18+20250808-x86_64-unknown-linux-musl-install_only.tar.gz
+d089bfd2c7b98a0942750a195e70d3172beda76d7747097b8afd87028b6e59b6 20250808/cpython-3.11.13+20250808-aarch64-apple-darwin-install_only.tar.gz
+a632857c966237e7fd38b44c47c350f6e30d8ec54dcad6c832865ad670f0f22f 20250808/cpython-3.11.13+20250808-aarch64-pc-windows-msvc-install_only.tar.gz
+bc57105f8a16acd57b71d926143c7f6ecf61729b40c8b4656f1b98bebd47c710 20250808/cpython-3.11.13+20250808-aarch64-unknown-linux-gnu-install_only.tar.gz
+16a0165b0744940702b8fff80b8bf973ac914f78cb6fca28d389583f675e84de 20250808/cpython-3.11.13+20250808-ppc64le-unknown-linux-gnu-install_only.tar.gz
+d8e62306be8f41c46bcd62ca68f91a1467f47adff632a35ff413dc1043ed56e8 20250808/cpython-3.11.13+20250808-riscv64-unknown-linux-gnu-install_only.tar.gz
+4e302a4514a73baefdd9b327062bdafeb4115a799deec91c185f6ab45a857241 20250808/cpython-3.11.13+20250808-s390x-unknown-linux-gnu-install_only.tar.gz
+d946d618f8bba8308b67e460a30612a71e2ccc309f85f6628aaae24e2b816981 20250808/cpython-3.11.13+20250808-x86_64-apple-darwin-install_only.tar.gz
+ed963aee33d29ad8abfbb5fe63e42f57a2638a4a11a88e11d8bb66e61f20a6e5 20250808/cpython-3.11.13+20250808-x86_64-pc-windows-msvc-install_only.tar.gz
+3ad988c702cbb017fef1208d47dea4138a2e85fd0f7f01ec5e1e335e597131b9 20250808/cpython-3.11.13+20250808-x86_64-unknown-linux-gnu-install_only.tar.gz
+3a5810f0696f844289aa06d5c3a1efeab66eee999c25196b7d1954192a2c2100 20250808/cpython-3.11.13+20250808-x86_64-unknown-linux-musl-install_only.tar.gz
+8792c4a84c364ab975feca0c27d3157a5435b7baab325a346ae56b223893b661 20250808/cpython-3.12.11+20250808-aarch64-apple-darwin-install_only.tar.gz
+00bf7d7e8bcf5d1e9c4dfca0247d8e035147777cd57ee9d4c64dedca86b0a464 20250808/cpython-3.12.11+20250808-aarch64-pc-windows-msvc-install_only.tar.gz
+4d7ba5314fab02130d6538f074961ffbf61310cade9180e59026074f9a8939cb 20250808/cpython-3.12.11+20250808-aarch64-unknown-linux-gnu-install_only.tar.gz
+2c862eb40a81549d9c11e6bf5a7f07c3406310b14e6a4d16dcdf1c4763ef7090 20250808/cpython-3.12.11+20250808-ppc64le-unknown-linux-gnu-install_only.tar.gz
+0bb729b95fabd49c7b495f7c44a9086e3970ea57daf66365741574bd36a17e81 20250808/cpython-3.12.11+20250808-riscv64-unknown-linux-gnu-install_only.tar.gz
+99e465882d217d24ac90e99fac8f32e6a644d0340ac05ee510fb5cdf53f0cfb8 20250808/cpython-3.12.11+20250808-s390x-unknown-linux-gnu-install_only.tar.gz
+e0c932709dafb05f00e528a7560ef8ee559ac82b75faca60dd1245bca1c1553f 20250808/cpython-3.12.11+20250808-x86_64-apple-darwin-install_only.tar.gz
+81214ef71964a40ec269a79067ca490d45298c350583bc3af0e5781451a05c3c 20250808/cpython-3.12.11+20250808-x86_64-pc-windows-msvc-install_only.tar.gz
+63d78840bf209af8da8f24e335d910f88387b892ca9187be571d481c071751bb 20250808/cpython-3.12.11+20250808-x86_64-unknown-linux-gnu-install_only.tar.gz
+d633d070780590aa03ac5575cd9d7b9e17682d80f14b400313c009c387cf706b 20250808/cpython-3.12.11+20250808-x86_64-unknown-linux-musl-install_only.tar.gz
+f2143304012e021a603bf1807bf3e4ce163832e43ab9a9829e53cb136497f207 20250808/cpython-3.13.6+20250808-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+8a1efa6af4e80f08e2c97dda822a3d6c24d6c98e518242f802c6a43ae8401488 20250808/cpython-3.13.6+20250808-aarch64-apple-darwin-install_only.tar.gz
+552cfabcc3b103f4b1c4036d2592d5f0373c9554a2c4d2b6631b04ef7e592067 20250808/cpython-3.13.6+20250808-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+8e1617bd407ec1a874499daab26ae95080d1e0267ae616d34490137a28705827 20250808/cpython-3.13.6+20250808-aarch64-pc-windows-msvc-install_only.tar.gz
+d84a7d64c284be387386b9f5da273f6d05486eb6bd8f9e86e2575cb59604cb22 20250808/cpython-3.13.6+20250808-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+11fa0591ae2211c08a42ae54944260e36ddf88a1d5604ea0c49e2477be4e5388 20250808/cpython-3.13.6+20250808-aarch64-unknown-linux-gnu-install_only.tar.gz
+e76fcaf1bf80a615520dbe7f85ca0bb557fad96d132d836b0ac721e7cc1e2a37 20250808/cpython-3.13.6+20250808-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+8dcf34ae1a685fe1893b52917ae04f23328edadc4acae28499d43850c2bdd26c 20250808/cpython-3.13.6+20250808-ppc64le-unknown-linux-gnu-install_only.tar.gz
+24e08a39ba4fc77753e61541e52eed39cc871f4a92a80a3c5dd495056bd8eff9 20250808/cpython-3.13.6+20250808-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+f8ed75aa6cc2011a046be00b629c3c8295267f34280324feaff34c73e7afce39 20250808/cpython-3.13.6+20250808-riscv64-unknown-linux-gnu-install_only.tar.gz
+1609b223fd38a4a7a4d20e7173d7d9390fe2258f7dd9a15dc9ef0fa49613735d 20250808/cpython-3.13.6+20250808-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+7707ee5d19a78bc64ef8a66751ec7f97b64ea06714c7b1b52e8b321c2923ead8 20250808/cpython-3.13.6+20250808-s390x-unknown-linux-gnu-install_only.tar.gz
+4360a1278dd0a96b526d108c8fd23498a9d2028dd7791e510fd51ff5ea3f462a 20250808/cpython-3.13.6+20250808-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+27badce7201321a8363219e438a6205165e5b4884012b1046532203df2ec9379 20250808/cpython-3.13.6+20250808-x86_64-apple-darwin-install_only.tar.gz
+4e727cdbe4057b16a170f887c0fa4227a825ac59bcda84ae946c77cc932af78c 20250808/cpython-3.13.6+20250808-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+af5cc733c33b9aa9f1d74c81a59351e9b27215486d8b6cdbc06d97646a58c953 20250808/cpython-3.13.6+20250808-x86_64-pc-windows-msvc-install_only.tar.gz
+e48c13c59cc3c01b79f63c8bccec27d2db6e97f64213b8731e2077b6ed8ed52c 20250808/cpython-3.13.6+20250808-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+f844e8c8b6847628b472f7e97d8893a4e93acd5382a902b465776063668c4d64 20250808/cpython-3.13.6+20250808-x86_64-unknown-linux-gnu-install_only.tar.gz
+70076dea0ff65b3c05aae1a97b4a556bf613cc73db30309e59134f9d318f4f7b 20250808/cpython-3.13.6+20250808-x86_64-unknown-linux-musl-install_only.tar.gz
+43bda24c2fc073bc308bf631203b917a72640d59b59fdad4ba14503d84727012 20251031/cpython-3.10.19+20251031-aarch64-apple-darwin-install_only.tar.gz
+f77a8a8aa77f3f943126fa9215a25309da4bf20398fc8f4b4eec54b5fc7570ef 20251031/cpython-3.10.19+20251031-aarch64-unknown-linux-gnu-install_only.tar.gz
+1c55d160fc4c3b93528cd6aaa2bb4ca6018a99e5a45919d33dc761a43a69f860 20251031/cpython-3.10.19+20251031-ppc64le-unknown-linux-gnu-install_only.tar.gz
+21134d35721cdad4c881f35d0957cc19df9a45d194afb38a099faded3c1cfb4d 20251031/cpython-3.10.19+20251031-riscv64-unknown-linux-gnu-install_only.tar.gz
+df0db070f1eb73ab4e371eea32213ddb3500737ea5560a6f0ffd65c82af64ddc 20251031/cpython-3.10.19+20251031-s390x-unknown-linux-gnu-install_only.tar.gz
+76c12e633c09c2a790f8a958a55df4495527e0718d1875310c836e757c0c7b55 20251031/cpython-3.10.19+20251031-x86_64-apple-darwin-install_only.tar.gz
+cfa08a4caf2df1b43551b843c052d6a8814e2ea0c97268b021f0423646c244c3 20251031/cpython-3.10.19+20251031-x86_64-pc-windows-msvc-install_only.tar.gz
+fb1caac917d7b6497bb6f5950da5f1e48d05c43a498948dd97f85760c4382d9f 20251031/cpython-3.10.19+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+ba85013ed5ac7733fc6840168cc33ed19e9959b363dc80227d54f8fd9c92c0f4 20251031/cpython-3.10.19+20251031-x86_64-unknown-linux-musl-install_only.tar.gz
+6de5572b33c65af1c9b7caf00ec593fb04cffb7e14fa393a98261bb9bc464713 20251031/cpython-3.11.14+20251031-aarch64-apple-darwin-install_only.tar.gz
+38d0d1466561e15965e8d2c20f5e5be649598f55c761ecab553d087fbd217337 20251031/cpython-3.11.14+20251031-aarch64-pc-windows-msvc-install_only.tar.gz
+510edb027527413c4249256194cb8ad2590b52dd93f7123b4cb341aff5d05894 20251031/cpython-3.11.14+20251031-aarch64-unknown-linux-gnu-install_only.tar.gz
+4e0bc6a818e0c6a9d7d3ebe1a95591fd84440520577aa837facc96a4b7a80e35 20251031/cpython-3.11.14+20251031-ppc64le-unknown-linux-gnu-install_only.tar.gz
+16519e69297144f81b2421333bc9e0b6466cf3c84749b216b695cfb4c9deb32f 20251031/cpython-3.11.14+20251031-riscv64-unknown-linux-gnu-install_only.tar.gz
+5f9c1b203cdf34c8bff1aef69b63bbf11309bd16ca6e429d8c3651eaa2b3d080 20251031/cpython-3.11.14+20251031-s390x-unknown-linux-gnu-install_only.tar.gz
+4891cbf34e8652b7bd1054b9502395e4b7e048e2e517c040fbf6c8297cb954d6 20251031/cpython-3.11.14+20251031-x86_64-apple-darwin-install_only.tar.gz
+5223b83ed9e2aa5e9e17d2ebcf767956e998876339b9cde1980a47e9d4655fb6 20251031/cpython-3.11.14+20251031-x86_64-pc-windows-msvc-install_only.tar.gz
+60f0bd473d861cc45d3401d9914e47ccb9fa037f88a91879ed517a62042b8477 20251031/cpython-3.11.14+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+25e82d1e85b90a8ab724ee633a1811b1921797f5c25ee69c6595052371b91a87 20251031/cpython-3.11.14+20251031-x86_64-unknown-linux-musl-install_only.tar.gz
+5e110cb821d2eb8246065d3b46faa655180c976c4e17250f7883c634a629bc63 20251031/cpython-3.12.12+20251031-aarch64-apple-darwin-install_only.tar.gz
+b190fed7c2b0f6e1010f554a0d1fd191c0754c4c0718e69d9d795ae559613780 20251031/cpython-3.12.12+20251031-aarch64-pc-windows-msvc-install_only.tar.gz
+81b644d166e0bfb918615af8a2363f8fcf26eccdcc60a5334b6a62c088470bac 20251031/cpython-3.12.12+20251031-aarch64-unknown-linux-gnu-install_only.tar.gz
+024f5e5678c9768d45cc24d37a8e9d265aae86c4a4602352dee3d7deba367052 20251031/cpython-3.12.12+20251031-ppc64le-unknown-linux-gnu-install_only.tar.gz
+b13c57fc372c131e667a99b9680f41c0b4da571cf99ed412103c2fe9ad5ed1fb 20251031/cpython-3.12.12+20251031-riscv64-unknown-linux-gnu-install_only.tar.gz
+2bf05bdd56cdf5ea4fd9f2faf151ea4211be96a0d1f4230b85f5dcae620d6400 20251031/cpython-3.12.12+20251031-s390x-unknown-linux-gnu-install_only.tar.gz
+687052a046d33be49dc95dd671816709067cf6176ed36c93ea61b1fe0b883b0f 20251031/cpython-3.12.12+20251031-x86_64-apple-darwin-install_only.tar.gz
+cff398b3f520c442a1b085dd347126c10c1b03f01ccc0decd8c897a687e893f1 20251031/cpython-3.12.12+20251031-x86_64-pc-windows-msvc-install_only.tar.gz
+80c3882f14e15cef8260ef5257d198e8f4371ca265887431d939e0d561de3253 20251031/cpython-3.12.12+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+0a461330b9b89f2ea3088dde10d7a3f96aa65897b7c5ce2404fa3b5c4b8daa14 20251031/cpython-3.12.12+20251031-x86_64-unknown-linux-musl-install_only.tar.gz
+eae1272a72ccce601590a10a9ca2a58199b5fcdf022aa603a527e3e2a04de9bc 20251031/cpython-3.13.9+20251031-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+1f3568d17383426d52350c2ef7c93c1a5a043198b860cb05e5d19b35f9c25cef 20251031/cpython-3.13.9+20251031-aarch64-apple-darwin-install_only.tar.gz
+743ff69935ef28834621647dab30f032dfcd80315732917531eea333210941c7 20251031/cpython-3.13.9+20251031-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+20db43873d3c4c2175d866806545e4ad4ec6bb72ca95e60082a4df6c24567e8c 20251031/cpython-3.13.9+20251031-aarch64-pc-windows-msvc-install_only.tar.gz
+a6e72f9de5d9b46cf6968d6a492f2401a919f9b959f8da2d87f43484b80169ee 20251031/cpython-3.13.9+20251031-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+0a56d11b0fb1662e67f892b9d5d1717aef06f24dbb8362bc25b8f784e620d44e 20251031/cpython-3.13.9+20251031-aarch64-unknown-linux-gnu-install_only.tar.gz
+0ed5c65437f875c58ba1bee2b8d261d18698d3d0347a2e66f8902fce022a2cda 20251031/cpython-3.13.9+20251031-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+99492123902bd5e9a6b1a30135061e93a2e6a11d25107a741d5a756e91054448 20251031/cpython-3.13.9+20251031-ppc64le-unknown-linux-gnu-install_only.tar.gz
+584e481d9b5225ffaf02f158fb26d2818207e65fc3c6dc21a6d500277f739220 20251031/cpython-3.13.9+20251031-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+b3dce3e4ef508773521e1ee1be989fff6118f8fd1fbbd0491d7ff7dfbc98ef06 20251031/cpython-3.13.9+20251031-riscv64-unknown-linux-gnu-install_only.tar.gz
+7fa7fb912ca989ceac026a332d56a2c7d6d16ab0e94d89e690de5aade26103e2 20251031/cpython-3.13.9+20251031-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+f10e34aaa856c1b8a69c2ea4a9a6723d520443d1a957bf66dc55491334ca0c1e 20251031/cpython-3.13.9+20251031-s390x-unknown-linux-gnu-install_only.tar.gz
+e2bf5fa6a3ef443ade362e08b0a19bbc172f7bfe34dabe933ccaad31d53af5da 20251031/cpython-3.13.9+20251031-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+48c0f3ca5d31e90658ef99138dc21865bb62f388ab97a1ce72cac176da194ab0 20251031/cpython-3.13.9+20251031-x86_64-apple-darwin-install_only.tar.gz
+318a9a1e43dd52054327de3bccc0c5b7afde7b7f2a398ccb4d38e03d28b05386 20251031/cpython-3.13.9+20251031-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+874593f641f31ea101440c70f81768c35d4d7d6df111fde63094db67465ef787 20251031/cpython-3.13.9+20251031-x86_64-pc-windows-msvc-install_only.tar.gz
+dcc29b069d0588fbd4ea29c6df840c8d1207d2a3bce8cd5cd57d1b85373b6048 20251031/cpython-3.13.9+20251031-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+6f05b91ee8c7e6dd0f9c60b95bb29130e2d623961de6578b643e80ddd83f96b6 20251031/cpython-3.13.9+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+ad987197034185e628715da504a50613af213dc21ba6d5ccaeab3db2c464aa6c 20251031/cpython-3.13.9+20251031-x86_64-unknown-linux-musl-install_only.tar.gz
+d9c7b430b25bd3837dbb03f945dbe6b7bc526c5940ca96f5db7cdc42f6b2b801 20251031/cpython-3.14.0+20251031-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+b4bcd3c6c24cab32ae99e1b05c89312b783b4d69431d702e5012fe1fdcad4087 20251031/cpython-3.14.0+20251031-aarch64-apple-darwin-install_only.tar.gz
+40266e60f655e49cd1d5303295255909a4b593b08b88be6e6a55b2c9fe6ed13d 20251031/cpython-3.14.0+20251031-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+599a8b7e12439cd95a201dbdfe95cf363146b1ff91f379555dafd86b170caab9 20251031/cpython-3.14.0+20251031-aarch64-pc-windows-msvc-install_only.tar.gz
+f383ef50d1da6ca511212e5ae601923b56636b87351fd5fc847e0ea0a19fa9b3 20251031/cpython-3.14.0+20251031-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+128a9cbfb9645d5237ec01704d9d1d2ac5f084464cc43c37a4cd96aa9c3b1ad5 20251031/cpython-3.14.0+20251031-aarch64-unknown-linux-gnu-install_only.tar.gz
+cb0e4ff781b856a47f0f461ceb41c78c7eeff65effd0957857ec4702ef1e1bd3 20251031/cpython-3.14.0+20251031-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+e16ca51f018e99a609faf953bd3a3aea31f45ee84262d1a517fb3abd98f1f4af 20251031/cpython-3.14.0+20251031-ppc64le-unknown-linux-gnu-install_only.tar.gz
+929223470d11a55cd75f880ac3bd4969e42407e2cdf08d4e7e38ba721cf4abec 20251031/cpython-3.14.0+20251031-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+fca340d8fb7a05cd90e216ce601b25d492ed8c1a3b6a6d77703e0f15ab3711a7 20251031/cpython-3.14.0+20251031-riscv64-unknown-linux-gnu-install_only.tar.gz
+613fb1f7b249f798b52af957d181305244e936c8e5c94c84688fcdf93fe14253 20251031/cpython-3.14.0+20251031-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+c5803644970eee931bb0581b3b64511d1a8612f67bc98951a7f7ab5581a9ed04 20251031/cpython-3.14.0+20251031-s390x-unknown-linux-gnu-install_only.tar.gz
+b3196f6b57bbb3dc2ee07f348f1d51117ffa376979eceafbf50c15f0f7980bf8 20251031/cpython-3.14.0+20251031-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+4e71a3ce973be377ef18637826648bb936e2f9490f64a9e4f33a49bcc431d344 20251031/cpython-3.14.0+20251031-x86_64-apple-darwin-install_only.tar.gz
+b81de5fc9e783ea6dfcf1098c28a278c874999c71afbb0309f6a8b4276c769d0 20251031/cpython-3.14.0+20251031-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+39acfcb3857d83eab054a3de11756ffc16b3d49c31393b9800dd2704d1f07fdf 20251031/cpython-3.14.0+20251031-x86_64-pc-windows-msvc-install_only.tar.gz
+f4acbef0fbfaf7ab31ac63986da1d93dfa1c5cb797de1dcdc1a988aa18670120 20251031/cpython-3.14.0+20251031-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+3dec1ab70758a3467ac3313bbcdabf7a9b3016db5c072c4537e3cf0a9e6290f6 20251031/cpython-3.14.0+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+d0a2a6d3b1bb00dce2105377fda8aa79675d187f8d6d7010a42f651af25018dc 20251031/cpython-3.14.0+20251031-x86_64-unknown-linux-musl-install_only.tar.gz
+12f1b16be4017181ad67904caf9e59e525b9b5d62f49105017d837e27b832959 20251031/cpython-3.15.0a1+20251031-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+3acf7aa3559b746498b18929456c5cacb84bae4e09249834cbc818970d71de87 20251031/cpython-3.15.0a1+20251031-aarch64-apple-darwin-install_only.tar.gz
+54ca78dae455ece6fefbd7f5f287cc55d5ce197caf51921f6d871d15069d9489 20251031/cpython-3.15.0a1+20251031-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+1508bcd7195008479ed156aad3afbb3a3793097ed530690f0304a8107f0e53e8 20251031/cpython-3.15.0a1+20251031-aarch64-pc-windows-msvc-install_only.tar.gz
+981fe8dfc6e7e1d0ffefa945a18d5c4c759bbe21722acf3a5cc7e62f16aa5f3c 20251031/cpython-3.15.0a1+20251031-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+d55c2aeece827e6bec83fd18515ee281d9ea0efaa3e2d20130db8f1c7cbb71c6 20251031/cpython-3.15.0a1+20251031-aarch64-unknown-linux-gnu-install_only.tar.gz
+088400dec25139f38eeecb48f090ff2ce06a96a1dd79fa8f1dfec1cd1786f5ef 20251031/cpython-3.15.0a1+20251031-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+c28beda791c499b16f06256339522f0002a3e9acba003e6b8374755d7be1def2 20251031/cpython-3.15.0a1+20251031-ppc64le-unknown-linux-gnu-install_only.tar.gz
+938061a0a31a06672526885de36037ddefd8c4acdb09424691b7000a8c8f8d01 20251031/cpython-3.15.0a1+20251031-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+36619f576b8154e4b56643c5c4a85c352f152df2989c4e602cbbe9c2b7ded870 20251031/cpython-3.15.0a1+20251031-riscv64-unknown-linux-gnu-install_only.tar.gz
+2003e7e40bb44b3db7bca81087bfb738fe6af40e5db61cda8e23b59bf55d409e 20251031/cpython-3.15.0a1+20251031-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+5ea47be2a3a563ddd87ff510dae26b7aa7f3855ca00c5f1056ff8114c067c4e4 20251031/cpython-3.15.0a1+20251031-s390x-unknown-linux-gnu-install_only.tar.gz
+64fc29e6c7a2f02a18645d968f1b3fc1d00d12a5ef3fcbb0d077fa8c62c08904 20251031/cpython-3.15.0a1+20251031-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+0ab19d3ac25f99da438b088751e5ec2421f9f6aa4292fd2dc0f8e49eb3e16bdf 20251031/cpython-3.15.0a1+20251031-x86_64-apple-darwin-install_only.tar.gz
+34abc5603e1b4131f753d29b7deac865b9277912b851cbed5a149cf3e6745d3d 20251031/cpython-3.15.0a1+20251031-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+5f5d6bec2b381cfc771c49972d2a6f7b7e7ab6a1651d8fb6ef3983f3571722b3 20251031/cpython-3.15.0a1+20251031-x86_64-pc-windows-msvc-install_only.tar.gz
+0e0272186d9f5169394dbc4d4d72a3f4a5762a04c2e5ac2ab1e23aa41fc8538a 20251031/cpython-3.15.0a1+20251031-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+1f356288c2b2713619cb7a4e453d33bf8882f812af2987e21e01e7ae382fefba 20251031/cpython-3.15.0a1+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+caf5311f333eef082dd69a669ca65aceba09a08fc1e78aad602ad649106f294c 20251031/cpython-3.15.0a1+20251031-x86_64-unknown-linux-musl-install_only.tar.gz
+87275619c2706affa4d1090d2ca3dad354b6d69f8b85dbfafe38785870751b9a 20251031/cpython-3.9.25+20251031-aarch64-apple-darwin-install_only.tar.gz
+6112d46355857680b81849764a6cf9f38cc4cd0d1cf29d432bc12fe5aeedf9d0 20251031/cpython-3.9.25+20251031-aarch64-unknown-linux-gnu-install_only.tar.gz
+828364b6f54fa45ac2dc91f8e45d5b74306372af374a9ef16eeb2ea81253ed3f 20251031/cpython-3.9.25+20251031-ppc64le-unknown-linux-gnu-install_only.tar.gz
+17467e0158e5ad04453c447d6773c23b044172276441e22e23058fd3ea053e27 20251031/cpython-3.9.25+20251031-riscv64-unknown-linux-gnu-install_only.tar.gz
+3e9539f83e67faa813fd06171199b2d33c89821dfa9a33bf6e27ad67f1b6932d 20251031/cpython-3.9.25+20251031-s390x-unknown-linux-gnu-install_only.tar.gz
+ace63cfe27a9487c4d72e1cb518be01c1d985271da0b2158e813801f7d3e5503 20251031/cpython-3.9.25+20251031-x86_64-apple-darwin-install_only.tar.gz
+4fb1b416482ce94d73cfa140317a670c596c830671d137b07c26afe8c461768a 20251031/cpython-3.9.25+20251031-x86_64-pc-windows-msvc-install_only.tar.gz
+42834f61eb6df43432c3dd6ab9ca3fdf8c06d10a404ebdb53d6902e6b9570b08 20251031/cpython-3.9.25+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+76593e8c889e81e82db5fe117fe15b69466f85100ab2ec0e4035aa86242b4e93 20251031/cpython-3.9.25+20251031-x86_64-unknown-linux-musl-install_only.tar.gz
+3c9fdd76447c1549a0d3bc2a70c63f1daec997ab034206ac0260a03237166dbb 20251202/cpython-3.13.10+20251202-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+37afe4e77ab62ac50f197b1cb1f3bc02c82735c6be893da0996afcde5dc41048 20251202/cpython-3.13.10+20251202-aarch64-apple-darwin-install_only.tar.gz
+cdb7141327bdc244715b25752593e2c9eeb3cc2764f37dfe81cfbc92db9d6d57 20251202/cpython-3.13.10+20251202-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+9060d644bd32ac0e0af970d0b21e207e6ff416b7c4dc26ffc4f9b043fb45b463 20251202/cpython-3.13.10+20251202-aarch64-pc-windows-msvc-install_only.tar.gz
+6d277221fa4b172e00b29c7158ca9661917bc8db9a0084b1a0ff5c3a0ba8b648 20251202/cpython-3.13.10+20251202-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+c68280591cda1c9515a04809fa6926020177e8e5892300206e0496ea1d10290e 20251202/cpython-3.13.10+20251202-aarch64-unknown-linux-gnu-install_only.tar.gz
+d265d8d1c51e25ed70279540223589f79cf99ad00b50d28b6150c2658c973885 20251202/cpython-3.13.10+20251202-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+1507e5528bd88131dc742a2941176aceea1838bc09860c21f179285b7865133b 20251202/cpython-3.13.10+20251202-ppc64le-unknown-linux-gnu-install_only.tar.gz
+ec411b4a2d167c3be0a9aeb3905e045d62c8e3c3db0caeade5d47d5f60b98dd0 20251202/cpython-3.13.10+20251202-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+70169e916860b2e5b34c37c302d699eb2b8f24f28090968881942a37aeb7ed08 20251202/cpython-3.13.10+20251202-riscv64-unknown-linux-gnu-install_only.tar.gz
+4fc6443948bf5b729481ea02cc5c68e80cd0da42631f6936587a2b8fd45bc62c 20251202/cpython-3.13.10+20251202-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+c5448863b64aacae62f3a213a6e6cf94ec63f96ee4d518491cd62fd3c81d952f 20251202/cpython-3.13.10+20251202-s390x-unknown-linux-gnu-install_only.tar.gz
+6ce608684df0f90350c7a1742e9685a7782d9b26ec99d1bd9d55c8cf9a405040 20251202/cpython-3.13.10+20251202-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+a02761a4f189f71c0512e88df7ca2843696d61da659e47f8a5c8a9bd2c0d16f4 20251202/cpython-3.13.10+20251202-x86_64-apple-darwin-install_only.tar.gz
+6a8b0372ded655e0d55318089fbce3122a446e69bcd120c79aaadfe9b017299c 20251202/cpython-3.13.10+20251202-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+8b00014c7c35f9ad4cb1c565f067500bacc4125c8bc30e4389ee0be9fd6ffa3d 20251202/cpython-3.13.10+20251202-x86_64-pc-windows-msvc-install_only.tar.gz
+e39127fbe8d2ae7d86099f18b4da0918f9b60ce73ed491774d6dcfaa42b5c9ae 20251202/cpython-3.13.10+20251202-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+0cac1495fff920219904b1d573aaec0df54d549c226cb45f5c60cb6d2c72727a 20251202/cpython-3.13.10+20251202-x86_64-unknown-linux-gnu-install_only.tar.gz
+04108190972ac98e13098abd972ec3f4f8b0880f83c0bb68249ce1a6164fa041 20251202/cpython-3.13.10+20251202-x86_64-unknown-linux-musl-install_only.tar.gz
+61f38e947449cf00f32f0838e813358f6bf61025d0797531e5b8b8b175c617f0 20251202/cpython-3.14.1+20251202-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+cdf1ba0789f529fa34bb5b5619c5da9757ac1067d6b8dd0ee8b78e50078fc561 20251202/cpython-3.14.1+20251202-aarch64-apple-darwin-install_only.tar.gz
+ddb10b645de2b1f6f2832a80b115a9cd34a4a760249983027efe46618a8efc48 20251202/cpython-3.14.1+20251202-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+19129cf8b4d68c4e64c25bae43bca139d871267b59cf7f02b9dcf25f0bf59497 20251202/cpython-3.14.1+20251202-aarch64-pc-windows-msvc-install_only.tar.gz
+1a88a1fe21eb443d280999464b1a397605a7ca950d8ab73813ca6868835439a2 20251202/cpython-3.14.1+20251202-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+5dde7dba0b8ef34c0d5cb8a721254b1e11028bfc09ff06664879c245fe8df73f 20251202/cpython-3.14.1+20251202-aarch64-unknown-linux-gnu-install_only.tar.gz
+7207b736ed2569f307649ffd4b615a5346631bc244730b8702babee377cef528 20251202/cpython-3.14.1+20251202-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+d2774701d53e2ac06f8c8c8e52dfa4ff346890de9b417c9a7664195443a4c766 20251202/cpython-3.14.1+20251202-ppc64le-unknown-linux-gnu-install_only.tar.gz
+d1356ccd279920edc31bf0350674d966beb9522f9503846ed7855dbb109ccc14 20251202/cpython-3.14.1+20251202-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+af840506efbcd5026d9140c0a0230e45e46bb1f339a65c10a22875930b2c0159 20251202/cpython-3.14.1+20251202-riscv64-unknown-linux-gnu-install_only.tar.gz
+477758eabc06dbc7e5e5d16e97c4672478acd409f420dd2e1b84d3452c0668d1 20251202/cpython-3.14.1+20251202-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+43f8f79bf4c66689d2019f193671d1df3e5e5dbb293382036285e8ce55fc55bb 20251202/cpython-3.14.1+20251202-s390x-unknown-linux-gnu-install_only.tar.gz
+c2cb2a9b44285fbc13c3c9b7eea813db6ed8d94909406b059db7afd39b32e786 20251202/cpython-3.14.1+20251202-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+f25ce050e1d370f9c05c9623b769ffa4b269a6ae17e611b435fd2b8b09972a88 20251202/cpython-3.14.1+20251202-x86_64-apple-darwin-install_only.tar.gz
+8ef7048315cac6d26bdbef18512a87b1a24fffa21cec86e32f9a9425f2af9bf6 20251202/cpython-3.14.1+20251202-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+cb478a5a37eb93ce4d3c27ae64d211d6a5a42475ae53f666a8d1570e71fcf409 20251202/cpython-3.14.1+20251202-x86_64-pc-windows-msvc-install_only.tar.gz
+c5d5b89aab7de683e465e36de2477a131435076badda775ef6e9ea21109c1c32 20251202/cpython-3.14.1+20251202-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+a72f313bad49846e5e9671af2be7476033a877c80831cf47f431400ccb520090 20251202/cpython-3.14.1+20251202-x86_64-unknown-linux-gnu-install_only.tar.gz
+15d50b15713097c38c67b1a06a0498ad102377f9b3999e98e4eefd6bf91bd82d 20251202/cpython-3.14.1+20251202-x86_64-unknown-linux-musl-install_only.tar.gz
+4213058b7fcd875596c12b58cd46a399358b0a87ecde4b349cbdd00cf87ed79a 20251209/cpython-3.13.11+20251209-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+295a9f7bc899ea1cc08baf60bbf511bdd1e4a29b2dd7e5f59b48f18bfa6bf585 20251209/cpython-3.13.11+20251209-aarch64-apple-darwin-install_only.tar.gz
+6daf6d092c7294cfe68c4c7bf2698ac134235489c874b3bf796c7972b9dbba30 20251209/cpython-3.13.11+20251209-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+ba646d0c3b7dd7bdfb770d9b2ebd6cd2df02a37fda90c9c79a7cf59c7df6f165 20251209/cpython-3.13.11+20251209-aarch64-pc-windows-msvc-install_only.tar.gz
+290ca3bd0007db9e551f90b08dfcb6c1b2d62c33b2fc3e9a43e77d385d94f569 20251209/cpython-3.13.11+20251209-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+ea1e678e6e82301bb32bf3917732125949b6e46d541504465972024a3f165343 20251209/cpython-3.13.11+20251209-aarch64-unknown-linux-gnu-install_only.tar.gz
+09d4b50f8abb443f7e3af858c920aa61c2430b0954df465e861caa7078e55e69 20251209/cpython-3.13.11+20251209-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+7660e53aad9d35ee256913c6d98427f81f078699962035c5fa8b5c3138695109 20251209/cpython-3.13.11+20251209-ppc64le-unknown-linux-gnu-install_only.tar.gz
+5406f2a7cacafbd2aac3ce2de066a0929aab55423824276c36e04cb83babc36c 20251209/cpython-3.13.11+20251209-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+763fa1548e6a432e9402916e690c74ea30f26dcd2e131893dd506f72b87c27c9 20251209/cpython-3.13.11+20251209-riscv64-unknown-linux-gnu-install_only.tar.gz
+3984b67c4292892eaccdd1c094c7ec788884c4c9b3534ab6995f6be96d5ed51d 20251209/cpython-3.13.11+20251209-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+ffb6af51fbfabfc6fbc4e7379bdec70c2f51e972b1d2f45c053493b9da3a1bbe 20251209/cpython-3.13.11+20251209-s390x-unknown-linux-gnu-install_only.tar.gz
+d6f489464045d6895ae68b0a04a9e16477e74fe3185a75f3a9a0af8ccd25eade 20251209/cpython-3.13.11+20251209-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+dac4a0a0a9b71f6b02a8b0886547fa22814474239bffb948e3e77185406ea136 20251209/cpython-3.13.11+20251209-x86_64-apple-darwin-install_only.tar.gz
+bb9a29a7ba8f179273b79971da6aaa7be592d78c606a63f99eff3e4c12fb0fae 20251209/cpython-3.13.11+20251209-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+87822417007045a28a7eccc47fe67b8c61265b99b10dbbfa24d231a3622b1c27 20251209/cpython-3.13.11+20251209-x86_64-pc-windows-msvc-install_only.tar.gz
+33f89c957d986d525529b8a980103735776f4d20cf52f55960a057c760188ac3 20251209/cpython-3.13.11+20251209-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+1ffa06d714a44aea14c0c54c30656413e5955a6c92074b4b3cb4351dcc28b63b 20251209/cpython-3.13.11+20251209-x86_64-unknown-linux-gnu-install_only.tar.gz
+969fe24017380b987c4e3ce15e9edf82a4618c1e61672b2cc9b021a1c98eae78 20251209/cpython-3.13.11+20251209-x86_64-unknown-linux-musl-install_only.tar.gz
+d6d17b8ef28326552cdeb2a7541c8a0cb711b378df9b93ebdb461dca065edfea 20251209/cpython-3.14.2+20251209-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+2f74bd26bd16487aca357c879d11f7b16c0521328e5148a1930ab6357bcb89fe 20251209/cpython-3.14.2+20251209-aarch64-apple-darwin-install_only.tar.gz
+43aac5bb4cdba71fc6775d26f47348d573a0b1210911438be71d7d96f4b18b51 20251209/cpython-3.14.2+20251209-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+0be0d2557d73efa7f6f3f99679f05252d57fe2aad2d81cac3cad410a9b1eacbd 20251209/cpython-3.14.2+20251209-aarch64-pc-windows-msvc-install_only.tar.gz
+adfcb90f3a7e1b3fbc6a99f9c8c8dce1f2e26ea72b724bbe4e9fa39e81e2b0db 20251209/cpython-3.14.2+20251209-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+869af31b2963194e8a2ecfadc36027c4c1c86a10f4960baec36dadb41b2acf02 20251209/cpython-3.14.2+20251209-aarch64-unknown-linux-gnu-install_only.tar.gz
+2b1ce0c5a5f5e5add7e4f934f5bd35ac41660895a30b3098db7f7303d6952a4f 20251209/cpython-3.14.2+20251209-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+86129976403fb5d64cf576329f94148f28cf6f82834e94df81ff31e9d5f404e0 20251209/cpython-3.14.2+20251209-ppc64le-unknown-linux-gnu-install_only.tar.gz
+4efb610fa07a6ee2639d14d78fc3b6ecb47431c14e1e4bda03c7f7dd60a5c1e5 20251209/cpython-3.14.2+20251209-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+318dceecf119ea903aef1fb03a552cc592ecd61c08da891b68f5755e21e13511 20251209/cpython-3.14.2+20251209-riscv64-unknown-linux-gnu-install_only.tar.gz
+e62f3bb3e66dac6c459690f9e9cd8cc2f6fe1dcf8bfed452af4c3df24cd7874f 20251209/cpython-3.14.2+20251209-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+53875c849a14194344ead1d9cd1e128cadd42a4b83c35eeb212417909ef05a6a 20251209/cpython-3.14.2+20251209-s390x-unknown-linux-gnu-install_only.tar.gz
+1fd76c79f7fc1753e8d2ed2f71406c0b65776c75f3e95ed99ffde8c95af2adc1 20251209/cpython-3.14.2+20251209-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+58fa3e17d13ab956fd11055fb774c98ecfddcdf3b588e5f2369bdbc14ef9d76a 20251209/cpython-3.14.2+20251209-x86_64-apple-darwin-install_only.tar.gz
+9927951e3997c186d2813ca1a0f4a8f5a2f771463f7f8ad0752fd3d2be2b74e4 20251209/cpython-3.14.2+20251209-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+0d660bba9f58cb552e7e99e1f96a9c67b41618c9b8d29f9f3515fe2b5ad1966e 20251209/cpython-3.14.2+20251209-x86_64-pc-windows-msvc-install_only.tar.gz
+3728872ffd74989a7b4bbf3f0c629ae8fe821cda2bd6544012c1b92b9f5d5a5b 20251209/cpython-3.14.2+20251209-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+121c3249bef497adf601df76a4d89aed6053fc5ec2f8c0ec656b86f0142e8ddd 20251209/cpython-3.14.2+20251209-x86_64-unknown-linux-gnu-install_only.tar.gz
+71639cc5d1fb79840467531c5b53ca77170a58edd3f7e2d29330dd736e477469 20251209/cpython-3.14.2+20251209-x86_64-unknown-linux-musl-install_only.tar.gz
+5b34488580df13df051a2e84e43cfca2ab28fdd7a61052f35988eb8b481b894a 20251209/cpython-3.15.0a2+20251209-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+5851f3744fbd39e3e323844cf4f68d7763fb25546aa5ffbb71b1b5ab69c56616 20251209/cpython-3.15.0a2+20251209-aarch64-apple-darwin-install_only.tar.gz
+3d99152b4e29b947fb1cfc8d035d1d511e50aeed72886ff4a5fd0a3694bd0b51 20251209/cpython-3.15.0a2+20251209-aarch64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+39bc2fcac13aeba7d650f76badf63350a81c86167a62174cb092eab7a749f4a5 20251209/cpython-3.15.0a2+20251209-aarch64-pc-windows-msvc-install_only.tar.gz
+0c2c83236f6e28c103e2660a82be94b2459ee8cfdd90f5dd82f0d503ca2aec09 20251209/cpython-3.15.0a2+20251209-aarch64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+17ba65d669be3052524e03b4d1426c072ef38df2a9065ff4525d1f4d1bc9f82c 20251209/cpython-3.15.0a2+20251209-aarch64-unknown-linux-gnu-install_only.tar.gz
+216842df2377fd032f279ded7fd23d7bdbd92d4c1fa7619523bc0dbdef5bd212 20251209/cpython-3.15.0a2+20251209-ppc64le-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+5585bd7c5eefe28b9bf544d902cad9a2f81f33c618f2a1d3c006cbfcdec77abc 20251209/cpython-3.15.0a2+20251209-ppc64le-unknown-linux-gnu-install_only.tar.gz
+2a8b56f318d2e21b01b54909554c53d81871b9bb05d23ea7808dde9acec4dc7e 20251209/cpython-3.15.0a2+20251209-riscv64-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+bb7252edaffd422bd1c044a4764dfcf83a5d7159942f445abbef524e54ea79a0 20251209/cpython-3.15.0a2+20251209-riscv64-unknown-linux-gnu-install_only.tar.gz
+06c4ca3983aad20723f68786e3663ab49fee1bf09326f341649205ed79d34fc6 20251209/cpython-3.15.0a2+20251209-s390x-unknown-linux-gnu-freethreaded+lto-full.tar.zst
+03a90ffa9f92d4cf4caeefb9d15f0b39c05c1e60ade6688f32165f957db4f8f3 20251209/cpython-3.15.0a2+20251209-s390x-unknown-linux-gnu-install_only.tar.gz
+4d8102b70ea9fe726ee3ae9ad9e9bc4cbe0b6ed18f7989c81aef81de578f0163 20251209/cpython-3.15.0a2+20251209-x86_64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
+cee576de4919cd422dbc31eb85d3c145ee82acec84f651daaf32dc669b5149c9 20251209/cpython-3.15.0a2+20251209-x86_64-apple-darwin-install_only.tar.gz
+6ff71bac78d650ce621fe6db49f06290e48bcceb61f69cccc7728584f70b6346 20251209/cpython-3.15.0a2+20251209-x86_64-pc-windows-msvc-freethreaded+pgo-full.tar.zst
+e538475ee249eacf63bfdae0e70af73e9c47360e6dd3d6825e7a35107e177de5 20251209/cpython-3.15.0a2+20251209-x86_64-pc-windows-msvc-install_only.tar.gz
+70f552e213734c0e260a57603bee504dd7ed0e78a10558b591e724ea8730fef5 20251209/cpython-3.15.0a2+20251209-x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full.tar.zst
+58addaabfab2de422180d32543fb3878ffc984c8a2e4005ff658a5cd83b31fc7 20251209/cpython-3.15.0a2+20251209-x86_64-unknown-linux-gnu-install_only.tar.gz
+dcf844400dc2e7f5f3604e994532e4d49db45f4deefe9afdf6809ca1bc6532ee 20251209/cpython-3.15.0a2+20251209-x86_64-unknown-linux-musl-install_only.tar.gz
+e7cf7bc717082bb38f5ca75988ecd8e5dbc1b0535192129371e30235d29d67b5 20260325/cpython-3.13.12+20260325-aarch64-apple-darwin-freethreaded-install_only.tar.gz
+688da81bcaa6ed91792397c7d5433b13a4f02f021f940637c3972639bc516dca 20260325/cpython-3.13.12+20260325-aarch64-apple-darwin-install_only.tar.gz
+54187be504ea5be2f8ed455e9377112bb04f34c9259eae263779e56b403e3e3f 20260325/cpython-3.13.12+20260325-aarch64-pc-windows-msvc-freethreaded-install_only.tar.gz
+d2c8b00044cd2e4c5fc7e697e63d5e481ed44b87c2def0beb42991d59f65d930 20260325/cpython-3.13.12+20260325-aarch64-pc-windows-msvc-install_only.tar.gz
+9794866e9a464f349055d791ea8f14dfa7f339ecac5aa9b1084bb2ce388fc598 20260325/cpython-3.13.12+20260325-aarch64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+31c6e61eed48ca4e156d0e473025a792338641109e8277a63518ded438390c96 20260325/cpython-3.13.12+20260325-aarch64-unknown-linux-gnu-install_only.tar.gz
+1a8a4a97f33740a1cb9fa480321818cdc610c79c9137e511e76dc53635615494 20260325/cpython-3.13.12+20260325-ppc64le-unknown-linux-gnu-freethreaded-install_only.tar.gz
+654939bc40d5f76f08eb17335bb19e9efa11eb48a0818eda2293a3f7c3570ae7 20260325/cpython-3.13.12+20260325-ppc64le-unknown-linux-gnu-install_only.tar.gz
+178d20e568c25abcca9b1dbedf77e904cc3f10a79d22e31f87ddabd2d28f87dc 20260325/cpython-3.13.12+20260325-riscv64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+fc7e1fb553c47b831ed7fa529575145207f000f967513f7b9ea809cce006ed79 20260325/cpython-3.13.12+20260325-riscv64-unknown-linux-gnu-install_only.tar.gz
+d23c93ea7502420c71e4acf02999c72ab80797d51843b1b6a315ca7bac3cb780 20260325/cpython-3.13.12+20260325-s390x-unknown-linux-gnu-freethreaded-install_only.tar.gz
+7d7919358e88fcc672b061be8c2316c3a604c7074200515d7104166ed611f7f9 20260325/cpython-3.13.12+20260325-s390x-unknown-linux-gnu-install_only.tar.gz
+6aff211689e30889cfe90b0b2a76b6f5a7b9e6e0bb28d6a66fd5ba35d36dc78a 20260325/cpython-3.13.12+20260325-x86_64-apple-darwin-freethreaded-install_only.tar.gz
+7411e47939783708381017a90944a69641ac84d43f74fb6e2d52576c599a2717 20260325/cpython-3.13.12+20260325-x86_64-apple-darwin-install_only.tar.gz
+088754e90ff22962a4ab6f7cb6bdabe5d9e7618266595df2cf7b211766e15132 20260325/cpython-3.13.12+20260325-x86_64-pc-windows-msvc-freethreaded-install_only.tar.gz
+5b4093f92d9bffcb0d92aea050f3d77d5a4fc8e918b31cea000ee4b3ca751f1d 20260325/cpython-3.13.12+20260325-x86_64-pc-windows-msvc-install_only.tar.gz
+6070796c894ef0a25b5a944c8c0327e155df534302e1612a5ddd57d177ddadf7 20260325/cpython-3.13.12+20260325-x86_64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+ebb1051ca2822b9803f46a5f10b6d51d153189ef1b1f1e142f733c0cbeaf86eb 20260325/cpython-3.13.12+20260325-x86_64-unknown-linux-gnu-install_only.tar.gz
+b2e9400731c7f18069ec2804ba87a404385fe440f93b7dcb59004b9f56651202 20260325/cpython-3.13.12+20260325-x86_64-unknown-linux-musl-install_only.tar.gz
+21f297bc1e0503fa077364417e2213c60951d94fd65d837ae6d9d9201ae27483 20260325/cpython-3.14.3+20260325-aarch64-apple-darwin-freethreaded-install_only.tar.gz
+80c996c23aab828134821f078a8a77a6f33f3f2c14000f071718c540e20c64d4 20260325/cpython-3.14.3+20260325-aarch64-apple-darwin-install_only.tar.gz
+d0e355df7362d12542108f78b3f8085b21e6824420769117c262ac86569bb2a7 20260325/cpython-3.14.3+20260325-aarch64-pc-windows-msvc-freethreaded-install_only.tar.gz
+b35fe7c2fe169574f382cef125e95cbd904ddcb98fc337167356371b6d2e8c60 20260325/cpython-3.14.3+20260325-aarch64-pc-windows-msvc-install_only.tar.gz
+112cf42bdf4d04f69ff4f9bf18c8ce45f494bac1645310bfdeff6f2ffb30dd9a 20260325/cpython-3.14.3+20260325-aarch64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+6faf5478f910741c477830f5fd842011208af0f9678faf77106c9421b325bfc1 20260325/cpython-3.14.3+20260325-aarch64-unknown-linux-gnu-install_only.tar.gz
+9d7e5ba8020fd942a89a57179d9015eb0237c2d95cdbf8378639723663f11706 20260325/cpython-3.14.3+20260325-ppc64le-unknown-linux-gnu-freethreaded-install_only.tar.gz
+5eafe32e12f33f98c40de920482b013170dcf97d8c7f5dc780271ccf4cded76a 20260325/cpython-3.14.3+20260325-ppc64le-unknown-linux-gnu-install_only.tar.gz
+32955ad52ec7931e76f4509134a2ba5a6ba6ea0cd55e05217c1ccca3967c4a5c 20260325/cpython-3.14.3+20260325-riscv64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+481d3faef258964e57b7102c63de12b2bb388c7ed07cfe456f33e63b4e061202 20260325/cpython-3.14.3+20260325-riscv64-unknown-linux-gnu-install_only.tar.gz
+7a1d36a1567cd747411c9c2bc7e2b5c1ac277ea7c734f74b158b94101fd5ea43 20260325/cpython-3.14.3+20260325-s390x-unknown-linux-gnu-freethreaded-install_only.tar.gz
+d706eae2f4d963187b7c866603aed75d7eb3ea59590b06fb34f5fd7d0fe8e432 20260325/cpython-3.14.3+20260325-s390x-unknown-linux-gnu-install_only.tar.gz
+3788781d0f9704f91ab5f7ad2a040d26b0f9b6aba0a2535db21755aebb69e620 20260325/cpython-3.14.3+20260325-x86_64-apple-darwin-freethreaded-install_only.tar.gz
+847a49fea36c066f8df7a57cd8c4c02d17667e25d30b7930e8f8ba15e72d7efc 20260325/cpython-3.14.3+20260325-x86_64-apple-darwin-install_only.tar.gz
+99dd7e425b3dac23e03f37787d77ee0af531e96b1c748275185342bc6642eb6b 20260325/cpython-3.14.3+20260325-x86_64-pc-windows-msvc-freethreaded-install_only.tar.gz
+8b4e1329c4901ce2c0f1c20ac5d2ffa62fc13f12e26b5d1e5a1000f910f980d4 20260325/cpython-3.14.3+20260325-x86_64-pc-windows-msvc-install_only.tar.gz
+20d3bcd7f175e09fa08f4cb3039e5f90fe7e4ce2476534e83f5aa21eb0d7cee9 20260325/cpython-3.14.3+20260325-x86_64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+18270c5a7b1a572599df5e68b497ba5254811dac43ba6f542245807d821fcb44 20260325/cpython-3.14.3+20260325-x86_64-unknown-linux-gnu-install_only.tar.gz
+726a28734d2878a637b0d16ce07ce24c7d6ca1043d8e6f4a23b1b0a3478eedb9 20260325/cpython-3.14.3+20260325-x86_64-unknown-linux-musl-install_only.tar.gz
+f76cc83c7db16cfc8794bf6e44d834152b57d8bab4e04e823cbc59ed23ec22f8 20260414/cpython-3.10.20+20260414-aarch64-apple-darwin-install_only.tar.gz
+64932c8e8bbdf9d6b66ee85934f6f8ad1d18218b51a87ea06cefd3b84554a3e4 20260414/cpython-3.10.20+20260414-aarch64-unknown-linux-gnu-install_only.tar.gz
+76b48eb26ef274045772186e63431419294c41baf6d5a372b722d4c9e711082e 20260414/cpython-3.10.20+20260414-ppc64le-unknown-linux-gnu-install_only.tar.gz
+76e1ec72717d17493976fc176ec661f02412666d4f19e50908d8e4303c0511d5 20260414/cpython-3.10.20+20260414-riscv64-unknown-linux-gnu-install_only.tar.gz
+2edf241199d11a3ef79a312737c1bcdb86908352c585ca14b667539080630e85 20260414/cpython-3.10.20+20260414-s390x-unknown-linux-gnu-install_only.tar.gz
+95a2d794b8981723095190fa94b574ceb4272bb49d83b9e418bb90341e304d09 20260414/cpython-3.10.20+20260414-x86_64-apple-darwin-install_only.tar.gz
+0d828683d30185ab9f1110ad2194ef384cef0533b8e0da7e03ce837548841788 20260414/cpython-3.10.20+20260414-x86_64-pc-windows-msvc-install_only.tar.gz
+303047011b2c9f58504a930fc974d84547477cf69a3f2962f25552e2395c13af 20260414/cpython-3.10.20+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+84eb198d318f8b1b8bf59eef5d30d742e13afd97c213fa229578f8fdab0c406f 20260414/cpython-3.10.20+20260414-x86_64-unknown-linux-musl-install_only.tar.gz
+a57ffd435652092d16b30e783f9826c55e9c64b0f0a72cbae0a9f39e663137fb 20260414/cpython-3.11.15+20260414-aarch64-apple-darwin-install_only.tar.gz
+a882abe4876985c9dc3d433420548506fb0cc9bb9d9fe336a2d3aaf28922aa45 20260414/cpython-3.11.15+20260414-aarch64-pc-windows-msvc-install_only.tar.gz
+77836944ae15b74e0b25bdc68a4703a340f2ccb684effc0f45fbd7910e1a1f39 20260414/cpython-3.11.15+20260414-aarch64-unknown-linux-gnu-install_only.tar.gz
+30a2107f000dbe304820627cbe2cc257027c20f3241d96e6c7df796b69ac2062 20260414/cpython-3.11.15+20260414-ppc64le-unknown-linux-gnu-install_only.tar.gz
+373b98fbf2d04099139a2f6be57593714382ed790be7e7419e358830c23ddd0f 20260414/cpython-3.11.15+20260414-riscv64-unknown-linux-gnu-install_only.tar.gz
+7838efa839158c80568de35ac78d438f564f4c32272a2fe7d9e14a9b351d1a62 20260414/cpython-3.11.15+20260414-s390x-unknown-linux-gnu-install_only.tar.gz
+317055d80e553764feeaef432d833dd8385c14b83465a8b3fa7c2b7819cba681 20260414/cpython-3.11.15+20260414-x86_64-apple-darwin-install_only.tar.gz
+8e69ecf1d9fc194e029aafa608d483bf24ccaa8f56d456d7009f20462d62ad23 20260414/cpython-3.11.15+20260414-x86_64-pc-windows-msvc-install_only.tar.gz
+8b14030dd3af9ea7f7c51b4c90feb04afd8a8f45435727e67b875270bd08f3bc 20260414/cpython-3.11.15+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+ca92d3a68a39fa330498b09714733f347bead7313ba9d9b7fbed837aa4ba7796 20260414/cpython-3.11.15+20260414-x86_64-unknown-linux-musl-install_only.tar.gz
+8966b2bcd9fa03ba22c080ad15a86bc12e41a00122b16f4b3740e302261124d9 20260414/cpython-3.12.13+20260414-aarch64-apple-darwin-install_only.tar.gz
+f55326c894fde76fc0faffe95d2bce60be533c88a8c44c1b88bbbc17bf6a5cd5 20260414/cpython-3.12.13+20260414-aarch64-pc-windows-msvc-install_only.tar.gz
+355d981eafb9b2870af79ddc106ced7266b6f6d2101d8fbcb05620fa386642b9 20260414/cpython-3.12.13+20260414-aarch64-unknown-linux-gnu-install_only.tar.gz
+4aef4cffe73c4a65ea486f14d684a9ad3f831a354174d163bb531b5baa70fc49 20260414/cpython-3.12.13+20260414-ppc64le-unknown-linux-gnu-install_only.tar.gz
+c2629d69324155132343913f064be93509bd162531e08a292e50c3973ec8b5db 20260414/cpython-3.12.13+20260414-riscv64-unknown-linux-gnu-install_only.tar.gz
+e5baafd64180f45165d2751b25d1bcc89254eefc7926f3ab341fc61b541d7606 20260414/cpython-3.12.13+20260414-s390x-unknown-linux-gnu-install_only.tar.gz
+801b03fbe004181d55a02ebd8b4e04d74973e70d716062aebe3b3cf32e9be297 20260414/cpython-3.12.13+20260414-x86_64-apple-darwin-install_only.tar.gz
+c5a9e011e284c49c48106ca177342f3e3f64e95b4c6652d4a382cc7c9bb1cc46 20260414/cpython-3.12.13+20260414-x86_64-pc-windows-msvc-install_only.tar.gz
+cdcf8724d46e4857f8db5ee9f4252dc2f5da34f7940294ec6b312389dd3f41e0 20260414/cpython-3.12.13+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+d10e971238c130fdf25e577c6538a3effa5589d5fcf53665e3c711edd6a6ff2f 20260414/cpython-3.12.13+20260414-x86_64-unknown-linux-musl-install_only.tar.gz
+2662b1c3f6d5ed4d02d877c07f9384acc0d18b9046d54cd2853dad3ca172784f 20260414/cpython-3.13.13+20260414-aarch64-apple-darwin-freethreaded-install_only.tar.gz
+c652dad552122cd2e76968ec41c803f8222038169b11310dba0c85928265f5c1 20260414/cpython-3.13.13+20260414-aarch64-apple-darwin-install_only.tar.gz
+c6c1aae3809ef585271f6f1bb3643a2c6e0c82b811b93284c6218b31f0b931d7 20260414/cpython-3.13.13+20260414-aarch64-pc-windows-msvc-freethreaded-install_only.tar.gz
+586ba71c75f341e1d111399b7f719ae784dc11e8672e93e017388f28684226d0 20260414/cpython-3.13.13+20260414-aarch64-pc-windows-msvc-install_only.tar.gz
+46ac7e9476b938ef19f71029a77d28ed1e201335dd0aa0237fcfed2e5ce0ee61 20260414/cpython-3.13.13+20260414-aarch64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+6a65f68043d7fadcd580415493d2929d1fd686013f9ae44ddbd3a81307ab256d 20260414/cpython-3.13.13+20260414-aarch64-unknown-linux-gnu-install_only.tar.gz
+abe26a6cab523a5d00d75f1353cbad9c5dc04262dcb0dc4a2b47d02384e2a7d7 20260414/cpython-3.13.13+20260414-ppc64le-unknown-linux-gnu-freethreaded-install_only.tar.gz
+aef73894107300264222b19e357baf5bad616b1c4bf5daa5c3b97cfee8f5ed7b 20260414/cpython-3.13.13+20260414-ppc64le-unknown-linux-gnu-install_only.tar.gz
+eea71fc3625fcc2408171b17fb97e0c6286ed60ed225ca7fd6e2fc5d9cc21dce 20260414/cpython-3.13.13+20260414-riscv64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+f47c09f8e7f2fb0bc4afe52422705af4016c8d3ec1cf004b67bb56a86caa62cb 20260414/cpython-3.13.13+20260414-riscv64-unknown-linux-gnu-install_only.tar.gz
+dd8b6161c4af3c2f5f29b3535decdcf146ce90d7a062687c9e5229b4151198b0 20260414/cpython-3.13.13+20260414-s390x-unknown-linux-gnu-freethreaded-install_only.tar.gz
+4d205af9654e1f33cefd23ff798af470e565f3ac0eba18d2f98f18a2abd07166 20260414/cpython-3.13.13+20260414-s390x-unknown-linux-gnu-install_only.tar.gz
+27edbaad8f0c1a8814647d24df3f87eb13c89bbc2cb90e2fc23d8fa48dd64b15 20260414/cpython-3.13.13+20260414-x86_64-apple-darwin-freethreaded-install_only.tar.gz
+540337412d2c4220e99280f741dbf45c1e3da3a39edaaab20c6ba1d53e1692ef 20260414/cpython-3.13.13+20260414-x86_64-apple-darwin-install_only.tar.gz
+002c07103bfbe1b889f41eb1b9fade81651a21aed35a3512e2a916c5d7903cfe 20260414/cpython-3.13.13+20260414-x86_64-pc-windows-msvc-freethreaded-install_only.tar.gz
+ee0cb26453d6e025d36502d765c1639c34830355e46ab3ad31c0360bc4cd9b79 20260414/cpython-3.13.13+20260414-x86_64-pc-windows-msvc-install_only.tar.gz
+a183ec7a10c38ab8c3f19968614f1e69ec697199e94525583662dfbc22b70d9a 20260414/cpython-3.13.13+20260414-x86_64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+e5ec3b2c5693215d153c434ac018e75511b2c4f96d2bce30468a477cb3a89d5e 20260414/cpython-3.13.13+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+24ac6bf80dd2991c8be348f777c96c6eb69b71e78d8fa28c09beb3ddca015a47 20260414/cpython-3.13.13+20260414-x86_64-unknown-linux-musl-install_only.tar.gz
+a4bfd77675740a0362c137b094f3cd9995775e8e6c0a7874a095dd055fd1ea99 20260414/cpython-3.14.4+20260414-aarch64-apple-darwin-freethreaded-install_only.tar.gz
+8b7865e511b17093e090449bf71eb52933c17d45ad5257ddeacaffbb2c7239df 20260414/cpython-3.14.4+20260414-aarch64-apple-darwin-install_only.tar.gz
+0458cb9885c30df690cdf304a16ec335cbc7344792ef0e8a904614b24a61316d 20260414/cpython-3.14.4+20260414-aarch64-pc-windows-msvc-freethreaded-install_only.tar.gz
+82613380d582d806e562d7701496c34c87753ab13c37aa0afe2039003651f389 20260414/cpython-3.14.4+20260414-aarch64-pc-windows-msvc-install_only.tar.gz
+6d84fb153ccb5cb650652aadc490d99881a8d9b68cf273d44cb553e8cd087734 20260414/cpython-3.14.4+20260414-aarch64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+5c8db1c21023316adad827a46d917bbbd6a85ae4e39bc3a58febda712c2f963d 20260414/cpython-3.14.4+20260414-aarch64-unknown-linux-gnu-install_only.tar.gz
+b5e025e340d0faa1772ef234e320401b0aa5cf6c9d16ed63a8c44be7c531bc58 20260414/cpython-3.14.4+20260414-ppc64le-unknown-linux-gnu-freethreaded-install_only.tar.gz
+055977a09de092744bbb22db64144e6afef8592eaac5e2bce4cca33f2592281a 20260414/cpython-3.14.4+20260414-ppc64le-unknown-linux-gnu-install_only.tar.gz
+4373553133eb4712bc10f720da29e091a23153f587fdb2c38f1fb105e70db53a 20260414/cpython-3.14.4+20260414-riscv64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+e959df167c502fb0bbcacc31a997e25c6b0ff6b5e496321b691955aa702d0c09 20260414/cpython-3.14.4+20260414-riscv64-unknown-linux-gnu-install_only.tar.gz
+a6797ad05c7d7f74a2cea28bf012f9199f4d6c1ed6d09f7adfeb9b3c538c6258 20260414/cpython-3.14.4+20260414-s390x-unknown-linux-gnu-freethreaded-install_only.tar.gz
+35f70ad05b2c4045889ee0c3d93f61b012654c1d91e10e671f0e5b4d4a6c6637 20260414/cpython-3.14.4+20260414-s390x-unknown-linux-gnu-install_only.tar.gz
+1c366767d203b722efbd5b3796d16a08436e8a328afd31e551289efba9bf56d1 20260414/cpython-3.14.4+20260414-x86_64-apple-darwin-freethreaded-install_only.tar.gz
+9ecb2b942e6698c04af10a63a3d73c0b2e8d8e11ce44933fbffe8651bef4577d 20260414/cpython-3.14.4+20260414-x86_64-apple-darwin-install_only.tar.gz
+5ccaecdb899431f393209647182def14b36d7398bd59be4fa73dd79b48b3f290 20260414/cpython-3.14.4+20260414-x86_64-pc-windows-msvc-freethreaded-install_only.tar.gz
+9647bb46d3c236e34c1c11bbb7113444d9711811f0d11c39956168807a955b1a 20260414/cpython-3.14.4+20260414-x86_64-pc-windows-msvc-install_only.tar.gz
+c1a845a79da56265dc49628bc3b9e20d34f04674fd2d637ee40cbe259d2b1b95 20260414/cpython-3.14.4+20260414-x86_64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+e17275eaf95ceb5877aa6816e209b7733f41fee401d39c3921b88fb73fc4a4ba 20260414/cpython-3.14.4+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+12687a989a2384665577e1ef9864f33d4c074a1e69b38a8bac8d656531aefa3e 20260414/cpython-3.14.4+20260414-x86_64-unknown-linux-musl-install_only.tar.gz
+5791a69a73b76b908f5bdf96da1928de8db696ab198f4ced04b77b22fe712ce0 20260414/cpython-3.15.0a8+20260414-aarch64-apple-darwin-freethreaded-install_only.tar.gz
+780d46b3da0e58e15c620d9e7dfd29b54c8359c195f625858f85df9c2c7ecc32 20260414/cpython-3.15.0a8+20260414-aarch64-apple-darwin-install_only.tar.gz
+95ddfe7dd52185f7e5d55524eafb48e54d1eab0b0cf013966f144a411f3ddd0f 20260414/cpython-3.15.0a8+20260414-aarch64-pc-windows-msvc-freethreaded-install_only.tar.gz
+10fb470e900e65df4e37f8deaf1726397c914861ffc37b43ae3743a7eee88377 20260414/cpython-3.15.0a8+20260414-aarch64-pc-windows-msvc-install_only.tar.gz
+b72908bce86036a0a1ba98ca9917ea0b99dc1e6c5d715d3d463c4f330880c09b 20260414/cpython-3.15.0a8+20260414-aarch64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+8f6dda4d8ff44976f1aa6a94674a09a503dc50b015297e1b62c8cdc591c90f4f 20260414/cpython-3.15.0a8+20260414-aarch64-unknown-linux-gnu-install_only.tar.gz
+b3c8210674140a4c5beefa2d4afd752979222638a0fb68de672c60300b4a6642 20260414/cpython-3.15.0a8+20260414-ppc64le-unknown-linux-gnu-freethreaded-install_only.tar.gz
+09f076c63fadbf675143674aa3b23229482b9a44840b8b1808a216def2a9af15 20260414/cpython-3.15.0a8+20260414-ppc64le-unknown-linux-gnu-install_only.tar.gz
+1a4984207974563c6aea7dc934579d058dbac7436642081113e86011114b9fdf 20260414/cpython-3.15.0a8+20260414-riscv64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+9d41ce752e8b731872f0f5c9c48199e63c789d24ce3ae9e91d6c8008f36e7c51 20260414/cpython-3.15.0a8+20260414-riscv64-unknown-linux-gnu-install_only.tar.gz
+f525a6244d73450e0c0a7ba125b5934894ab25ee171f7099c239d4eb7ce2f5f2 20260414/cpython-3.15.0a8+20260414-s390x-unknown-linux-gnu-freethreaded-install_only.tar.gz
+1de2593c40cce2d8ea883f8c8580223bfa1478cbd9d0191ba3640aed083c2202 20260414/cpython-3.15.0a8+20260414-s390x-unknown-linux-gnu-install_only.tar.gz
+3dcee23c21e4a3518947e988e115c1d824f07540f4326d93d4ea2028918e0193 20260414/cpython-3.15.0a8+20260414-x86_64-apple-darwin-freethreaded-install_only.tar.gz
+a7744d34148969a2ec010da6f0a46ddeceda7c02e5cdfa2b4e1811487381491a 20260414/cpython-3.15.0a8+20260414-x86_64-apple-darwin-install_only.tar.gz
+6e69670347e3a6ac1d0cd89b9506d825bd2f2690cc51ead5dec61aec6857d08d 20260414/cpython-3.15.0a8+20260414-x86_64-pc-windows-msvc-freethreaded-install_only.tar.gz
+3ded476f676fdf260d56a5e49aa083d5ffd218fc3390e4480ed42bee1acfb3fb 20260414/cpython-3.15.0a8+20260414-x86_64-pc-windows-msvc-install_only.tar.gz
+2d06d97e230b7f74de0fe4f661918a0ee827b08127b9372e0890e167de52a8c6 20260414/cpython-3.15.0a8+20260414-x86_64-unknown-linux-gnu-freethreaded-install_only.tar.gz
+c93f4b15287ac48d7e3a475b245cb59cc51079382747e3e6213d6406c158969d 20260414/cpython-3.15.0a8+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+0568e953f837f09689eb4dd1af0043ba5e2ebae0c6395b8b9f8344a53b1f1da5 20260414/cpython-3.15.0a8+20260414-x86_64-unknown-linux-musl-freethreaded-install_only.tar.gz
+9fbd6f243a424d4ae973e72aa0075122a7cfe05ac8f6cfde986e7b00d0dbc0bf 20260414/cpython-3.15.0a8+20260414-x86_64-unknown-linux-musl-install_only.tar.gz
+"""
diff --git a/python/private/text_util.bzl b/python/private/text_util.bzl
index eaccadf..f725195 100644
--- a/python/private/text_util.bzl
+++ b/python/private/text_util.bzl
@@ -76,13 +76,14 @@
return "{}({})".format(name, args)
-def _render_list(items, *, hanging_indent = ""):
+def _render_list(items, *, hanging_indent = "", value_repr = repr):
"""Convert a list to formatted text.
Args:
items: list of items.
hanging_indent: str, indent to apply to second and following lines of
the formatted text.
+ value_repr: callable, function to represent each item.
Returns:
The list pretty formatted as a string.
@@ -91,12 +92,12 @@
return "[]"
if len(items) == 1:
- return "[{}]".format(repr(items[0]))
+ return "[{}]".format(value_repr(items[0]))
text = "\n".join([
"[",
_indent("\n".join([
- "{},".format(repr(item))
+ "{},".format(value_repr(item))
for item in items
])),
"]",
@@ -180,6 +181,11 @@
lines.append("}")
return "\n".join(lines)
+def _render_struct(value):
+ """Render a struct value."""
+ fields = {k: repr(getattr(value, k)) for k in sorted(dir(value)) if k not in ["to_json", "to_proto"]}
+ return _render_call("struct", **fields)
+
render = struct(
alias = _render_alias,
dict = _render_dict,
@@ -192,6 +198,7 @@
list = _render_list,
select = _render_select,
str = _render_str,
+ struct = _render_struct,
toolchain_prefix = _toolchain_prefix,
tuple = _render_tuple,
string_list_dict = _render_string_list_dict,
diff --git a/python/private/tools/sort_manifest.py b/python/private/tools/sort_manifest.py
new file mode 100755
index 0000000..41bf418
--- /dev/null
+++ b/python/private/tools/sort_manifest.py
@@ -0,0 +1,123 @@
+#!/usr/bin/env python3
+
+"""Sorts python-build-standalone manifest files by filename."""
+
+import argparse
+import sys
+from pathlib import Path
+
+
+def sort_manifest(manifest_path: Path) -> bool:
+ """Sorts a manifest file in place by filename. Returns True if modified."""
+ # Read using pathlib.Path
+ lines = manifest_path.read_text(encoding="utf-8").splitlines(keepends=True)
+
+ if not lines:
+ return False
+
+ first_entry_idx = -1
+ last_entry_idx = -1
+ for idx, line in enumerate(lines):
+ stripped = line.strip()
+ if stripped and not stripped.startswith("#"):
+ if first_entry_idx == -1:
+ first_entry_idx = idx
+ last_entry_idx = idx
+
+ if first_entry_idx == -1:
+ return False
+
+ # Extract top-level comments (comments at the top followed by a blank newline)
+ top_level_comments = []
+ pre_entry_lines = lines[:first_entry_idx]
+
+ last_blank_idx = -1
+ for idx, line in enumerate(pre_entry_lines):
+ if not line.strip():
+ last_blank_idx = idx
+
+ if last_blank_idx != -1:
+ top_level_comments = pre_entry_lines[: last_blank_idx + 1]
+ remaining_pre = pre_entry_lines[last_blank_idx + 1 :]
+ else:
+ remaining_pre = pre_entry_lines
+
+ # Extract bottom-level comments
+ bottom_level_comments = lines[last_entry_idx + 1 :]
+
+ # Group middle lines into actual catalog entries with their attached comments/blank lines
+ middle_lines = remaining_pre + lines[first_entry_idx : last_entry_idx + 1]
+
+ entries = []
+ current_attached = []
+
+ for line in middle_lines:
+ stripped = line.strip()
+ if stripped and not stripped.startswith("#"):
+ parts = [p for p in stripped.split(" ") if p]
+ if len(parts) == 2:
+ sha256, filename = parts[0], parts[1]
+ normalized_line = f"{sha256} {filename}\n"
+ else:
+ filename = parts[0] if parts else ""
+ normalized_line = line
+
+ block = current_attached + [normalized_line]
+ entries.append((filename, block))
+ current_attached = []
+ else:
+ current_attached.append(line)
+
+ if current_attached:
+ bottom_level_comments = current_attached + bottom_level_comments
+
+ # Sort entries lexicographically by filename
+ entries.sort(key=lambda e: e[0])
+
+ new_lines = top_level_comments
+ for _, block in entries:
+ new_lines.extend(block)
+ new_lines.extend(bottom_level_comments)
+
+ if new_lines == lines:
+ return False
+
+ manifest_path.write_text("".join(new_lines), encoding="utf-8")
+ return True
+
+
+def main():
+ parser = argparse.ArgumentParser(description="Sort manifest files by filename.")
+ parser.add_argument(
+ "manifests",
+ nargs="*",
+ type=Path,
+ help="Path to manifest files to sort.",
+ )
+ args = parser.parse_args()
+
+ manifests = args.manifests
+ if not manifests:
+ repo_root = Path(__file__).resolve().parent.parent.parent.parent
+ default_manifest = repo_root / "python" / "private" / "runtimes_manifest.txt"
+ if default_manifest.exists():
+ manifests = [default_manifest]
+ else:
+ print("No manifests provided.", file=sys.stderr)
+ sys.exit(1)
+
+ changed = False
+ for m in manifests:
+ if m.exists():
+ if sort_manifest(m):
+ print(f"Sorted {m}")
+ changed = True
+ else:
+ print(f"Warning: Manifest not found: {m}", file=sys.stderr)
+
+ if changed:
+ sys.exit(1)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/python/private/tools/sync_runtimes_manifest_workspace.py b/python/private/tools/sync_runtimes_manifest_workspace.py
new file mode 100755
index 0000000..4503585
--- /dev/null
+++ b/python/private/tools/sync_runtimes_manifest_workspace.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python3
+
+"""Synchronizes runtimes_manifest_workspace.bzl with runtimes_manifest.txt."""
+
+import argparse
+import sys
+from pathlib import Path
+
+
+def sync_workspace_manifest(txt_path: Path, bzl_path: Path) -> bool:
+ with open(txt_path, "r", encoding="utf-8") as f:
+ txt_content = f.read()
+ header = '''"""Manifest of runtimes for workspace mode builds.
+
+This is the workspace equivalent of runtimes_manifest.txt. It's a bzl file
+to simplify loading of the data under workspace mode, which doesn't
+support parsing a runtimes_manifest.txt file.
+
+NOTE: This file is automatically generated by sync_runtimes_manifest_workspace.py.
+Do not edit directly!
+"""
+
+MANIFEST_TEXT = """
+'''
+
+ new_content = header + txt_content + '"""\n'
+
+ if bzl_path.exists():
+ with open(bzl_path, "r", encoding="utf-8") as f:
+ old_content = f.read()
+ else:
+ old_content = ""
+
+ if new_content != old_content:
+ with open(bzl_path, "w", encoding="utf-8", newline="\n") as f:
+ f.write(new_content)
+ return True
+
+ return False
+
+
+def main():
+ parser = argparse.ArgumentParser(
+ description="Sync runtimes workspace bzl file with runtimes manifest text file."
+ )
+ parser.add_argument(
+ "txt_path",
+ nargs="?",
+ type=Path,
+ help="Path to runtimes_manifest.txt",
+ )
+ parser.add_argument(
+ "bzl_path",
+ nargs="?",
+ type=Path,
+ help="Path to runtimes_manifest_workspace.bzl",
+ )
+ args = parser.parse_args()
+
+ txt_path = args.txt_path
+ bzl_path = args.bzl_path
+
+ if not txt_path or not bzl_path:
+ repo_root = Path(__file__).resolve().parent.parent.parent.parent
+ txt_path = repo_root / "python" / "private" / "runtimes_manifest.txt"
+ bzl_path = repo_root / "python" / "private" / "runtimes_manifest_workspace.bzl"
+
+ if not txt_path.exists():
+ print(f"Error: Manifest not found: {txt_path}", file=sys.stderr)
+ sys.exit(1)
+
+ if sync_workspace_manifest(txt_path, bzl_path):
+ print(f"Updated {bzl_path}")
+ if not args.bzl_path:
+ # Exit 1 for pre-commit mode (in-place modification)
+ sys.exit(1)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/python/versions.bzl b/python/versions.bzl
index ed819e6..6e3efb3 100644
--- a/python/versions.bzl
+++ b/python/versions.bzl
@@ -15,8 +15,12 @@
"""The Python versions we use for the toolchains.
"""
+load("//python/private:pbs_manifest.bzl", "parse_runtime_manifest")
load("//python/private:platform_info.bzl", "platform_info")
+##load("@rules_python_internal//:manifest_tool_versions.bzl", "MANIFEST_ENTRIES")
+load("//python/private:runtimes_manifest_workspace.bzl", "MANIFEST_TEXT")
+
# Values present in the @platforms//os package
MACOS_NAME = "osx"
LINUX_NAME = "linux"
@@ -26,1239 +30,16 @@
MUSL = "-musl"
INSTALL_ONLY = "install_only"
-DEFAULT_RELEASE_BASE_URL = "https://github.com/astral-sh/python-build-standalone/releases/download"
-
_GITHUB_PREFIX = "https://github.com/astral-sh/python-build-standalone/releases/download"
_LEGACY_GITHUB_PREFIX = "https://github.com/indygreg/python-build-standalone/releases/download"
_ASTRAL_PREFIX = "https://releases.astral.sh/github/python-build-standalone/releases/download"
-# When updating the versions and releases, run the following command to get
-# the hashes:
-# bazel run //python/private:print_toolchains_checksums --//python/config_settings:python_version={major}.{minor}.{patch}
-#
-# To print hashes for all of the specified versions, run:
-# bazel run //python/private:print_toolchains_checksums --//python/config_settings:python_version=""
-#
-# Note, to users looking at how to specify their tool versions, coverage_tool version for each
-# interpreter can be specified by:
-# "3.8.10": {
-# "url": "20210506/cpython-{python_version}-{platform}-pgo+lto-20210506T0943.tar.zst",
-# "sha256": {
-# "x86_64-apple-darwin": "8d06bec08db8cdd0f64f4f05ee892cf2fcbc58cfb1dd69da2caab78fac420238",
-# "x86_64-unknown-linux-gnu": "aec8c4c53373b90be7e2131093caa26063be6d9d826f599c935c0e1042af3355",
-# },
-# "coverage_tool": {
-# "x86_64-apple-darwin": "<label_for_darwin>"",
-# "x86_64-unknown-linux-gnu": "<label_for_linux>"",
-# },
-# "strip_prefix": "python",
-# },
-#
-# It is possible to provide lists in "url". It is also possible to provide patches or patch_strip.
-#
-# buildifier: disable=unsorted-dict-items
-TOOL_VERSIONS = {
- "3.9.25": {
- "url": "20251031/cpython-{python_version}+20251031-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "87275619c2706affa4d1090d2ca3dad354b6d69f8b85dbfafe38785870751b9a",
- "aarch64-unknown-linux-gnu": "6112d46355857680b81849764a6cf9f38cc4cd0d1cf29d432bc12fe5aeedf9d0",
- "ppc64le-unknown-linux-gnu": "828364b6f54fa45ac2dc91f8e45d5b74306372af374a9ef16eeb2ea81253ed3f",
- "riscv64-unknown-linux-gnu": "17467e0158e5ad04453c447d6773c23b044172276441e22e23058fd3ea053e27",
- "s390x-unknown-linux-gnu": "3e9539f83e67faa813fd06171199b2d33c89821dfa9a33bf6e27ad67f1b6932d",
- "x86_64-apple-darwin": "ace63cfe27a9487c4d72e1cb518be01c1d985271da0b2158e813801f7d3e5503",
- "x86_64-pc-windows-msvc": "4fb1b416482ce94d73cfa140317a670c596c830671d137b07c26afe8c461768a",
- "x86_64-unknown-linux-gnu": "42834f61eb6df43432c3dd6ab9ca3fdf8c06d10a404ebdb53d6902e6b9570b08",
- "x86_64-unknown-linux-musl": "76593e8c889e81e82db5fe117fe15b69466f85100ab2ec0e4035aa86242b4e93",
- },
- "strip_prefix": "python",
- },
- "3.10.2": {
- "url": "20220227/cpython-{python_version}+20220227-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "1409acd9a506e2d1d3b65c1488db4e40d8f19d09a7df099667c87a506f71c0ef",
- "aarch64-unknown-linux-gnu": "8f351a8cc348bb45c0f95b8634c8345ec6e749e483384188ad865b7428342703",
- "x86_64-apple-darwin": "8146ad4390710ec69b316a5649912df0247d35f4a42e2aa9615bffd87b3e235a",
- "x86_64-pc-windows-msvc": "a1d9a594cd3103baa24937ad9150c1a389544b4350e859200b3e5c036ac352bd",
- "x86_64-unknown-linux-gnu": "9b64eca2a94f7aff9409ad70bdaa7fbbf8148692662e764401883957943620dd",
- },
- "strip_prefix": "python",
- },
- "3.10.4": {
- "url": "20220502/cpython-{python_version}+20220502-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "2c99983d1e83e4b6e7411ed9334019f193fba626344a50c36fba6c25d4de78a2",
- "aarch64-unknown-linux-gnu": "d8098c0c54546637e7516f93b13403b11f9db285def8d7abd825c31407a13d7e",
- "x86_64-apple-darwin": "f2711eaffff3477826a401d09a013c6802f11c04c63ab3686aa72664f1216a05",
- "x86_64-pc-windows-msvc": "bee24a3a5c83325215521d261d73a5207ab7060ef3481f76f69b4366744eb81d",
- "x86_64-unknown-linux-gnu": "f6f871e53a7b1469c13f9bd7920ad98c4589e549acad8e5a1e14760fff3dd5c9",
- },
- "strip_prefix": "python",
- },
- "3.10.6": {
- "url": "20220802/cpython-{python_version}+20220802-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "efaf66acdb9a4eb33d57702607d2e667b1a319d58c167a43c96896b97419b8b7",
- "aarch64-unknown-linux-gnu": "81625f5c97f61e2e3d7e9f62c484b1aa5311f21bd6545451714b949a29da5435",
- "x86_64-apple-darwin": "7718411adf3ea1480f3f018a643eb0550282aefe39e5ecb3f363a4a566a9398c",
- "x86_64-pc-windows-msvc": "91889a7dbdceea585ff4d3b7856a6bb8f8a4eca83a0ff52a73542c2e67220eaa",
- "x86_64-unknown-linux-gnu": "55aa2190d28dcfdf414d96dc5dcea9fe048fadcd583dc3981fec020869826111",
- },
- "strip_prefix": "python",
- },
- "3.10.8": {
- "url": "20221106/cpython-{python_version}+20221106-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "d52b03817bd245d28e0a8b2f715716cd0fcd112820ccff745636932c76afa20a",
- "aarch64-unknown-linux-gnu": "33170bef18c811906b738be530f934640491b065bf16c4d276c6515321918132",
- "x86_64-apple-darwin": "525b79c7ce5de90ab66bd07b0ac1008bafa147ddc8a41bef15ffb7c9c1e9e7c5",
- "x86_64-pc-windows-msvc": "f2b6d2f77118f06dd2ca04dae1175e44aaa5077a5ed8ddc63333c15347182bfe",
- "x86_64-unknown-linux-gnu": "6c8db44ae0e18e320320bbaaafd2d69cde8bfea171ae2d651b7993d1396260b7",
- },
- "strip_prefix": "python",
- },
- "3.10.9": {
- "url": "20230116/cpython-{python_version}+20230116-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "018d05a779b2de7a476f3b3ff2d10f503d69d14efcedd0774e6dab8c22ef84ff",
- "aarch64-unknown-linux-gnu": "2003750f40cd09d4bf7a850342613992f8d9454f03b3c067989911fb37e7a4d1",
- "x86_64-apple-darwin": "0e685f98dce0e5bc8da93c7081f4e6c10219792e223e4b5886730fd73a7ba4c6",
- "x86_64-pc-windows-msvc": "59c6970cecb357dc1d8554bd0540eb81ee7f6d16a07acf3d14ed294ece02c035",
- "x86_64-unknown-linux-gnu": "d196347aeb701a53fe2bb2b095abec38d27d0fa0443f8a1c2023a1bed6e18cdf",
- },
- "strip_prefix": "python",
- },
- "3.10.11": {
- "url": "20230507/cpython-{python_version}+20230507-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "8348bc3c2311f94ec63751fb71bd0108174be1c4def002773cf519ee1506f96f",
- "aarch64-unknown-linux-gnu": "c7573fdb00239f86b22ea0e8e926ca881d24fde5e5890851339911d76110bc35",
- "ppc64le-unknown-linux-gnu": "73a9d4c89ed51be39dd2de4e235078281087283e9fdedef65bec02f503e906ee",
- "x86_64-apple-darwin": "bd3fc6e4da6f4033ebf19d66704e73b0804c22641ddae10bbe347c48f82374ad",
- "x86_64-pc-windows-msvc": "9c2d3604a06fcd422289df73015cd00e7271d90de28d2c910f0e2309a7f73a68",
- "x86_64-unknown-linux-gnu": "c5bcaac91bc80bfc29cf510669ecad12d506035ecb3ad85ef213416d54aecd79",
- },
- "strip_prefix": "python",
- },
- "3.10.12": {
- "url": "20230726/cpython-{python_version}+20230726-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "bc66c706ea8c5fc891635fda8f9da971a1a901d41342f6798c20ad0b2a25d1d6",
- "aarch64-unknown-linux-gnu": "fee80e221663eca5174bd794cb5047e40d3910dbeadcdf1f09d405a4c1c15fe4",
- "ppc64le-unknown-linux-gnu": "bb5e8cb0d2e44241725fa9b342238245503e7849917660006b0246a9c97b1d6c",
- "s390x-unknown-linux-gnu": "8d33d435ae6fb93ded7fc26798cc0a1a4f546a4e527012a1e2909cc314b332df",
- "x86_64-apple-darwin": "8a6e3ed973a671de468d9c691ed9cb2c3a4858c5defffcf0b08969fba9c1dd04",
- "x86_64-pc-windows-msvc": "c1a31c353ca44de7d1b1a3b6c55a823e9c1eed0423d4f9f66e617bdb1b608685",
- "x86_64-unknown-linux-gnu": "a476dbca9184df9fc69fe6309cda5ebaf031d27ca9e529852437c94ec1bc43d3",
- },
- "strip_prefix": "python",
- },
- "3.10.13": {
- "url": "20240224/cpython-{python_version}+20240224-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "5fdc0f6a5b5a90fd3c528e8b1da8e3aac931ea8690126c2fdb4254c84a3ff04a",
- "aarch64-unknown-linux-gnu": "a898a88705611b372297bb8fe4d23cc16b8603ce5f24494c3a8cfa65d83787f9",
- "ppc64le-unknown-linux-gnu": "c23706e138a0351fc1e9def2974af7b8206bac7ecbbb98a78f5aa9e7535fee42",
- "s390x-unknown-linux-gnu": "09be8fb2cdfbb4a93d555f268f244dbe4d8ff1854b2658e8043aa4ec08aede3e",
- "x86_64-apple-darwin": "6378dfd22f58bb553ddb02be28304d739cd730c1f95c15c74955c923a1bc3d6a",
- "x86_64-pc-windows-msvc": "086f7fe9156b897bb401273db8359017104168ac36f60f3af4e31ac7acd6634e",
- "x86_64-unknown-linux-gnu": "d995d032ca702afd2fc3a689c1f84a6c64972ecd82bba76a61d525f08eb0e195",
- },
- "strip_prefix": "python",
- },
- "3.10.14": {
- "url": "20240726/cpython-{python_version}+20240726-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "164d89f0df2feb689981864ecc1dffb19e6aa3696c8880166de555494fe92607",
- "aarch64-unknown-linux-gnu": "39bcd46b4d70e40da177c55259be16d5c2be7a3f7f93f1e3bde47e71b4833f29",
- "ppc64le-unknown-linux-gnu": "549d38b9ef59cba9ab2990025255231bfa1cb32b4bc5eac321667640fdee19d1",
- "s390x-unknown-linux-gnu": "de4bc878a8666c734f983db971610980870148f333bda8b0c34abfaeae88d7ec",
- "x86_64-apple-darwin": "1a1455838cd1e8ed0da14a152a2d559a2fd3a6047ba7013e841db4a35a228c1d",
- "x86_64-pc-windows-msvc": "7f68821a8b5445267eca480660364ebd06ec84632b336770c6e39de07ac0f6c3",
- "x86_64-unknown-linux-gnu": "32b34cd13d9d745b3db3f3b8398ab2c07de74544829915dbebd8dce39bdc405e",
- },
- "strip_prefix": "python",
- },
- "3.10.15": {
- "url": "20241016/cpython-{python_version}+20241016-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "f64776f455a44c24d50f947c813738cfb7b9ac43732c44891bc831fa7940a33c",
- "aarch64-unknown-linux-gnu": "eb58581f85fde83d1f3e8e1f8c6f5a15c7ae4fdbe3b1d1083931f9167fdd8dbc",
- "ppc64le-unknown-linux-gnu": "0c45af4e7525e2db59901606db32b2896ac1e9830c6f95551402207f537c2ce4",
- "s390x-unknown-linux-gnu": "de205896b070e6f5259ac0f2b3379eead875ea84e6a6ef533b89886fcbb46a4c",
- "x86_64-apple-darwin": "90b46dfb1abd98d45663c7a2a8c45d3047a59391d8586d71b459cec7b75f662b",
- "x86_64-pc-windows-msvc": "e48952619796c66ec9719867b87be97edca791c2ef7fbf87d42c417c3331609e",
- "x86_64-unknown-linux-gnu": "3db2171e03c1a7acdc599fba583c1b92306d3788b375c9323077367af1e9d9de",
- "x86_64-unknown-linux-musl": "ed519c47d9620eb916a6f95ec2875396e7b1a9ab993ee40b2f31b837733f318c",
- },
- "strip_prefix": "python",
- },
- "3.10.16": {
- "url": "20250317/cpython-{python_version}+20250317-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "e99f8457d9c79592c036489c5cfa78df76e4762d170665e499833e045d82608f",
- "aarch64-unknown-linux-gnu": "76d0f04d2444e77200fdc70d1c57480e29cca78cb7420d713bc1c523709c198d",
- "ppc64le-unknown-linux-gnu": "39c9b3486de984fe1d72d90278229c70d6b08bcf69cd55796881b2d75077b603",
- "riscv64-unknown-linux-gnu": "ebe949ada9293581c17d9bcdaa8f645f67d95f73eac65def760a71ef9dd6600d",
- "s390x-unknown-linux-gnu": "9b2fc0b7f1c75b48e799b6fa14f7e24f5c61f2db82e3c65d13ed25e08f7f0857",
- "x86_64-apple-darwin": "e03e62dbe95afa2f56b7344ff3bd061b180a0b690ff77f9a1d7e6601935e05ca",
- "x86_64-pc-windows-msvc": "c7e0eb0ff5b36758b7a8cacd42eb223c056b9c4d36eded9bf5b9fe0c0b9aeb08",
- "x86_64-unknown-linux-gnu": "b350c7e63956ca8edb856b91316328e0fd003a840cbd63d08253af43b2c63643",
- "x86_64-unknown-linux-musl": "6ed64923ee4fbea4c5780f1a5a66651d239191ac10bd23420db4f5e4e0bf79c4",
- },
- "strip_prefix": "python",
- },
- "3.10.18": {
- "url": "20250808/cpython-{python_version}+20250808-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "a94c02b2d597cd6b075a713fe4e9a909cc97ca6a3b2b2ce86eda21be2062d48e",
- "aarch64-unknown-linux-gnu": "ef7de3b715d519e246d98ff7856247f7f7b357068705f09c6f300b7e7b76c701",
- "ppc64le-unknown-linux-gnu": "f580efed11cc54e1a221c052e8bc88bfbc12844d3ca8949da828351a1232386e",
- "riscv64-unknown-linux-gnu": "0d7e460e30203a9225b6f417ae972f66415a1cc0e32b37ebc48d195816282669",
- "s390x-unknown-linux-gnu": "d4ada974daadb08a0184c19232ee3b03b3137aa70609760e1a94aaf7b12989ef",
- "x86_64-apple-darwin": "da96fe2ba841640215788ddb9f151f03629360e37fcb94d4f76e5095b87df0d4",
- "x86_64-pc-windows-msvc": "a648f3c9d136985ccfe57a5507e73d9d0839f7fd09eebd7c247857f2feaecb2a",
- "x86_64-unknown-linux-gnu": "0b310a73bb9e7a495dbcad5f685e508ca2e7b36ee8f29301a52285730c425789",
- "x86_64-unknown-linux-musl": "9cecf6ea2effbe183faebcf7e1160425a4ee17a68e49f2eefe5e1c59c51fa7ee",
- },
- "strip_prefix": "python",
- },
- "3.10.19": {
- "url": "20251031/cpython-{python_version}+20251031-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "43bda24c2fc073bc308bf631203b917a72640d59b59fdad4ba14503d84727012",
- "aarch64-unknown-linux-gnu": "f77a8a8aa77f3f943126fa9215a25309da4bf20398fc8f4b4eec54b5fc7570ef",
- "ppc64le-unknown-linux-gnu": "1c55d160fc4c3b93528cd6aaa2bb4ca6018a99e5a45919d33dc761a43a69f860",
- "riscv64-unknown-linux-gnu": "21134d35721cdad4c881f35d0957cc19df9a45d194afb38a099faded3c1cfb4d",
- "s390x-unknown-linux-gnu": "df0db070f1eb73ab4e371eea32213ddb3500737ea5560a6f0ffd65c82af64ddc",
- "x86_64-apple-darwin": "76c12e633c09c2a790f8a958a55df4495527e0718d1875310c836e757c0c7b55",
- "x86_64-pc-windows-msvc": "cfa08a4caf2df1b43551b843c052d6a8814e2ea0c97268b021f0423646c244c3",
- "x86_64-unknown-linux-gnu": "fb1caac917d7b6497bb6f5950da5f1e48d05c43a498948dd97f85760c4382d9f",
- "x86_64-unknown-linux-musl": "ba85013ed5ac7733fc6840168cc33ed19e9959b363dc80227d54f8fd9c92c0f4",
- },
- "strip_prefix": "python",
- },
- "3.10.20": {
- "url": "20260414/cpython-{python_version}+20260414-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "f76cc83c7db16cfc8794bf6e44d834152b57d8bab4e04e823cbc59ed23ec22f8",
- "aarch64-unknown-linux-gnu": "64932c8e8bbdf9d6b66ee85934f6f8ad1d18218b51a87ea06cefd3b84554a3e4",
- "ppc64le-unknown-linux-gnu": "76b48eb26ef274045772186e63431419294c41baf6d5a372b722d4c9e711082e",
- "riscv64-unknown-linux-gnu": "76e1ec72717d17493976fc176ec661f02412666d4f19e50908d8e4303c0511d5",
- "s390x-unknown-linux-gnu": "2edf241199d11a3ef79a312737c1bcdb86908352c585ca14b667539080630e85",
- "x86_64-apple-darwin": "95a2d794b8981723095190fa94b574ceb4272bb49d83b9e418bb90341e304d09",
- "x86_64-pc-windows-msvc": "0d828683d30185ab9f1110ad2194ef384cef0533b8e0da7e03ce837548841788",
- "x86_64-unknown-linux-gnu": "303047011b2c9f58504a930fc974d84547477cf69a3f2962f25552e2395c13af",
- "x86_64-unknown-linux-musl": "84eb198d318f8b1b8bf59eef5d30d742e13afd97c213fa229578f8fdab0c406f",
- },
- "strip_prefix": "python",
- },
- "3.11.1": {
- "url": "20230116/cpython-{python_version}+20230116-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "4918cdf1cab742a90f85318f88b8122aeaa2d04705803c7b6e78e81a3dd40f80",
- "aarch64-unknown-linux-gnu": "debf15783bdcb5530504f533d33fda75a7b905cec5361ae8f33da5ba6599f8b4",
- "x86_64-apple-darwin": "20a4203d069dc9b710f70b09e7da2ce6f473d6b1110f9535fb6f4c469ed54733",
- "x86_64-pc-windows-msvc": "edc08979cb0666a597466176511529c049a6f0bba8adf70df441708f766de5bf",
- "x86_64-unknown-linux-gnu": "02a551fefab3750effd0e156c25446547c238688a32fabde2995c941c03a6423",
- },
- "strip_prefix": "python",
- },
- "3.11.3": {
- "url": "20230507/cpython-{python_version}+20230507-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "09e412506a8d63edbb6901742b54da9aa7faf120b8dbdce56c57b303fc892c86",
- "aarch64-unknown-linux-gnu": "8190accbbbbcf7620f1ff6d668e4dd090c639665d11188ce864b62554d40e5ab",
- "ppc64le-unknown-linux-gnu": "767d24f3570b35fedb945f5ac66224c8983f2d556ab83c5cfaa5f3666e9c212c",
- "x86_64-apple-darwin": "f710b8d60621308149c100d5175fec39274ed0b9c99645484fd93d1716ef4310",
- "x86_64-pc-windows-msvc": "24741066da6f35a7ff67bee65ce82eae870d84e1181843e64a7076d1571e95af",
- "x86_64-unknown-linux-gnu": "da50b87d1ec42b3cb577dfd22a3655e43a53150f4f98a4bfb40757c9d7839ab5",
- },
- "strip_prefix": "python",
- },
- "3.11.4": {
- "url": "20230726/cpython-{python_version}+20230726-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "cb6d2948384a857321f2aa40fa67744cd9676a330f08b6dad7070bda0b6120a4",
- "aarch64-unknown-linux-gnu": "2e84fc53f4e90e11963281c5c871f593abcb24fc796a50337fa516be99af02fb",
- "ppc64le-unknown-linux-gnu": "df7b92ed9cec96b3bb658fb586be947722ecd8e420fb23cee13d2e90abcfcf25",
- "s390x-unknown-linux-gnu": "e477f0749161f9aa7887964f089d9460a539f6b4a8fdab5166f898210e1a87a4",
- "x86_64-apple-darwin": "47e1557d93a42585972772e82661047ca5f608293158acb2778dccf120eabb00",
- "x86_64-pc-windows-msvc": "878614c03ea38538ae2f758e36c85d2c0eb1eaaca86cd400ff8c76693ee0b3e1",
- "x86_64-unknown-linux-gnu": "e26247302bc8e9083a43ce9e8dd94905b40d464745b1603041f7bc9a93c65d05",
- },
- "strip_prefix": "python",
- },
- "3.11.5": {
- "url": "20230826/cpython-{python_version}+20230826-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "dab64b3580118ad2073babd7c29fd2053b616479df5c107d31fe2af1f45e948b",
- "aarch64-unknown-linux-gnu": "bb5c5d1ea0f199fe2d3f0996fff4b48ca6ddc415a3dbd98f50bff7fce48aac80",
- "ppc64le-unknown-linux-gnu": "14121b53e9c8c6d0741f911ae00102a35adbcf5c3cdf732687ef7617b7d7304d",
- "s390x-unknown-linux-gnu": "fe459da39874443579d6fe88c68777c6d3e331038e1fb92a0451879fb6beb16d",
- "x86_64-apple-darwin": "4a4efa7378c72f1dd8ebcce1afb99b24c01b07023aa6b8fea50eaedb50bf2bfc",
- "x86_64-pc-windows-msvc": "00f002263efc8aea896bcfaaf906b1f4dab3e5cd3db53e2b69ab9a10ba220b97",
- "x86_64-unknown-linux-gnu": "fbed6f7694b2faae5d7c401a856219c945397f772eea5ca50c6eb825cbc9d1e1",
- },
- "strip_prefix": "python",
- },
- "3.11.6": {
- "url": "20231002/cpython-{python_version}+20231002-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "916c35125b5d8323a21526d7a9154ca626453f63d0878e95b9f613a95006c990",
- "aarch64-unknown-linux-gnu": "3e26a672df17708c4dc928475a5974c3fb3a34a9b45c65fb4bd1e50504cc84ec",
- "ppc64le-unknown-linux-gnu": "7937035f690a624dba4d014ffd20c342e843dd46f89b0b0a1e5726b85deb8eaf",
- "s390x-unknown-linux-gnu": "f9f19823dba3209cedc4647b00f46ed0177242917db20fb7fb539970e384531c",
- "x86_64-apple-darwin": "178cb1716c2abc25cb56ae915096c1a083e60abeba57af001996e8bc6ce1a371",
- "x86_64-pc-windows-msvc": "3933545e6d41462dd6a47e44133ea40995bc6efeed8c2e4cbdf1a699303e95ea",
- "x86_64-unknown-linux-gnu": "ee37a7eae6e80148c7e3abc56e48a397c1664f044920463ad0df0fc706eacea8",
- },
- "strip_prefix": "python",
- },
- "3.11.7": {
- "url": "20240107/cpython-{python_version}+20240107-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "b042c966920cf8465385ca3522986b12d745151a72c060991088977ca36d3883",
- "aarch64-unknown-linux-gnu": "b102eaf865eb715aa98a8a2ef19037b6cc3ae7dfd4a632802650f29de635aa13",
- "ppc64le-unknown-linux-gnu": "b44e1b74afe75c7b19143413632c4386708ae229117f8f950c2094e9681d34c7",
- "s390x-unknown-linux-gnu": "49520e3ff494708020f306e30b0964f079170be83e956be4504f850557378a22",
- "x86_64-apple-darwin": "a0e615eef1fafdc742da0008425a9030b7ea68a4ae4e73ac557ef27b112836d4",
- "x86_64-pc-windows-msvc": "67077e6fa918e4f4fd60ba169820b00be7c390c497bf9bc9cab2c255ea8e6f3e",
- "x86_64-unknown-linux-gnu": "4a51ce60007a6facf64e5495f4cf322e311ba9f39a8cd3f3e4c026eae488e140",
- },
- "strip_prefix": "python",
- },
- "3.11.8": {
- "url": "20240224/cpython-{python_version}+20240224-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "389a51139f5abe071a0d70091ca5df3e7a3dfcfcbe3e0ba6ad85fb4c5638421e",
- "aarch64-unknown-linux-gnu": "389b9005fb78dd5a6f68df5ea45ab7b30d9a4b3222af96999e94fd20d4ad0c6a",
- "ppc64le-unknown-linux-gnu": "eb2b31f8e50309aae493c6a359c32b723a676f07c641f5e8fe4b6aa4dbb50946",
- "s390x-unknown-linux-gnu": "844f64f4c16e24965778281da61d1e0e6cd1358a581df1662da814b1eed096b9",
- "x86_64-apple-darwin": "097f467b0c36706bfec13f199a2eaf924e668f70c6e2bd1f1366806962f7e86e",
- "x86_64-pc-windows-msvc": "b618f1f047349770ee1ef11d1b05899840abd53884b820fd25c7dfe2ec1664d4",
- "x86_64-unknown-linux-gnu": "94e13d0e5ad417035b80580f3e893a72e094b0900d5d64e7e34ab08e95439987",
- },
- "strip_prefix": "python",
- },
- "3.11.9": {
- "url": "20240726/cpython-{python_version}+20240726-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "cbdac9462bab9671c8e84650e425d3f43b775752a930a2ef954a0d457d5c00c3",
- "aarch64-unknown-linux-gnu": "4d17cf988abe24449d649aad3ef974091ab76807904d41839907061925b4c9e3",
- "ppc64le-unknown-linux-gnu": "fc4f3c9ef9bfac2ed0282126ff376e544697ad04a5408d6429d46899d7d3bf21",
- "s390x-unknown-linux-gnu": "e69b66e53e926460df044f44846eef3fea642f630e829719e1a4112fc370dc56",
- "x86_64-apple-darwin": "dc3174666a30f4c38d04e79a80c3159b4b3aa69597c4676701c8386696811611",
- "x86_64-pc-windows-msvc": "f694be48bdfec1dace6d69a19906b6083f4dd7c7c61f1138ba520e433e5598f8",
- "x86_64-unknown-linux-gnu": "f6e955dc9ddfcad74e77abe6f439dac48ebca14b101ed7c85a5bf3206ed2c53d",
- },
- "strip_prefix": "python",
- },
- "3.11.10": {
- "url": "20241016/cpython-{python_version}+20241016-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "5a69382da99c4620690643517ca1f1f53772331b347e75f536088c42a4cf6620",
- "aarch64-unknown-linux-gnu": "803e49259280af0f5466d32829cd9d65a302b0226e424b3f0b261f9daf6aee8f",
- "ppc64le-unknown-linux-gnu": "92b666d103902001322f42badbd68da92adc5cebb826af9c1c906c33166e2f34",
- "s390x-unknown-linux-gnu": "6d584317651c1ad4a857cb32d1999707e8bb3046fcb2f156d80381814fa19fde",
- "x86_64-apple-darwin": "1e23ffe5bc473e1323ab8f51464da62d77399afb423babf67f8e13c82b69c674",
- "x86_64-pc-windows-msvc": "647b66ff4552e70aec3bf634dd470891b4a2b291e8e8715b3bdb162f577d4c55",
- "x86_64-unknown-linux-gnu": "8b50a442b04724a24c1eebb65a36a0c0e833d35374dbdf9c9470d8a97b164cd9",
- "x86_64-unknown-linux-musl": "d36fc77a8dd76155a7530f6235999a693b9e7c48aa11afeb5610a091cae5aa6f",
- },
- "strip_prefix": "python",
- },
- "3.11.13": {
- "url": "20250808/cpython-{python_version}+20250808-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "d089bfd2c7b98a0942750a195e70d3172beda76d7747097b8afd87028b6e59b6",
- "aarch64-unknown-linux-gnu": "bc57105f8a16acd57b71d926143c7f6ecf61729b40c8b4656f1b98bebd47c710",
- "ppc64le-unknown-linux-gnu": "16a0165b0744940702b8fff80b8bf973ac914f78cb6fca28d389583f675e84de",
- "riscv64-unknown-linux-gnu": "d8e62306be8f41c46bcd62ca68f91a1467f47adff632a35ff413dc1043ed56e8",
- "s390x-unknown-linux-gnu": "4e302a4514a73baefdd9b327062bdafeb4115a799deec91c185f6ab45a857241",
- "x86_64-apple-darwin": "d946d618f8bba8308b67e460a30612a71e2ccc309f85f6628aaae24e2b816981",
- "x86_64-pc-windows-msvc": "ed963aee33d29ad8abfbb5fe63e42f57a2638a4a11a88e11d8bb66e61f20a6e5",
- "aarch64-pc-windows-msvc": "a632857c966237e7fd38b44c47c350f6e30d8ec54dcad6c832865ad670f0f22f",
- "x86_64-unknown-linux-gnu": "3ad988c702cbb017fef1208d47dea4138a2e85fd0f7f01ec5e1e335e597131b9",
- "x86_64-unknown-linux-musl": "3a5810f0696f844289aa06d5c3a1efeab66eee999c25196b7d1954192a2c2100",
- },
- "strip_prefix": "python",
- },
- "3.11.14": {
- "url": "20251031/cpython-{python_version}+20251031-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "6de5572b33c65af1c9b7caf00ec593fb04cffb7e14fa393a98261bb9bc464713",
- "aarch64-unknown-linux-gnu": "510edb027527413c4249256194cb8ad2590b52dd93f7123b4cb341aff5d05894",
- "ppc64le-unknown-linux-gnu": "4e0bc6a818e0c6a9d7d3ebe1a95591fd84440520577aa837facc96a4b7a80e35",
- "riscv64-unknown-linux-gnu": "16519e69297144f81b2421333bc9e0b6466cf3c84749b216b695cfb4c9deb32f",
- "s390x-unknown-linux-gnu": "5f9c1b203cdf34c8bff1aef69b63bbf11309bd16ca6e429d8c3651eaa2b3d080",
- "x86_64-apple-darwin": "4891cbf34e8652b7bd1054b9502395e4b7e048e2e517c040fbf6c8297cb954d6",
- "x86_64-pc-windows-msvc": "5223b83ed9e2aa5e9e17d2ebcf767956e998876339b9cde1980a47e9d4655fb6",
- "aarch64-pc-windows-msvc": "38d0d1466561e15965e8d2c20f5e5be649598f55c761ecab553d087fbd217337",
- "x86_64-unknown-linux-gnu": "60f0bd473d861cc45d3401d9914e47ccb9fa037f88a91879ed517a62042b8477",
- "x86_64-unknown-linux-musl": "25e82d1e85b90a8ab724ee633a1811b1921797f5c25ee69c6595052371b91a87",
- },
- "strip_prefix": "python",
- },
- "3.11.15": {
- "url": "20260414/cpython-{python_version}+20260414-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "a57ffd435652092d16b30e783f9826c55e9c64b0f0a72cbae0a9f39e663137fb",
- "aarch64-unknown-linux-gnu": "77836944ae15b74e0b25bdc68a4703a340f2ccb684effc0f45fbd7910e1a1f39",
- "ppc64le-unknown-linux-gnu": "30a2107f000dbe304820627cbe2cc257027c20f3241d96e6c7df796b69ac2062",
- "riscv64-unknown-linux-gnu": "373b98fbf2d04099139a2f6be57593714382ed790be7e7419e358830c23ddd0f",
- "s390x-unknown-linux-gnu": "7838efa839158c80568de35ac78d438f564f4c32272a2fe7d9e14a9b351d1a62",
- "x86_64-apple-darwin": "317055d80e553764feeaef432d833dd8385c14b83465a8b3fa7c2b7819cba681",
- "x86_64-pc-windows-msvc": "8e69ecf1d9fc194e029aafa608d483bf24ccaa8f56d456d7009f20462d62ad23",
- "aarch64-pc-windows-msvc": "a882abe4876985c9dc3d433420548506fb0cc9bb9d9fe336a2d3aaf28922aa45",
- "x86_64-unknown-linux-gnu": "8b14030dd3af9ea7f7c51b4c90feb04afd8a8f45435727e67b875270bd08f3bc",
- "x86_64-unknown-linux-musl": "ca92d3a68a39fa330498b09714733f347bead7313ba9d9b7fbed837aa4ba7796",
- },
- "strip_prefix": "python",
- },
- "3.12.0": {
- "url": "20231002/cpython-{python_version}+20231002-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "4734a2be2becb813830112c780c9879ac3aff111a0b0cd590e65ec7465774d02",
- "aarch64-unknown-linux-gnu": "bccfe67cf5465a3dfb0336f053966e2613a9bc85a6588c2fcf1366ef930c4f88",
- "ppc64le-unknown-linux-gnu": "b5dae075467ace32c594c7877fe6ebe0837681f814601d5d90ba4c0dfd87a1f2",
- "s390x-unknown-linux-gnu": "5681621349dd85d9726d1b67c84a9686ce78f72e73a6f9e4cc4119911655759e",
- "x86_64-apple-darwin": "5a9e88c8aa52b609d556777b52ebde464ae4b4f77e4aac4eb693af57395c9abf",
- "x86_64-pc-windows-msvc": "facfaa1fbc8653f95057f3c4a0f8aa833dab0e0b316e24ee8686bc761d4b4f8d",
- "x86_64-unknown-linux-gnu": "e51a5293f214053ddb4645b2c9f84542e2ef86870b8655704367bd4b29d39fe9",
- },
- "strip_prefix": "python",
- },
- "3.12.1": {
- "url": "20240107/cpython-{python_version}+20240107-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "f93f8375ca6ac0a35d58ff007043cbd3a88d9609113f1cb59cf7c8d215f064af",
- "aarch64-unknown-linux-gnu": "236533ef20e665007a111c2f36efb59c87ae195ad7dca223b6dc03fb07064f0b",
- "ppc64le-unknown-linux-gnu": "78051f0d1411ee62bc2af5edfccf6e8400ac4ef82887a2affc19a7ace6a05267",
- "s390x-unknown-linux-gnu": "60631211c701f8d2c56e5dd7b154e68868128a019b9db1d53a264f56c0d4aee2",
- "x86_64-apple-darwin": "eca96158c1568dedd9a0b3425375637a83764d1fa74446438293089a8bfac1f8",
- "x86_64-pc-windows-msvc": "fd5a9e0f41959d0341246d3643f2b8794f638adc0cec8dd5e1b6465198eae08a",
- "x86_64-unknown-linux-gnu": "74e330b8212ca22fd4d9a2003b9eec14892155566738febc8e5e572f267b9472",
- },
- "strip_prefix": "python",
- },
- "3.12.2": {
- "url": "20240224/cpython-{python_version}+20240224-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "01c064c00013b0175c7858b159989819ead53f4746d40580b5b0b35b6e80fba6",
- "aarch64-unknown-linux-gnu": "e52550379e7c4ac27a87de832d172658bc04150e4e27d4e858e6d8cbb96fd709",
- "ppc64le-unknown-linux-gnu": "74bc02c4bbbd26245c37b29b9e12d0a9c1b7ab93477fed8b651c988b6a9a6251",
- "s390x-unknown-linux-gnu": "ecd6b0285e5eef94deb784b588b4b425a15a43ae671bf206556659dc141a9825",
- "x86_64-apple-darwin": "a53a6670a202c96fec0b8c55ccc780ea3af5307eb89268d5b41a9775b109c094",
- "x86_64-pc-windows-msvc": "1e5655a6ccb1a64a78460e4e3ee21036c70246800f176a6c91043a3fe3654a3b",
- "x86_64-unknown-linux-gnu": "57a37b57f8243caa4cdac016176189573ad7620f0b6da5941c5e40660f9468ab",
- },
- "strip_prefix": "python",
- },
- "3.12.3": {
- "url": "20240415/cpython-{python_version}+20240415-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "ccc40e5af329ef2af81350db2a88bbd6c17b56676e82d62048c15d548401519e",
- "aarch64-unknown-linux-gnu": "ec8126de97945e629cca9aedc80a29c4ae2992c9d69f2655e27ae73906ba187d",
- "ppc64le-unknown-linux-gnu": "c5dcf08b8077e617d949bda23027c49712f583120b3ed744f9b143da1d580572",
- "s390x-unknown-linux-gnu": "872fc321363b8cdd826fd2cb1adfd1ceb813bc1281f9d410c1c2c4e177e8df86",
- "x86_64-apple-darwin": "c37a22fca8f57d4471e3708de6d13097668c5f160067f264bb2b18f524c890c8",
- "x86_64-pc-windows-msvc": "f7cfa4ad072feb4578c8afca5ba9a54ad591d665a441dd0d63aa366edbe19279",
- "x86_64-unknown-linux-gnu": "a73ba777b5d55ca89edef709e6b8521e3f3d4289581f174c8699adfb608d09d6",
- },
- "strip_prefix": "python",
- },
- "3.12.4": {
- "url": "20240726/cpython-{python_version}+20240726-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "1801025e825c04b3907e4ef6220a13607bc0397628c9485897073110ef7fde15",
- "aarch64-unknown-linux-gnu": "a098b18b7e9fea0c66867b76c0124fce9465765017572b2e7b522154c87c78d7",
- "ppc64le-unknown-linux-gnu": "04011c4c5b7fe34b0b895edf4ad8748e410686c1d69aaee11d6688d481023bcb",
- "s390x-unknown-linux-gnu": "8f8f3e29cf0c2facdbcfee70660939fda7667ac24fee8656d3388fc72f3acc7c",
- "x86_64-apple-darwin": "4c325838c1b0ed13698506fcd515be25c73dcbe195f8522cf98f9148a97601ed",
- "x86_64-pc-windows-msvc": "74309b0f322716409883d38c621743ea7fa0376eb00927b8ee1e1671d3aff450",
- "x86_64-unknown-linux-gnu": "e133dd6fc6a2d0033e2658637cc22e9c95f9d7073b80115037ee1f16417a54ac",
- },
- "strip_prefix": "python",
- },
- "3.12.7": {
- "url": "20241016/cpython-{python_version}+20241016-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "4c18852bf9c1a11b56f21bcf0df1946f7e98ee43e9e4c0c5374b2b3765cf9508",
- "aarch64-unknown-linux-gnu": "bba3c6be6153f715f2941da34f3a6a69c2d0035c9c5396bc5bb68c6d2bd1065a",
- "ppc64le-unknown-linux-gnu": "0a1d1d92e33a969bd2f40a80af53c97b6c0cc1060d384ceff50ff801593bf9d6",
- "s390x-unknown-linux-gnu": "935676a0c960b552f95e9ac2e1e385de5de4b34038ff65ffdc688838f1189c17",
- "x86_64-apple-darwin": "60c5271e7edc3c2ab47440b7abf4ed50fbc693880b474f74f05768f5b657045a",
- "x86_64-pc-windows-msvc": "f05531bff16fa77b53be0776587b97b466070e768e6d5920894de988bdcd547a",
- "x86_64-unknown-linux-gnu": "43576f7db1033dd57b900307f09c2e86f371152ac8a2607133afa51cbfc36064",
- "x86_64-unknown-linux-musl": "5ed4a4078db3cbac563af66403aaa156cd6e48831d90382a1820db2b120627b5",
- },
- "strip_prefix": "python",
- },
- "3.12.8": {
- "url": "20241206/cpython-{python_version}+20241206-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "e3c4aa607717b23903ca2650d5c3ee24f89b97543e2db2b0f463bddc7a9e92f3",
- "aarch64-unknown-linux-gnu": "ce674b55442b732973afb2932c281bb1ded4ad7e22bcf9b07071165770758c7e",
- "ppc64le-unknown-linux-gnu": "b7214790b273de9ed0532420054b72ba1393d62d2fc844ec55ade193771bd90c",
- "s390x-unknown-linux-gnu": "73102f5dbd7d1e7e9c2f2c80aedf2893d99a7fa407f6674ec8b2f57ba07daee5",
- "x86_64-apple-darwin": "3ba35c706577d755e8e52a4c161a042464577c0e695e2a605362fa469e26de10",
- "x86_64-pc-windows-msvc": "767b4be3ddf6b99e5ade519789c1615c191d8cf99d5aff4685cc18b48931f1e6",
- "x86_64-unknown-linux-gnu": "b9d6ee5ddac1198e72d53112698773fc8bb597de095592eb849ca794306699ba",
- "x86_64-unknown-linux-musl": "6f305888703691dd04cfff85284d23ea0b0146ed7c4415e472f1fb72b3f32cdf",
- },
- "strip_prefix": "python",
- },
- "3.12.9": {
- "url": "20250317/cpython-{python_version}+20250317-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "7c7fd9809da0382a601a79287b5d62d61ce0b15f5a5ee836233727a516e85381",
- "aarch64-unknown-linux-gnu": "00c6bf9acef21ac741fea24dc449d0149834d30e9113429e50a95cce4b00bb80",
- "ppc64le-unknown-linux-gnu": "25d77599dfd5849f17391d92da0da99079e4e94f19a881f763f5cc62530ef7e1",
- "riscv64-unknown-linux-gnu": "e97ab0fdf443b302c56a52b4fd08f513bf3be66aa47263f0f9df3c6e60e05f2e",
- "s390x-unknown-linux-gnu": "7492d079ffa8425c8f6c58e43b237c37e3fb7b31e2e14635927bb4d3397ba21e",
- "x86_64-apple-darwin": "1ee1b1bb9fbce5c145c4bec9a3c98d7a4fa22543e09a7c1d932bc8599283c2dc",
- "x86_64-pc-windows-msvc": "d15361fd202dd74ae9c3eece1abdab7655f1eba90bf6255cad1d7c53d463ed4d",
- "x86_64-unknown-linux-gnu": "ef382fb88cbb41a3b0801690bd716b8a1aec07a6c6471010bcc6bd14cd575226",
- "x86_64-unknown-linux-musl": "94e3837da1adf9964aab2d6047b33f70167de3096d1f9a2d1fa9340b1bbf537d",
- },
- "strip_prefix": "python",
- },
- "3.12.11": {
- "url": "20250808/cpython-{python_version}+20250808-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "8792c4a84c364ab975feca0c27d3157a5435b7baab325a346ae56b223893b661",
- "aarch64-unknown-linux-gnu": "4d7ba5314fab02130d6538f074961ffbf61310cade9180e59026074f9a8939cb",
- "aarch64-pc-windows-msvc": "00bf7d7e8bcf5d1e9c4dfca0247d8e035147777cd57ee9d4c64dedca86b0a464",
- "ppc64le-unknown-linux-gnu": "2c862eb40a81549d9c11e6bf5a7f07c3406310b14e6a4d16dcdf1c4763ef7090",
- "riscv64-unknown-linux-gnu": "0bb729b95fabd49c7b495f7c44a9086e3970ea57daf66365741574bd36a17e81",
- "s390x-unknown-linux-gnu": "99e465882d217d24ac90e99fac8f32e6a644d0340ac05ee510fb5cdf53f0cfb8",
- "x86_64-apple-darwin": "e0c932709dafb05f00e528a7560ef8ee559ac82b75faca60dd1245bca1c1553f",
- "x86_64-pc-windows-msvc": "81214ef71964a40ec269a79067ca490d45298c350583bc3af0e5781451a05c3c",
- "x86_64-unknown-linux-gnu": "63d78840bf209af8da8f24e335d910f88387b892ca9187be571d481c071751bb",
- "x86_64-unknown-linux-musl": "d633d070780590aa03ac5575cd9d7b9e17682d80f14b400313c009c387cf706b",
- },
- "strip_prefix": "python",
- },
- "3.12.12": {
- "url": "20251031/cpython-{python_version}+20251031-{platform}-{build}.tar.gz",
- "sha256": {
- "aarch64-apple-darwin": "5e110cb821d2eb8246065d3b46faa655180c976c4e17250f7883c634a629bc63",
- "aarch64-unknown-linux-gnu": "81b644d166e0bfb918615af8a2363f8fcf26eccdcc60a5334b6a62c088470bac",
- "aarch64-pc-windows-msvc": "b190fed7c2b0f6e1010f554a0d1fd191c0754c4c0718e69d9d795ae559613780",
- "ppc64le-unknown-linux-gnu": "024f5e5678c9768d45cc24d37a8e9d265aae86c4a4602352dee3d7deba367052",
- "riscv64-unknown-linux-gnu": "b13c57fc372c131e667a99b9680f41c0b4da571cf99ed412103c2fe9ad5ed1fb",
- "s390x-unknown-linux-gnu": "2bf05bdd56cdf5ea4fd9f2faf151ea4211be96a0d1f4230b85f5dcae620d6400",
- "x86_64-apple-darwin": "687052a046d33be49dc95dd671816709067cf6176ed36c93ea61b1fe0b883b0f",
- "x86_64-pc-windows-msvc": "cff398b3f520c442a1b085dd347126c10c1b03f01ccc0decd8c897a687e893f1",
- "x86_64-unknown-linux-gnu": "80c3882f14e15cef8260ef5257d198e8f4371ca265887431d939e0d561de3253",
- "x86_64-unknown-linux-musl": "0a461330b9b89f2ea3088dde10d7a3f96aa65897b7c5ce2404fa3b5c4b8daa14",
- },
- "strip_prefix": "python",
- },
- "3.12.13": {
- "url": "20260414/cpython-{python_version}+20260414-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "8966b2bcd9fa03ba22c080ad15a86bc12e41a00122b16f4b3740e302261124d9",
- "aarch64-unknown-linux-gnu": "355d981eafb9b2870af79ddc106ced7266b6f6d2101d8fbcb05620fa386642b9",
- "ppc64le-unknown-linux-gnu": "4aef4cffe73c4a65ea486f14d684a9ad3f831a354174d163bb531b5baa70fc49",
- "riscv64-unknown-linux-gnu": "c2629d69324155132343913f064be93509bd162531e08a292e50c3973ec8b5db",
- "s390x-unknown-linux-gnu": "e5baafd64180f45165d2751b25d1bcc89254eefc7926f3ab341fc61b541d7606",
- "x86_64-apple-darwin": "801b03fbe004181d55a02ebd8b4e04d74973e70d716062aebe3b3cf32e9be297",
- "x86_64-pc-windows-msvc": "c5a9e011e284c49c48106ca177342f3e3f64e95b4c6652d4a382cc7c9bb1cc46",
- "aarch64-pc-windows-msvc": "f55326c894fde76fc0faffe95d2bce60be533c88a8c44c1b88bbbc17bf6a5cd5",
- "x86_64-unknown-linux-gnu": "cdcf8724d46e4857f8db5ee9f4252dc2f5da34f7940294ec6b312389dd3f41e0",
- "x86_64-unknown-linux-musl": "d10e971238c130fdf25e577c6538a3effa5589d5fcf53665e3c711edd6a6ff2f",
- },
- "strip_prefix": "python",
- },
- "3.13.0": {
- "url": "20241016/cpython-{python_version}+20241016-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "31397953849d275aa2506580f3fa1cb5a85b6a3d392e495f8030e8b6412f5556",
- "aarch64-unknown-linux-gnu": "e8378c0162b2e0e4cc1f62b29443a3305d116d09583304dbb0149fecaff6347b",
- "ppc64le-unknown-linux-gnu": "fc4b7f27c4e84c78f3c8e6c7f8e4023e4638d11f1b36b6b5ce457b1926cebb53",
- "s390x-unknown-linux-gnu": "66b19e6a07717f6cfcd3a8ca953f0a2eaa232291142f3d26a8d17c979ec0f467",
- "x86_64-apple-darwin": "cff1b7e7cd26f2d47acac1ad6590e27d29829776f77e8afa067e9419f2f6ce77",
- "x86_64-pc-windows-msvc": "b25926e8ce4164cf103bacc4f4d154894ea53e07dd3fdd5ebb16fb1a82a7b1a0",
- "x86_64-unknown-linux-gnu": "2c8cb15c6a2caadaa98af51df6fe78a8155b8471cb3dd7b9836038e0d3657fb4",
- "x86_64-unknown-linux-musl": "2f61ee3b628a56aceea63b46c7afe2df3e22a61da706606b0c8efda57f953cf4",
- "aarch64-apple-darwin-freethreaded": "efc2e71c0e05bc5bedb7a846e05f28dd26491b1744ded35ed82f8b49ccfa684b",
- "aarch64-unknown-linux-gnu-freethreaded": "59b50df9826475d24bb7eff781fa3949112b5e9c92adb29e96a09cdf1216d5bd",
- "ppc64le-unknown-linux-gnu-freethreaded": "1217efa5f4ce67fcc9f7eb64165b1bd0912b2a21bc25c1a7e2cb174a21a5df7e",
- "s390x-unknown-linux-gnu-freethreaded": "6c3e1e4f19d2b018b65a7e3ef4cd4225c5b9adfbc490218628466e636d5c4b8c",
- "x86_64-apple-darwin-freethreaded": "2e07dfea62fe2215738551a179c87dbed1cc79d1b3654f4d7559889a6d5ce4eb",
- "x86_64-pc-windows-msvc-freethreaded": "bfd89f9acf866463bc4baf01733da5e767d13f5d0112175a4f57ba91f1541310",
- "x86_64-unknown-linux-gnu-freethreaded": "a73adeda301ad843cce05f31a2d3e76222b656984535a7b87696a24a098b216c",
- },
- "strip_prefix": {
- "aarch64-apple-darwin": "python",
- "aarch64-unknown-linux-gnu": "python",
- "ppc64le-unknown-linux-gnu": "python",
- "s390x-unknown-linux-gnu": "python",
- "x86_64-apple-darwin": "python",
- "x86_64-pc-windows-msvc": "python",
- "x86_64-unknown-linux-gnu": "python",
- "x86_64-unknown-linux-musl": "python",
- "aarch64-apple-darwin-freethreaded": "python/install",
- "aarch64-unknown-linux-gnu-freethreaded": "python/install",
- "ppc64le-unknown-linux-gnu-freethreaded": "python/install",
- "s390x-unknown-linux-gnu-freethreaded": "python/install",
- "x86_64-apple-darwin-freethreaded": "python/install",
- "x86_64-pc-windows-msvc-freethreaded": "python/install",
- "x86_64-unknown-linux-gnu-freethreaded": "python/install",
- },
- },
- "3.13.1": {
- "url": "20241205/cpython-{python_version}+20241205-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "88b88b609129c12f4b3841845aca13230f61e97ba97bd0fb28ee64b0e442a34f",
- "aarch64-unknown-linux-gnu": "fdfa86c2746d2ae700042c461846e6c37f70c249925b58de8cd02eb8d1423d4e",
- "ppc64le-unknown-linux-gnu": "27b20b3237c55430ca1304e687d021f88373f906249f9cd272c5ff2803d5e5c3",
- "s390x-unknown-linux-gnu": "7d0187e20cb5e36c689eec27e4d3de56d8b7f1c50dc5523550fc47377801521f",
- "x86_64-apple-darwin": "47eef6efb8664e2d1d23a7cdaf56262d784f8ace48f3bfca1b183e95a49888d6",
- "x86_64-pc-windows-msvc": "f51f0493a5f979ff0b8d8c598a8d74f2a4d86a190c2729c85e0af65c36a9cbbe",
- "x86_64-unknown-linux-gnu": "242b2727df6c1e00de6a9f0f0dcb4562e168d27f428c785b0eb41a6aeb34d69a",
- "x86_64-unknown-linux-musl": "76b30c6373b9c0aa2ba610e07da02f384aa210ac79643da38c66d3e6171c6ef5",
- "aarch64-apple-darwin-freethreaded": "08f05618bdcf8064a7960b25d9ba92155447c9b08e0cf2f46a981e4c6a1bb5a5",
- "aarch64-unknown-linux-gnu-freethreaded": "9f2fcb809f9ba6c7c014a8803073a88786701a98971135bce684355062e4bb35",
- "ppc64le-unknown-linux-gnu-freethreaded": "15ceea78dff78ca8ccaac8d9c54b808af30daaa126f1f561e920a6896e098634",
- "s390x-unknown-linux-gnu-freethreaded": "ed3c6118d1d12603309c930e93421ac7a30a69045ffd43006f63ecf71d72c317",
- "x86_64-apple-darwin-freethreaded": "dc780fecd215d2cc9e573abf1e13a175fcfa8f6efd100ef888494a248a16cda8",
- "x86_64-pc-windows-msvc-freethreaded": "7537b2ab361c0eabc0eabfca9ffd9862d7f5f6576eda13b97e98aceb5eea4fd3",
- "x86_64-unknown-linux-gnu-freethreaded": "9ec1b81213f849d91f5ebe6a16196e85cd6ff7c05ca823ce0ab7ba5b0e9fee84",
- },
- "strip_prefix": {
- "aarch64-apple-darwin": "python",
- "aarch64-unknown-linux-gnu": "python",
- "ppc64le-unknown-linux-gnu": "python",
- "s390x-unknown-linux-gnu": "python",
- "x86_64-apple-darwin": "python",
- "x86_64-pc-windows-msvc": "python",
- "x86_64-unknown-linux-gnu": "python",
- "x86_64-unknown-linux-musl": "python",
- "aarch64-apple-darwin-freethreaded": "python/install",
- "aarch64-unknown-linux-gnu-freethreaded": "python/install",
- "ppc64le-unknown-linux-gnu-freethreaded": "python/install",
- "s390x-unknown-linux-gnu-freethreaded": "python/install",
- "x86_64-apple-darwin-freethreaded": "python/install",
- "x86_64-pc-windows-msvc-freethreaded": "python/install",
- "x86_64-unknown-linux-gnu-freethreaded": "python/install",
- },
- },
- "3.13.2": {
- "url": "20250317/cpython-{python_version}+20250317-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "faa44274a331eb39786362818b21b3a4e74514e8805000b20b0e55c590cecb94",
- "aarch64-unknown-linux-gnu": "9c67260446fee6ea706dad577a0b32936c63f449c25d66e4383d5846b2ab2e36",
- "ppc64le-unknown-linux-gnu": "345b53d2f86c9dbd7f1320657cb227ff9a42ef63ff21f129abbbc8c82a375147",
- "riscv64-unknown-linux-gnu": "172d22b2330737f3a028ea538ffe497c39a066a8d3200b22dd4d177a3332ad85",
- "s390x-unknown-linux-gnu": "ec3b16ea8a97e3138acec72bc5ff35949950c62c8994a8ec8e213fd93f0e806b",
- "x86_64-apple-darwin": "ee4526e84b5ce5b11141c50060b385320f2773616249a741f90c96d460ce8e8f",
- "x86_64-pc-windows-msvc": "84d7b52f3558c8e35c670a4fa14080c75e3ec584adfae49fec8b51008b75b21e",
- "x86_64-unknown-linux-gnu": "db011f0cd29cab2291584958f4e2eb001b0e6051848d89b38a2dc23c5c54e512",
- "x86_64-unknown-linux-musl": "00bb2d629f7eacbb5c6b44dc04af26d1f1da64cee3425b0d8eb5135a93830296",
- "aarch64-apple-darwin-freethreaded": "c98c9c977e6fa05c3813bd49f3553904d89d60fed27e2e36468da7afa1d6d5e2",
- "aarch64-unknown-linux-gnu-freethreaded": "b8635e59e3143fd17f19a3dfe8ccc246ee6587c87da359bd1bcab35eefbb5f19",
- "ppc64le-unknown-linux-gnu-freethreaded": "6ae8fa44cb2edf4ab49cff1820b53c40c10349c0f39e11b8cd76ce7f3e7e1def",
- "riscv64-unknown-linux-gnu-freethreaded": "2af1b8850c52801fb6189e7a17a51e0c93d9e46ddefcca72247b76329c97d02a",
- "s390x-unknown-linux-gnu-freethreaded": "c074144cc80c2af32c420b79a9df26e8db405212619990c1fbdd308bd75afe3f",
- "x86_64-apple-darwin-freethreaded": "0d73e4348d8d4b5159058609d2303705190405b485dd09ad05d870d7e0f36e0f",
- "x86_64-pc-windows-msvc-freethreaded": "c51b4845fda5421e044067c111192f645234081d704313f74ee77fa013a186ea",
- "x86_64-unknown-linux-gnu-freethreaded": "1aea5062614c036904b55c1cc2fb4b500b7f6f7a4cacc263f4888889d355eef8",
- },
- "strip_prefix": {
- "aarch64-apple-darwin": "python",
- "aarch64-unknown-linux-gnu": "python",
- "ppc64le-unknown-linux-gnu": "python",
- "s390x-unknown-linux-gnu": "python",
- "riscv64-unknown-linux-gnu": "python",
- "x86_64-apple-darwin": "python",
- "x86_64-pc-windows-msvc": "python",
- "x86_64-unknown-linux-gnu": "python",
- "x86_64-unknown-linux-musl": "python",
- "aarch64-apple-darwin-freethreaded": "python/install",
- "aarch64-unknown-linux-gnu-freethreaded": "python/install",
- "ppc64le-unknown-linux-gnu-freethreaded": "python/install",
- "riscv64-unknown-linux-gnu-freethreaded": "python/install",
- "s390x-unknown-linux-gnu-freethreaded": "python/install",
- "x86_64-apple-darwin-freethreaded": "python/install",
- "x86_64-pc-windows-msvc-freethreaded": "python/install",
- "x86_64-unknown-linux-gnu-freethreaded": "python/install",
- },
- },
- "3.13.4": {
- "url": "20250610/cpython-{python_version}+20250610-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "c2ce6601b2668c7bd1f799986af5ddfbff36e88795741864aba6e578cb02ed7f",
- "aarch64-unknown-linux-gnu": "3c2596ece08ffe17e11bc1f27aeb4ce1195d2490a83d695d36ef4933d5c5ca53",
- "ppc64le-unknown-linux-gnu": "b3cc13ee177b8db1d3e9b2eac413484e3c6a356f97d91dc59de8d3fd8cf79d6b",
- "riscv64-unknown-linux-gnu": "d1b989e57a9ce29f6c945eeffe0e9750c222fdd09e99d2f8d6b0d8532a523053",
- "s390x-unknown-linux-gnu": "d1d19fb01961ac6476712fdd6c5031f74c83666f6f11aa066207e9a158f7e3d8",
- "x86_64-apple-darwin": "79feb6ca68f3921d07af52d9db06cf134e6f36916941ea850ab0bc20f5ff638b",
- "x86_64-pc-windows-msvc": "29ac3585cc2dcfd79e3fe380c272d00e9d34351fc456e149403c86d3fea34057",
- "x86_64-unknown-linux-gnu": "44e5477333ebca298a7a0a316985c6c3533b8645f92a83f7f73c44033832bf32",
- "x86_64-unknown-linux-musl": "a3afbfa94b9ff4d9fc426b47eb3c8446cada535075b8d51b7bdc9d9ab9911fc2",
- "aarch64-apple-darwin-freethreaded": "278dccade56b4bbeecb9a613b77012cf5c1433a5e9b8ef99230d5e61f31d9e02",
- "aarch64-unknown-linux-gnu-freethreaded": "b1c1bd6ab9ef95b464d92a6a911cef1a8d9f0b0f6a192f694ef18ed15d882edf",
- "ppc64le-unknown-linux-gnu-freethreaded": "ed66ae213a62b286b9b7338b816ccd2815f5248b7a28a185dc8159fe004149ae",
- "riscv64-unknown-linux-gnu-freethreaded": "913264545215236660e4178bc3e5b57a20a444a8deb5c11680c95afc960b4016",
- "s390x-unknown-linux-gnu-freethreaded": "7556a38ab5e507c1ec22bc38f9859982bc956cab7f4de05a2faac114feb306db",
- "x86_64-apple-darwin-freethreaded": "64ab7ac8c88002d9ba20a92f72945bfa350268e944a7922500af75d20330574d",
- "x86_64-pc-windows-msvc-freethreaded": "9457504547edb2e0156bf76b53c7e4941c7f61c0eff9fd5f4d816d3df51c58e3",
- "x86_64-unknown-linux-gnu-freethreaded": "864df6e6819e8f8e855ce30f34410fdc5867d0616e904daeb9a40e5806e970d7",
- },
- "strip_prefix": {
- "aarch64-apple-darwin": "python",
- "aarch64-unknown-linux-gnu": "python",
- "ppc64le-unknown-linux-gnu": "python",
- "s390x-unknown-linux-gnu": "python",
- "riscv64-unknown-linux-gnu": "python",
- "x86_64-apple-darwin": "python",
- "x86_64-pc-windows-msvc": "python",
- "x86_64-unknown-linux-gnu": "python",
- "x86_64-unknown-linux-musl": "python",
- "aarch64-apple-darwin-freethreaded": "python/install",
- "aarch64-unknown-linux-gnu-freethreaded": "python/install",
- "ppc64le-unknown-linux-gnu-freethreaded": "python/install",
- "riscv64-unknown-linux-gnu-freethreaded": "python/install",
- "s390x-unknown-linux-gnu-freethreaded": "python/install",
- "x86_64-apple-darwin-freethreaded": "python/install",
- "x86_64-pc-windows-msvc-freethreaded": "python/install",
- "x86_64-unknown-linux-gnu-freethreaded": "python/install",
- },
- },
- "3.13.6": {
- "url": "20250808/cpython-{python_version}+20250808-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "8a1efa6af4e80f08e2c97dda822a3d6c24d6c98e518242f802c6a43ae8401488",
- "aarch64-unknown-linux-gnu": "11fa0591ae2211c08a42ae54944260e36ddf88a1d5604ea0c49e2477be4e5388",
- "ppc64le-unknown-linux-gnu": "8dcf34ae1a685fe1893b52917ae04f23328edadc4acae28499d43850c2bdd26c",
- "riscv64-unknown-linux-gnu": "f8ed75aa6cc2011a046be00b629c3c8295267f34280324feaff34c73e7afce39",
- "s390x-unknown-linux-gnu": "7707ee5d19a78bc64ef8a66751ec7f97b64ea06714c7b1b52e8b321c2923ead8",
- "x86_64-apple-darwin": "27badce7201321a8363219e438a6205165e5b4884012b1046532203df2ec9379",
- "x86_64-pc-windows-msvc": "af5cc733c33b9aa9f1d74c81a59351e9b27215486d8b6cdbc06d97646a58c953",
- "aarch64-pc-windows-msvc": "8e1617bd407ec1a874499daab26ae95080d1e0267ae616d34490137a28705827",
- "aarch64-pc-windows-msvc-freethreaded": "552cfabcc3b103f4b1c4036d2592d5f0373c9554a2c4d2b6631b04ef7e592067",
- "x86_64-unknown-linux-gnu": "f844e8c8b6847628b472f7e97d8893a4e93acd5382a902b465776063668c4d64",
- "x86_64-unknown-linux-musl": "70076dea0ff65b3c05aae1a97b4a556bf613cc73db30309e59134f9d318f4f7b",
- "aarch64-apple-darwin-freethreaded": "f2143304012e021a603bf1807bf3e4ce163832e43ab9a9829e53cb136497f207",
- "aarch64-unknown-linux-gnu-freethreaded": "d84a7d64c284be387386b9f5da273f6d05486eb6bd8f9e86e2575cb59604cb22",
- "ppc64le-unknown-linux-gnu-freethreaded": "e76fcaf1bf80a615520dbe7f85ca0bb557fad96d132d836b0ac721e7cc1e2a37",
- "riscv64-unknown-linux-gnu-freethreaded": "24e08a39ba4fc77753e61541e52eed39cc871f4a92a80a3c5dd495056bd8eff9",
- "s390x-unknown-linux-gnu-freethreaded": "1609b223fd38a4a7a4d20e7173d7d9390fe2258f7dd9a15dc9ef0fa49613735d",
- "x86_64-apple-darwin-freethreaded": "4360a1278dd0a96b526d108c8fd23498a9d2028dd7791e510fd51ff5ea3f462a",
- "x86_64-pc-windows-msvc-freethreaded": "4e727cdbe4057b16a170f887c0fa4227a825ac59bcda84ae946c77cc932af78c",
- "x86_64-unknown-linux-gnu-freethreaded": "e48c13c59cc3c01b79f63c8bccec27d2db6e97f64213b8731e2077b6ed8ed52c",
- },
- "strip_prefix": {
- "aarch64-apple-darwin": "python",
- "aarch64-unknown-linux-gnu": "python",
- "ppc64le-unknown-linux-gnu": "python",
- "s390x-unknown-linux-gnu": "python",
- "riscv64-unknown-linux-gnu": "python",
- "x86_64-apple-darwin": "python",
- "x86_64-pc-windows-msvc": "python",
- "aarch64-pc-windows-msvc": "python",
- "x86_64-unknown-linux-gnu": "python",
- "x86_64-unknown-linux-musl": "python",
- "aarch64-apple-darwin-freethreaded": "python/install",
- "aarch64-unknown-linux-gnu-freethreaded": "python/install",
- "ppc64le-unknown-linux-gnu-freethreaded": "python/install",
- "riscv64-unknown-linux-gnu-freethreaded": "python/install",
- "s390x-unknown-linux-gnu-freethreaded": "python/install",
- "x86_64-apple-darwin-freethreaded": "python/install",
- "x86_64-pc-windows-msvc-freethreaded": "python/install",
- "aarch64-pc-windows-msvc-freethreaded": "python/install",
- "x86_64-unknown-linux-gnu-freethreaded": "python/install",
- },
- },
- "3.13.9": {
- "url": "20251031/cpython-{python_version}+20251031-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "1f3568d17383426d52350c2ef7c93c1a5a043198b860cb05e5d19b35f9c25cef",
- "aarch64-unknown-linux-gnu": "0a56d11b0fb1662e67f892b9d5d1717aef06f24dbb8362bc25b8f784e620d44e",
- "ppc64le-unknown-linux-gnu": "99492123902bd5e9a6b1a30135061e93a2e6a11d25107a741d5a756e91054448",
- "riscv64-unknown-linux-gnu": "b3dce3e4ef508773521e1ee1be989fff6118f8fd1fbbd0491d7ff7dfbc98ef06",
- "s390x-unknown-linux-gnu": "f10e34aaa856c1b8a69c2ea4a9a6723d520443d1a957bf66dc55491334ca0c1e",
- "x86_64-apple-darwin": "48c0f3ca5d31e90658ef99138dc21865bb62f388ab97a1ce72cac176da194ab0",
- "x86_64-pc-windows-msvc": "874593f641f31ea101440c70f81768c35d4d7d6df111fde63094db67465ef787",
- "aarch64-pc-windows-msvc": "20db43873d3c4c2175d866806545e4ad4ec6bb72ca95e60082a4df6c24567e8c",
- "aarch64-pc-windows-msvc-freethreaded": "743ff69935ef28834621647dab30f032dfcd80315732917531eea333210941c7",
- "x86_64-unknown-linux-gnu": "6f05b91ee8c7e6dd0f9c60b95bb29130e2d623961de6578b643e80ddd83f96b6",
- "x86_64-unknown-linux-musl": "ad987197034185e628715da504a50613af213dc21ba6d5ccaeab3db2c464aa6c",
- "aarch64-apple-darwin-freethreaded": "eae1272a72ccce601590a10a9ca2a58199b5fcdf022aa603a527e3e2a04de9bc",
- "aarch64-unknown-linux-gnu-freethreaded": "a6e72f9de5d9b46cf6968d6a492f2401a919f9b959f8da2d87f43484b80169ee",
- "ppc64le-unknown-linux-gnu-freethreaded": "0ed5c65437f875c58ba1bee2b8d261d18698d3d0347a2e66f8902fce022a2cda",
- "riscv64-unknown-linux-gnu-freethreaded": "584e481d9b5225ffaf02f158fb26d2818207e65fc3c6dc21a6d500277f739220",
- "s390x-unknown-linux-gnu-freethreaded": "7fa7fb912ca989ceac026a332d56a2c7d6d16ab0e94d89e690de5aade26103e2",
- "x86_64-apple-darwin-freethreaded": "e2bf5fa6a3ef443ade362e08b0a19bbc172f7bfe34dabe933ccaad31d53af5da",
- "x86_64-pc-windows-msvc-freethreaded": "318a9a1e43dd52054327de3bccc0c5b7afde7b7f2a398ccb4d38e03d28b05386",
- "x86_64-unknown-linux-gnu-freethreaded": "dcc29b069d0588fbd4ea29c6df840c8d1207d2a3bce8cd5cd57d1b85373b6048",
- },
- "strip_prefix": {
- "aarch64-apple-darwin": "python",
- "aarch64-unknown-linux-gnu": "python",
- "ppc64le-unknown-linux-gnu": "python",
- "s390x-unknown-linux-gnu": "python",
- "riscv64-unknown-linux-gnu": "python",
- "x86_64-apple-darwin": "python",
- "x86_64-pc-windows-msvc": "python",
- "aarch64-pc-windows-msvc": "python",
- "x86_64-unknown-linux-gnu": "python",
- "x86_64-unknown-linux-musl": "python",
- "aarch64-apple-darwin-freethreaded": "python/install",
- "aarch64-unknown-linux-gnu-freethreaded": "python/install",
- "ppc64le-unknown-linux-gnu-freethreaded": "python/install",
- "riscv64-unknown-linux-gnu-freethreaded": "python/install",
- "s390x-unknown-linux-gnu-freethreaded": "python/install",
- "x86_64-apple-darwin-freethreaded": "python/install",
- "x86_64-pc-windows-msvc-freethreaded": "python/install",
- "aarch64-pc-windows-msvc-freethreaded": "python/install",
- "x86_64-unknown-linux-gnu-freethreaded": "python/install",
- },
- },
- "3.13.10": {
- "url": "20251202/cpython-{python_version}+20251202-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "37afe4e77ab62ac50f197b1cb1f3bc02c82735c6be893da0996afcde5dc41048",
- "aarch64-unknown-linux-gnu": "c68280591cda1c9515a04809fa6926020177e8e5892300206e0496ea1d10290e",
- "ppc64le-unknown-linux-gnu": "1507e5528bd88131dc742a2941176aceea1838bc09860c21f179285b7865133b",
- "riscv64-unknown-linux-gnu": "70169e916860b2e5b34c37c302d699eb2b8f24f28090968881942a37aeb7ed08",
- "s390x-unknown-linux-gnu": "c5448863b64aacae62f3a213a6e6cf94ec63f96ee4d518491cd62fd3c81d952f",
- "x86_64-apple-darwin": "a02761a4f189f71c0512e88df7ca2843696d61da659e47f8a5c8a9bd2c0d16f4",
- "x86_64-pc-windows-msvc": "8b00014c7c35f9ad4cb1c565f067500bacc4125c8bc30e4389ee0be9fd6ffa3d",
- "aarch64-pc-windows-msvc": "9060d644bd32ac0e0af970d0b21e207e6ff416b7c4dc26ffc4f9b043fb45b463",
- "aarch64-pc-windows-msvc-freethreaded": "cdb7141327bdc244715b25752593e2c9eeb3cc2764f37dfe81cfbc92db9d6d57",
- "x86_64-unknown-linux-gnu": "0cac1495fff920219904b1d573aaec0df54d549c226cb45f5c60cb6d2c72727a",
- "x86_64-unknown-linux-musl": "04108190972ac98e13098abd972ec3f4f8b0880f83c0bb68249ce1a6164fa041",
- "aarch64-apple-darwin-freethreaded": "3c9fdd76447c1549a0d3bc2a70c63f1daec997ab034206ac0260a03237166dbb",
- "aarch64-unknown-linux-gnu-freethreaded": "6d277221fa4b172e00b29c7158ca9661917bc8db9a0084b1a0ff5c3a0ba8b648",
- "ppc64le-unknown-linux-gnu-freethreaded": "d265d8d1c51e25ed70279540223589f79cf99ad00b50d28b6150c2658c973885",
- "riscv64-unknown-linux-gnu-freethreaded": "ec411b4a2d167c3be0a9aeb3905e045d62c8e3c3db0caeade5d47d5f60b98dd0",
- "s390x-unknown-linux-gnu-freethreaded": "4fc6443948bf5b729481ea02cc5c68e80cd0da42631f6936587a2b8fd45bc62c",
- "x86_64-apple-darwin-freethreaded": "6ce608684df0f90350c7a1742e9685a7782d9b26ec99d1bd9d55c8cf9a405040",
- "x86_64-pc-windows-msvc-freethreaded": "6a8b0372ded655e0d55318089fbce3122a446e69bcd120c79aaadfe9b017299c",
- "x86_64-unknown-linux-gnu-freethreaded": "e39127fbe8d2ae7d86099f18b4da0918f9b60ce73ed491774d6dcfaa42b5c9ae",
- },
- "strip_prefix": {
- "aarch64-apple-darwin": "python",
- "aarch64-unknown-linux-gnu": "python",
- "ppc64le-unknown-linux-gnu": "python",
- "s390x-unknown-linux-gnu": "python",
- "riscv64-unknown-linux-gnu": "python",
- "x86_64-apple-darwin": "python",
- "x86_64-pc-windows-msvc": "python",
- "aarch64-pc-windows-msvc": "python",
- "x86_64-unknown-linux-gnu": "python",
- "x86_64-unknown-linux-musl": "python",
- "aarch64-apple-darwin-freethreaded": "python/install",
- "aarch64-unknown-linux-gnu-freethreaded": "python/install",
- "ppc64le-unknown-linux-gnu-freethreaded": "python/install",
- "riscv64-unknown-linux-gnu-freethreaded": "python/install",
- "s390x-unknown-linux-gnu-freethreaded": "python/install",
- "x86_64-apple-darwin-freethreaded": "python/install",
- "x86_64-pc-windows-msvc-freethreaded": "python/install",
- "aarch64-pc-windows-msvc-freethreaded": "python/install",
- "x86_64-unknown-linux-gnu-freethreaded": "python/install",
- },
- },
- "3.13.11": {
- "url": "20251209/cpython-{python_version}+20251209-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "295a9f7bc899ea1cc08baf60bbf511bdd1e4a29b2dd7e5f59b48f18bfa6bf585",
- "aarch64-unknown-linux-gnu": "ea1e678e6e82301bb32bf3917732125949b6e46d541504465972024a3f165343",
- "ppc64le-unknown-linux-gnu": "7660e53aad9d35ee256913c6d98427f81f078699962035c5fa8b5c3138695109",
- "riscv64-unknown-linux-gnu": "763fa1548e6a432e9402916e690c74ea30f26dcd2e131893dd506f72b87c27c9",
- "s390x-unknown-linux-gnu": "ffb6af51fbfabfc6fbc4e7379bdec70c2f51e972b1d2f45c053493b9da3a1bbe",
- "x86_64-apple-darwin": "dac4a0a0a9b71f6b02a8b0886547fa22814474239bffb948e3e77185406ea136",
- "x86_64-pc-windows-msvc": "87822417007045a28a7eccc47fe67b8c61265b99b10dbbfa24d231a3622b1c27",
- "aarch64-pc-windows-msvc": "ba646d0c3b7dd7bdfb770d9b2ebd6cd2df02a37fda90c9c79a7cf59c7df6f165",
- "aarch64-pc-windows-msvc-freethreaded": "6daf6d092c7294cfe68c4c7bf2698ac134235489c874b3bf796c7972b9dbba30",
- "x86_64-unknown-linux-gnu": "1ffa06d714a44aea14c0c54c30656413e5955a6c92074b4b3cb4351dcc28b63b",
- "x86_64-unknown-linux-musl": "969fe24017380b987c4e3ce15e9edf82a4618c1e61672b2cc9b021a1c98eae78",
- "aarch64-apple-darwin-freethreaded": "4213058b7fcd875596c12b58cd46a399358b0a87ecde4b349cbdd00cf87ed79a",
- "aarch64-unknown-linux-gnu-freethreaded": "290ca3bd0007db9e551f90b08dfcb6c1b2d62c33b2fc3e9a43e77d385d94f569",
- "ppc64le-unknown-linux-gnu-freethreaded": "09d4b50f8abb443f7e3af858c920aa61c2430b0954df465e861caa7078e55e69",
- "riscv64-unknown-linux-gnu-freethreaded": "5406f2a7cacafbd2aac3ce2de066a0929aab55423824276c36e04cb83babc36c",
- "s390x-unknown-linux-gnu-freethreaded": "3984b67c4292892eaccdd1c094c7ec788884c4c9b3534ab6995f6be96d5ed51d",
- "x86_64-apple-darwin-freethreaded": "d6f489464045d6895ae68b0a04a9e16477e74fe3185a75f3a9a0af8ccd25eade",
- "x86_64-pc-windows-msvc-freethreaded": "bb9a29a7ba8f179273b79971da6aaa7be592d78c606a63f99eff3e4c12fb0fae",
- "x86_64-unknown-linux-gnu-freethreaded": "33f89c957d986d525529b8a980103735776f4d20cf52f55960a057c760188ac3",
- },
- "strip_prefix": {
- "aarch64-apple-darwin": "python",
- "aarch64-unknown-linux-gnu": "python",
- "ppc64le-unknown-linux-gnu": "python",
- "s390x-unknown-linux-gnu": "python",
- "riscv64-unknown-linux-gnu": "python",
- "x86_64-apple-darwin": "python",
- "x86_64-pc-windows-msvc": "python",
- "aarch64-pc-windows-msvc": "python",
- "x86_64-unknown-linux-gnu": "python",
- "x86_64-unknown-linux-musl": "python",
- "aarch64-apple-darwin-freethreaded": "python/install",
- "aarch64-unknown-linux-gnu-freethreaded": "python/install",
- "ppc64le-unknown-linux-gnu-freethreaded": "python/install",
- "riscv64-unknown-linux-gnu-freethreaded": "python/install",
- "s390x-unknown-linux-gnu-freethreaded": "python/install",
- "x86_64-apple-darwin-freethreaded": "python/install",
- "x86_64-pc-windows-msvc-freethreaded": "python/install",
- "aarch64-pc-windows-msvc-freethreaded": "python/install",
- "x86_64-unknown-linux-gnu-freethreaded": "python/install",
- },
- },
- "3.13.12": {
- "url": "20260325/cpython-{python_version}+20260325-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "688da81bcaa6ed91792397c7d5433b13a4f02f021f940637c3972639bc516dca",
- "aarch64-unknown-linux-gnu": "31c6e61eed48ca4e156d0e473025a792338641109e8277a63518ded438390c96",
- "ppc64le-unknown-linux-gnu": "654939bc40d5f76f08eb17335bb19e9efa11eb48a0818eda2293a3f7c3570ae7",
- "riscv64-unknown-linux-gnu": "fc7e1fb553c47b831ed7fa529575145207f000f967513f7b9ea809cce006ed79",
- "s390x-unknown-linux-gnu": "7d7919358e88fcc672b061be8c2316c3a604c7074200515d7104166ed611f7f9",
- "x86_64-apple-darwin": "7411e47939783708381017a90944a69641ac84d43f74fb6e2d52576c599a2717",
- "x86_64-pc-windows-msvc": "5b4093f92d9bffcb0d92aea050f3d77d5a4fc8e918b31cea000ee4b3ca751f1d",
- "aarch64-pc-windows-msvc": "d2c8b00044cd2e4c5fc7e697e63d5e481ed44b87c2def0beb42991d59f65d930",
- "aarch64-pc-windows-msvc-freethreaded": "d2c8b00044cd2e4c5fc7e697e63d5e481ed44b87c2def0beb42991d59f65d930",
- "x86_64-unknown-linux-gnu": "ebb1051ca2822b9803f46a5f10b6d51d153189ef1b1f1e142f733c0cbeaf86eb",
- "x86_64-unknown-linux-musl": "b2e9400731c7f18069ec2804ba87a404385fe440f93b7dcb59004b9f56651202",
- "aarch64-apple-darwin-freethreaded": "688da81bcaa6ed91792397c7d5433b13a4f02f021f940637c3972639bc516dca",
- "aarch64-unknown-linux-gnu-freethreaded": "31c6e61eed48ca4e156d0e473025a792338641109e8277a63518ded438390c96",
- "ppc64le-unknown-linux-gnu-freethreaded": "654939bc40d5f76f08eb17335bb19e9efa11eb48a0818eda2293a3f7c3570ae7",
- "riscv64-unknown-linux-gnu-freethreaded": "fc7e1fb553c47b831ed7fa529575145207f000f967513f7b9ea809cce006ed79",
- "s390x-unknown-linux-gnu-freethreaded": "7d7919358e88fcc672b061be8c2316c3a604c7074200515d7104166ed611f7f9",
- "x86_64-apple-darwin-freethreaded": "7411e47939783708381017a90944a69641ac84d43f74fb6e2d52576c599a2717",
- "x86_64-pc-windows-msvc-freethreaded": "5b4093f92d9bffcb0d92aea050f3d77d5a4fc8e918b31cea000ee4b3ca751f1d",
- "x86_64-unknown-linux-gnu-freethreaded": "ebb1051ca2822b9803f46a5f10b6d51d153189ef1b1f1e142f733c0cbeaf86eb",
- },
- "strip_prefix": "python",
- },
- "3.13.13": {
- "url": "20260414/cpython-{python_version}+20260414-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "c652dad552122cd2e76968ec41c803f8222038169b11310dba0c85928265f5c1",
- "aarch64-unknown-linux-gnu": "6a65f68043d7fadcd580415493d2929d1fd686013f9ae44ddbd3a81307ab256d",
- "ppc64le-unknown-linux-gnu": "aef73894107300264222b19e357baf5bad616b1c4bf5daa5c3b97cfee8f5ed7b",
- "riscv64-unknown-linux-gnu": "f47c09f8e7f2fb0bc4afe52422705af4016c8d3ec1cf004b67bb56a86caa62cb",
- "s390x-unknown-linux-gnu": "4d205af9654e1f33cefd23ff798af470e565f3ac0eba18d2f98f18a2abd07166",
- "x86_64-apple-darwin": "540337412d2c4220e99280f741dbf45c1e3da3a39edaaab20c6ba1d53e1692ef",
- "x86_64-pc-windows-msvc": "ee0cb26453d6e025d36502d765c1639c34830355e46ab3ad31c0360bc4cd9b79",
- "aarch64-pc-windows-msvc": "586ba71c75f341e1d111399b7f719ae784dc11e8672e93e017388f28684226d0",
- "aarch64-pc-windows-msvc-freethreaded": "586ba71c75f341e1d111399b7f719ae784dc11e8672e93e017388f28684226d0",
- "x86_64-unknown-linux-gnu": "e5ec3b2c5693215d153c434ac018e75511b2c4f96d2bce30468a477cb3a89d5e",
- "x86_64-unknown-linux-musl": "24ac6bf80dd2991c8be348f777c96c6eb69b71e78d8fa28c09beb3ddca015a47",
- "aarch64-apple-darwin-freethreaded": "c652dad552122cd2e76968ec41c803f8222038169b11310dba0c85928265f5c1",
- "aarch64-unknown-linux-gnu-freethreaded": "6a65f68043d7fadcd580415493d2929d1fd686013f9ae44ddbd3a81307ab256d",
- "ppc64le-unknown-linux-gnu-freethreaded": "aef73894107300264222b19e357baf5bad616b1c4bf5daa5c3b97cfee8f5ed7b",
- "riscv64-unknown-linux-gnu-freethreaded": "f47c09f8e7f2fb0bc4afe52422705af4016c8d3ec1cf004b67bb56a86caa62cb",
- "s390x-unknown-linux-gnu-freethreaded": "4d205af9654e1f33cefd23ff798af470e565f3ac0eba18d2f98f18a2abd07166",
- "x86_64-apple-darwin-freethreaded": "540337412d2c4220e99280f741dbf45c1e3da3a39edaaab20c6ba1d53e1692ef",
- "x86_64-pc-windows-msvc-freethreaded": "ee0cb26453d6e025d36502d765c1639c34830355e46ab3ad31c0360bc4cd9b79",
- "x86_64-unknown-linux-gnu-freethreaded": "e5ec3b2c5693215d153c434ac018e75511b2c4f96d2bce30468a477cb3a89d5e",
- },
- "strip_prefix": "python",
- },
- "3.14.0": {
- "url": "20251031/cpython-{python_version}+20251031-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "b4bcd3c6c24cab32ae99e1b05c89312b783b4d69431d702e5012fe1fdcad4087",
- "aarch64-unknown-linux-gnu": "128a9cbfb9645d5237ec01704d9d1d2ac5f084464cc43c37a4cd96aa9c3b1ad5",
- "ppc64le-unknown-linux-gnu": "e16ca51f018e99a609faf953bd3a3aea31f45ee84262d1a517fb3abd98f1f4af",
- "riscv64-unknown-linux-gnu": "fca340d8fb7a05cd90e216ce601b25d492ed8c1a3b6a6d77703e0f15ab3711a7",
- "s390x-unknown-linux-gnu": "c5803644970eee931bb0581b3b64511d1a8612f67bc98951a7f7ab5581a9ed04",
- "x86_64-apple-darwin": "4e71a3ce973be377ef18637826648bb936e2f9490f64a9e4f33a49bcc431d344",
- "x86_64-pc-windows-msvc": "39acfcb3857d83eab054a3de11756ffc16b3d49c31393b9800dd2704d1f07fdf",
- "aarch64-pc-windows-msvc": "599a8b7e12439cd95a201dbdfe95cf363146b1ff91f379555dafd86b170caab9",
- "x86_64-unknown-linux-gnu": "3dec1ab70758a3467ac3313bbcdabf7a9b3016db5c072c4537e3cf0a9e6290f6",
- "x86_64-unknown-linux-musl": "d0a2a6d3b1bb00dce2105377fda8aa79675d187f8d6d7010a42f651af25018dc",
- "aarch64-apple-darwin-freethreaded": "d9c7b430b25bd3837dbb03f945dbe6b7bc526c5940ca96f5db7cdc42f6b2b801",
- "aarch64-unknown-linux-gnu-freethreaded": "f383ef50d1da6ca511212e5ae601923b56636b87351fd5fc847e0ea0a19fa9b3",
- "ppc64le-unknown-linux-gnu-freethreaded": "cb0e4ff781b856a47f0f461ceb41c78c7eeff65effd0957857ec4702ef1e1bd3",
- "riscv64-unknown-linux-gnu-freethreaded": "929223470d11a55cd75f880ac3bd4969e42407e2cdf08d4e7e38ba721cf4abec",
- "s390x-unknown-linux-gnu-freethreaded": "613fb1f7b249f798b52af957d181305244e936c8e5c94c84688fcdf93fe14253",
- "x86_64-apple-darwin-freethreaded": "b3196f6b57bbb3dc2ee07f348f1d51117ffa376979eceafbf50c15f0f7980bf8",
- "x86_64-pc-windows-msvc-freethreaded": "b81de5fc9e783ea6dfcf1098c28a278c874999c71afbb0309f6a8b4276c769d0",
- "aarch64-pc-windows-msvc-freethreaded": "40266e60f655e49cd1d5303295255909a4b593b08b88be6e6a55b2c9fe6ed13d",
- "x86_64-unknown-linux-gnu-freethreaded": "f4acbef0fbfaf7ab31ac63986da1d93dfa1c5cb797de1dcdc1a988aa18670120",
- },
- "strip_prefix": {
- "aarch64-apple-darwin": "python",
- "aarch64-unknown-linux-gnu": "python",
- "ppc64le-unknown-linux-gnu": "python",
- "s390x-unknown-linux-gnu": "python",
- "riscv64-unknown-linux-gnu": "python",
- "x86_64-apple-darwin": "python",
- "x86_64-pc-windows-msvc": "python",
- "aarch64-pc-windows-msvc": "python",
- "x86_64-unknown-linux-gnu": "python",
- "x86_64-unknown-linux-musl": "python",
- "aarch64-apple-darwin-freethreaded": "python/install",
- "aarch64-unknown-linux-gnu-freethreaded": "python/install",
- "ppc64le-unknown-linux-gnu-freethreaded": "python/install",
- "riscv64-unknown-linux-gnu-freethreaded": "python/install",
- "s390x-unknown-linux-gnu-freethreaded": "python/install",
- "x86_64-apple-darwin-freethreaded": "python/install",
- "x86_64-pc-windows-msvc-freethreaded": "python/install",
- "aarch64-pc-windows-msvc-freethreaded": "python/install",
- "x86_64-unknown-linux-gnu-freethreaded": "python/install",
- },
- },
- "3.14.1": {
- "url": "20251202/cpython-{python_version}+20251202-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "cdf1ba0789f529fa34bb5b5619c5da9757ac1067d6b8dd0ee8b78e50078fc561",
- "aarch64-unknown-linux-gnu": "5dde7dba0b8ef34c0d5cb8a721254b1e11028bfc09ff06664879c245fe8df73f",
- "ppc64le-unknown-linux-gnu": "d2774701d53e2ac06f8c8c8e52dfa4ff346890de9b417c9a7664195443a4c766",
- "riscv64-unknown-linux-gnu": "af840506efbcd5026d9140c0a0230e45e46bb1f339a65c10a22875930b2c0159",
- "s390x-unknown-linux-gnu": "43f8f79bf4c66689d2019f193671d1df3e5e5dbb293382036285e8ce55fc55bb",
- "x86_64-apple-darwin": "f25ce050e1d370f9c05c9623b769ffa4b269a6ae17e611b435fd2b8b09972a88",
- "x86_64-pc-windows-msvc": "cb478a5a37eb93ce4d3c27ae64d211d6a5a42475ae53f666a8d1570e71fcf409",
- "aarch64-pc-windows-msvc": "19129cf8b4d68c4e64c25bae43bca139d871267b59cf7f02b9dcf25f0bf59497",
- "x86_64-unknown-linux-gnu": "a72f313bad49846e5e9671af2be7476033a877c80831cf47f431400ccb520090",
- "x86_64-unknown-linux-musl": "15d50b15713097c38c67b1a06a0498ad102377f9b3999e98e4eefd6bf91bd82d",
- "aarch64-apple-darwin-freethreaded": "61f38e947449cf00f32f0838e813358f6bf61025d0797531e5b8b8b175c617f0",
- "aarch64-unknown-linux-gnu-freethreaded": "1a88a1fe21eb443d280999464b1a397605a7ca950d8ab73813ca6868835439a2",
- "ppc64le-unknown-linux-gnu-freethreaded": "7207b736ed2569f307649ffd4b615a5346631bc244730b8702babee377cef528",
- "riscv64-unknown-linux-gnu-freethreaded": "d1356ccd279920edc31bf0350674d966beb9522f9503846ed7855dbb109ccc14",
- "s390x-unknown-linux-gnu-freethreaded": "477758eabc06dbc7e5e5d16e97c4672478acd409f420dd2e1b84d3452c0668d1",
- "x86_64-apple-darwin-freethreaded": "c2cb2a9b44285fbc13c3c9b7eea813db6ed8d94909406b059db7afd39b32e786",
- "x86_64-pc-windows-msvc-freethreaded": "8ef7048315cac6d26bdbef18512a87b1a24fffa21cec86e32f9a9425f2af9bf6",
- "aarch64-pc-windows-msvc-freethreaded": "ddb10b645de2b1f6f2832a80b115a9cd34a4a760249983027efe46618a8efc48",
- "x86_64-unknown-linux-gnu-freethreaded": "c5d5b89aab7de683e465e36de2477a131435076badda775ef6e9ea21109c1c32",
- },
- "strip_prefix": {
- "aarch64-apple-darwin": "python",
- "aarch64-unknown-linux-gnu": "python",
- "ppc64le-unknown-linux-gnu": "python",
- "s390x-unknown-linux-gnu": "python",
- "riscv64-unknown-linux-gnu": "python",
- "x86_64-apple-darwin": "python",
- "x86_64-pc-windows-msvc": "python",
- "aarch64-pc-windows-msvc": "python",
- "x86_64-unknown-linux-gnu": "python",
- "x86_64-unknown-linux-musl": "python",
- "aarch64-apple-darwin-freethreaded": "python/install",
- "aarch64-unknown-linux-gnu-freethreaded": "python/install",
- "ppc64le-unknown-linux-gnu-freethreaded": "python/install",
- "riscv64-unknown-linux-gnu-freethreaded": "python/install",
- "s390x-unknown-linux-gnu-freethreaded": "python/install",
- "x86_64-apple-darwin-freethreaded": "python/install",
- "x86_64-pc-windows-msvc-freethreaded": "python/install",
- "aarch64-pc-windows-msvc-freethreaded": "python/install",
- "x86_64-unknown-linux-gnu-freethreaded": "python/install",
- },
- },
- "3.14.2": {
- "url": "20251209/cpython-{python_version}+20251209-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "2f74bd26bd16487aca357c879d11f7b16c0521328e5148a1930ab6357bcb89fe",
- "aarch64-unknown-linux-gnu": "869af31b2963194e8a2ecfadc36027c4c1c86a10f4960baec36dadb41b2acf02",
- "ppc64le-unknown-linux-gnu": "86129976403fb5d64cf576329f94148f28cf6f82834e94df81ff31e9d5f404e0",
- "riscv64-unknown-linux-gnu": "318dceecf119ea903aef1fb03a552cc592ecd61c08da891b68f5755e21e13511",
- "s390x-unknown-linux-gnu": "53875c849a14194344ead1d9cd1e128cadd42a4b83c35eeb212417909ef05a6a",
- "x86_64-apple-darwin": "58fa3e17d13ab956fd11055fb774c98ecfddcdf3b588e5f2369bdbc14ef9d76a",
- "x86_64-pc-windows-msvc": "0d660bba9f58cb552e7e99e1f96a9c67b41618c9b8d29f9f3515fe2b5ad1966e",
- "aarch64-pc-windows-msvc": "0be0d2557d73efa7f6f3f99679f05252d57fe2aad2d81cac3cad410a9b1eacbd",
- "x86_64-unknown-linux-gnu": "121c3249bef497adf601df76a4d89aed6053fc5ec2f8c0ec656b86f0142e8ddd",
- "x86_64-unknown-linux-musl": "71639cc5d1fb79840467531c5b53ca77170a58edd3f7e2d29330dd736e477469",
- "aarch64-apple-darwin-freethreaded": "d6d17b8ef28326552cdeb2a7541c8a0cb711b378df9b93ebdb461dca065edfea",
- "aarch64-unknown-linux-gnu-freethreaded": "adfcb90f3a7e1b3fbc6a99f9c8c8dce1f2e26ea72b724bbe4e9fa39e81e2b0db",
- "ppc64le-unknown-linux-gnu-freethreaded": "2b1ce0c5a5f5e5add7e4f934f5bd35ac41660895a30b3098db7f7303d6952a4f",
- "riscv64-unknown-linux-gnu-freethreaded": "4efb610fa07a6ee2639d14d78fc3b6ecb47431c14e1e4bda03c7f7dd60a5c1e5",
- "s390x-unknown-linux-gnu-freethreaded": "e62f3bb3e66dac6c459690f9e9cd8cc2f6fe1dcf8bfed452af4c3df24cd7874f",
- "x86_64-apple-darwin-freethreaded": "1fd76c79f7fc1753e8d2ed2f71406c0b65776c75f3e95ed99ffde8c95af2adc1",
- "x86_64-pc-windows-msvc-freethreaded": "9927951e3997c186d2813ca1a0f4a8f5a2f771463f7f8ad0752fd3d2be2b74e4",
- "aarch64-pc-windows-msvc-freethreaded": "43aac5bb4cdba71fc6775d26f47348d573a0b1210911438be71d7d96f4b18b51",
- "x86_64-unknown-linux-gnu-freethreaded": "3728872ffd74989a7b4bbf3f0c629ae8fe821cda2bd6544012c1b92b9f5d5a5b",
- },
- "strip_prefix": {
- "aarch64-apple-darwin": "python",
- "aarch64-unknown-linux-gnu": "python",
- "ppc64le-unknown-linux-gnu": "python",
- "s390x-unknown-linux-gnu": "python",
- "riscv64-unknown-linux-gnu": "python",
- "x86_64-apple-darwin": "python",
- "x86_64-pc-windows-msvc": "python",
- "aarch64-pc-windows-msvc": "python",
- "x86_64-unknown-linux-gnu": "python",
- "x86_64-unknown-linux-musl": "python",
- "aarch64-apple-darwin-freethreaded": "python/install",
- "aarch64-unknown-linux-gnu-freethreaded": "python/install",
- "ppc64le-unknown-linux-gnu-freethreaded": "python/install",
- "riscv64-unknown-linux-gnu-freethreaded": "python/install",
- "s390x-unknown-linux-gnu-freethreaded": "python/install",
- "x86_64-apple-darwin-freethreaded": "python/install",
- "x86_64-pc-windows-msvc-freethreaded": "python/install",
- "aarch64-pc-windows-msvc-freethreaded": "python/install",
- "x86_64-unknown-linux-gnu-freethreaded": "python/install",
- },
- },
- "3.14.3": {
- "url": "20260325/cpython-{python_version}+20260325-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "80c996c23aab828134821f078a8a77a6f33f3f2c14000f071718c540e20c64d4",
- "aarch64-unknown-linux-gnu": "6faf5478f910741c477830f5fd842011208af0f9678faf77106c9421b325bfc1",
- "ppc64le-unknown-linux-gnu": "5eafe32e12f33f98c40de920482b013170dcf97d8c7f5dc780271ccf4cded76a",
- "riscv64-unknown-linux-gnu": "481d3faef258964e57b7102c63de12b2bb388c7ed07cfe456f33e63b4e061202",
- "s390x-unknown-linux-gnu": "d706eae2f4d963187b7c866603aed75d7eb3ea59590b06fb34f5fd7d0fe8e432",
- "x86_64-apple-darwin": "847a49fea36c066f8df7a57cd8c4c02d17667e25d30b7930e8f8ba15e72d7efc",
- "x86_64-pc-windows-msvc": "8b4e1329c4901ce2c0f1c20ac5d2ffa62fc13f12e26b5d1e5a1000f910f980d4",
- "aarch64-pc-windows-msvc": "b35fe7c2fe169574f382cef125e95cbd904ddcb98fc337167356371b6d2e8c60",
- "x86_64-unknown-linux-gnu": "18270c5a7b1a572599df5e68b497ba5254811dac43ba6f542245807d821fcb44",
- "x86_64-unknown-linux-musl": "726a28734d2878a637b0d16ce07ce24c7d6ca1043d8e6f4a23b1b0a3478eedb9",
- "aarch64-apple-darwin-freethreaded": "80c996c23aab828134821f078a8a77a6f33f3f2c14000f071718c540e20c64d4",
- "aarch64-unknown-linux-gnu-freethreaded": "6faf5478f910741c477830f5fd842011208af0f9678faf77106c9421b325bfc1",
- "ppc64le-unknown-linux-gnu-freethreaded": "5eafe32e12f33f98c40de920482b013170dcf97d8c7f5dc780271ccf4cded76a",
- "riscv64-unknown-linux-gnu-freethreaded": "481d3faef258964e57b7102c63de12b2bb388c7ed07cfe456f33e63b4e061202",
- "s390x-unknown-linux-gnu-freethreaded": "d706eae2f4d963187b7c866603aed75d7eb3ea59590b06fb34f5fd7d0fe8e432",
- "x86_64-apple-darwin-freethreaded": "847a49fea36c066f8df7a57cd8c4c02d17667e25d30b7930e8f8ba15e72d7efc",
- "x86_64-pc-windows-msvc-freethreaded": "8b4e1329c4901ce2c0f1c20ac5d2ffa62fc13f12e26b5d1e5a1000f910f980d4",
- "aarch64-pc-windows-msvc-freethreaded": "b35fe7c2fe169574f382cef125e95cbd904ddcb98fc337167356371b6d2e8c60",
- "x86_64-unknown-linux-gnu-freethreaded": "18270c5a7b1a572599df5e68b497ba5254811dac43ba6f542245807d821fcb44",
- },
- "strip_prefix": "python",
- },
- "3.14.4": {
- "url": "20260414/cpython-{python_version}+20260414-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "8b7865e511b17093e090449bf71eb52933c17d45ad5257ddeacaffbb2c7239df",
- "aarch64-unknown-linux-gnu": "5c8db1c21023316adad827a46d917bbbd6a85ae4e39bc3a58febda712c2f963d",
- "ppc64le-unknown-linux-gnu": "055977a09de092744bbb22db64144e6afef8592eaac5e2bce4cca33f2592281a",
- "riscv64-unknown-linux-gnu": "e959df167c502fb0bbcacc31a997e25c6b0ff6b5e496321b691955aa702d0c09",
- "s390x-unknown-linux-gnu": "35f70ad05b2c4045889ee0c3d93f61b012654c1d91e10e671f0e5b4d4a6c6637",
- "x86_64-apple-darwin": "9ecb2b942e6698c04af10a63a3d73c0b2e8d8e11ce44933fbffe8651bef4577d",
- "x86_64-pc-windows-msvc": "9647bb46d3c236e34c1c11bbb7113444d9711811f0d11c39956168807a955b1a",
- "aarch64-pc-windows-msvc": "82613380d582d806e562d7701496c34c87753ab13c37aa0afe2039003651f389",
- "x86_64-unknown-linux-gnu": "e17275eaf95ceb5877aa6816e209b7733f41fee401d39c3921b88fb73fc4a4ba",
- "x86_64-unknown-linux-musl": "12687a989a2384665577e1ef9864f33d4c074a1e69b38a8bac8d656531aefa3e",
- "aarch64-apple-darwin-freethreaded": "8b7865e511b17093e090449bf71eb52933c17d45ad5257ddeacaffbb2c7239df",
- "aarch64-unknown-linux-gnu-freethreaded": "5c8db1c21023316adad827a46d917bbbd6a85ae4e39bc3a58febda712c2f963d",
- "ppc64le-unknown-linux-gnu-freethreaded": "055977a09de092744bbb22db64144e6afef8592eaac5e2bce4cca33f2592281a",
- "riscv64-unknown-linux-gnu-freethreaded": "e959df167c502fb0bbcacc31a997e25c6b0ff6b5e496321b691955aa702d0c09",
- "s390x-unknown-linux-gnu-freethreaded": "35f70ad05b2c4045889ee0c3d93f61b012654c1d91e10e671f0e5b4d4a6c6637",
- "x86_64-apple-darwin-freethreaded": "9ecb2b942e6698c04af10a63a3d73c0b2e8d8e11ce44933fbffe8651bef4577d",
- "x86_64-pc-windows-msvc-freethreaded": "9647bb46d3c236e34c1c11bbb7113444d9711811f0d11c39956168807a955b1a",
- "aarch64-pc-windows-msvc-freethreaded": "82613380d582d806e562d7701496c34c87753ab13c37aa0afe2039003651f389",
- "x86_64-unknown-linux-gnu-freethreaded": "e17275eaf95ceb5877aa6816e209b7733f41fee401d39c3921b88fb73fc4a4ba",
- },
- "strip_prefix": "python",
- },
- "3.15.0a1": {
- "url": "20251031/cpython-{python_version}+20251031-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "3acf7aa3559b746498b18929456c5cacb84bae4e09249834cbc818970d71de87",
- "aarch64-unknown-linux-gnu": "d55c2aeece827e6bec83fd18515ee281d9ea0efaa3e2d20130db8f1c7cbb71c6",
- "ppc64le-unknown-linux-gnu": "c28beda791c499b16f06256339522f0002a3e9acba003e6b8374755d7be1def2",
- "riscv64-unknown-linux-gnu": "36619f576b8154e4b56643c5c4a85c352f152df2989c4e602cbbe9c2b7ded870",
- "s390x-unknown-linux-gnu": "5ea47be2a3a563ddd87ff510dae26b7aa7f3855ca00c5f1056ff8114c067c4e4",
- "x86_64-apple-darwin": "0ab19d3ac25f99da438b088751e5ec2421f9f6aa4292fd2dc0f8e49eb3e16bdf",
- "x86_64-pc-windows-msvc": "5f5d6bec2b381cfc771c49972d2a6f7b7e7ab6a1651d8fb6ef3983f3571722b3",
- "aarch64-pc-windows-msvc": "1508bcd7195008479ed156aad3afbb3a3793097ed530690f0304a8107f0e53e8",
- "x86_64-unknown-linux-gnu": "1f356288c2b2713619cb7a4e453d33bf8882f812af2987e21e01e7ae382fefba",
- "x86_64-unknown-linux-musl": "caf5311f333eef082dd69a669ca65aceba09a08fc1e78aad602ad649106f294c",
- "aarch64-apple-darwin-freethreaded": "12f1b16be4017181ad67904caf9e59e525b9b5d62f49105017d837e27b832959",
- "aarch64-unknown-linux-gnu-freethreaded": "981fe8dfc6e7e1d0ffefa945a18d5c4c759bbe21722acf3a5cc7e62f16aa5f3c",
- "ppc64le-unknown-linux-gnu-freethreaded": "088400dec25139f38eeecb48f090ff2ce06a96a1dd79fa8f1dfec1cd1786f5ef",
- "riscv64-unknown-linux-gnu-freethreaded": "938061a0a31a06672526885de36037ddefd8c4acdb09424691b7000a8c8f8d01",
- "s390x-unknown-linux-gnu-freethreaded": "2003e7e40bb44b3db7bca81087bfb738fe6af40e5db61cda8e23b59bf55d409e",
- "x86_64-apple-darwin-freethreaded": "64fc29e6c7a2f02a18645d968f1b3fc1d00d12a5ef3fcbb0d077fa8c62c08904",
- "x86_64-pc-windows-msvc-freethreaded": "34abc5603e1b4131f753d29b7deac865b9277912b851cbed5a149cf3e6745d3d",
- "aarch64-pc-windows-msvc-freethreaded": "54ca78dae455ece6fefbd7f5f287cc55d5ce197caf51921f6d871d15069d9489",
- "x86_64-unknown-linux-gnu-freethreaded": "0e0272186d9f5169394dbc4d4d72a3f4a5762a04c2e5ac2ab1e23aa41fc8538a",
- },
- "strip_prefix": {
- "aarch64-apple-darwin": "python",
- "aarch64-unknown-linux-gnu": "python",
- "ppc64le-unknown-linux-gnu": "python",
- "s390x-unknown-linux-gnu": "python",
- "riscv64-unknown-linux-gnu": "python",
- "x86_64-apple-darwin": "python",
- "x86_64-pc-windows-msvc": "python",
- "aarch64-pc-windows-msvc": "python",
- "x86_64-unknown-linux-gnu": "python",
- "x86_64-unknown-linux-musl": "python",
- "aarch64-apple-darwin-freethreaded": "python/install",
- "aarch64-unknown-linux-gnu-freethreaded": "python/install",
- "ppc64le-unknown-linux-gnu-freethreaded": "python/install",
- "riscv64-unknown-linux-gnu-freethreaded": "python/install",
- "s390x-unknown-linux-gnu-freethreaded": "python/install",
- "x86_64-apple-darwin-freethreaded": "python/install",
- "x86_64-pc-windows-msvc-freethreaded": "python/install",
- "aarch64-pc-windows-msvc-freethreaded": "python/install",
- "x86_64-unknown-linux-gnu-freethreaded": "python/install",
- },
- },
- "3.15.0a2": {
- "url": "20251209/cpython-{python_version}+20251209-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "5851f3744fbd39e3e323844cf4f68d7763fb25546aa5ffbb71b1b5ab69c56616",
- "aarch64-unknown-linux-gnu": "17ba65d669be3052524e03b4d1426c072ef38df2a9065ff4525d1f4d1bc9f82c",
- "ppc64le-unknown-linux-gnu": "5585bd7c5eefe28b9bf544d902cad9a2f81f33c618f2a1d3c006cbfcdec77abc",
- "riscv64-unknown-linux-gnu": "bb7252edaffd422bd1c044a4764dfcf83a5d7159942f445abbef524e54ea79a0",
- "s390x-unknown-linux-gnu": "03a90ffa9f92d4cf4caeefb9d15f0b39c05c1e60ade6688f32165f957db4f8f3",
- "x86_64-apple-darwin": "cee576de4919cd422dbc31eb85d3c145ee82acec84f651daaf32dc669b5149c9",
- "x86_64-pc-windows-msvc": "e538475ee249eacf63bfdae0e70af73e9c47360e6dd3d6825e7a35107e177de5",
- "aarch64-pc-windows-msvc": "39bc2fcac13aeba7d650f76badf63350a81c86167a62174cb092eab7a749f4a5",
- "x86_64-unknown-linux-gnu": "58addaabfab2de422180d32543fb3878ffc984c8a2e4005ff658a5cd83b31fc7",
- "x86_64-unknown-linux-musl": "dcf844400dc2e7f5f3604e994532e4d49db45f4deefe9afdf6809ca1bc6532ee",
- "aarch64-apple-darwin-freethreaded": "5b34488580df13df051a2e84e43cfca2ab28fdd7a61052f35988eb8b481b894a",
- "aarch64-unknown-linux-gnu-freethreaded": "0c2c83236f6e28c103e2660a82be94b2459ee8cfdd90f5dd82f0d503ca2aec09",
- "ppc64le-unknown-linux-gnu-freethreaded": "216842df2377fd032f279ded7fd23d7bdbd92d4c1fa7619523bc0dbdef5bd212",
- "riscv64-unknown-linux-gnu-freethreaded": "2a8b56f318d2e21b01b54909554c53d81871b9bb05d23ea7808dde9acec4dc7e",
- "s390x-unknown-linux-gnu-freethreaded": "06c4ca3983aad20723f68786e3663ab49fee1bf09326f341649205ed79d34fc6",
- "x86_64-apple-darwin-freethreaded": "4d8102b70ea9fe726ee3ae9ad9e9bc4cbe0b6ed18f7989c81aef81de578f0163",
- "x86_64-pc-windows-msvc-freethreaded": "6ff71bac78d650ce621fe6db49f06290e48bcceb61f69cccc7728584f70b6346",
- "aarch64-pc-windows-msvc-freethreaded": "3d99152b4e29b947fb1cfc8d035d1d511e50aeed72886ff4a5fd0a3694bd0b51",
- "x86_64-unknown-linux-gnu-freethreaded": "70f552e213734c0e260a57603bee504dd7ed0e78a10558b591e724ea8730fef5",
- },
- "strip_prefix": {
- "aarch64-apple-darwin": "python",
- "aarch64-unknown-linux-gnu": "python",
- "ppc64le-unknown-linux-gnu": "python",
- "s390x-unknown-linux-gnu": "python",
- "riscv64-unknown-linux-gnu": "python",
- "x86_64-apple-darwin": "python",
- "x86_64-pc-windows-msvc": "python",
- "aarch64-pc-windows-msvc": "python",
- "x86_64-unknown-linux-gnu": "python",
- "x86_64-unknown-linux-musl": "python",
- "aarch64-apple-darwin-freethreaded": "python/install",
- "aarch64-unknown-linux-gnu-freethreaded": "python/install",
- "ppc64le-unknown-linux-gnu-freethreaded": "python/install",
- "riscv64-unknown-linux-gnu-freethreaded": "python/install",
- "s390x-unknown-linux-gnu-freethreaded": "python/install",
- "x86_64-apple-darwin-freethreaded": "python/install",
- "x86_64-pc-windows-msvc-freethreaded": "python/install",
- "aarch64-pc-windows-msvc-freethreaded": "python/install",
- "x86_64-unknown-linux-gnu-freethreaded": "python/install",
- },
- },
- "3.15.0a8": {
- "url": "20260414/cpython-{python_version}+20260414-{platform}-{build}.{ext}",
- "sha256": {
- "aarch64-apple-darwin": "780d46b3da0e58e15c620d9e7dfd29b54c8359c195f625858f85df9c2c7ecc32",
- "aarch64-unknown-linux-gnu": "8f6dda4d8ff44976f1aa6a94674a09a503dc50b015297e1b62c8cdc591c90f4f",
- "ppc64le-unknown-linux-gnu": "09f076c63fadbf675143674aa3b23229482b9a44840b8b1808a216def2a9af15",
- "riscv64-unknown-linux-gnu": "9d41ce752e8b731872f0f5c9c48199e63c789d24ce3ae9e91d6c8008f36e7c51",
- "s390x-unknown-linux-gnu": "1de2593c40cce2d8ea883f8c8580223bfa1478cbd9d0191ba3640aed083c2202",
- "x86_64-apple-darwin": "a7744d34148969a2ec010da6f0a46ddeceda7c02e5cdfa2b4e1811487381491a",
- "x86_64-pc-windows-msvc": "3ded476f676fdf260d56a5e49aa083d5ffd218fc3390e4480ed42bee1acfb3fb",
- "aarch64-pc-windows-msvc": "10fb470e900e65df4e37f8deaf1726397c914861ffc37b43ae3743a7eee88377",
- "x86_64-unknown-linux-gnu": "c93f4b15287ac48d7e3a475b245cb59cc51079382747e3e6213d6406c158969d",
- "x86_64-unknown-linux-musl": "9fbd6f243a424d4ae973e72aa0075122a7cfe05ac8f6cfde986e7b00d0dbc0bf",
- "aarch64-apple-darwin-freethreaded": "780d46b3da0e58e15c620d9e7dfd29b54c8359c195f625858f85df9c2c7ecc32",
- "aarch64-unknown-linux-gnu-freethreaded": "8f6dda4d8ff44976f1aa6a94674a09a503dc50b015297e1b62c8cdc591c90f4f",
- "ppc64le-unknown-linux-gnu-freethreaded": "09f076c63fadbf675143674aa3b23229482b9a44840b8b1808a216def2a9af15",
- "riscv64-unknown-linux-gnu-freethreaded": "9d41ce752e8b731872f0f5c9c48199e63c789d24ce3ae9e91d6c8008f36e7c51",
- "s390x-unknown-linux-gnu-freethreaded": "1de2593c40cce2d8ea883f8c8580223bfa1478cbd9d0191ba3640aed083c2202",
- "x86_64-apple-darwin-freethreaded": "a7744d34148969a2ec010da6f0a46ddeceda7c02e5cdfa2b4e1811487381491a",
- "x86_64-pc-windows-msvc-freethreaded": "3ded476f676fdf260d56a5e49aa083d5ffd218fc3390e4480ed42bee1acfb3fb",
- "aarch64-pc-windows-msvc-freethreaded": "10fb470e900e65df4e37f8deaf1726397c914861ffc37b43ae3743a7eee88377",
- "x86_64-unknown-linux-gnu-freethreaded": "c93f4b15287ac48d7e3a475b245cb59cc51079382747e3e6213d6406c158969d",
- },
- "strip_prefix": "python",
- },
-}
+DEFAULT_RELEASE_BASE_URL = _GITHUB_PREFIX
+DEFAULT_RELEASE_BASE_URLS = [
+ _GITHUB_PREFIX,
+ _ASTRAL_PREFIX,
+ _LEGACY_GITHUB_PREFIX,
+]
# buildifier: disable=unsorted-dict-items
MINOR_MAPPING = {
@@ -1426,26 +207,41 @@
PLATFORMS = _generate_platforms()
-def get_release_info(platform, python_version, base_url = DEFAULT_RELEASE_BASE_URL, tool_versions = TOOL_VERSIONS):
+def get_release_info(platform, python_version, base_urls = DEFAULT_RELEASE_BASE_URLS, tool_versions = None):
"""Resolve the release URL for the requested interpreter version
Args:
platform: The platform string for the interpreter
python_version: The version of the interpreter to get
- base_url: The URL to prepend to the 'url' attr in the tool_versions dict
+ base_urls: The list of URLs to prepend to the 'url' attr in the tool_versions dict
tool_versions: A dict listing the interpreter versions, their SHAs and URL
Returns:
A tuple of (filename, url, archive strip prefix, patches, patch_strip)
"""
+ if tool_versions == None:
+ tool_versions = TOOL_VERSIONS
- base_urls = [base_url]
- if base_url == DEFAULT_RELEASE_BASE_URL or base_url.startswith(_GITHUB_PREFIX):
- suffix = base_url[len(_GITHUB_PREFIX):]
- base_urls.append(_ASTRAL_PREFIX + suffix)
- elif base_url.startswith(_LEGACY_GITHUB_PREFIX):
- suffix = base_url[len(_LEGACY_GITHUB_PREFIX):]
- base_urls.append(_ASTRAL_PREFIX + suffix)
+ if type(base_urls) == type(""):
+ base_urls = [base_urls]
+ elif base_urls == None:
+ base_urls = DEFAULT_RELEASE_BASE_URLS
+
+ expanded_base_urls = []
+ for b_url in base_urls:
+ if b_url not in expanded_base_urls:
+ expanded_base_urls.append(b_url)
+ if b_url.startswith(_GITHUB_PREFIX):
+ suffix = b_url[len(_GITHUB_PREFIX):]
+ a_url = _ASTRAL_PREFIX + suffix
+ if a_url not in expanded_base_urls:
+ expanded_base_urls.append(a_url)
+ elif b_url.startswith(_LEGACY_GITHUB_PREFIX):
+ suffix = b_url[len(_LEGACY_GITHUB_PREFIX):]
+ a_url = _ASTRAL_PREFIX + suffix
+ if a_url not in expanded_base_urls:
+ expanded_base_urls.append(a_url)
+ base_urls = expanded_base_urls
url = tool_versions[python_version]["url"]
@@ -1530,3 +326,67 @@
flag_values = PLATFORMS[platform].flag_values,
constraint_values = PLATFORMS[platform].compatible_with,
)
+
+def _manifest_entry_sort_key(entry):
+ flavor_rank = {"full": 3, "install_only": 1, "install_only_stripped": 2}.get(entry.archive_flavor, 4)
+ microarch = entry.microarch
+ if not microarch:
+ microarch_rank = 0
+ elif microarch.startswith("v") and microarch[1:].isdigit():
+ microarch_rank = int(microarch[1:])
+ else:
+ microarch_rank = 999
+ return (flavor_rank, microarch_rank)
+
+def _tool_versions_from_manifest_entries(entries, base_url = DEFAULT_RELEASE_BASE_URL):
+ """Converts parsed manifest entries into the TOOL_VERSIONS dictionary format.
+
+ Args:
+ entries: {type}`list[struct]` the parsed manifest entries.
+ base_url: {type}`str` fallback base URL for standalone distributions.
+
+ Returns:
+ {type}`dict[str, dict]` the tool versions map.
+ """
+ available_versions = {}
+ entries = sorted(
+ entries,
+ key = _manifest_entry_sort_key,
+ )
+
+ for entry in entries:
+ location = entry.location
+ sha256 = entry.sha256
+ py_version = entry.python_version
+
+ matched_platform = "{}-{}-{}".format(entry.arch, entry.vendor, entry.os)
+ if entry.libc:
+ matched_platform += "-" + entry.libc
+ if entry.freethreaded:
+ matched_platform += "-freethreaded"
+
+ if matched_platform not in PLATFORMS:
+ continue
+
+ archive_flavor = entry.archive_flavor
+ if archive_flavor not in ["install_only", "install_only_stripped", "full"]:
+ continue
+
+ v_dict = available_versions.setdefault(py_version, {})
+ if matched_platform in v_dict.get("sha256", {}):
+ continue
+
+ if "://" in location:
+ urls = [location]
+ else:
+ urls = ["{}/{}".format(base_url, location)]
+
+ strip_prefix = "python/install" if archive_flavor == "full" else "python"
+
+ v_dict.setdefault("sha256", {})[matched_platform] = sha256
+ v_dict.setdefault("url", {})[matched_platform] = urls
+ v_dict.setdefault("strip_prefix", {})[matched_platform] = strip_prefix
+
+ return available_versions
+
+TOOL_VERSIONS = _tool_versions_from_manifest_entries(parse_runtime_manifest(MANIFEST_TEXT))
diff --git a/replicate_ci b/replicate_ci
new file mode 100755
index 0000000..dd9b67e
--- /dev/null
+++ b/replicate_ci
@@ -0,0 +1,167 @@
+#!/usr/bin/env python3
+
+import argparse
+import os
+import shlex
+import subprocess
+import sys
+
+import yaml
+
+
+def parse_args():
+ parser = argparse.ArgumentParser(
+ description="Replicate and emulate BazelCI job configurations from presubmit.yml."
+ )
+ parser.add_argument(
+ "job",
+ help="The key or name of the CI job to emulate (e.g., ubuntu_workspace).",
+ )
+ return parser.parse_args()
+
+
+def run_cmd(cmd, cwd=None, env=None, shell=False):
+ if shell:
+ cmd_str = cmd if isinstance(cmd, str) else " ".join(cmd)
+ else:
+ cmd_str = shlex.join(cmd) if isinstance(cmd, list) else str(cmd)
+
+ print(f"\nš Executing: {cmd_str}")
+ if cwd and cwd != os.getcwd():
+ print(f"š Directory: {cwd}")
+ if env and "USE_BAZEL_VERSION" in env:
+ print(f"š§ Bazel Version: {env['USE_BAZEL_VERSION']}")
+
+ res = subprocess.run(cmd, cwd=cwd, env=env, shell=shell)
+ if res.returncode != 0:
+ print(
+ f"\nā Command failed with return code {res.returncode}: {cmd_str}",
+ file=sys.stderr,
+ )
+ return False
+ return True
+
+
+def resolve_bazel_version(task_bazel):
+ if not task_bazel or task_bazel.startswith("${{"):
+ return None
+ return task_bazel
+
+
+def execute_ci_job(job_key, task, repo_root):
+ job_name = task.get("name", job_key)
+ print(f"\n{'=' * 80}\nšÆ Replicating CI Job: {job_key} ('{job_name}')\n{'=' * 80}")
+
+ # Setup working directory
+ cwd = repo_root
+ if "working_directory" in task:
+ cwd = os.path.join(repo_root, task["working_directory"])
+ if not os.path.exists(cwd):
+ print(
+ f"ā Error: working_directory '{task['working_directory']}' does not exist at '{cwd}'",
+ file=sys.stderr,
+ )
+ return False
+
+ # Setup environment
+ env = os.environ.copy()
+ bzl_version = resolve_bazel_version(task.get("bazel"))
+ if bzl_version:
+ env["USE_BAZEL_VERSION"] = bzl_version
+
+ # Execute pre-commands
+ is_windows = sys.platform.startswith("win")
+ pre_cmds = task.get("batch_commands" if is_windows else "shell_commands", [])
+ for pre_cmd in pre_cmds:
+ if not run_cmd(pre_cmd, cwd=cwd, env=env, shell=True):
+ return False
+
+ # Execute Build Targets
+ build_targets = [t for t in task.get("build_targets", []) if t != "--"]
+ if build_targets:
+ build_flags = task.get("build_flags", [])
+ cmd = ["bazel", "build"] + build_flags + ["--"] + build_targets
+ if not run_cmd(cmd, cwd=cwd, env=env):
+ return False
+
+ # Execute Test Targets
+ test_targets = [t for t in task.get("test_targets", []) if t != "--"]
+ if test_targets:
+ test_flags = task.get("test_flags", [])
+ if "--build_tests_only" not in test_flags:
+ test_flags = ["--build_tests_only"] + test_flags
+ cmd = ["bazel", "test"] + test_flags + ["--"] + test_targets
+ if not run_cmd(cmd, cwd=cwd, env=env):
+ return False
+
+ # Execute Coverage Targets
+ coverage_targets = [t for t in task.get("coverage_targets", []) if t != "--"]
+ if coverage_targets:
+ coverage_flags = task.get("test_flags", [])
+ cmd = ["bazel", "coverage"] + coverage_flags + ["--"] + coverage_targets
+ if not run_cmd(cmd, cwd=cwd, env=env):
+ return False
+
+ print(f"\nš Successfully replicated CI Job: {job_key}")
+ return True
+
+
+def main():
+ args = parse_args()
+
+ repo_root = os.path.abspath(os.path.dirname(__file__))
+ presubmit_path = os.path.join(repo_root, ".bazelci/presubmit.yml")
+ if not os.path.exists(presubmit_path):
+ print(
+ f"ā Error: Presubmit file not found at '{presubmit_path}'",
+ file=sys.stderr,
+ )
+ sys.exit(1)
+
+ with open(presubmit_path) as f:
+ presubmit = yaml.safe_load(f)
+
+ tasks = presubmit.get("tasks", {})
+ if not tasks:
+ print(
+ f"ā Error: No tasks found in '{presubmit_path}'",
+ file=sys.stderr,
+ )
+ sys.exit(1)
+
+ # If no job specified, print available jobs and exit
+ if not args.job:
+ print("ā Error: No CI job specified. Provide a job key.\n", file=sys.stderr)
+ print("š Available CI Job Keys:", file=sys.stderr)
+ for key in sorted(tasks.keys()):
+ name = tasks[key].get("name", key)
+ print(f" • {key} ({name})", file=sys.stderr)
+ sys.exit(1)
+
+ # Match by key or by name
+ job_key = None
+ if args.job in tasks:
+ job_key = args.job
+ else:
+ for key, config in tasks.items():
+ if config.get("name") == args.job:
+ job_key = key
+ break
+
+ if not job_key:
+ print(
+ f"ā Error: CI job '{args.job}' not found in '{presubmit_path}'\n",
+ file=sys.stderr,
+ )
+ print("š Available CI Job Keys:", file=sys.stderr)
+ for key in sorted(tasks.keys()):
+ name = tasks[key].get("name", key)
+ print(f" • {key} ({name})", file=sys.stderr)
+ sys.exit(1)
+
+ success = execute_ci_job(job_key, tasks[job_key], repo_root)
+ sys.exit(0 if success else 1)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/sphinxdocs/.bazelrc b/sphinxdocs/.bazelrc
index acff835..65c996c 100644
--- a/sphinxdocs/.bazelrc
+++ b/sphinxdocs/.bazelrc
@@ -16,6 +16,8 @@
# Local disk cache greatly speeds up builds if the regular cache is lost
common --disk_cache=~/.cache/bazel/bazel-disk-cache
common --experimental_downloader_config=downloader_config.cfg
+common --http_timeout_scaling=10.0
+common --experimental_repository_downloader_retries=10
common --incompatible_python_disallow_native_rules
common --incompatible_no_implicit_file_export
diff --git a/sphinxdocs/downloader_config.cfg b/sphinxdocs/downloader_config.cfg
index a978fb8..3fa6264 100644
--- a/sphinxdocs/downloader_config.cfg
+++ b/sphinxdocs/downloader_config.cfg
@@ -5,6 +5,9 @@
rewrite ^github\.com/bazelbuild/platforms/(.*) github.com/bazelbuild/platforms/$1
rewrite ^github\.com/bazelbuild/rules_kotlin/(.*) github.com/bazelbuild/rules_kotlin/$1
rewrite ^github\.com/bazelbuild/rules_shell/(.*) github.com/bazelbuild/rules_shell/$1
+rewrite ^github\.com/bazelbuild/rules_java/(.*) github.com/bazelbuild/rules_java/$1
+rewrite ^github\.com/bazelbuild/stardoc/(.*) github.com/bazelbuild/stardoc/$1
+
# Fall back to mirror (secondary)
# Tracking upstream BCR mirror addition: https://github.com/bazelbuild/platforms/issues/139
@@ -14,3 +17,5 @@
rewrite ^github\.com/bazelbuild/platforms/(.*) mirror.bazel.build/github.com/bazelbuild/platforms/$1
rewrite ^github\.com/bazelbuild/rules_kotlin/(.*) mirror.bazel.build/github.com/bazelbuild/rules_kotlin/$1
rewrite ^github\.com/bazelbuild/rules_shell/(.*) mirror.bazel.build/github.com/bazelbuild/rules_shell/$1
+rewrite ^github\.com/bazelbuild/rules_java/(.*) mirror.bazel.build/github.com/bazelbuild/rules_java/$1
+rewrite ^github\.com/bazelbuild/stardoc/(.*) mirror.bazel.build/github.com/bazelbuild/stardoc/$1
diff --git a/tests/docs/BUILD.bazel b/tests/docs/BUILD.bazel
new file mode 100644
index 0000000..bdc99a2
--- /dev/null
+++ b/tests/docs/BUILD.bazel
@@ -0,0 +1,10 @@
+load("@bazel_skylib//rules:build_test.bzl", "build_test")
+
+licenses(["notice"])
+
+build_test(
+ name = "docs_build_test",
+ targets = [
+ "//docs:docs",
+ ],
+)
diff --git a/tests/get_release_info/get_release_info_tests.bzl b/tests/get_release_info/get_release_info_tests.bzl
index c810489..0b1b60a 100644
--- a/tests/get_release_info/get_release_info_tests.bzl
+++ b/tests/get_release_info/get_release_info_tests.bzl
@@ -63,6 +63,7 @@
expected_urls = [
"https://github.com/astral-sh/python-build-standalone/releases/download/20230826/cpython-3.11.5+20230826-x86_64-unknown-linux-gnu-install_only.tar.gz",
"https://releases.astral.sh/github/python-build-standalone/releases/download/20230826/cpython-3.11.5+20230826-x86_64-unknown-linux-gnu-install_only.tar.gz",
+ "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.11.5+20230826-x86_64-unknown-linux-gnu-install_only.tar.gz",
]
_, urls, _, _, _ = get_release_info(
@@ -95,7 +96,7 @@
_, urls, _, _, _ = get_release_info(
platform = "x86_64-unknown-linux-gnu",
python_version = "3.11.5",
- base_url = "https://github.com/indygreg/python-build-standalone/releases/download",
+ base_urls = ["https://github.com/indygreg/python-build-standalone/releases/download"],
tool_versions = tool_versions,
)
diff --git a/tests/integration/bzlmod_lockfile/MODULE.bazel.lock b/tests/integration/bzlmod_lockfile/MODULE.bazel.lock
index d21fec2..2a0bc7d 100644
--- a/tests/integration/bzlmod_lockfile/MODULE.bazel.lock
+++ b/tests/integration/bzlmod_lockfile/MODULE.bazel.lock
@@ -250,7 +250,7 @@
},
"@@rules_python+//python/uv:uv.bzl%uv": {
"general": {
- "bzlTransitiveDigest": "Z5ZPR9z4PkJRXSyJ4KQEqM4kwiqWBCn8Ajzxy9YlS/g=",
+ "bzlTransitiveDigest": "46RcxJnhOapMeaxdcMm3RmVdNp1nPCewOOXoZyIbQ20=",
"usagesDigest": "6yXGw7XDyXjOfqBL0SBu1YBEMMYPQzCE3jTzUCkxPgg=",
"recordedInputs": [
"REPO_MAPPING:rules_python+,bazel_tools bazel_tools",
diff --git a/tests/python/python_tests.bzl b/tests/python/python_tests.bzl
index cd73839..cbef563 100644
--- a/tests/python/python_tests.bzl
+++ b/tests/python/python_tests.bzl
@@ -19,7 +19,6 @@
load("//python/private:bzlmod_enabled.bzl", "BZLMOD_ENABLED") # buildifier: disable=bzl-visibility
load("//python/private:python.bzl", "parse_modules") # buildifier: disable=bzl-visibility
load("//python/private:repo_utils.bzl", "repo_utils") # buildifier: disable=bzl-visibility
-load("//tests/support/mocks:mocks.bzl", "mocks")
load("//tests/support/mocks:python_ext.bzl", "python_ext")
_tests = []
@@ -36,7 +35,7 @@
def _test_default_from_rules_python_when_rules_python_is_root(env):
"""Verify that rules_python (as root module) default is applied."""
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
_rules_python_module(is_root = True),
),
logger = repo_utils.logger(verbosity_level = 0, name = "python"),
@@ -48,7 +47,7 @@
env.expect.that_dict(py.config.minor_mapping).contains_exactly(MINOR_MAPPING)
env.expect.that_collection(py.config.kwargs).has_size(0)
env.expect.that_collection(py.config.default.keys()).contains_exactly([
- "base_url",
+ "base_urls",
"tool_versions",
"platforms",
])
@@ -66,7 +65,7 @@
def _test_default_from_rules_python_when_rules_python_is_not_root(env):
"""Verify that rules_python default applies when rules_python is not the root module."""
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
_rules_python_module(),
),
logger = repo_utils.logger(verbosity_level = 0, name = "python"),
@@ -85,7 +84,7 @@
def _test_default_with_patch_version(env):
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
modules = [
python_ext.module(
name = "alpha",
@@ -111,7 +110,7 @@
def _test_toolchain_ordering(env):
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_module",
is_root = True,
@@ -161,7 +160,7 @@
def _test_default_from_defaults(env):
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_root_module",
defaults = [python_ext.defaults(python_version = "3.11")],
@@ -192,7 +191,7 @@
def _test_default_from_defaults_env(env):
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_root_module",
defaults = [
@@ -229,7 +228,7 @@
def _test_default_from_defaults_file(env):
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_root_module",
defaults = [
@@ -265,7 +264,7 @@
def _test_default_from_single_toolchain(env):
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_root_module",
is_root = True,
@@ -281,7 +280,7 @@
def _test_defaults_overrides_single_toolchain(env):
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_root_module",
defaults = [
@@ -301,7 +300,7 @@
def _test_defaults_overrides_toolchains_setting_is_default(env):
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_root_module",
defaults = [python_ext.defaults(python_version = "3.13")],
@@ -324,7 +323,7 @@
def _test_first_occurance_of_the_toolchain_wins(env):
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
modules = [
python_ext.module(
name = "my_module",
@@ -380,7 +379,7 @@
def _test_auth_overrides(env):
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_module",
is_root = True,
@@ -422,7 +421,7 @@
def _test_add_target_settings(env):
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_module",
is_root = True,
@@ -448,7 +447,7 @@
def _test_add_new_version(env):
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_module",
is_root = True,
@@ -460,7 +459,7 @@
"3.13.1",
"3.13.99",
],
- base_url = "",
+ base_urls = [],
minor_mapping = {
"3.13": "3.13.99",
},
@@ -534,7 +533,7 @@
def _test_register_all_versions(env):
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_module",
is_root = True,
@@ -546,7 +545,7 @@
"3.13.1",
"3.13.99",
],
- base_url = "",
+ base_urls = [],
register_all_versions = True,
),
],
@@ -605,7 +604,7 @@
def _test_ignore_unsupported_versions(env):
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_module",
is_root = True,
@@ -616,7 +615,7 @@
"3.13.0",
"3.13.1",
],
- base_url = "",
+ base_urls = [],
minor_mapping = {
"3.12": "3.12.4",
"3.13": "3.13.1",
@@ -683,14 +682,14 @@
def _test_add_patches(env):
py = parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_module",
is_root = True,
override = [
python_ext.override(
available_python_versions = ["3.13.0"],
- base_url = "",
+ base_urls = [],
minor_mapping = {
"3.13": "3.13.0",
},
@@ -762,13 +761,13 @@
def _test_fail_two_overrides(env):
errors = []
parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_module",
is_root = True,
override = [
- python_ext.override(base_url = "foo"),
- python_ext.override(base_url = "bar"),
+ python_ext.override(base_urls = ["foo"]),
+ python_ext.override(base_urls = ["bar"]),
],
toolchain = [python_ext.toolchain(python_version = "3.13")],
),
@@ -800,7 +799,7 @@
]:
errors = []
parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_module",
is_root = True,
@@ -853,7 +852,7 @@
]:
errors = []
parse_modules(
- module_ctx = mocks.mctx(
+ module_ctx = python_ext.mctx(
python_ext.module(
name = "my_module",
is_root = True,
diff --git a/tests/python_bzlmod_ext/BUILD.bazel b/tests/python_bzlmod_ext/BUILD.bazel
index 0add4e7..e266c01 100644
--- a/tests/python_bzlmod_ext/BUILD.bazel
+++ b/tests/python_bzlmod_ext/BUILD.bazel
@@ -2,6 +2,6 @@
register_python_bzlmod_ext_tests(
name = "python_bzlmod_ext_tests",
- parse_sha_manifest_name = "parse_sha_manifest_tests",
+ parse_runtime_manifest_name = "parse_runtime_manifest_tests",
runtime_manifests_name = "runtime_manifests_tests",
)
diff --git a/tests/python_bzlmod_ext/parse_sha_manifest_tests.bzl b/tests/python_bzlmod_ext/parse_runtime_manifest_tests.bzl
similarity index 91%
rename from tests/python_bzlmod_ext/parse_sha_manifest_tests.bzl
rename to tests/python_bzlmod_ext/parse_runtime_manifest_tests.bzl
index 4ddcdcc..4493576 100644
--- a/tests/python_bzlmod_ext/parse_sha_manifest_tests.bzl
+++ b/tests/python_bzlmod_ext/parse_runtime_manifest_tests.bzl
@@ -4,7 +4,7 @@
load("@rules_testing//lib:analysis_test.bzl", "analysis_test")
load("@rules_testing//lib:test_suite.bzl", "test_suite")
load("@rules_testing//lib:util.bzl", rt_util = "util")
-load("//python/private:pbs_manifest.bzl", "parse_filename", "parse_sha_manifest") # buildifier: disable=bzl-visibility
+load("//python/private:pbs_manifest.bzl", "parse_filename", "parse_runtime_manifest") # buildifier: disable=bzl-visibility
_tests = []
@@ -32,8 +32,8 @@
env.expect.that_dict(parsed1).contains_exactly({
"arch": "x86_64",
"archive_flavor": "install_only",
+ "build_flavor": "",
"build_version": "20260414",
- "flavor": "",
"freethreaded": False,
"libc": "gnu",
"location": "cpython-3.11.15+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz",
@@ -48,8 +48,8 @@
env.expect.that_dict(parsed2).contains_exactly({
"arch": "x86_64",
"archive_flavor": "full",
+ "build_flavor": "lto",
"build_version": "20260414",
- "flavor": "lto",
"freethreaded": False,
"libc": "musl",
"location": "cpython-3.10.20+20260414-x86_64_v2-unknown-linux-musl-lto-full.tar.zst",
@@ -64,8 +64,8 @@
env.expect.that_dict(parsed3).contains_exactly({
"arch": "aarch64",
"archive_flavor": "full",
+ "build_flavor": "pgo+lto",
"build_version": "20260414",
- "flavor": "pgo+lto",
"freethreaded": True,
"libc": "",
"location": "cpython-3.13.13+20260414-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst",
@@ -84,8 +84,8 @@
env.expect.that_dict(parsed5).contains_exactly({
"arch": "x86_64",
"archive_flavor": "install_only",
+ "build_flavor": "",
"build_version": "20260414",
- "flavor": "",
"freethreaded": False,
"libc": "gnu",
"location": "https://github.com/astral-sh/python-build-standalone/releases/download/20260414/cpython-3.11.15+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz",
@@ -97,7 +97,7 @@
_tests.append(_test_parse_filename_baseline)
-def _test_parse_sha_manifest(name):
+def _test_parse_runtime_manifest(name):
"""Sets up the manifest file parsing test.
Args:
@@ -110,10 +110,10 @@
analysis_test(
name = name,
target = name + "_subject",
- impl = _test_parse_sha_manifest_impl,
+ impl = _test_parse_runtime_manifest_impl,
)
-def _test_parse_sha_manifest_impl(env, target):
+def _test_parse_runtime_manifest_impl(env, target):
_ = target # @unused
content = """
8b14030dd3af9ea7f7c51b4c90feb04afd8a8f45435727e67b875270bd08f3bc cpython-3.11.15+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
@@ -121,14 +121,14 @@
ce18fdfd47c66830a40ea9b9e314a14b1636bbfd684501bc5ca1fc6d55a7933f https://example.com/cpython-3.10.20+20260414-x86_64_v2-unknown-linux-musl-lto-full.tar.zst
1111111111111111111111111111111111111111111111111111111111111111 cpython-3.13.13+20260414-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst
"""
- parsed = parse_sha_manifest(content)
+ parsed = parse_runtime_manifest(content)
env.expect.that_collection(parsed).has_size(4)
env.expect.that_dict(structs.to_dict(parsed[0])).contains_exactly({
"arch": "x86_64",
"archive_flavor": "install_only",
+ "build_flavor": "",
"build_version": "20260414",
- "flavor": "",
"freethreaded": False,
"libc": "gnu",
"location": "cpython-3.11.15+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz",
@@ -142,8 +142,8 @@
env.expect.that_dict(structs.to_dict(parsed[2])).contains_exactly({
"arch": "x86_64",
"archive_flavor": "full",
+ "build_flavor": "lto",
"build_version": "20260414",
- "flavor": "lto",
"freethreaded": False,
"libc": "musl",
"location": "https://example.com/cpython-3.10.20+20260414-x86_64_v2-unknown-linux-musl-lto-full.tar.zst",
@@ -157,8 +157,8 @@
env.expect.that_dict(structs.to_dict(parsed[3])).contains_exactly({
"arch": "aarch64",
"archive_flavor": "full",
+ "build_flavor": "pgo+lto",
"build_version": "20260414",
- "flavor": "pgo+lto",
"freethreaded": True,
"libc": "",
"location": "cpython-3.13.13+20260414-aarch64-apple-darwin-freethreaded+pgo+lto-full.tar.zst",
@@ -169,9 +169,9 @@
"vendor": "apple",
})
-_tests.append(_test_parse_sha_manifest)
+_tests.append(_test_parse_runtime_manifest)
-def parse_sha_manifest_test_suite(name):
+def parse_runtime_manifest_test_suite(name):
"""Defines the test suite for manifest parsing.
Args:
diff --git a/tests/python_bzlmod_ext/runtime_manifests_tests.bzl b/tests/python_bzlmod_ext/runtime_manifests_tests.bzl
index c46cab1..6de0ff9 100644
--- a/tests/python_bzlmod_ext/runtime_manifests_tests.bzl
+++ b/tests/python_bzlmod_ext/runtime_manifests_tests.bzl
@@ -5,7 +5,6 @@
load("@rules_testing//lib:util.bzl", rt_util = "util")
load("//python/private:python.bzl", "parse_modules") # buildifier: disable=bzl-visibility
load("//python/private:repo_utils.bzl", "repo_utils") # buildifier: disable=bzl-visibility
-load("//tests/support/mocks:mocks.bzl", "mocks") # buildifier: disable=bzl-visibility
load("//tests/support/mocks:python_ext.bzl", "python_ext") # buildifier: disable=bzl-visibility
_tests = []
@@ -52,7 +51,7 @@
)
# Pre-populate mock_files directly to bypass download output struct key mismatch in mock read lookups.
- mock_mctx = mocks.mctx(
+ mock_mctx = python_ext.mctx(
modules = [root_module],
mock_files = {
"runtime_manifest": """
@@ -110,7 +109,7 @@
add_runtime_manifest_files = [
Label("//:SHA256SUMS"),
],
- base_url = "https://example.com/dl",
+ base_urls = ["https://example.com/dl"],
register_all_versions = True,
),
],
@@ -121,7 +120,7 @@
],
)
- mock_mctx = mocks.mctx(
+ mock_mctx = python_ext.mctx(
modules = [root_module],
mock_files = {
str(Label("//:SHA256SUMS")): """
diff --git a/tests/python_bzlmod_ext/test_helpers.bzl b/tests/python_bzlmod_ext/test_helpers.bzl
index f6c1776..78ad57c 100644
--- a/tests/python_bzlmod_ext/test_helpers.bzl
+++ b/tests/python_bzlmod_ext/test_helpers.bzl
@@ -15,23 +15,23 @@
"""Helpers to conditionally register tests depending on Bzlmod enablement."""
load("//python/private:bzlmod_enabled.bzl", "BZLMOD_ENABLED") # buildifier: disable=bzl-visibility
-load(":parse_sha_manifest_tests.bzl", "parse_sha_manifest_test_suite")
+load(":parse_runtime_manifest_tests.bzl", "parse_runtime_manifest_test_suite")
load(":runtime_manifests_tests.bzl", "runtime_manifests_test_suite")
-def register_python_bzlmod_ext_tests(name, parse_sha_manifest_name, runtime_manifests_name):
+def register_python_bzlmod_ext_tests(name, parse_runtime_manifest_name, runtime_manifests_name):
"""Registers the Bzlmod extension tests if Bzlmod is enabled, otherwise defines empty test_suites.
Args:
name: The name of the master test_suite target.
- parse_sha_manifest_name: The name of the parse_sha_manifest test target.
+ parse_runtime_manifest_name: The name of the parse_runtime_manifest test target.
runtime_manifests_name: The name of the runtime_manifests test target.
"""
if BZLMOD_ENABLED:
- parse_sha_manifest_test_suite(name = parse_sha_manifest_name)
+ parse_runtime_manifest_test_suite(name = parse_runtime_manifest_name)
runtime_manifests_test_suite(name = runtime_manifests_name)
else:
native.test_suite(
- name = parse_sha_manifest_name,
+ name = parse_runtime_manifest_name,
tests = [],
)
native.test_suite(
@@ -42,7 +42,7 @@
native.test_suite(
name = name,
tests = [
- parse_sha_manifest_name,
+ parse_runtime_manifest_name,
runtime_manifests_name,
],
)
diff --git a/tests/support/mocks/mocks.bzl b/tests/support/mocks/mocks.bzl
index 48f8f95..84d39fa 100644
--- a/tests/support/mocks/mocks.bzl
+++ b/tests/support/mocks/mocks.bzl
@@ -105,9 +105,12 @@
def _mctx_read(self, x, watch = None):
_ = watch # @unused
path_str = x._path if hasattr(x, "_path") else str(x)
- if path_str not in self.mock_files:
- fail("File not found in mock_files: " + path_str)
- return self.mock_files[path_str]
+ if path_str in self.mock_files:
+ return self.mock_files[path_str]
+ for k, v in self.mock_files.items():
+ if k in path_str or k in path_str.replace(":", "/"):
+ return v
+ fail("File not found in mock_files: " + path_str)
def _mctx_path(self, x):
return _path_new(str(x), self.mock_files)
diff --git a/tests/support/mocks/python_ext.bzl b/tests/support/mocks/python_ext.bzl
index f7b5b0e..dc3ac41 100644
--- a/tests/support/mocks/python_ext.bzl
+++ b/tests/support/mocks/python_ext.bzl
@@ -30,7 +30,7 @@
"add_runtime_manifest_urls": [],
"add_target_settings": [],
"available_python_versions": [],
- "base_url": "https://github.com/astral-sh/python-build-standalone/releases/download",
+ "base_urls": ["https://github.com/astral-sh/python-build-standalone/releases/download"],
"ignore_root_user_error": True,
"minor_mapping": {},
"register_all_versions": False,
@@ -93,8 +93,45 @@
attrs.update(kwargs)
return mocks.tag(**attrs)
+_DEFAULT_RUNTIMES_MANIFEST = """
+87275619c2706affa4d1090d2ca3dad354b6d69f8b85dbfafe38785870751b9a 20251031/cpython-3.9.25+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+6112d46355857680b81849764a6cf9f38cc4cd0d1cf29d432bc12fe5aeedf9d0 20260414/cpython-3.10.20+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+1111111111111111111111111111111111111111111111111111111111111111 20241016/cpython-3.10.15+20241016-x86_64-unknown-linux-gnu-install_only.tar.gz
+2222222222222222222222222222222222222222222222222222222222222222 20240224/cpython-3.10.13+20240224-x86_64-unknown-linux-gnu-install_only.tar.gz
+0000000000000000000000000000000000000000000000000000000000000000 20260414/cpython-3.11.15+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+3333333333333333333333333333333333333333333333333333333333333333 20241016/cpython-3.11.10+20241016-x86_64-unknown-linux-gnu-install_only.tar.gz
+4444444444444444444444444444444444444444444444444444444444444444 20230116/cpython-3.11.2+20230116-x86_64-unknown-linux-gnu-install_only.tar.gz
+5555555555555555555555555555555555555555555555555555555555555555 20230116/cpython-3.11.1+20230116-x86_64-unknown-linux-gnu-install_only.tar.gz
+6666666666666666666666666666666666666666666666666666666666666666 20260414/cpython-3.12.13+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+7777777777777777777777777777777777777777777777777777777777777777 20240726/cpython-3.12.4+20240726-x86_64-unknown-linux-gnu-install_only.tar.gz
+8888888888888888888888888888888888888888888888888888888888888888 20260414/cpython-3.13.13+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+9999999999999999999999999999999999999999999999999999999999999999 20241016/cpython-3.13.0+20241016-x86_64-unknown-linux-gnu-install_only.tar.gz
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 20260414/cpython-3.14.4+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 20251031/cpython-3.14.0+20251031-x86_64-unknown-linux-gnu-install_only.tar.gz
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 20260414/cpython-3.15.0a8+20260414-x86_64-unknown-linux-gnu-install_only.tar.gz
+dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 20241205/cpython-3.13.1+20241205-x86_64-unknown-linux-gnu-install_only.tar.gz
+"""
+
+def _mctx(*args, **kwargs):
+ """Creates a mock module_ctx pre-populated with the default runtimes manifest.
+
+ Args:
+ *args: Positional arguments to pass to mocks.mctx.
+ **kwargs: Keyword arguments to pass to mocks.mctx.
+
+ Returns:
+ A mock module_ctx struct.
+ """
+ mock_files = {
+ "python/private/runtimes_manifest.txt": _DEFAULT_RUNTIMES_MANIFEST,
+ }
+ mock_files.update(kwargs.pop("mock_files", {}))
+ kwargs["mock_files"] = mock_files
+ return mocks.mctx(*args, **kwargs)
+
python_ext = struct(
defaults = _defaults,
+ mctx = _mctx,
module = _module,
override = _override,
single_version_override = _single_version_override,
diff --git a/tests/toolchains/BUILD.bazel b/tests/toolchains/BUILD.bazel
index f32ab6f..b336a06 100644
--- a/tests/toolchains/BUILD.bazel
+++ b/tests/toolchains/BUILD.bazel
@@ -13,6 +13,7 @@
# limitations under the License.
load("@bazel_skylib//rules:build_test.bzl", "build_test")
+load("@bazel_skylib//rules:diff_test.bzl", "diff_test")
load("//python/private:bzlmod_enabled.bzl", "BZLMOD_ENABLED") # buildifier: disable=bzl-visibility
load("//tests/support:py_reconfig.bzl", "py_reconfig_test")
load(":defs.bzl", "define_toolchain_tests")
@@ -38,3 +39,18 @@
"@python_3_11//:python_headers",
],
)
+
+# Verify that runtimes_manifest_workspace.bzl exactly matches runtimes_manifest.txt
+genrule(
+ name = "gen_expected_runtimes_manifest_workspace",
+ srcs = ["//python/private:runtimes_manifest.txt"],
+ outs = ["expected_runtimes_manifest_workspace.bzl"],
+ cmd = "$(execpath //python/private:sync_runtimes_manifest_workspace) $(location //python/private:runtimes_manifest.txt) $@",
+ tools = ["//python/private:sync_runtimes_manifest_workspace"],
+)
+
+diff_test(
+ name = "runtimes_manifest_workspace_sync_test",
+ file1 = "//python/private:runtimes_manifest_workspace.bzl",
+ file2 = ":expected_runtimes_manifest_workspace.bzl",
+)
diff --git a/tests/toolchains/transitions/transitions_tests.bzl b/tests/toolchains/transitions/transitions_tests.bzl
index 0cd79b3..81ce1e6 100644
--- a/tests/toolchains/transitions/transitions_tests.bzl
+++ b/tests/toolchains/transitions/transitions_tests.bzl
@@ -14,11 +14,10 @@
""
-load("@pythons_hub//:versions.bzl", "DEFAULT_PYTHON_VERSION", "MINOR_MAPPING")
+load("@pythons_hub//:versions.bzl", "DEFAULT_PYTHON_VERSION", "MINOR_MAPPING", "PYTHON_VERSIONS")
load("@rules_testing//lib:analysis_test.bzl", "analysis_test")
load("@rules_testing//lib:test_suite.bzl", "test_suite")
load("@rules_testing//lib:util.bzl", rt_util = "util")
-load("//python:versions.bzl", "TOOL_VERSIONS")
load("//python/private:bzlmod_enabled.bzl", "BZLMOD_ENABLED") # buildifier: disable=bzl-visibility
load("//python/private:common_labels.bzl", "labels") # buildifier: disable=bzl-visibility
load("//python/private:full_version.bzl", "full_version") # buildifier: disable=bzl-visibility
@@ -142,7 +141,7 @@
name = name,
tests = {
v.replace(".", "_"): (v, v)
- for v in TOOL_VERSIONS
+ for v in PYTHON_VERSIONS
},
)
diff --git a/tools/private/sync_downloader_configs.py b/tools/private/sync_downloader_configs.py
new file mode 100755
index 0000000..7e8527b
--- /dev/null
+++ b/tools/private/sync_downloader_configs.py
@@ -0,0 +1,37 @@
+#!/usr/bin/env python3
+
+"""Synchronizes downloader_config.cfg across subworkspaces."""
+
+import sys
+from pathlib import Path
+
+
+def main():
+ repo_root = Path(__file__).resolve().parent.parent.parent
+ canonical = repo_root / "downloader_config.cfg"
+
+ subworkspaces = [
+ repo_root / "gazelle" / "downloader_config.cfg",
+ repo_root / "sphinxdocs" / "downloader_config.cfg",
+ ]
+
+ with open(canonical, "r", encoding="utf-8") as f:
+ canonical_content = f.read()
+
+ changed = False
+ for sub in subworkspaces:
+ if sub.exists():
+ with open(sub, "r", encoding="utf-8") as f:
+ old_content = f.read()
+ if old_content != canonical_content:
+ with open(sub, "w", encoding="utf-8") as f:
+ f.write(canonical_content)
+ print(f"Updated {sub.relative_to(repo_root)}")
+ changed = True
+
+ if changed:
+ sys.exit(1)
+
+
+if __name__ == "__main__":
+ main()