From 54785cf2ec8483e02a4d4f26388ffdb3e6414360 Mon Sep 17 00:00:00 2001 From: pasta Date: Sun, 25 Oct 2026 15:55:39 +0000 Subject: [PATCH 1/4] params%test: check genesis and deployments against the reference RPCs The vectors are the reference implementation's getblockheader and getdeploymentinfo output for the genesis block of each chain. --- Cargo.lock | 3 + MODULE.bazel.lock | 6 +- pkgs/params/Cargo.toml | 5 + pkgs/params/corpus/chainparams.json5 | 379 +++++++++++++++++++++++++++ pkgs/params/tests/corpus.rs | 149 +++++++++++ 5 files changed, 539 insertions(+), 3 deletions(-) create mode 100644 pkgs/params/corpus/chainparams.json5 create mode 100644 pkgs/params/tests/corpus.rs diff --git a/Cargo.lock b/Cargo.lock index 5ffd1c69..0bd5b4c6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -480,9 +480,12 @@ version = "0.0.0" dependencies = [ "bitcoin-units", "bitcoin_hashes", + "dash-dev", "dash-num", "dash-types", "hex-conservative", + "rstest", + "serde", ] [[package]] diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index bdb42a0b..01f27eb1 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -501,14 +501,14 @@ "REPO_MAPPING:rules_rust+,bazel_skylib bazel_skylib+", "REPO_MAPPING:rules_rust+,bazel_tools bazel_tools", "REPO_MAPPING:rules_rust+,rules_cc rules_cc+", - "FILE:@@//Cargo.lock 70a502675de8a03d7cd743a607732b21798e38b9371e4eafa1efe18dd1a3e3dd", + "FILE:@@//Cargo.lock 73a12848b9f1a6a36d546aa313a33a003612d87cac7af0b660e4193f5b902075", "FILE:@@//Cargo.toml 92b685ae62b78b1b902e6101b7de0f5619e40255ab365cffe6918b0eaa36b855", "FILE:@@//meta/bazel/Cargo.toml 2d9ea13b6a402dd4c399ce1d1a4cd7c889e256777e52934cb148ed9de3a57db9", "FILE:@@//pkgs/num/Cargo.toml 04e621c98e203978d3a738292e5d6057f036d8d7eb94efd5e7dc3c57b2df5f51", "FILE:@@//pkgs/types/Cargo.toml bfba6031c7318abae450eaab29f86cb7461a489bf381479508aca89a0f4bb7d8", "FILE:@@//pkgs/types/marker/Cargo.toml f942e6618c2cf5807e8186e69795f08a641bc25ca4fe7babb835c1970a181d26", "FILE:@@//meta/dev/Cargo.toml fc2f4f676ff4b204e5bf2893a315dbd9222bcfb2dffbd105f6bfff205b574337", - "FILE:@@//pkgs/params/Cargo.toml 0d80c9af0b3bba5f6172ed8e788f248e3fbf4068d2dd6dcc03f56c2c59685ec3", + "FILE:@@//pkgs/params/Cargo.toml 8797a821c880cd2e9983577e2444081fae6cb5180b48ece243a1466f2c8f0e95", "FILE:@@//pkgs/pow/Cargo.toml 3f33e4320c8dc8836ac9655cbadd5e9cacee225b30950e309f265a66d5c29512", "FILE:@@//pkgs/primitives/Cargo.toml cac3f2a391cc76bb50c3a195744dd34fa12b433275eaad3e5ba75bfcce203a6e", "FILE:@@//pkgs/pkc/Cargo.toml a16f6907ab4048fbe3aa7423f49aaa615ec5ecdc1faabf13ee4e958593cea8cf", @@ -522,7 +522,7 @@ "contents": { "BUILD.bazel": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'dash_base_sdk'\n###############################################################################\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files(\n [\n \"cargo-bazel.json\",\n \"crates.bzl\",\n \"defs.bzl\",\n ] + glob(\n allow_empty = True,\n include = [\"*.bazel\"],\n ),\n)\n\nfilegroup(\n name = \"srcs\",\n srcs = glob(\n allow_empty = True,\n include = [\n \"*.bazel\",\n \"*.bzl\",\n ],\n ),\n)\n\n# Workspace Member Dependencies\nalias(\n name = \"aes-0.9.3\",\n actual = \"@crates__aes-0.9.3//:aes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"aes\",\n actual = \"@crates__aes-0.9.3//:aes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ambassador-0.5.1\",\n actual = \"@crates__ambassador-0.5.1//:ambassador\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ambassador\",\n actual = \"@crates__ambassador-0.5.1//:ambassador\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"base58ck-0.5.0\",\n actual = \"@crates__base58ck-0.5.0//:base58ck\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"base58ck\",\n actual = \"@crates__base58ck-0.5.0//:base58ck\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bitcoin-consensus-encoding-1.2.0\",\n actual = \"@crates__bitcoin-consensus-encoding-1.2.0//:bitcoin_consensus_encoding\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bitcoin-consensus-encoding\",\n actual = \"@crates__bitcoin-consensus-encoding-1.2.0//:bitcoin_consensus_encoding\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bitcoin-internals-0.7.0\",\n actual = \"@crates__bitcoin-internals-0.7.0//:bitcoin_internals\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bitcoin-internals\",\n actual = \"@crates__bitcoin-internals-0.7.0//:bitcoin_internals\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bitcoin-primitives-0.103.1\",\n actual = \"@crates__bitcoin-primitives-0.103.1//:bitcoin_primitives\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bitcoin-primitives\",\n actual = \"@crates__bitcoin-primitives-0.103.1//:bitcoin_primitives\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bitcoin-units-0.5.0\",\n actual = \"@crates__bitcoin-units-0.5.0//:bitcoin_units\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bitcoin-units\",\n actual = \"@crates__bitcoin-units-0.5.0//:bitcoin_units\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bitcoin_hashes-1.2.0\",\n actual = \"@crates__bitcoin_hashes-1.2.0//:bitcoin_hashes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bitcoin_hashes\",\n actual = \"@crates__bitcoin_hashes-1.2.0//:bitcoin_hashes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"blst-0.3.17\",\n actual = \"@crates__blst-0.3.17//:blst\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"blst\",\n actual = \"@crates__blst-0.3.17//:blst\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"built-0.7.7\",\n actual = \"@crates__built-0.7.7//:built\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"built\",\n actual = \"@crates__built-0.7.7//:built\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"cfg-if-1.0.5\",\n actual = \"@crates__cfg-if-1.0.5//:cfg_if\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"cfg-if\",\n actual = \"@crates__cfg-if-1.0.5//:cfg_if\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ciborium-0.2.2\",\n actual = \"@crates__ciborium-0.2.2//:ciborium\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ciborium\",\n actual = \"@crates__ciborium-0.2.2//:ciborium\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"delegate-0.13.5\",\n actual = \"@crates__delegate-0.13.5//:delegate\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"delegate\",\n actual = \"@crates__delegate-0.13.5//:delegate\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"digest-0.11.3\",\n actual = \"@crates__digest-0.11.3//:digest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"digest\",\n actual = \"@crates__digest-0.11.3//:digest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"divan-0.1.21\",\n actual = \"@crates__divan-0.1.21//:divan\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"divan\",\n actual = \"@crates__divan-0.1.21//:divan\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ed25519-dalek-3.0.0\",\n actual = \"@crates__ed25519-dalek-3.0.0//:ed25519_dalek\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ed25519-dalek\",\n actual = \"@crates__ed25519-dalek-3.0.0//:ed25519_dalek\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ff-0.14.0\",\n actual = \"@crates__ff-0.14.0//:ff\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ff\",\n actual = \"@crates__ff-0.14.0//:ff\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"getrandom-0.4.3\",\n actual = \"@crates__getrandom-0.4.3//:getrandom\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"getrandom\",\n actual = \"@crates__getrandom-0.4.3//:getrandom\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"group-0.14.0\",\n actual = \"@crates__group-0.14.0//:group\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"group\",\n actual = \"@crates__group-0.14.0//:group\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"hex-conservative-1.3.0\",\n actual = \"@crates__hex-conservative-1.3.0//:hex_conservative\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"hex-conservative\",\n actual = \"@crates__hex-conservative-1.3.0//:hex_conservative\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"json5-0.4.1\",\n actual = \"@crates__json5-0.4.1//:json5\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"json5\",\n actual = \"@crates__json5-0.4.1//:json5\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"libm-0.2.16\",\n actual = \"@crates__libm-0.2.16//:libm\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"libm\",\n actual = \"@crates__libm-0.2.16//:libm\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"proc-macro2-1.0.107\",\n actual = \"@crates__proc-macro2-1.0.107//:proc_macro2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"proc-macro2\",\n actual = \"@crates__proc-macro2-1.0.107//:proc_macro2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"quote-1.0.47\",\n actual = \"@crates__quote-1.0.47//:quote\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"quote\",\n actual = \"@crates__quote-1.0.47//:quote\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand_core-0.10.1\",\n actual = \"@crates__rand_core-0.10.1//:rand_core\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand_core\",\n actual = \"@crates__rand_core-0.10.1//:rand_core\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rstest-0.25.0\",\n actual = \"@crates__rstest-0.25.0//:rstest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rstest\",\n actual = \"@crates__rstest-0.25.0//:rstest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"secp256k1-0.33.1\",\n actual = \"@crates__secp256k1-0.33.1//:secp256k1\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"secp256k1\",\n actual = \"@crates__secp256k1-0.33.1//:secp256k1\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde-1.0.229\",\n actual = \"@crates__serde-1.0.229//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde\",\n actual = \"@crates__serde-1.0.229//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json-1.0.154\",\n actual = \"@crates__serde_json-1.0.154//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json\",\n actual = \"@crates__serde_json-1.0.154//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha2-0.11.0\",\n actual = \"@crates__sha2-0.11.0//:sha2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha2\",\n actual = \"@crates__sha2-0.11.0//:sha2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"subtle-2.6.1\",\n actual = \"@crates__subtle-2.6.1//:subtle\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"subtle\",\n actual = \"@crates__subtle-2.6.1//:subtle\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"syn-2.0.119\",\n actual = \"@crates__syn-2.0.119//:syn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"syn\",\n actual = \"@crates__syn-2.0.119//:syn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"thiserror-2.0.21\",\n actual = \"@crates__thiserror-2.0.21//:thiserror\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"thiserror\",\n actual = \"@crates__thiserror-2.0.21//:thiserror\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"wide-1.7.1\",\n actual = \"@crates__wide-1.7.1//:wide\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"wide\",\n actual = \"@crates__wide-1.7.1//:wide\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"xxhash-rust-0.8.19\",\n actual = \"@crates__xxhash-rust-0.8.19//:xxhash_rust\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"xxhash-rust\",\n actual = \"@crates__xxhash-rust-0.8.19//:xxhash_rust\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"zeroize-1.9.1\",\n actual = \"@crates__zeroize-1.9.1//:zeroize\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"zeroize\",\n actual = \"@crates__zeroize-1.9.1//:zeroize\",\n tags = [\"manual\"],\n)\n", "alias_rules.bzl": "\"\"\"Alias that transitions its target to `compilation_mode=opt`. Use `transition_alias=\"opt\"` to enable.\"\"\"\n\nload(\"@rules_cc//cc:defs.bzl\", \"CcInfo\")\nload(\"@rules_rust//rust:rust_common.bzl\", \"COMMON_PROVIDERS\")\n\ndef _transition_alias_impl(ctx):\n # `ctx.attr.actual` is a list of 1 item due to the transition\n providers = [ctx.attr.actual[0][provider] for provider in COMMON_PROVIDERS]\n if CcInfo in ctx.attr.actual[0]:\n providers.append(ctx.attr.actual[0][CcInfo])\n return providers\n\ndef _change_compilation_mode(compilation_mode):\n def _change_compilation_mode_impl(_settings, _attr):\n return {\n \"//command_line_option:compilation_mode\": compilation_mode,\n }\n\n return transition(\n implementation = _change_compilation_mode_impl,\n inputs = [],\n outputs = [\n \"//command_line_option:compilation_mode\",\n ],\n )\n\ndef _transition_alias_rule(compilation_mode):\n return rule(\n implementation = _transition_alias_impl,\n provides = COMMON_PROVIDERS,\n attrs = {\n \"actual\": attr.label(\n mandatory = True,\n doc = \"`rust_library()` target to transition to `compilation_mode=opt`.\",\n providers = COMMON_PROVIDERS,\n cfg = _change_compilation_mode(compilation_mode),\n ),\n \"_allowlist_function_transition\": attr.label(\n default = \"@bazel_tools//tools/allowlists/function_transition_allowlist\",\n ),\n },\n doc = \"Transitions a Rust library crate to the `compilation_mode=opt`.\",\n )\n\ntransition_alias_dbg = _transition_alias_rule(\"dbg\")\ntransition_alias_fastbuild = _transition_alias_rule(\"fastbuild\")\ntransition_alias_opt = _transition_alias_rule(\"opt\")\n", - "crates.bzl": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'dash_base_sdk'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\n- [crate_edition](#crate_edition)\n- [crate_deps](#crate_deps)\n- [all_crate_deps](#all_crate_deps)\n- [crate_repositories](#crate_repositories)\n\n\"\"\"\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"git_repository\")\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\nload(\"@bazel_tools//tools/build_defs/repo:utils.bzl\", \"maybe\")\nload(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\nload(\"@rules_rust//crate_universe:defs.bzl\", \"crates_vendor_remote_repository\", \"local_crate_mirror\")\n\n###############################################################################\n# MACROS API\n###############################################################################\n\n# An identifier that represent common dependencies (unconditional).\n_COMMON_CONDITION = \"\"\n\ndef _flatten_dependency_maps(all_dependency_maps):\n \"\"\"Flatten a list of dependency maps into one dictionary.\n\n Dependency maps have the following structure:\n\n ```python\n DEPENDENCIES_MAP = {\n # The first key in the map is a Bazel package\n # name of the workspace this file is defined in.\n \"workspace_member_package\": {\n\n # Not all dependencies are supported for all platforms.\n # the condition key is the condition required to be true\n # on the host platform.\n \"condition\": {\n\n # An alias to a crate target. # The label of the crate target the\n # Aliases are only crate names. # package name refers to.\n \"package_name\": \"@full//:label\",\n }\n }\n }\n ```\n\n Args:\n all_dependency_maps (list): A list of dicts as described above\n\n Returns:\n dict: A dictionary as described above\n \"\"\"\n dependencies = {}\n\n for workspace_deps_map in all_dependency_maps:\n for pkg_name, conditional_deps_map in workspace_deps_map.items():\n if pkg_name not in dependencies:\n non_frozen_map = dict()\n for key, values in conditional_deps_map.items():\n non_frozen_map.update({key: dict(values.items())})\n dependencies.setdefault(pkg_name, non_frozen_map)\n continue\n\n for condition, deps_map in conditional_deps_map.items():\n # If the condition has not been recorded, do so and continue\n if condition not in dependencies[pkg_name]:\n dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))\n continue\n\n # Alert on any miss-matched dependencies\n inconsistent_entries = []\n for crate_name, crate_label in deps_map.items():\n existing = dependencies[pkg_name][condition].get(crate_name)\n if existing and existing != crate_label:\n inconsistent_entries.append((crate_name, existing, crate_label))\n dependencies[pkg_name][condition].update({crate_name: crate_label})\n\n return dependencies\n\ndef crate_deps(deps, package_name = None):\n \"\"\"Finds the fully qualified label of the requested crates for the package where this macro is called.\n\n Args:\n deps (list): The desired list of crate targets.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()`.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if not deps:\n return []\n\n if package_name == None:\n package_name = native.package_name()\n\n # Join both sets of dependencies\n dependencies = _flatten_dependency_maps([\n _NORMAL_DEPENDENCIES,\n _NORMAL_DEV_DEPENDENCIES,\n _PROC_MACRO_DEPENDENCIES,\n _PROC_MACRO_DEV_DEPENDENCIES,\n _BUILD_DEPENDENCIES,\n _BUILD_PROC_MACRO_DEPENDENCIES,\n ]).pop(package_name, {})\n\n # Combine all conditional packages so we can easily index over a flat list\n # TODO: Perhaps this should actually return select statements and maintain\n # the conditionals of the dependencies\n flat_deps = {}\n for deps_set in dependencies.values():\n for crate_name, crate_label in deps_set.items():\n flat_deps.update({crate_name: crate_label})\n\n missing_crates = []\n crate_targets = []\n for crate_target in deps:\n if crate_target not in flat_deps:\n missing_crates.append(crate_target)\n else:\n crate_targets.append(flat_deps[crate_target])\n\n if missing_crates:\n fail(\"Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`\".format(\n missing_crates,\n package_name,\n dependencies,\n ))\n\n return crate_targets\n\ndef crate_edition(package_name = None):\n \"\"\"Finds the Rust edition for the package where this macro is called.\n\n Args:\n package_name (str, optional): The package name whose edition should be\n looked up. Defaults to `native.package_name()` when unset.\n\n Returns:\n str: The Rust edition declared by the package's Cargo.toml file.\n \"\"\"\n if package_name == None:\n package_name = native.package_name()\n\n if package_name not in _CRATE_EDITIONS:\n fail(\"Tried to get crate_edition for package \" + package_name + \" but that package had no Cargo.toml file\")\n\n return _CRATE_EDITIONS[package_name]\n\ndef all_crate_deps(\n normal = False, \n normal_dev = False, \n proc_macro = False, \n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Finds the fully qualified label of all requested direct crate dependencies \\\n for the package where this macro is called.\n\n If no parameters are set, all normal dependencies are returned. Setting any one flag will\n otherwise impact the contents of the returned list.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list.\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_dependency_maps = []\n if normal:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n if normal_dev:\n all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)\n if proc_macro:\n all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)\n if proc_macro_dev:\n all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)\n if build:\n all_dependency_maps.append(_BUILD_DEPENDENCIES)\n if build_proc_macro:\n all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)\n\n # Default to always using normal dependencies\n if not all_dependency_maps:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n\n dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)\n\n if not dependencies:\n if dependencies == None:\n fail(\"Tried to get all_crate_deps for package \" + package_name + \" but that package had no Cargo.toml file\")\n else:\n return []\n\n crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())\n for condition, deps in dependencies.items():\n crate_deps += selects.with_or({\n tuple(_CONDITIONS[condition]): deps.values(),\n \"//conditions:default\": [],\n })\n\n return crate_deps\n\ndef aliases(\n normal = False,\n normal_dev = False,\n proc_macro = False,\n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Produces a map of Crate alias names to their original label\n\n If no dependency kinds are specified, `normal` and `proc_macro` are used by default.\n Setting any one flag will otherwise determine the contents of the returned dict.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list..\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n dict: The aliases of all associated packages\n \"\"\"\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_aliases_maps = []\n if normal:\n all_aliases_maps.append(_NORMAL_ALIASES)\n if normal_dev:\n all_aliases_maps.append(_NORMAL_DEV_ALIASES)\n if proc_macro:\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n if proc_macro_dev:\n all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)\n if build:\n all_aliases_maps.append(_BUILD_ALIASES)\n if build_proc_macro:\n all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)\n\n # Default to always using normal aliases\n if not all_aliases_maps:\n all_aliases_maps.append(_NORMAL_ALIASES)\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n\n aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)\n\n if not aliases:\n return dict()\n\n common_items = aliases.pop(_COMMON_CONDITION, {}).items()\n\n # If there are only common items in the dictionary, immediately return them\n if not len(aliases.keys()) == 1:\n return dict(common_items)\n\n # Build a single select statement where each conditional has accounted for the\n # common set of aliases.\n crate_aliases = {\"//conditions:default\": dict(common_items)}\n for condition, deps in aliases.items():\n condition_triples = _CONDITIONS[condition]\n for triple in condition_triples:\n if triple in crate_aliases:\n crate_aliases[triple].update(deps)\n else:\n crate_aliases.update({triple: dict(deps.items() + common_items)})\n\n return select(crate_aliases)\n\n###############################################################################\n# WORKSPACE MEMBER DEPS, ALIASES, AND EDITIONS\n###############################################################################\n\n_CRATE_EDITIONS = {\n \"meta/dev\": \"2021\",\n \"meta/bazel\": \"2021\",\n \"pkgs/num\": \"2021\",\n \"pkgs/p2p_core\": \"2021\",\n \"pkgs/params\": \"2021\",\n \"pkgs/pkc\": \"2021\",\n \"pkgs/pow\": \"2021\",\n \"pkgs/primitives\": \"2021\",\n \"pkgs/script\": \"2021\",\n \"pkgs/types\": \"2021\",\n \"pkgs/types/marker\": \"2021\",\n}\n\n_NORMAL_DEPENDENCIES = {\n \"meta/dev\": {\n _COMMON_CONDITION: {\n \"bitcoin-consensus-encoding\": Label(\"@crates//bitcoin-consensus-encoding-1.2.0\"),\n \"cfg-if\": Label(\"@crates//cfg-if-1.0.5\"),\n \"ciborium\": Label(\"@crates//ciborium-0.2.2\"),\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"json5\": Label(\"@crates//json5-0.4.1\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"serde_json\": Label(\"@crates//serde_json-1.0.154\"),\n },\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n _COMMON_CONDITION: {\n \"bitcoin-consensus-encoding\": Label(\"@crates//bitcoin-consensus-encoding-1.2.0\"),\n \"bitcoin-internals\": Label(\"@crates//bitcoin-internals-0.7.0\"),\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n },\n },\n \"pkgs/p2p_core\": {\n _COMMON_CONDITION: {\n \"bitcoin-consensus-encoding\": Label(\"@crates//bitcoin-consensus-encoding-1.2.0\"),\n \"cfg-if\": Label(\"@crates//cfg-if-1.0.5\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"thiserror\": Label(\"@crates//thiserror-2.0.21\"),\n },\n },\n \"pkgs/params\": {\n _COMMON_CONDITION: {\n \"bitcoin-units\": Label(\"@crates//bitcoin-units-0.5.0\"),\n \"bitcoin_hashes\": Label(\"@crates//bitcoin_hashes-1.2.0\"),\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n },\n },\n \"pkgs/pkc\": {\n _COMMON_CONDITION: {\n \"aes\": Label(\"@crates//aes-0.9.3\"),\n \"base58ck\": Label(\"@crates//base58ck-0.5.0\"),\n \"bitcoin_hashes\": Label(\"@crates//bitcoin_hashes-1.2.0\"),\n \"blst\": Label(\"@crates//blst-0.3.17\"),\n \"cfg-if\": Label(\"@crates//cfg-if-1.0.5\"),\n \"ed25519-dalek\": Label(\"@crates//ed25519-dalek-3.0.0\"),\n \"ff\": Label(\"@crates//ff-0.14.0\"),\n \"group\": Label(\"@crates//group-0.14.0\"),\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"rand_core\": Label(\"@crates//rand_core-0.10.1\"),\n \"secp256k1\": Label(\"@crates//secp256k1-0.33.1\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"sha2\": Label(\"@crates//sha2-0.11.0\"),\n \"subtle\": Label(\"@crates//subtle-2.6.1\"),\n \"thiserror\": Label(\"@crates//thiserror-2.0.21\"),\n \"zeroize\": Label(\"@crates//zeroize-1.9.1\"),\n },\n },\n \"pkgs/pow\": {\n _COMMON_CONDITION: {\n \"digest\": Label(\"@crates//digest-0.11.3\"),\n \"wide\": Label(\"@crates//wide-1.7.1\"),\n },\n },\n \"pkgs/primitives\": {\n _COMMON_CONDITION: {\n \"bitcoin-consensus-encoding\": Label(\"@crates//bitcoin-consensus-encoding-1.2.0\"),\n \"bitcoin-primitives\": Label(\"@crates//bitcoin-primitives-0.103.1\"),\n \"bitcoin-units\": Label(\"@crates//bitcoin-units-0.5.0\"),\n \"bitcoin_hashes\": Label(\"@crates//bitcoin_hashes-1.2.0\"),\n \"cfg-if\": Label(\"@crates//cfg-if-1.0.5\"),\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"libm\": Label(\"@crates//libm-0.2.16\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"thiserror\": Label(\"@crates//thiserror-2.0.21\"),\n },\n },\n \"pkgs/script\": {\n _COMMON_CONDITION: {\n \"base58ck\": Label(\"@crates//base58ck-0.5.0\"),\n \"bitcoin-consensus-encoding\": Label(\"@crates//bitcoin-consensus-encoding-1.2.0\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n },\n },\n \"pkgs/types\": {\n _COMMON_CONDITION: {\n \"base58ck\": Label(\"@crates//base58ck-0.5.0\"),\n \"bitcoin-consensus-encoding\": Label(\"@crates//bitcoin-consensus-encoding-1.2.0\"),\n \"bitcoin-primitives\": Label(\"@crates//bitcoin-primitives-0.103.1\"),\n \"bitcoin_hashes\": Label(\"@crates//bitcoin_hashes-1.2.0\"),\n \"cfg-if\": Label(\"@crates//cfg-if-1.0.5\"),\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"subtle\": Label(\"@crates//subtle-2.6.1\"),\n \"thiserror\": Label(\"@crates//thiserror-2.0.21\"),\n \"zeroize\": Label(\"@crates//zeroize-1.9.1\"),\n },\n },\n \"pkgs/types/marker\": {\n _COMMON_CONDITION: {\n \"quote\": Label(\"@crates//quote-1.0.47\"),\n \"syn\": Label(\"@crates//syn-2.0.119\"),\n \"xxhash-rust\": Label(\"@crates//xxhash-rust-0.8.19\"),\n },\n },\n}\n\n\n_NORMAL_ALIASES = {\n \"meta/dev\": {\n _COMMON_CONDITION: {\n },\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/p2p_core\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/params\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/pkc\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/pow\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/primitives\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/script\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/types\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/types/marker\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n _COMMON_CONDITION: {\n \"divan\": Label(\"@crates//divan-0.1.21\"),\n \"rstest\": Label(\"@crates//rstest-0.25.0\"),\n },\n },\n \"pkgs/p2p_core\": {\n _COMMON_CONDITION: {\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"rstest\": Label(\"@crates//rstest-0.25.0\"),\n },\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n _COMMON_CONDITION: {\n \"bitcoin-consensus-encoding\": Label(\"@crates//bitcoin-consensus-encoding-1.2.0\"),\n \"divan\": Label(\"@crates//divan-0.1.21\"),\n \"getrandom\": Label(\"@crates//getrandom-0.4.3\"),\n \"rstest\": Label(\"@crates//rstest-0.25.0\"),\n },\n },\n \"pkgs/pow\": {\n _COMMON_CONDITION: {\n \"divan\": Label(\"@crates//divan-0.1.21\"),\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"rstest\": Label(\"@crates//rstest-0.25.0\"),\n },\n },\n \"pkgs/primitives\": {\n _COMMON_CONDITION: {\n \"rstest\": Label(\"@crates//rstest-0.25.0\"),\n },\n },\n \"pkgs/script\": {\n _COMMON_CONDITION: {\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"rstest\": Label(\"@crates//rstest-0.25.0\"),\n },\n },\n \"pkgs/types\": {\n _COMMON_CONDITION: {\n \"ciborium\": Label(\"@crates//ciborium-0.2.2\"),\n \"rstest\": Label(\"@crates//rstest-0.25.0\"),\n },\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/p2p_core\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/pow\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/primitives\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/script\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/types\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n _COMMON_CONDITION: {\n \"ambassador\": Label(\"@crates//ambassador-0.5.1\"),\n \"delegate\": Label(\"@crates//delegate-0.13.5\"),\n },\n },\n \"pkgs/p2p_core\": {\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n },\n \"pkgs/pow\": {\n },\n \"pkgs/primitives\": {\n },\n \"pkgs/script\": {\n },\n \"pkgs/types\": {\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_PROC_MACRO_ALIASES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n },\n \"pkgs/p2p_core\": {\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n },\n \"pkgs/pow\": {\n },\n \"pkgs/primitives\": {\n },\n \"pkgs/script\": {\n },\n \"pkgs/types\": {\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n },\n \"pkgs/p2p_core\": {\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n },\n \"pkgs/pow\": {\n },\n \"pkgs/primitives\": {\n },\n \"pkgs/script\": {\n },\n \"pkgs/types\": {\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/p2p_core\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/pow\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/primitives\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/script\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/types\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_BUILD_DEPENDENCIES = {\n \"meta/dev\": {\n _COMMON_CONDITION: {\n \"built\": Label(\"@crates//built-0.7.7\"),\n \"proc-macro2\": Label(\"@crates//proc-macro2-1.0.107\"),\n \"syn\": Label(\"@crates//syn-2.0.119\"),\n \"xxhash-rust\": Label(\"@crates//xxhash-rust-0.8.19\"),\n },\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n },\n \"pkgs/p2p_core\": {\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n },\n \"pkgs/pow\": {\n },\n \"pkgs/primitives\": {\n },\n \"pkgs/script\": {\n },\n \"pkgs/types\": {\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_BUILD_ALIASES = {\n \"meta/dev\": {\n _COMMON_CONDITION: {\n },\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n },\n \"pkgs/p2p_core\": {\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n },\n \"pkgs/pow\": {\n },\n \"pkgs/primitives\": {\n },\n \"pkgs/script\": {\n },\n \"pkgs/types\": {\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n },\n \"pkgs/p2p_core\": {\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n },\n \"pkgs/pow\": {\n },\n \"pkgs/primitives\": {\n },\n \"pkgs/script\": {\n },\n \"pkgs/types\": {\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n },\n \"pkgs/p2p_core\": {\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n },\n \"pkgs/pow\": {\n },\n \"pkgs/primitives\": {\n },\n \"pkgs/script\": {\n },\n \"pkgs/types\": {\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_CONDITIONS = {\n \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"arm64ec-pc-windows-msvc\": [],\n \"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [],\n \"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), not(any(all(target_os = \\\"linux\\\", target_env = \\\"\\\"), getrandom_backend = \\\"custom\\\", getrandom_backend = \\\"linux_raw\\\", getrandom_backend = \\\"rdrand\\\", getrandom_backend = \\\"rndr\\\"))))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(not(curve25519_dalek_backend = \\\"fiat\\\"), not(curve25519_dalek_backend = \\\"serial\\\"), target_arch = \\\"x86_64\\\"))\": [\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(not(rustix_use_libc), not(miri), target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\"))))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"android\\\"))\": [],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\": [],\n \"cfg(all(target_os = \\\"uefi\\\", getrandom_backend = \\\"efi_rng\\\"))\": [],\n \"cfg(all(windows, not(target_arch = \\\"arm64ec\\\")))\": [],\n \"cfg(any())\": [],\n \"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(target_os = \\\"dragonfly\\\", target_os = \\\"freebsd\\\", target_os = \\\"hurd\\\", target_os = \\\"illumos\\\", target_os = \\\"cygwin\\\", all(target_os = \\\"horizon\\\", target_arch = \\\"arm\\\")))\": [],\n \"cfg(any(target_os = \\\"haiku\\\", target_os = \\\"redox\\\", target_os = \\\"nto\\\", target_os = \\\"aix\\\"))\": [],\n \"cfg(any(target_os = \\\"ios\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\", target_os = \\\"tvos\\\"))\": [],\n \"cfg(any(target_os = \\\"macos\\\", target_os = \\\"openbsd\\\", target_os = \\\"vita\\\", target_os = \\\"emscripten\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n \"cfg(curve25519_dalek_backend = \\\"fiat\\\")\": [],\n \"cfg(not(any(target_arch = \\\"wasm32\\\", target_os = \\\"none\\\", target_os = \\\"unknown\\\", target_os = \\\"uefi\\\")))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(windows))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(target_arch = \\\"spirv\\\")\": [],\n \"cfg(target_arch = \\\"x86\\\")\": [],\n \"cfg(target_arch = \\\"x86_64\\\")\": [\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(target_env = \\\"msvc\\\")\": [],\n \"cfg(target_os = \\\"hermit\\\")\": [],\n \"cfg(target_os = \\\"netbsd\\\")\": [],\n \"cfg(target_os = \\\"solaris\\\")\": [],\n \"cfg(target_os = \\\"vxworks\\\")\": [],\n \"cfg(target_os = \\\"wasi\\\")\": [],\n \"cfg(unix)\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(windows)\": [],\n \"x86_64-apple-darwin\": [\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n}\n\n###############################################################################\n\ndef crate_repositories():\n \"\"\"A macro for defining repositories for all generated crates.\n\n Returns:\n A list of repos visible to the module through the module extension.\n \"\"\"\n maybe(\n crates_vendor_remote_repository,\n name = \"crates\",\n # Lean interface: just point at `crates.bzl`; the repo rule\n # derives the sibling `BUILD.bazel` and `defs.bzl`.\n crates_module = Label(\"@crates//crates:crates.bzl\"),\n )\n maybe(\n http_archive,\n name = \"crates__aes-0.9.3\",\n sha256 = \"35f0f96ce78e38c3dc6d8948aa8163d06385be74000f3c7a95bf1eef35d3ea32\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aes/0.9.3/download\"],\n strip_prefix = \"aes-0.9.3\",\n build_file = Label(\"@crates//crates:BUILD.aes-0.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__aho-corasick-1.1.5\",\n sha256 = \"c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aho-corasick/1.1.5/download\"],\n strip_prefix = \"aho-corasick-1.1.5\",\n build_file = Label(\"@crates//crates:BUILD.aho-corasick-1.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ambassador-0.5.1\",\n sha256 = \"cd3d4da7fddbc6567cbd7b5c30364f91313701b1857ab5b925eb3acf06162eed\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ambassador/0.5.1/download\"],\n strip_prefix = \"ambassador-0.5.1\",\n build_file = Label(\"@crates//crates:BUILD.ambassador-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-1.0.14\",\n sha256 = \"940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle/1.0.14/download\"],\n strip_prefix = \"anstyle-1.0.14\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-1.0.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__arrayvec-0.7.8\",\n sha256 = \"d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/arrayvec/0.7.8/download\"],\n strip_prefix = \"arrayvec-0.7.8\",\n build_file = Label(\"@crates//crates:BUILD.arrayvec-0.7.8.bazel\"),\n )\n\n maybe(\n git_repository,\n name = \"crates__base58ck-0.5.0\",\n commit = \"7ba35c7c1dd63892bfb9c9395bbd80e2ab5df516\",\n init_submodules = True,\n remote = \"https://github.com/rust-bitcoin/rust-bitcoin\",\n build_file = Label(\"@crates//crates:BUILD.base58ck-0.5.0.bazel\"),\n strip_prefix = \"base58\",\n )\n\n maybe(\n git_repository,\n name = \"crates__bitcoin-consensus-encoding-1.2.0\",\n commit = \"7ba35c7c1dd63892bfb9c9395bbd80e2ab5df516\",\n init_submodules = True,\n remote = \"https://github.com/rust-bitcoin/rust-bitcoin\",\n build_file = Label(\"@crates//crates:BUILD.bitcoin-consensus-encoding-1.2.0.bazel\"),\n strip_prefix = \"consensus_encoding\",\n )\n\n maybe(\n git_repository,\n name = \"crates__bitcoin-internals-0.7.0\",\n commit = \"7ba35c7c1dd63892bfb9c9395bbd80e2ab5df516\",\n init_submodules = True,\n remote = \"https://github.com/rust-bitcoin/rust-bitcoin\",\n build_file = Label(\"@crates//crates:BUILD.bitcoin-internals-0.7.0.bazel\"),\n strip_prefix = \"internals\",\n )\n\n maybe(\n git_repository,\n name = \"crates__bitcoin-primitives-0.103.1\",\n commit = \"7ba35c7c1dd63892bfb9c9395bbd80e2ab5df516\",\n init_submodules = True,\n remote = \"https://github.com/rust-bitcoin/rust-bitcoin\",\n build_file = Label(\"@crates//crates:BUILD.bitcoin-primitives-0.103.1.bazel\"),\n strip_prefix = \"primitives\",\n )\n\n maybe(\n git_repository,\n name = \"crates__bitcoin-units-0.5.0\",\n commit = \"7ba35c7c1dd63892bfb9c9395bbd80e2ab5df516\",\n init_submodules = True,\n remote = \"https://github.com/rust-bitcoin/rust-bitcoin\",\n build_file = Label(\"@crates//crates:BUILD.bitcoin-units-0.5.0.bazel\"),\n strip_prefix = \"units\",\n )\n\n maybe(\n git_repository,\n name = \"crates__bitcoin_hashes-1.2.0\",\n commit = \"7ba35c7c1dd63892bfb9c9395bbd80e2ab5df516\",\n init_submodules = True,\n remote = \"https://github.com/rust-bitcoin/rust-bitcoin\",\n build_file = Label(\"@crates//crates:BUILD.bitcoin_hashes-1.2.0.bazel\"),\n strip_prefix = \"hashes\",\n )\n\n maybe(\n http_archive,\n name = \"crates__bitflags-2.13.2\",\n sha256 = \"3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/2.13.2/download\"],\n strip_prefix = \"bitflags-2.13.2\",\n build_file = Label(\"@crates//crates:BUILD.bitflags-2.13.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__block-buffer-0.12.1\",\n sha256 = \"d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block-buffer/0.12.1/download\"],\n strip_prefix = \"block-buffer-0.12.1\",\n build_file = Label(\"@crates//crates:BUILD.block-buffer-0.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__blst-0.3.17\",\n sha256 = \"c20659f9bbee16cbbd2f7393e40ab6309f5a98f76a2eb57a995ec508b72387fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/blst/0.3.17/download\"],\n strip_prefix = \"blst-0.3.17\",\n build_file = Label(\"@crates//crates:BUILD.blst-0.3.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__built-0.7.7\",\n sha256 = \"56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/built/0.7.7/download\"],\n strip_prefix = \"built-0.7.7\",\n build_file = Label(\"@crates//crates:BUILD.built-0.7.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bytemuck-1.25.2\",\n sha256 = \"95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytemuck/1.25.2/download\"],\n strip_prefix = \"bytemuck-1.25.2\",\n build_file = Label(\"@crates//crates:BUILD.bytemuck-1.25.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cargo-lock-10.1.0\",\n sha256 = \"c06acb4f71407ba205a07cb453211e0e6a67b21904e47f6ba1f9589e38f2e454\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cargo-lock/10.1.0/download\"],\n strip_prefix = \"cargo-lock-10.1.0\",\n build_file = Label(\"@crates//crates:BUILD.cargo-lock-10.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cc-1.8.0\",\n sha256 = \"6651c9ed80effdc7db0ff72512157f901af5e3549e341e24b1dd4887d836d838\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cc/1.8.0/download\"],\n strip_prefix = \"cc-1.8.0\",\n build_file = Label(\"@crates//crates:BUILD.cc-1.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cfg-if-1.0.5\",\n sha256 = \"4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg-if/1.0.5/download\"],\n strip_prefix = \"cfg-if-1.0.5\",\n build_file = Label(\"@crates//crates:BUILD.cfg-if-1.0.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ciborium-0.2.2\",\n sha256 = \"42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ciborium/0.2.2/download\"],\n strip_prefix = \"ciborium-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.ciborium-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ciborium-io-0.2.2\",\n sha256 = \"05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ciborium-io/0.2.2/download\"],\n strip_prefix = \"ciborium-io-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.ciborium-io-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ciborium-ll-0.2.2\",\n sha256 = \"57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ciborium-ll/0.2.2/download\"],\n strip_prefix = \"ciborium-ll-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.ciborium-ll-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cipher-0.5.2\",\n sha256 = \"e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cipher/0.5.2/download\"],\n strip_prefix = \"cipher-0.5.2\",\n build_file = Label(\"@crates//crates:BUILD.cipher-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap-4.6.7\",\n sha256 = \"aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap/4.6.7/download\"],\n strip_prefix = \"clap-4.6.7\",\n build_file = Label(\"@crates//crates:BUILD.clap-4.6.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_builder-4.6.7\",\n sha256 = \"ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_builder/4.6.7/download\"],\n strip_prefix = \"clap_builder-4.6.7\",\n build_file = Label(\"@crates//crates:BUILD.clap_builder-4.6.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_lex-1.1.1\",\n sha256 = \"1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_lex/1.1.1/download\"],\n strip_prefix = \"clap_lex-1.1.1\",\n build_file = Label(\"@crates//crates:BUILD.clap_lex-1.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__condtype-1.3.0\",\n sha256 = \"baf0a07a401f374238ab8e2f11a104d2851bf9ce711ec69804834de8af45c7af\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/condtype/1.3.0/download\"],\n strip_prefix = \"condtype-1.3.0\",\n build_file = Label(\"@crates//crates:BUILD.condtype-1.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cpubits-0.1.1\",\n sha256 = \"15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cpubits/0.1.1/download\"],\n strip_prefix = \"cpubits-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.cpubits-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cpufeatures-0.3.1\",\n sha256 = \"5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cpufeatures/0.3.1/download\"],\n strip_prefix = \"cpufeatures-0.3.1\",\n build_file = Label(\"@crates//crates:BUILD.cpufeatures-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crunchy-0.2.4\",\n sha256 = \"460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crunchy/0.2.4/download\"],\n strip_prefix = \"crunchy-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.crunchy-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crypto-common-0.2.2\",\n sha256 = \"ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crypto-common/0.2.2/download\"],\n strip_prefix = \"crypto-common-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.crypto-common-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__curve25519-dalek-5.0.0\",\n sha256 = \"b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/curve25519-dalek/5.0.0/download\"],\n strip_prefix = \"curve25519-dalek-5.0.0\",\n build_file = Label(\"@crates//crates:BUILD.curve25519-dalek-5.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__curve25519-dalek-derive-0.1.1\",\n sha256 = \"f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/curve25519-dalek-derive/0.1.1/download\"],\n strip_prefix = \"curve25519-dalek-derive-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.curve25519-dalek-derive-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__delegate-0.13.5\",\n sha256 = \"780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/delegate/0.13.5/download\"],\n strip_prefix = \"delegate-0.13.5\",\n build_file = Label(\"@crates//crates:BUILD.delegate-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__digest-0.11.3\",\n sha256 = \"f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/digest/0.11.3/download\"],\n strip_prefix = \"digest-0.11.3\",\n build_file = Label(\"@crates//crates:BUILD.digest-0.11.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__displaydoc-0.2.7\",\n sha256 = \"c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/displaydoc/0.2.7/download\"],\n strip_prefix = \"displaydoc-0.2.7\",\n build_file = Label(\"@crates//crates:BUILD.displaydoc-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__divan-0.1.21\",\n sha256 = \"a405457ec78b8fe08b0e32b4a3570ab5dff6dd16eb9e76a5ee0a9d9cbd898933\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/divan/0.1.21/download\"],\n strip_prefix = \"divan-0.1.21\",\n build_file = Label(\"@crates//crates:BUILD.divan-0.1.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__divan-macros-0.1.21\",\n sha256 = \"9556bc800956545d6420a640173e5ba7dfa82f38d3ea5a167eb555bc69ac3323\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/divan-macros/0.1.21/download\"],\n strip_prefix = \"divan-macros-0.1.21\",\n build_file = Label(\"@crates//crates:BUILD.divan-macros-0.1.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ed25519-3.0.0\",\n sha256 = \"29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ed25519/3.0.0/download\"],\n strip_prefix = \"ed25519-3.0.0\",\n build_file = Label(\"@crates//crates:BUILD.ed25519-3.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ed25519-dalek-3.0.0\",\n sha256 = \"6ebaa1a2bf1290ab3bfe5a7b771d050ebffab2711c19a81691c683a5144a25de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ed25519-dalek/3.0.0/download\"],\n strip_prefix = \"ed25519-dalek-3.0.0\",\n build_file = Label(\"@crates//crates:BUILD.ed25519-dalek-3.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__either-1.19.0\",\n sha256 = \"0e9c71c2167ca323c882b99918929403426e2373ea17242ff5653e0d5e1058be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/either/1.19.0/download\"],\n strip_prefix = \"either-1.19.0\",\n build_file = Label(\"@crates//crates:BUILD.either-1.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__equivalent-1.0.2\",\n sha256 = \"877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/equivalent/1.0.2/download\"],\n strip_prefix = \"equivalent-1.0.2\",\n build_file = Label(\"@crates//crates:BUILD.equivalent-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__errno-0.3.14\",\n sha256 = \"39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/errno/0.3.14/download\"],\n strip_prefix = \"errno-0.3.14\",\n build_file = Label(\"@crates//crates:BUILD.errno-0.3.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ff-0.14.0\",\n sha256 = \"a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ff/0.14.0/download\"],\n strip_prefix = \"ff-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.ff-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fiat-crypto-0.3.0\",\n sha256 = \"64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fiat-crypto/0.3.0/download\"],\n strip_prefix = \"fiat-crypto-0.3.0\",\n build_file = Label(\"@crates//crates:BUILD.fiat-crypto-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__find-msvc-tools-0.1.14\",\n sha256 = \"aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/find-msvc-tools/0.1.14/download\"],\n strip_prefix = \"find-msvc-tools-0.1.14\",\n build_file = Label(\"@crates//crates:BUILD.find-msvc-tools-0.1.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fixedbitset-0.4.2\",\n sha256 = \"0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fixedbitset/0.4.2/download\"],\n strip_prefix = \"fixedbitset-0.4.2\",\n build_file = Label(\"@crates//crates:BUILD.fixedbitset-0.4.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__form_urlencoded-1.2.2\",\n sha256 = \"cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/form_urlencoded/1.2.2/download\"],\n strip_prefix = \"form_urlencoded-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.form_urlencoded-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-core-0.3.34\",\n sha256 = \"92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-core/0.3.34/download\"],\n strip_prefix = \"futures-core-0.3.34\",\n build_file = Label(\"@crates//crates:BUILD.futures-core-0.3.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-macro-0.3.34\",\n sha256 = \"9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-macro/0.3.34/download\"],\n strip_prefix = \"futures-macro-0.3.34\",\n build_file = Label(\"@crates//crates:BUILD.futures-macro-0.3.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-task-0.3.34\",\n sha256 = \"cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-task/0.3.34/download\"],\n strip_prefix = \"futures-task-0.3.34\",\n build_file = Label(\"@crates//crates:BUILD.futures-task-0.3.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-timer-3.0.4\",\n sha256 = \"af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-timer/3.0.4/download\"],\n strip_prefix = \"futures-timer-3.0.4\",\n build_file = Label(\"@crates//crates:BUILD.futures-timer-3.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-util-0.3.34\",\n sha256 = \"0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-util/0.3.34/download\"],\n strip_prefix = \"futures-util-0.3.34\",\n build_file = Label(\"@crates//crates:BUILD.futures-util-0.3.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__getrandom-0.4.3\",\n sha256 = \"300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.4.3/download\"],\n strip_prefix = \"getrandom-0.4.3\",\n build_file = Label(\"@crates//crates:BUILD.getrandom-0.4.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__git2-0.20.4\",\n sha256 = \"7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/git2/0.20.4/download\"],\n strip_prefix = \"git2-0.20.4\",\n build_file = Label(\"@crates//crates:BUILD.git2-0.20.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__glob-0.3.4\",\n sha256 = \"e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/glob/0.3.4/download\"],\n strip_prefix = \"glob-0.3.4\",\n build_file = Label(\"@crates//crates:BUILD.glob-0.3.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__group-0.14.0\",\n sha256 = \"7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/group/0.14.0/download\"],\n strip_prefix = \"group-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.group-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__half-2.7.1\",\n sha256 = \"6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/half/2.7.1/download\"],\n strip_prefix = \"half-2.7.1\",\n build_file = Label(\"@crates//crates:BUILD.half-2.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashbrown-0.17.1\",\n sha256 = \"ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.17.1/download\"],\n strip_prefix = \"hashbrown-0.17.1\",\n build_file = Label(\"@crates//crates:BUILD.hashbrown-0.17.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hermit-abi-0.5.3\",\n sha256 = \"e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hermit-abi/0.5.3/download\"],\n strip_prefix = \"hermit-abi-0.5.3\",\n build_file = Label(\"@crates//crates:BUILD.hermit-abi-0.5.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hex-conservative-1.3.0\",\n sha256 = \"271e0d19bcb473b6675739a2b536076b24a082316cb5199ad918edce10c599e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hex-conservative/1.3.0/download\"],\n strip_prefix = \"hex-conservative-1.3.0\",\n build_file = Label(\"@crates//crates:BUILD.hex-conservative-1.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hybrid-array-0.4.15\",\n sha256 = \"27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hybrid-array/0.4.15/download\"],\n strip_prefix = \"hybrid-array-0.4.15\",\n build_file = Label(\"@crates//crates:BUILD.hybrid-array-0.4.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_collections-2.3.0\",\n sha256 = \"fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_collections/2.3.0/download\"],\n strip_prefix = \"icu_collections-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_collections-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_locale_core-2.3.0\",\n sha256 = \"d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_locale_core/2.3.0/download\"],\n strip_prefix = \"icu_locale_core-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_locale_core-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_normalizer-2.3.0\",\n sha256 = \"12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer/2.3.0/download\"],\n strip_prefix = \"icu_normalizer-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_normalizer-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_normalizer_data-2.3.0\",\n sha256 = \"1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer_data/2.3.0/download\"],\n strip_prefix = \"icu_normalizer_data-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_normalizer_data-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_properties-2.3.0\",\n sha256 = \"7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties/2.3.0/download\"],\n strip_prefix = \"icu_properties-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_properties-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_properties_data-2.3.0\",\n sha256 = \"e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties_data/2.3.0/download\"],\n strip_prefix = \"icu_properties_data-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_properties_data-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_provider-2.3.1\",\n sha256 = \"d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_provider/2.3.1/download\"],\n strip_prefix = \"icu_provider-2.3.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_provider-2.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__idna-1.1.0\",\n sha256 = \"3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/idna/1.1.0/download\"],\n strip_prefix = \"idna-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.idna-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__idna_adapter-1.2.2\",\n sha256 = \"cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/idna_adapter/1.2.2/download\"],\n strip_prefix = \"idna_adapter-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.idna_adapter-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__indexmap-2.14.2\",\n sha256 = \"cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/2.14.2/download\"],\n strip_prefix = \"indexmap-2.14.2\",\n build_file = Label(\"@crates//crates:BUILD.indexmap-2.14.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__inout-0.2.2\",\n sha256 = \"4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/inout/0.2.2/download\"],\n strip_prefix = \"inout-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.inout-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itertools-0.10.5\",\n sha256 = \"b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itertools/0.10.5/download\"],\n strip_prefix = \"itertools-0.10.5\",\n build_file = Label(\"@crates//crates:BUILD.itertools-0.10.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itoa-1.0.18\",\n sha256 = \"8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itoa/1.0.18/download\"],\n strip_prefix = \"itoa-1.0.18\",\n build_file = Label(\"@crates//crates:BUILD.itoa-1.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__jobserver-0.1.35\",\n sha256 = \"1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jobserver/0.1.35/download\"],\n strip_prefix = \"jobserver-0.1.35\",\n build_file = Label(\"@crates//crates:BUILD.jobserver-0.1.35.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__json5-0.4.1\",\n sha256 = \"96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/json5/0.4.1/download\"],\n strip_prefix = \"json5-0.4.1\",\n build_file = Label(\"@crates//crates:BUILD.json5-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libc-0.2.190\",\n sha256 = \"ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libc/0.2.190/download\"],\n strip_prefix = \"libc-0.2.190\",\n build_file = Label(\"@crates//crates:BUILD.libc-0.2.190.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libgit2-sys-0.18.8-1.9.7\",\n sha256 = \"7f7c568b25d7489bc3fb2988ed69ab111d2944d2f5fec3d5c987fe545ea97b50\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libgit2-sys/0.18.8+1.9.7/download\"],\n strip_prefix = \"libgit2-sys-0.18.8+1.9.7\",\n build_file = Label(\"@crates//crates:BUILD.libgit2-sys-0.18.8+1.9.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libm-0.2.16\",\n sha256 = \"b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libm/0.2.16/download\"],\n strip_prefix = \"libm-0.2.16\",\n build_file = Label(\"@crates//crates:BUILD.libm-0.2.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libz-sys-1.1.29\",\n sha256 = \"85bc9657773828b90eeb625adff10eeac83cc21bbfd8e23a03eaa8a33c9e28d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libz-sys/1.1.29/download\"],\n strip_prefix = \"libz-sys-1.1.29\",\n build_file = Label(\"@crates//crates:BUILD.libz-sys-1.1.29.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__linux-raw-sys-0.12.1\",\n sha256 = \"32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/linux-raw-sys/0.12.1/download\"],\n strip_prefix = \"linux-raw-sys-0.12.1\",\n build_file = Label(\"@crates//crates:BUILD.linux-raw-sys-0.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__litemap-0.8.3\",\n sha256 = \"47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/litemap/0.8.3/download\"],\n strip_prefix = \"litemap-0.8.3\",\n build_file = Label(\"@crates//crates:BUILD.litemap-0.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__log-0.4.34\",\n sha256 = \"f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/log/0.4.34/download\"],\n strip_prefix = \"log-0.4.34\",\n build_file = Label(\"@crates//crates:BUILD.log-0.4.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__memchr-2.8.3\",\n sha256 = \"cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/memchr/2.8.3/download\"],\n strip_prefix = \"memchr-2.8.3\",\n build_file = Label(\"@crates//crates:BUILD.memchr-2.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num_cpus-1.17.0\",\n sha256 = \"91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num_cpus/1.17.0/download\"],\n strip_prefix = \"num_cpus-1.17.0\",\n build_file = Label(\"@crates//crates:BUILD.num_cpus-1.17.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__percent-encoding-2.3.2\",\n sha256 = \"9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/percent-encoding/2.3.2/download\"],\n strip_prefix = \"percent-encoding-2.3.2\",\n build_file = Label(\"@crates//crates:BUILD.percent-encoding-2.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest-2.9.3\",\n sha256 = \"b568374ba38b33a6c627141f891faf16902b08d2db26b8ede1bcb0a15b1919fa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest/2.9.3/download\"],\n strip_prefix = \"pest-2.9.3\",\n build_file = Label(\"@crates//crates:BUILD.pest-2.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest_derive-2.9.3\",\n sha256 = \"b66e184b924cebaaff20ab2256ca52f12332d528a39aa76553b5d96f92aacf7f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_derive/2.9.3/download\"],\n strip_prefix = \"pest_derive-2.9.3\",\n build_file = Label(\"@crates//crates:BUILD.pest_derive-2.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest_generator-2.9.3\",\n sha256 = \"a87478d267e4de54a626af9754f2f0f58e927aac6ed0575fe89bc05ad6851694\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_generator/2.9.3/download\"],\n strip_prefix = \"pest_generator-2.9.3\",\n build_file = Label(\"@crates//crates:BUILD.pest_generator-2.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest_meta-2.9.3\",\n sha256 = \"4f986f248b4241ac359b831f6139aaa34e03b08a37b6caf7e201a33f95c869e1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_meta/2.9.3/download\"],\n strip_prefix = \"pest_meta-2.9.3\",\n build_file = Label(\"@crates//crates:BUILD.pest_meta-2.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__petgraph-0.6.5\",\n sha256 = \"b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/petgraph/0.6.5/download\"],\n strip_prefix = \"petgraph-0.6.5\",\n build_file = Label(\"@crates//crates:BUILD.petgraph-0.6.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pin-project-lite-0.2.17\",\n sha256 = \"a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-lite/0.2.17/download\"],\n strip_prefix = \"pin-project-lite-0.2.17\",\n build_file = Label(\"@crates//crates:BUILD.pin-project-lite-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pkg-config-0.3.34\",\n sha256 = \"f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pkg-config/0.3.34/download\"],\n strip_prefix = \"pkg-config-0.3.34\",\n build_file = Label(\"@crates//crates:BUILD.pkg-config-0.3.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__potential_utf-0.1.6\",\n sha256 = \"d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/potential_utf/0.1.6/download\"],\n strip_prefix = \"potential_utf-0.1.6\",\n build_file = Label(\"@crates//crates:BUILD.potential_utf-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__proc-macro-crate-3.5.0\",\n sha256 = \"e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro-crate/3.5.0/download\"],\n strip_prefix = \"proc-macro-crate-3.5.0\",\n build_file = Label(\"@crates//crates:BUILD.proc-macro-crate-3.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__proc-macro2-1.0.107\",\n sha256 = \"985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2/1.0.107/download\"],\n strip_prefix = \"proc-macro2-1.0.107\",\n build_file = Label(\"@crates//crates:BUILD.proc-macro2-1.0.107.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__psm-0.1.24\",\n sha256 = \"200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/psm/0.1.24/download\"],\n strip_prefix = \"psm-0.1.24\",\n build_file = Label(\"@crates//crates:BUILD.psm-0.1.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__quote-1.0.47\",\n sha256 = \"1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quote/1.0.47/download\"],\n strip_prefix = \"quote-1.0.47\",\n build_file = Label(\"@crates//crates:BUILD.quote-1.0.47.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__r-efi-6.0.0\",\n sha256 = \"f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/r-efi/6.0.0/download\"],\n strip_prefix = \"r-efi-6.0.0\",\n build_file = Label(\"@crates//crates:BUILD.r-efi-6.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand_core-0.10.1\",\n sha256 = \"63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_core/0.10.1/download\"],\n strip_prefix = \"rand_core-0.10.1\",\n build_file = Label(\"@crates//crates:BUILD.rand_core-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-1.13.1\",\n sha256 = \"f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex/1.13.1/download\"],\n strip_prefix = \"regex-1.13.1\",\n build_file = Label(\"@crates//crates:BUILD.regex-1.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-automata-0.4.18\",\n sha256 = \"ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-automata/0.4.18/download\"],\n strip_prefix = \"regex-automata-0.4.18\",\n build_file = Label(\"@crates//crates:BUILD.regex-automata-0.4.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-lite-0.1.9\",\n sha256 = \"cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-lite/0.1.9/download\"],\n strip_prefix = \"regex-lite-0.1.9\",\n build_file = Label(\"@crates//crates:BUILD.regex-lite-0.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-syntax-0.8.11\",\n sha256 = \"d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-syntax/0.8.11/download\"],\n strip_prefix = \"regex-syntax-0.8.11\",\n build_file = Label(\"@crates//crates:BUILD.regex-syntax-0.8.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__relative-path-1.9.3\",\n sha256 = \"ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/relative-path/1.9.3/download\"],\n strip_prefix = \"relative-path-1.9.3\",\n build_file = Label(\"@crates//crates:BUILD.relative-path-1.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rstest-0.25.0\",\n sha256 = \"6fc39292f8613e913f7df8fa892b8944ceb47c247b78e1b1ae2f09e019be789d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rstest/0.25.0/download\"],\n strip_prefix = \"rstest-0.25.0\",\n build_file = Label(\"@crates//crates:BUILD.rstest-0.25.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rstest_macros-0.25.0\",\n sha256 = \"1f168d99749d307be9de54d23fd226628d99768225ef08f6ffb52e0182a27746\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rstest_macros/0.25.0/download\"],\n strip_prefix = \"rstest_macros-0.25.0\",\n build_file = Label(\"@crates//crates:BUILD.rstest_macros-0.25.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustc_version-0.4.1\",\n sha256 = \"cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc_version/0.4.1/download\"],\n strip_prefix = \"rustc_version-0.4.1\",\n build_file = Label(\"@crates//crates:BUILD.rustc_version-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustix-1.1.5\",\n sha256 = \"891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustix/1.1.5/download\"],\n strip_prefix = \"rustix-1.1.5\",\n build_file = Label(\"@crates//crates:BUILD.rustix-1.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__safe_arch-1.2.0\",\n sha256 = \"42c6efa15875e6ecb39ca61fb0b0c1a40b84fac5a5ffe71eef7d1000c8eb3f5f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/safe_arch/1.2.0/download\"],\n strip_prefix = \"safe_arch-1.2.0\",\n build_file = Label(\"@crates//crates:BUILD.safe_arch-1.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__secp256k1-0.33.1\",\n sha256 = \"d7f404a8dab7a7a5a631e741d8699aa9c8e1d689fc26ccf897c7187565490b69\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/secp256k1/0.33.1/download\"],\n strip_prefix = \"secp256k1-0.33.1\",\n build_file = Label(\"@crates//crates:BUILD.secp256k1-0.33.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__secp256k1-sys-0.14.1\",\n sha256 = \"f6b2992d4a3cd244539a7d5d0966aadbe5ca7fb868a5d7e38c29499b9e709bbd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/secp256k1-sys/0.14.1/download\"],\n strip_prefix = \"secp256k1-sys-0.14.1\",\n build_file = Label(\"@crates//crates:BUILD.secp256k1-sys-0.14.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__semver-1.0.28\",\n sha256 = \"8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/semver/1.0.28/download\"],\n strip_prefix = \"semver-1.0.28\",\n build_file = Label(\"@crates//crates:BUILD.semver-1.0.28.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde-1.0.229\",\n sha256 = \"4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde/1.0.229/download\"],\n strip_prefix = \"serde-1.0.229\",\n build_file = Label(\"@crates//crates:BUILD.serde-1.0.229.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_core-1.0.229\",\n sha256 = \"67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_core/1.0.229/download\"],\n strip_prefix = \"serde_core-1.0.229\",\n build_file = Label(\"@crates//crates:BUILD.serde_core-1.0.229.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_derive-1.0.229\",\n sha256 = \"e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive/1.0.229/download\"],\n strip_prefix = \"serde_derive-1.0.229\",\n build_file = Label(\"@crates//crates:BUILD.serde_derive-1.0.229.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_json-1.0.154\",\n sha256 = \"e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_json/1.0.154/download\"],\n strip_prefix = \"serde_json-1.0.154\",\n build_file = Label(\"@crates//crates:BUILD.serde_json-1.0.154.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_spanned-0.6.9\",\n sha256 = \"bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_spanned/0.6.9/download\"],\n strip_prefix = \"serde_spanned-0.6.9\",\n build_file = Label(\"@crates//crates:BUILD.serde_spanned-0.6.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sha2-0.11.0\",\n sha256 = \"446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sha2/0.11.0/download\"],\n strip_prefix = \"sha2-0.11.0\",\n build_file = Label(\"@crates//crates:BUILD.sha2-0.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__shlex-2.0.1\",\n sha256 = \"f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/shlex/2.0.1/download\"],\n strip_prefix = \"shlex-2.0.1\",\n build_file = Label(\"@crates//crates:BUILD.shlex-2.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__signature-3.0.0\",\n sha256 = \"28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/signature/3.0.0/download\"],\n strip_prefix = \"signature-3.0.0\",\n build_file = Label(\"@crates//crates:BUILD.signature-3.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__slab-0.4.12\",\n sha256 = \"0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/slab/0.4.12/download\"],\n strip_prefix = \"slab-0.4.12\",\n build_file = Label(\"@crates//crates:BUILD.slab-0.4.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__smallvec-1.16.3\",\n sha256 = \"5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/smallvec/1.16.3/download\"],\n strip_prefix = \"smallvec-1.16.3\",\n build_file = Label(\"@crates//crates:BUILD.smallvec-1.16.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__stable_deref_trait-1.2.1\",\n sha256 = \"6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/stable_deref_trait/1.2.1/download\"],\n strip_prefix = \"stable_deref_trait-1.2.1\",\n build_file = Label(\"@crates//crates:BUILD.stable_deref_trait-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__stacker-0.1.25\",\n sha256 = \"707f49d46706bacf8a2b00d51dace3f9de527c13eec3778f570c411f89e69967\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/stacker/0.1.25/download\"],\n strip_prefix = \"stacker-0.1.25\",\n build_file = Label(\"@crates//crates:BUILD.stacker-0.1.25.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__subtle-2.6.1\",\n sha256 = \"13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/subtle/2.6.1/download\"],\n strip_prefix = \"subtle-2.6.1\",\n build_file = Label(\"@crates//crates:BUILD.subtle-2.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__syn-2.0.119\",\n sha256 = \"872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/2.0.119/download\"],\n strip_prefix = \"syn-2.0.119\",\n build_file = Label(\"@crates//crates:BUILD.syn-2.0.119.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__syn-3.0.8\",\n sha256 = \"01016da373cd8f7ef12624f796309f5c31ba8d646dd08856c02cd741d823c622\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/3.0.8/download\"],\n strip_prefix = \"syn-3.0.8\",\n build_file = Label(\"@crates//crates:BUILD.syn-3.0.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__synstructure-0.14.0\",\n sha256 = \"901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/synstructure/0.14.0/download\"],\n strip_prefix = \"synstructure-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.synstructure-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__terminal_size-0.4.4\",\n sha256 = \"230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/terminal_size/0.4.4/download\"],\n strip_prefix = \"terminal_size-0.4.4\",\n build_file = Label(\"@crates//crates:BUILD.terminal_size-0.4.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thiserror-2.0.21\",\n sha256 = \"09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror/2.0.21/download\"],\n strip_prefix = \"thiserror-2.0.21\",\n build_file = Label(\"@crates//crates:BUILD.thiserror-2.0.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thiserror-impl-2.0.21\",\n sha256 = \"fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror-impl/2.0.21/download\"],\n strip_prefix = \"thiserror-impl-2.0.21\",\n build_file = Label(\"@crates//crates:BUILD.thiserror-impl-2.0.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__threadpool-1.8.1\",\n sha256 = \"d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/threadpool/1.8.1/download\"],\n strip_prefix = \"threadpool-1.8.1\",\n build_file = Label(\"@crates//crates:BUILD.threadpool-1.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tinystr-0.8.4\",\n sha256 = \"b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tinystr/0.8.4/download\"],\n strip_prefix = \"tinystr-0.8.4\",\n build_file = Label(\"@crates//crates:BUILD.tinystr-0.8.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml-0.8.23\",\n sha256 = \"dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml/0.8.23/download\"],\n strip_prefix = \"toml-0.8.23\",\n build_file = Label(\"@crates//crates:BUILD.toml-0.8.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_datetime-0.6.11\",\n sha256 = \"22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_datetime/0.6.11/download\"],\n strip_prefix = \"toml_datetime-0.6.11\",\n build_file = Label(\"@crates//crates:BUILD.toml_datetime-0.6.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_datetime-1.1.2-spec-1.1.0\",\n sha256 = \"2b86d767906c6c42421dcba507eb9d203e779497710a47782a224bb871653053\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_datetime/1.1.2+spec-1.1.0/download\"],\n strip_prefix = \"toml_datetime-1.1.2+spec-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.toml_datetime-1.1.2+spec-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_edit-0.22.27\",\n sha256 = \"41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_edit/0.22.27/download\"],\n strip_prefix = \"toml_edit-0.22.27\",\n build_file = Label(\"@crates//crates:BUILD.toml_edit-0.22.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_edit-0.25.17-spec-1.1.0\",\n sha256 = \"e3641d5bbb5349a79e1020a242d251efbc546ad8048d133958323ce9c40a9c9c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_edit/0.25.17+spec-1.1.0/download\"],\n strip_prefix = \"toml_edit-0.25.17+spec-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.toml_edit-0.25.17+spec-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_parser-1.1.5-spec-1.1.0\",\n sha256 = \"baa693a8032d7e1cada7d0041e96126df243179ff061456783ac7f12bda4744c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_parser/1.1.5+spec-1.1.0/download\"],\n strip_prefix = \"toml_parser-1.1.5+spec-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.toml_parser-1.1.5+spec-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_write-0.1.2\",\n sha256 = \"5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_write/0.1.2/download\"],\n strip_prefix = \"toml_write-0.1.2\",\n build_file = Label(\"@crates//crates:BUILD.toml_write-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__typenum-1.20.1\",\n sha256 = \"b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typenum/1.20.1/download\"],\n strip_prefix = \"typenum-1.20.1\",\n build_file = Label(\"@crates//crates:BUILD.typenum-1.20.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ucd-trie-0.1.7\",\n sha256 = \"2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ucd-trie/0.1.7/download\"],\n strip_prefix = \"ucd-trie-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.ucd-trie-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-ident-1.0.26\",\n sha256 = \"d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-ident/1.0.26/download\"],\n strip_prefix = \"unicode-ident-1.0.26\",\n build_file = Label(\"@crates//crates:BUILD.unicode-ident-1.0.26.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__url-2.5.8\",\n sha256 = \"ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/url/2.5.8/download\"],\n strip_prefix = \"url-2.5.8\",\n build_file = Label(\"@crates//crates:BUILD.url-2.5.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__utf8_iter-1.0.4\",\n sha256 = \"b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/utf8_iter/1.0.4/download\"],\n strip_prefix = \"utf8_iter-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.utf8_iter-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__vcpkg-0.2.15\",\n sha256 = \"accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/vcpkg/0.2.15/download\"],\n strip_prefix = \"vcpkg-0.2.15\",\n build_file = Label(\"@crates//crates:BUILD.vcpkg-0.2.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wide-1.7.1\",\n sha256 = \"d920ac99c3c8edce110cb8d07dbb324d6d026011dce85b1e9355b70f0adacc4f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wide/1.7.1/download\"],\n strip_prefix = \"wide-1.7.1\",\n build_file = Label(\"@crates//crates:BUILD.wide-1.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-link-0.2.1\",\n sha256 = \"f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-link/0.2.1/download\"],\n strip_prefix = \"windows-link-0.2.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-link-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.61.2\",\n sha256 = \"ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.61.2/download\"],\n strip_prefix = \"windows-sys-0.61.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.61.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winnow-0.7.15\",\n sha256 = \"df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winnow/0.7.15/download\"],\n strip_prefix = \"winnow-0.7.15\",\n build_file = Label(\"@crates//crates:BUILD.winnow-0.7.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winnow-1.0.4\",\n sha256 = \"23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winnow/1.0.4/download\"],\n strip_prefix = \"winnow-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.winnow-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__writeable-0.6.4\",\n sha256 = \"3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/writeable/0.6.4/download\"],\n strip_prefix = \"writeable-0.6.4\",\n build_file = Label(\"@crates//crates:BUILD.writeable-0.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__xxhash-rust-0.8.19\",\n sha256 = \"550a2b930b62486a393c52d5c3b84bff264b28aa437ed64694d31e93b1757af7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/xxhash-rust/0.8.19/download\"],\n strip_prefix = \"xxhash-rust-0.8.19\",\n build_file = Label(\"@crates//crates:BUILD.xxhash-rust-0.8.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-0.8.3\",\n sha256 = \"709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke/0.8.3/download\"],\n strip_prefix = \"yoke-0.8.3\",\n build_file = Label(\"@crates//crates:BUILD.yoke-0.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-derive-0.8.4\",\n sha256 = \"ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke-derive/0.8.4/download\"],\n strip_prefix = \"yoke-derive-0.8.4\",\n build_file = Label(\"@crates//crates:BUILD.yoke-derive-0.8.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerocopy-0.8.62\",\n sha256 = \"86502bf56ac7c77571a32e2647bb2a15894565e981fb2a48d7bde2d91c965a9d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy/0.8.62/download\"],\n strip_prefix = \"zerocopy-0.8.62\",\n build_file = Label(\"@crates//crates:BUILD.zerocopy-0.8.62.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerocopy-derive-0.8.62\",\n sha256 = \"5457206954b06561e2608c7e19cf58b1926586d999c246eebe4502f7e2039d1a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy-derive/0.8.62/download\"],\n strip_prefix = \"zerocopy-derive-0.8.62\",\n build_file = Label(\"@crates//crates:BUILD.zerocopy-derive-0.8.62.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerofrom-0.1.8\",\n sha256 = \"0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom/0.1.8/download\"],\n strip_prefix = \"zerofrom-0.1.8\",\n build_file = Label(\"@crates//crates:BUILD.zerofrom-0.1.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerofrom-derive-0.1.8\",\n sha256 = \"f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom-derive/0.1.8/download\"],\n strip_prefix = \"zerofrom-derive-0.1.8\",\n build_file = Label(\"@crates//crates:BUILD.zerofrom-derive-0.1.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zeroize-1.9.1\",\n sha256 = \"e13084392c5e4bc371903e2935a5eaeed24905a7511356b883835e18a78f6879\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zeroize/1.9.1/download\"],\n strip_prefix = \"zeroize-1.9.1\",\n build_file = Label(\"@crates//crates:BUILD.zeroize-1.9.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zeroize_derive-1.5.0\",\n sha256 = \"3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zeroize_derive/1.5.0/download\"],\n strip_prefix = \"zeroize_derive-1.5.0\",\n build_file = Label(\"@crates//crates:BUILD.zeroize_derive-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerotrie-0.2.5\",\n sha256 = \"4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerotrie/0.2.5/download\"],\n strip_prefix = \"zerotrie-0.2.5\",\n build_file = Label(\"@crates//crates:BUILD.zerotrie-0.2.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerovec-0.11.8\",\n sha256 = \"bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec/0.11.8/download\"],\n strip_prefix = \"zerovec-0.11.8\",\n build_file = Label(\"@crates//crates:BUILD.zerovec-0.11.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerovec-derive-0.11.6\",\n sha256 = \"34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec-derive/0.11.6/download\"],\n strip_prefix = \"zerovec-derive-0.11.6\",\n build_file = Label(\"@crates//crates:BUILD.zerovec-derive-0.11.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zmij-1.0.23\",\n sha256 = \"29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zmij/1.0.23/download\"],\n strip_prefix = \"zmij-1.0.23\",\n build_file = Label(\"@crates//crates:BUILD.zmij-1.0.23.bazel\"),\n )\n\n return [\n struct(repo = \"crates\", is_dev_dep = False),\n struct(repo=\"crates__aes-0.9.3\", is_dev_dep = False),\n struct(repo=\"crates__ambassador-0.5.1\", is_dev_dep = False),\n struct(repo=\"crates__base58ck-0.5.0\", is_dev_dep = False),\n struct(repo=\"crates__bitcoin-consensus-encoding-1.2.0\", is_dev_dep = False),\n struct(repo=\"crates__bitcoin-internals-0.7.0\", is_dev_dep = False),\n struct(repo=\"crates__bitcoin-primitives-0.103.1\", is_dev_dep = False),\n struct(repo=\"crates__bitcoin-units-0.5.0\", is_dev_dep = False),\n struct(repo=\"crates__bitcoin_hashes-1.2.0\", is_dev_dep = False),\n struct(repo=\"crates__blst-0.3.17\", is_dev_dep = False),\n struct(repo=\"crates__built-0.7.7\", is_dev_dep = False),\n struct(repo=\"crates__cfg-if-1.0.5\", is_dev_dep = False),\n struct(repo=\"crates__ciborium-0.2.2\", is_dev_dep = False),\n struct(repo=\"crates__delegate-0.13.5\", is_dev_dep = False),\n struct(repo=\"crates__digest-0.11.3\", is_dev_dep = False),\n struct(repo=\"crates__ed25519-dalek-3.0.0\", is_dev_dep = False),\n struct(repo=\"crates__ff-0.14.0\", is_dev_dep = False),\n struct(repo=\"crates__group-0.14.0\", is_dev_dep = False),\n struct(repo=\"crates__hex-conservative-1.3.0\", is_dev_dep = False),\n struct(repo=\"crates__json5-0.4.1\", is_dev_dep = False),\n struct(repo=\"crates__libm-0.2.16\", is_dev_dep = False),\n struct(repo=\"crates__proc-macro2-1.0.107\", is_dev_dep = False),\n struct(repo=\"crates__quote-1.0.47\", is_dev_dep = False),\n struct(repo=\"crates__rand_core-0.10.1\", is_dev_dep = False),\n struct(repo=\"crates__secp256k1-0.33.1\", is_dev_dep = False),\n struct(repo=\"crates__serde-1.0.229\", is_dev_dep = False),\n struct(repo=\"crates__serde_json-1.0.154\", is_dev_dep = False),\n struct(repo=\"crates__sha2-0.11.0\", is_dev_dep = False),\n struct(repo=\"crates__subtle-2.6.1\", is_dev_dep = False),\n struct(repo=\"crates__syn-2.0.119\", is_dev_dep = False),\n struct(repo=\"crates__thiserror-2.0.21\", is_dev_dep = False),\n struct(repo=\"crates__wide-1.7.1\", is_dev_dep = False),\n struct(repo=\"crates__xxhash-rust-0.8.19\", is_dev_dep = False),\n struct(repo=\"crates__zeroize-1.9.1\", is_dev_dep = False),\n struct(repo = \"crates__divan-0.1.21\", is_dev_dep = True),\n struct(repo = \"crates__getrandom-0.4.3\", is_dev_dep = True),\n struct(repo = \"crates__rstest-0.25.0\", is_dev_dep = True),\n ]\n", + "crates.bzl": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'dash_base_sdk'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\n- [crate_edition](#crate_edition)\n- [crate_deps](#crate_deps)\n- [all_crate_deps](#all_crate_deps)\n- [crate_repositories](#crate_repositories)\n\n\"\"\"\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"git_repository\")\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\nload(\"@bazel_tools//tools/build_defs/repo:utils.bzl\", \"maybe\")\nload(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\nload(\"@rules_rust//crate_universe:defs.bzl\", \"crates_vendor_remote_repository\", \"local_crate_mirror\")\n\n###############################################################################\n# MACROS API\n###############################################################################\n\n# An identifier that represent common dependencies (unconditional).\n_COMMON_CONDITION = \"\"\n\ndef _flatten_dependency_maps(all_dependency_maps):\n \"\"\"Flatten a list of dependency maps into one dictionary.\n\n Dependency maps have the following structure:\n\n ```python\n DEPENDENCIES_MAP = {\n # The first key in the map is a Bazel package\n # name of the workspace this file is defined in.\n \"workspace_member_package\": {\n\n # Not all dependencies are supported for all platforms.\n # the condition key is the condition required to be true\n # on the host platform.\n \"condition\": {\n\n # An alias to a crate target. # The label of the crate target the\n # Aliases are only crate names. # package name refers to.\n \"package_name\": \"@full//:label\",\n }\n }\n }\n ```\n\n Args:\n all_dependency_maps (list): A list of dicts as described above\n\n Returns:\n dict: A dictionary as described above\n \"\"\"\n dependencies = {}\n\n for workspace_deps_map in all_dependency_maps:\n for pkg_name, conditional_deps_map in workspace_deps_map.items():\n if pkg_name not in dependencies:\n non_frozen_map = dict()\n for key, values in conditional_deps_map.items():\n non_frozen_map.update({key: dict(values.items())})\n dependencies.setdefault(pkg_name, non_frozen_map)\n continue\n\n for condition, deps_map in conditional_deps_map.items():\n # If the condition has not been recorded, do so and continue\n if condition not in dependencies[pkg_name]:\n dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))\n continue\n\n # Alert on any miss-matched dependencies\n inconsistent_entries = []\n for crate_name, crate_label in deps_map.items():\n existing = dependencies[pkg_name][condition].get(crate_name)\n if existing and existing != crate_label:\n inconsistent_entries.append((crate_name, existing, crate_label))\n dependencies[pkg_name][condition].update({crate_name: crate_label})\n\n return dependencies\n\ndef crate_deps(deps, package_name = None):\n \"\"\"Finds the fully qualified label of the requested crates for the package where this macro is called.\n\n Args:\n deps (list): The desired list of crate targets.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()`.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if not deps:\n return []\n\n if package_name == None:\n package_name = native.package_name()\n\n # Join both sets of dependencies\n dependencies = _flatten_dependency_maps([\n _NORMAL_DEPENDENCIES,\n _NORMAL_DEV_DEPENDENCIES,\n _PROC_MACRO_DEPENDENCIES,\n _PROC_MACRO_DEV_DEPENDENCIES,\n _BUILD_DEPENDENCIES,\n _BUILD_PROC_MACRO_DEPENDENCIES,\n ]).pop(package_name, {})\n\n # Combine all conditional packages so we can easily index over a flat list\n # TODO: Perhaps this should actually return select statements and maintain\n # the conditionals of the dependencies\n flat_deps = {}\n for deps_set in dependencies.values():\n for crate_name, crate_label in deps_set.items():\n flat_deps.update({crate_name: crate_label})\n\n missing_crates = []\n crate_targets = []\n for crate_target in deps:\n if crate_target not in flat_deps:\n missing_crates.append(crate_target)\n else:\n crate_targets.append(flat_deps[crate_target])\n\n if missing_crates:\n fail(\"Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`\".format(\n missing_crates,\n package_name,\n dependencies,\n ))\n\n return crate_targets\n\ndef crate_edition(package_name = None):\n \"\"\"Finds the Rust edition for the package where this macro is called.\n\n Args:\n package_name (str, optional): The package name whose edition should be\n looked up. Defaults to `native.package_name()` when unset.\n\n Returns:\n str: The Rust edition declared by the package's Cargo.toml file.\n \"\"\"\n if package_name == None:\n package_name = native.package_name()\n\n if package_name not in _CRATE_EDITIONS:\n fail(\"Tried to get crate_edition for package \" + package_name + \" but that package had no Cargo.toml file\")\n\n return _CRATE_EDITIONS[package_name]\n\ndef all_crate_deps(\n normal = False, \n normal_dev = False, \n proc_macro = False, \n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Finds the fully qualified label of all requested direct crate dependencies \\\n for the package where this macro is called.\n\n If no parameters are set, all normal dependencies are returned. Setting any one flag will\n otherwise impact the contents of the returned list.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list.\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_dependency_maps = []\n if normal:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n if normal_dev:\n all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)\n if proc_macro:\n all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)\n if proc_macro_dev:\n all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)\n if build:\n all_dependency_maps.append(_BUILD_DEPENDENCIES)\n if build_proc_macro:\n all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)\n\n # Default to always using normal dependencies\n if not all_dependency_maps:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n\n dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)\n\n if not dependencies:\n if dependencies == None:\n fail(\"Tried to get all_crate_deps for package \" + package_name + \" but that package had no Cargo.toml file\")\n else:\n return []\n\n crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())\n for condition, deps in dependencies.items():\n crate_deps += selects.with_or({\n tuple(_CONDITIONS[condition]): deps.values(),\n \"//conditions:default\": [],\n })\n\n return crate_deps\n\ndef aliases(\n normal = False,\n normal_dev = False,\n proc_macro = False,\n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Produces a map of Crate alias names to their original label\n\n If no dependency kinds are specified, `normal` and `proc_macro` are used by default.\n Setting any one flag will otherwise determine the contents of the returned dict.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list..\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n dict: The aliases of all associated packages\n \"\"\"\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_aliases_maps = []\n if normal:\n all_aliases_maps.append(_NORMAL_ALIASES)\n if normal_dev:\n all_aliases_maps.append(_NORMAL_DEV_ALIASES)\n if proc_macro:\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n if proc_macro_dev:\n all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)\n if build:\n all_aliases_maps.append(_BUILD_ALIASES)\n if build_proc_macro:\n all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)\n\n # Default to always using normal aliases\n if not all_aliases_maps:\n all_aliases_maps.append(_NORMAL_ALIASES)\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n\n aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)\n\n if not aliases:\n return dict()\n\n common_items = aliases.pop(_COMMON_CONDITION, {}).items()\n\n # If there are only common items in the dictionary, immediately return them\n if not len(aliases.keys()) == 1:\n return dict(common_items)\n\n # Build a single select statement where each conditional has accounted for the\n # common set of aliases.\n crate_aliases = {\"//conditions:default\": dict(common_items)}\n for condition, deps in aliases.items():\n condition_triples = _CONDITIONS[condition]\n for triple in condition_triples:\n if triple in crate_aliases:\n crate_aliases[triple].update(deps)\n else:\n crate_aliases.update({triple: dict(deps.items() + common_items)})\n\n return select(crate_aliases)\n\n###############################################################################\n# WORKSPACE MEMBER DEPS, ALIASES, AND EDITIONS\n###############################################################################\n\n_CRATE_EDITIONS = {\n \"meta/dev\": \"2021\",\n \"meta/bazel\": \"2021\",\n \"pkgs/num\": \"2021\",\n \"pkgs/p2p_core\": \"2021\",\n \"pkgs/params\": \"2021\",\n \"pkgs/pkc\": \"2021\",\n \"pkgs/pow\": \"2021\",\n \"pkgs/primitives\": \"2021\",\n \"pkgs/script\": \"2021\",\n \"pkgs/types\": \"2021\",\n \"pkgs/types/marker\": \"2021\",\n}\n\n_NORMAL_DEPENDENCIES = {\n \"meta/dev\": {\n _COMMON_CONDITION: {\n \"bitcoin-consensus-encoding\": Label(\"@crates//bitcoin-consensus-encoding-1.2.0\"),\n \"cfg-if\": Label(\"@crates//cfg-if-1.0.5\"),\n \"ciborium\": Label(\"@crates//ciborium-0.2.2\"),\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"json5\": Label(\"@crates//json5-0.4.1\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"serde_json\": Label(\"@crates//serde_json-1.0.154\"),\n },\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n _COMMON_CONDITION: {\n \"bitcoin-consensus-encoding\": Label(\"@crates//bitcoin-consensus-encoding-1.2.0\"),\n \"bitcoin-internals\": Label(\"@crates//bitcoin-internals-0.7.0\"),\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n },\n },\n \"pkgs/p2p_core\": {\n _COMMON_CONDITION: {\n \"bitcoin-consensus-encoding\": Label(\"@crates//bitcoin-consensus-encoding-1.2.0\"),\n \"cfg-if\": Label(\"@crates//cfg-if-1.0.5\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"thiserror\": Label(\"@crates//thiserror-2.0.21\"),\n },\n },\n \"pkgs/params\": {\n _COMMON_CONDITION: {\n \"bitcoin-units\": Label(\"@crates//bitcoin-units-0.5.0\"),\n \"bitcoin_hashes\": Label(\"@crates//bitcoin_hashes-1.2.0\"),\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n },\n },\n \"pkgs/pkc\": {\n _COMMON_CONDITION: {\n \"aes\": Label(\"@crates//aes-0.9.3\"),\n \"base58ck\": Label(\"@crates//base58ck-0.5.0\"),\n \"bitcoin_hashes\": Label(\"@crates//bitcoin_hashes-1.2.0\"),\n \"blst\": Label(\"@crates//blst-0.3.17\"),\n \"cfg-if\": Label(\"@crates//cfg-if-1.0.5\"),\n \"ed25519-dalek\": Label(\"@crates//ed25519-dalek-3.0.0\"),\n \"ff\": Label(\"@crates//ff-0.14.0\"),\n \"group\": Label(\"@crates//group-0.14.0\"),\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"rand_core\": Label(\"@crates//rand_core-0.10.1\"),\n \"secp256k1\": Label(\"@crates//secp256k1-0.33.1\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"sha2\": Label(\"@crates//sha2-0.11.0\"),\n \"subtle\": Label(\"@crates//subtle-2.6.1\"),\n \"thiserror\": Label(\"@crates//thiserror-2.0.21\"),\n \"zeroize\": Label(\"@crates//zeroize-1.9.1\"),\n },\n },\n \"pkgs/pow\": {\n _COMMON_CONDITION: {\n \"digest\": Label(\"@crates//digest-0.11.3\"),\n \"wide\": Label(\"@crates//wide-1.7.1\"),\n },\n },\n \"pkgs/primitives\": {\n _COMMON_CONDITION: {\n \"bitcoin-consensus-encoding\": Label(\"@crates//bitcoin-consensus-encoding-1.2.0\"),\n \"bitcoin-primitives\": Label(\"@crates//bitcoin-primitives-0.103.1\"),\n \"bitcoin-units\": Label(\"@crates//bitcoin-units-0.5.0\"),\n \"bitcoin_hashes\": Label(\"@crates//bitcoin_hashes-1.2.0\"),\n \"cfg-if\": Label(\"@crates//cfg-if-1.0.5\"),\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"libm\": Label(\"@crates//libm-0.2.16\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"thiserror\": Label(\"@crates//thiserror-2.0.21\"),\n },\n },\n \"pkgs/script\": {\n _COMMON_CONDITION: {\n \"base58ck\": Label(\"@crates//base58ck-0.5.0\"),\n \"bitcoin-consensus-encoding\": Label(\"@crates//bitcoin-consensus-encoding-1.2.0\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n },\n },\n \"pkgs/types\": {\n _COMMON_CONDITION: {\n \"base58ck\": Label(\"@crates//base58ck-0.5.0\"),\n \"bitcoin-consensus-encoding\": Label(\"@crates//bitcoin-consensus-encoding-1.2.0\"),\n \"bitcoin-primitives\": Label(\"@crates//bitcoin-primitives-0.103.1\"),\n \"bitcoin_hashes\": Label(\"@crates//bitcoin_hashes-1.2.0\"),\n \"cfg-if\": Label(\"@crates//cfg-if-1.0.5\"),\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"subtle\": Label(\"@crates//subtle-2.6.1\"),\n \"thiserror\": Label(\"@crates//thiserror-2.0.21\"),\n \"zeroize\": Label(\"@crates//zeroize-1.9.1\"),\n },\n },\n \"pkgs/types/marker\": {\n _COMMON_CONDITION: {\n \"quote\": Label(\"@crates//quote-1.0.47\"),\n \"syn\": Label(\"@crates//syn-2.0.119\"),\n \"xxhash-rust\": Label(\"@crates//xxhash-rust-0.8.19\"),\n },\n },\n}\n\n\n_NORMAL_ALIASES = {\n \"meta/dev\": {\n _COMMON_CONDITION: {\n },\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/p2p_core\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/params\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/pkc\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/pow\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/primitives\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/script\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/types\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/types/marker\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n _COMMON_CONDITION: {\n \"divan\": Label(\"@crates//divan-0.1.21\"),\n \"rstest\": Label(\"@crates//rstest-0.25.0\"),\n },\n },\n \"pkgs/p2p_core\": {\n _COMMON_CONDITION: {\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"rstest\": Label(\"@crates//rstest-0.25.0\"),\n },\n },\n \"pkgs/params\": {\n _COMMON_CONDITION: {\n \"rstest\": Label(\"@crates//rstest-0.25.0\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n },\n },\n \"pkgs/pkc\": {\n _COMMON_CONDITION: {\n \"bitcoin-consensus-encoding\": Label(\"@crates//bitcoin-consensus-encoding-1.2.0\"),\n \"divan\": Label(\"@crates//divan-0.1.21\"),\n \"getrandom\": Label(\"@crates//getrandom-0.4.3\"),\n \"rstest\": Label(\"@crates//rstest-0.25.0\"),\n },\n },\n \"pkgs/pow\": {\n _COMMON_CONDITION: {\n \"divan\": Label(\"@crates//divan-0.1.21\"),\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"rstest\": Label(\"@crates//rstest-0.25.0\"),\n },\n },\n \"pkgs/primitives\": {\n _COMMON_CONDITION: {\n \"rstest\": Label(\"@crates//rstest-0.25.0\"),\n },\n },\n \"pkgs/script\": {\n _COMMON_CONDITION: {\n \"hex-conservative\": Label(\"@crates//hex-conservative-1.3.0\"),\n \"rstest\": Label(\"@crates//rstest-0.25.0\"),\n },\n },\n \"pkgs/types\": {\n _COMMON_CONDITION: {\n \"ciborium\": Label(\"@crates//ciborium-0.2.2\"),\n \"rstest\": Label(\"@crates//rstest-0.25.0\"),\n },\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/p2p_core\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/params\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/pkc\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/pow\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/primitives\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/script\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/types\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n _COMMON_CONDITION: {\n \"ambassador\": Label(\"@crates//ambassador-0.5.1\"),\n \"delegate\": Label(\"@crates//delegate-0.13.5\"),\n },\n },\n \"pkgs/p2p_core\": {\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n },\n \"pkgs/pow\": {\n },\n \"pkgs/primitives\": {\n },\n \"pkgs/script\": {\n },\n \"pkgs/types\": {\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_PROC_MACRO_ALIASES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n },\n \"pkgs/p2p_core\": {\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n },\n \"pkgs/pow\": {\n },\n \"pkgs/primitives\": {\n },\n \"pkgs/script\": {\n },\n \"pkgs/types\": {\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n },\n \"pkgs/p2p_core\": {\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n },\n \"pkgs/pow\": {\n },\n \"pkgs/primitives\": {\n },\n \"pkgs/script\": {\n },\n \"pkgs/types\": {\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/p2p_core\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/params\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/pkc\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/pow\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/primitives\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/script\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/types\": {\n _COMMON_CONDITION: {\n },\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_BUILD_DEPENDENCIES = {\n \"meta/dev\": {\n _COMMON_CONDITION: {\n \"built\": Label(\"@crates//built-0.7.7\"),\n \"proc-macro2\": Label(\"@crates//proc-macro2-1.0.107\"),\n \"syn\": Label(\"@crates//syn-2.0.119\"),\n \"xxhash-rust\": Label(\"@crates//xxhash-rust-0.8.19\"),\n },\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n },\n \"pkgs/p2p_core\": {\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n },\n \"pkgs/pow\": {\n },\n \"pkgs/primitives\": {\n },\n \"pkgs/script\": {\n },\n \"pkgs/types\": {\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_BUILD_ALIASES = {\n \"meta/dev\": {\n _COMMON_CONDITION: {\n },\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n },\n \"pkgs/p2p_core\": {\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n },\n \"pkgs/pow\": {\n },\n \"pkgs/primitives\": {\n },\n \"pkgs/script\": {\n },\n \"pkgs/types\": {\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n },\n \"pkgs/p2p_core\": {\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n },\n \"pkgs/pow\": {\n },\n \"pkgs/primitives\": {\n },\n \"pkgs/script\": {\n },\n \"pkgs/types\": {\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n \"meta/dev\": {\n },\n \"meta/bazel\": {\n },\n \"pkgs/num\": {\n },\n \"pkgs/p2p_core\": {\n },\n \"pkgs/params\": {\n },\n \"pkgs/pkc\": {\n },\n \"pkgs/pow\": {\n },\n \"pkgs/primitives\": {\n },\n \"pkgs/script\": {\n },\n \"pkgs/types\": {\n },\n \"pkgs/types/marker\": {\n },\n}\n\n\n_CONDITIONS = {\n \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"arm64ec-pc-windows-msvc\": [],\n \"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [],\n \"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), not(any(all(target_os = \\\"linux\\\", target_env = \\\"\\\"), getrandom_backend = \\\"custom\\\", getrandom_backend = \\\"linux_raw\\\", getrandom_backend = \\\"rdrand\\\", getrandom_backend = \\\"rndr\\\"))))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(not(curve25519_dalek_backend = \\\"fiat\\\"), not(curve25519_dalek_backend = \\\"serial\\\"), target_arch = \\\"x86_64\\\"))\": [\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(not(rustix_use_libc), not(miri), target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\"))))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"android\\\"))\": [],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\": [],\n \"cfg(all(target_os = \\\"uefi\\\", getrandom_backend = \\\"efi_rng\\\"))\": [],\n \"cfg(all(windows, not(target_arch = \\\"arm64ec\\\")))\": [],\n \"cfg(any())\": [],\n \"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(target_os = \\\"dragonfly\\\", target_os = \\\"freebsd\\\", target_os = \\\"hurd\\\", target_os = \\\"illumos\\\", target_os = \\\"cygwin\\\", all(target_os = \\\"horizon\\\", target_arch = \\\"arm\\\")))\": [],\n \"cfg(any(target_os = \\\"haiku\\\", target_os = \\\"redox\\\", target_os = \\\"nto\\\", target_os = \\\"aix\\\"))\": [],\n \"cfg(any(target_os = \\\"ios\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\", target_os = \\\"tvos\\\"))\": [],\n \"cfg(any(target_os = \\\"macos\\\", target_os = \\\"openbsd\\\", target_os = \\\"vita\\\", target_os = \\\"emscripten\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n \"cfg(curve25519_dalek_backend = \\\"fiat\\\")\": [],\n \"cfg(not(any(target_arch = \\\"wasm32\\\", target_os = \\\"none\\\", target_os = \\\"unknown\\\", target_os = \\\"uefi\\\")))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(windows))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(target_arch = \\\"spirv\\\")\": [],\n \"cfg(target_arch = \\\"x86\\\")\": [],\n \"cfg(target_arch = \\\"x86_64\\\")\": [\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(target_env = \\\"msvc\\\")\": [],\n \"cfg(target_os = \\\"hermit\\\")\": [],\n \"cfg(target_os = \\\"netbsd\\\")\": [],\n \"cfg(target_os = \\\"solaris\\\")\": [],\n \"cfg(target_os = \\\"vxworks\\\")\": [],\n \"cfg(target_os = \\\"wasi\\\")\": [],\n \"cfg(unix)\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(windows)\": [],\n \"x86_64-apple-darwin\": [\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n}\n\n###############################################################################\n\ndef crate_repositories():\n \"\"\"A macro for defining repositories for all generated crates.\n\n Returns:\n A list of repos visible to the module through the module extension.\n \"\"\"\n maybe(\n crates_vendor_remote_repository,\n name = \"crates\",\n # Lean interface: just point at `crates.bzl`; the repo rule\n # derives the sibling `BUILD.bazel` and `defs.bzl`.\n crates_module = Label(\"@crates//crates:crates.bzl\"),\n )\n maybe(\n http_archive,\n name = \"crates__aes-0.9.3\",\n sha256 = \"35f0f96ce78e38c3dc6d8948aa8163d06385be74000f3c7a95bf1eef35d3ea32\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aes/0.9.3/download\"],\n strip_prefix = \"aes-0.9.3\",\n build_file = Label(\"@crates//crates:BUILD.aes-0.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__aho-corasick-1.1.5\",\n sha256 = \"c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aho-corasick/1.1.5/download\"],\n strip_prefix = \"aho-corasick-1.1.5\",\n build_file = Label(\"@crates//crates:BUILD.aho-corasick-1.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ambassador-0.5.1\",\n sha256 = \"cd3d4da7fddbc6567cbd7b5c30364f91313701b1857ab5b925eb3acf06162eed\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ambassador/0.5.1/download\"],\n strip_prefix = \"ambassador-0.5.1\",\n build_file = Label(\"@crates//crates:BUILD.ambassador-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-1.0.14\",\n sha256 = \"940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle/1.0.14/download\"],\n strip_prefix = \"anstyle-1.0.14\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-1.0.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__arrayvec-0.7.8\",\n sha256 = \"d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/arrayvec/0.7.8/download\"],\n strip_prefix = \"arrayvec-0.7.8\",\n build_file = Label(\"@crates//crates:BUILD.arrayvec-0.7.8.bazel\"),\n )\n\n maybe(\n git_repository,\n name = \"crates__base58ck-0.5.0\",\n commit = \"7ba35c7c1dd63892bfb9c9395bbd80e2ab5df516\",\n init_submodules = True,\n remote = \"https://github.com/rust-bitcoin/rust-bitcoin\",\n build_file = Label(\"@crates//crates:BUILD.base58ck-0.5.0.bazel\"),\n strip_prefix = \"base58\",\n )\n\n maybe(\n git_repository,\n name = \"crates__bitcoin-consensus-encoding-1.2.0\",\n commit = \"7ba35c7c1dd63892bfb9c9395bbd80e2ab5df516\",\n init_submodules = True,\n remote = \"https://github.com/rust-bitcoin/rust-bitcoin\",\n build_file = Label(\"@crates//crates:BUILD.bitcoin-consensus-encoding-1.2.0.bazel\"),\n strip_prefix = \"consensus_encoding\",\n )\n\n maybe(\n git_repository,\n name = \"crates__bitcoin-internals-0.7.0\",\n commit = \"7ba35c7c1dd63892bfb9c9395bbd80e2ab5df516\",\n init_submodules = True,\n remote = \"https://github.com/rust-bitcoin/rust-bitcoin\",\n build_file = Label(\"@crates//crates:BUILD.bitcoin-internals-0.7.0.bazel\"),\n strip_prefix = \"internals\",\n )\n\n maybe(\n git_repository,\n name = \"crates__bitcoin-primitives-0.103.1\",\n commit = \"7ba35c7c1dd63892bfb9c9395bbd80e2ab5df516\",\n init_submodules = True,\n remote = \"https://github.com/rust-bitcoin/rust-bitcoin\",\n build_file = Label(\"@crates//crates:BUILD.bitcoin-primitives-0.103.1.bazel\"),\n strip_prefix = \"primitives\",\n )\n\n maybe(\n git_repository,\n name = \"crates__bitcoin-units-0.5.0\",\n commit = \"7ba35c7c1dd63892bfb9c9395bbd80e2ab5df516\",\n init_submodules = True,\n remote = \"https://github.com/rust-bitcoin/rust-bitcoin\",\n build_file = Label(\"@crates//crates:BUILD.bitcoin-units-0.5.0.bazel\"),\n strip_prefix = \"units\",\n )\n\n maybe(\n git_repository,\n name = \"crates__bitcoin_hashes-1.2.0\",\n commit = \"7ba35c7c1dd63892bfb9c9395bbd80e2ab5df516\",\n init_submodules = True,\n remote = \"https://github.com/rust-bitcoin/rust-bitcoin\",\n build_file = Label(\"@crates//crates:BUILD.bitcoin_hashes-1.2.0.bazel\"),\n strip_prefix = \"hashes\",\n )\n\n maybe(\n http_archive,\n name = \"crates__bitflags-2.13.2\",\n sha256 = \"3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/2.13.2/download\"],\n strip_prefix = \"bitflags-2.13.2\",\n build_file = Label(\"@crates//crates:BUILD.bitflags-2.13.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__block-buffer-0.12.1\",\n sha256 = \"d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block-buffer/0.12.1/download\"],\n strip_prefix = \"block-buffer-0.12.1\",\n build_file = Label(\"@crates//crates:BUILD.block-buffer-0.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__blst-0.3.17\",\n sha256 = \"c20659f9bbee16cbbd2f7393e40ab6309f5a98f76a2eb57a995ec508b72387fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/blst/0.3.17/download\"],\n strip_prefix = \"blst-0.3.17\",\n build_file = Label(\"@crates//crates:BUILD.blst-0.3.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__built-0.7.7\",\n sha256 = \"56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/built/0.7.7/download\"],\n strip_prefix = \"built-0.7.7\",\n build_file = Label(\"@crates//crates:BUILD.built-0.7.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bytemuck-1.25.2\",\n sha256 = \"95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytemuck/1.25.2/download\"],\n strip_prefix = \"bytemuck-1.25.2\",\n build_file = Label(\"@crates//crates:BUILD.bytemuck-1.25.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cargo-lock-10.1.0\",\n sha256 = \"c06acb4f71407ba205a07cb453211e0e6a67b21904e47f6ba1f9589e38f2e454\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cargo-lock/10.1.0/download\"],\n strip_prefix = \"cargo-lock-10.1.0\",\n build_file = Label(\"@crates//crates:BUILD.cargo-lock-10.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cc-1.8.0\",\n sha256 = \"6651c9ed80effdc7db0ff72512157f901af5e3549e341e24b1dd4887d836d838\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cc/1.8.0/download\"],\n strip_prefix = \"cc-1.8.0\",\n build_file = Label(\"@crates//crates:BUILD.cc-1.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cfg-if-1.0.5\",\n sha256 = \"4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg-if/1.0.5/download\"],\n strip_prefix = \"cfg-if-1.0.5\",\n build_file = Label(\"@crates//crates:BUILD.cfg-if-1.0.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ciborium-0.2.2\",\n sha256 = \"42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ciborium/0.2.2/download\"],\n strip_prefix = \"ciborium-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.ciborium-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ciborium-io-0.2.2\",\n sha256 = \"05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ciborium-io/0.2.2/download\"],\n strip_prefix = \"ciborium-io-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.ciborium-io-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ciborium-ll-0.2.2\",\n sha256 = \"57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ciborium-ll/0.2.2/download\"],\n strip_prefix = \"ciborium-ll-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.ciborium-ll-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cipher-0.5.2\",\n sha256 = \"e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cipher/0.5.2/download\"],\n strip_prefix = \"cipher-0.5.2\",\n build_file = Label(\"@crates//crates:BUILD.cipher-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap-4.6.7\",\n sha256 = \"aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap/4.6.7/download\"],\n strip_prefix = \"clap-4.6.7\",\n build_file = Label(\"@crates//crates:BUILD.clap-4.6.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_builder-4.6.7\",\n sha256 = \"ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_builder/4.6.7/download\"],\n strip_prefix = \"clap_builder-4.6.7\",\n build_file = Label(\"@crates//crates:BUILD.clap_builder-4.6.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_lex-1.1.1\",\n sha256 = \"1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_lex/1.1.1/download\"],\n strip_prefix = \"clap_lex-1.1.1\",\n build_file = Label(\"@crates//crates:BUILD.clap_lex-1.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__condtype-1.3.0\",\n sha256 = \"baf0a07a401f374238ab8e2f11a104d2851bf9ce711ec69804834de8af45c7af\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/condtype/1.3.0/download\"],\n strip_prefix = \"condtype-1.3.0\",\n build_file = Label(\"@crates//crates:BUILD.condtype-1.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cpubits-0.1.1\",\n sha256 = \"15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cpubits/0.1.1/download\"],\n strip_prefix = \"cpubits-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.cpubits-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cpufeatures-0.3.1\",\n sha256 = \"5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cpufeatures/0.3.1/download\"],\n strip_prefix = \"cpufeatures-0.3.1\",\n build_file = Label(\"@crates//crates:BUILD.cpufeatures-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crunchy-0.2.4\",\n sha256 = \"460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crunchy/0.2.4/download\"],\n strip_prefix = \"crunchy-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.crunchy-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crypto-common-0.2.2\",\n sha256 = \"ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crypto-common/0.2.2/download\"],\n strip_prefix = \"crypto-common-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.crypto-common-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__curve25519-dalek-5.0.0\",\n sha256 = \"b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/curve25519-dalek/5.0.0/download\"],\n strip_prefix = \"curve25519-dalek-5.0.0\",\n build_file = Label(\"@crates//crates:BUILD.curve25519-dalek-5.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__curve25519-dalek-derive-0.1.1\",\n sha256 = \"f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/curve25519-dalek-derive/0.1.1/download\"],\n strip_prefix = \"curve25519-dalek-derive-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.curve25519-dalek-derive-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__delegate-0.13.5\",\n sha256 = \"780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/delegate/0.13.5/download\"],\n strip_prefix = \"delegate-0.13.5\",\n build_file = Label(\"@crates//crates:BUILD.delegate-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__digest-0.11.3\",\n sha256 = \"f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/digest/0.11.3/download\"],\n strip_prefix = \"digest-0.11.3\",\n build_file = Label(\"@crates//crates:BUILD.digest-0.11.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__displaydoc-0.2.7\",\n sha256 = \"c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/displaydoc/0.2.7/download\"],\n strip_prefix = \"displaydoc-0.2.7\",\n build_file = Label(\"@crates//crates:BUILD.displaydoc-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__divan-0.1.21\",\n sha256 = \"a405457ec78b8fe08b0e32b4a3570ab5dff6dd16eb9e76a5ee0a9d9cbd898933\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/divan/0.1.21/download\"],\n strip_prefix = \"divan-0.1.21\",\n build_file = Label(\"@crates//crates:BUILD.divan-0.1.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__divan-macros-0.1.21\",\n sha256 = \"9556bc800956545d6420a640173e5ba7dfa82f38d3ea5a167eb555bc69ac3323\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/divan-macros/0.1.21/download\"],\n strip_prefix = \"divan-macros-0.1.21\",\n build_file = Label(\"@crates//crates:BUILD.divan-macros-0.1.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ed25519-3.0.0\",\n sha256 = \"29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ed25519/3.0.0/download\"],\n strip_prefix = \"ed25519-3.0.0\",\n build_file = Label(\"@crates//crates:BUILD.ed25519-3.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ed25519-dalek-3.0.0\",\n sha256 = \"6ebaa1a2bf1290ab3bfe5a7b771d050ebffab2711c19a81691c683a5144a25de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ed25519-dalek/3.0.0/download\"],\n strip_prefix = \"ed25519-dalek-3.0.0\",\n build_file = Label(\"@crates//crates:BUILD.ed25519-dalek-3.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__either-1.19.0\",\n sha256 = \"0e9c71c2167ca323c882b99918929403426e2373ea17242ff5653e0d5e1058be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/either/1.19.0/download\"],\n strip_prefix = \"either-1.19.0\",\n build_file = Label(\"@crates//crates:BUILD.either-1.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__equivalent-1.0.2\",\n sha256 = \"877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/equivalent/1.0.2/download\"],\n strip_prefix = \"equivalent-1.0.2\",\n build_file = Label(\"@crates//crates:BUILD.equivalent-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__errno-0.3.14\",\n sha256 = \"39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/errno/0.3.14/download\"],\n strip_prefix = \"errno-0.3.14\",\n build_file = Label(\"@crates//crates:BUILD.errno-0.3.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ff-0.14.0\",\n sha256 = \"a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ff/0.14.0/download\"],\n strip_prefix = \"ff-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.ff-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fiat-crypto-0.3.0\",\n sha256 = \"64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fiat-crypto/0.3.0/download\"],\n strip_prefix = \"fiat-crypto-0.3.0\",\n build_file = Label(\"@crates//crates:BUILD.fiat-crypto-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__find-msvc-tools-0.1.14\",\n sha256 = \"aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/find-msvc-tools/0.1.14/download\"],\n strip_prefix = \"find-msvc-tools-0.1.14\",\n build_file = Label(\"@crates//crates:BUILD.find-msvc-tools-0.1.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fixedbitset-0.4.2\",\n sha256 = \"0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fixedbitset/0.4.2/download\"],\n strip_prefix = \"fixedbitset-0.4.2\",\n build_file = Label(\"@crates//crates:BUILD.fixedbitset-0.4.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__form_urlencoded-1.2.2\",\n sha256 = \"cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/form_urlencoded/1.2.2/download\"],\n strip_prefix = \"form_urlencoded-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.form_urlencoded-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-core-0.3.34\",\n sha256 = \"92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-core/0.3.34/download\"],\n strip_prefix = \"futures-core-0.3.34\",\n build_file = Label(\"@crates//crates:BUILD.futures-core-0.3.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-macro-0.3.34\",\n sha256 = \"9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-macro/0.3.34/download\"],\n strip_prefix = \"futures-macro-0.3.34\",\n build_file = Label(\"@crates//crates:BUILD.futures-macro-0.3.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-task-0.3.34\",\n sha256 = \"cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-task/0.3.34/download\"],\n strip_prefix = \"futures-task-0.3.34\",\n build_file = Label(\"@crates//crates:BUILD.futures-task-0.3.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-timer-3.0.4\",\n sha256 = \"af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-timer/3.0.4/download\"],\n strip_prefix = \"futures-timer-3.0.4\",\n build_file = Label(\"@crates//crates:BUILD.futures-timer-3.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-util-0.3.34\",\n sha256 = \"0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-util/0.3.34/download\"],\n strip_prefix = \"futures-util-0.3.34\",\n build_file = Label(\"@crates//crates:BUILD.futures-util-0.3.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__getrandom-0.4.3\",\n sha256 = \"300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.4.3/download\"],\n strip_prefix = \"getrandom-0.4.3\",\n build_file = Label(\"@crates//crates:BUILD.getrandom-0.4.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__git2-0.20.4\",\n sha256 = \"7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/git2/0.20.4/download\"],\n strip_prefix = \"git2-0.20.4\",\n build_file = Label(\"@crates//crates:BUILD.git2-0.20.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__glob-0.3.4\",\n sha256 = \"e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/glob/0.3.4/download\"],\n strip_prefix = \"glob-0.3.4\",\n build_file = Label(\"@crates//crates:BUILD.glob-0.3.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__group-0.14.0\",\n sha256 = \"7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/group/0.14.0/download\"],\n strip_prefix = \"group-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.group-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__half-2.7.1\",\n sha256 = \"6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/half/2.7.1/download\"],\n strip_prefix = \"half-2.7.1\",\n build_file = Label(\"@crates//crates:BUILD.half-2.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashbrown-0.17.1\",\n sha256 = \"ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.17.1/download\"],\n strip_prefix = \"hashbrown-0.17.1\",\n build_file = Label(\"@crates//crates:BUILD.hashbrown-0.17.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hermit-abi-0.5.3\",\n sha256 = \"e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hermit-abi/0.5.3/download\"],\n strip_prefix = \"hermit-abi-0.5.3\",\n build_file = Label(\"@crates//crates:BUILD.hermit-abi-0.5.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hex-conservative-1.3.0\",\n sha256 = \"271e0d19bcb473b6675739a2b536076b24a082316cb5199ad918edce10c599e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hex-conservative/1.3.0/download\"],\n strip_prefix = \"hex-conservative-1.3.0\",\n build_file = Label(\"@crates//crates:BUILD.hex-conservative-1.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hybrid-array-0.4.15\",\n sha256 = \"27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hybrid-array/0.4.15/download\"],\n strip_prefix = \"hybrid-array-0.4.15\",\n build_file = Label(\"@crates//crates:BUILD.hybrid-array-0.4.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_collections-2.3.0\",\n sha256 = \"fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_collections/2.3.0/download\"],\n strip_prefix = \"icu_collections-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_collections-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_locale_core-2.3.0\",\n sha256 = \"d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_locale_core/2.3.0/download\"],\n strip_prefix = \"icu_locale_core-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_locale_core-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_normalizer-2.3.0\",\n sha256 = \"12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer/2.3.0/download\"],\n strip_prefix = \"icu_normalizer-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_normalizer-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_normalizer_data-2.3.0\",\n sha256 = \"1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer_data/2.3.0/download\"],\n strip_prefix = \"icu_normalizer_data-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_normalizer_data-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_properties-2.3.0\",\n sha256 = \"7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties/2.3.0/download\"],\n strip_prefix = \"icu_properties-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_properties-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_properties_data-2.3.0\",\n sha256 = \"e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties_data/2.3.0/download\"],\n strip_prefix = \"icu_properties_data-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_properties_data-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_provider-2.3.1\",\n sha256 = \"d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_provider/2.3.1/download\"],\n strip_prefix = \"icu_provider-2.3.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_provider-2.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__idna-1.1.0\",\n sha256 = \"3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/idna/1.1.0/download\"],\n strip_prefix = \"idna-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.idna-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__idna_adapter-1.2.2\",\n sha256 = \"cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/idna_adapter/1.2.2/download\"],\n strip_prefix = \"idna_adapter-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.idna_adapter-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__indexmap-2.14.2\",\n sha256 = \"cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/2.14.2/download\"],\n strip_prefix = \"indexmap-2.14.2\",\n build_file = Label(\"@crates//crates:BUILD.indexmap-2.14.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__inout-0.2.2\",\n sha256 = \"4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/inout/0.2.2/download\"],\n strip_prefix = \"inout-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.inout-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itertools-0.10.5\",\n sha256 = \"b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itertools/0.10.5/download\"],\n strip_prefix = \"itertools-0.10.5\",\n build_file = Label(\"@crates//crates:BUILD.itertools-0.10.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itoa-1.0.18\",\n sha256 = \"8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itoa/1.0.18/download\"],\n strip_prefix = \"itoa-1.0.18\",\n build_file = Label(\"@crates//crates:BUILD.itoa-1.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__jobserver-0.1.35\",\n sha256 = \"1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jobserver/0.1.35/download\"],\n strip_prefix = \"jobserver-0.1.35\",\n build_file = Label(\"@crates//crates:BUILD.jobserver-0.1.35.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__json5-0.4.1\",\n sha256 = \"96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/json5/0.4.1/download\"],\n strip_prefix = \"json5-0.4.1\",\n build_file = Label(\"@crates//crates:BUILD.json5-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libc-0.2.190\",\n sha256 = \"ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libc/0.2.190/download\"],\n strip_prefix = \"libc-0.2.190\",\n build_file = Label(\"@crates//crates:BUILD.libc-0.2.190.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libgit2-sys-0.18.8-1.9.7\",\n sha256 = \"7f7c568b25d7489bc3fb2988ed69ab111d2944d2f5fec3d5c987fe545ea97b50\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libgit2-sys/0.18.8+1.9.7/download\"],\n strip_prefix = \"libgit2-sys-0.18.8+1.9.7\",\n build_file = Label(\"@crates//crates:BUILD.libgit2-sys-0.18.8+1.9.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libm-0.2.16\",\n sha256 = \"b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libm/0.2.16/download\"],\n strip_prefix = \"libm-0.2.16\",\n build_file = Label(\"@crates//crates:BUILD.libm-0.2.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libz-sys-1.1.29\",\n sha256 = \"85bc9657773828b90eeb625adff10eeac83cc21bbfd8e23a03eaa8a33c9e28d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libz-sys/1.1.29/download\"],\n strip_prefix = \"libz-sys-1.1.29\",\n build_file = Label(\"@crates//crates:BUILD.libz-sys-1.1.29.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__linux-raw-sys-0.12.1\",\n sha256 = \"32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/linux-raw-sys/0.12.1/download\"],\n strip_prefix = \"linux-raw-sys-0.12.1\",\n build_file = Label(\"@crates//crates:BUILD.linux-raw-sys-0.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__litemap-0.8.3\",\n sha256 = \"47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/litemap/0.8.3/download\"],\n strip_prefix = \"litemap-0.8.3\",\n build_file = Label(\"@crates//crates:BUILD.litemap-0.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__log-0.4.34\",\n sha256 = \"f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/log/0.4.34/download\"],\n strip_prefix = \"log-0.4.34\",\n build_file = Label(\"@crates//crates:BUILD.log-0.4.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__memchr-2.8.3\",\n sha256 = \"cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/memchr/2.8.3/download\"],\n strip_prefix = \"memchr-2.8.3\",\n build_file = Label(\"@crates//crates:BUILD.memchr-2.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num_cpus-1.17.0\",\n sha256 = \"91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num_cpus/1.17.0/download\"],\n strip_prefix = \"num_cpus-1.17.0\",\n build_file = Label(\"@crates//crates:BUILD.num_cpus-1.17.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__percent-encoding-2.3.2\",\n sha256 = \"9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/percent-encoding/2.3.2/download\"],\n strip_prefix = \"percent-encoding-2.3.2\",\n build_file = Label(\"@crates//crates:BUILD.percent-encoding-2.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest-2.9.3\",\n sha256 = \"b568374ba38b33a6c627141f891faf16902b08d2db26b8ede1bcb0a15b1919fa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest/2.9.3/download\"],\n strip_prefix = \"pest-2.9.3\",\n build_file = Label(\"@crates//crates:BUILD.pest-2.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest_derive-2.9.3\",\n sha256 = \"b66e184b924cebaaff20ab2256ca52f12332d528a39aa76553b5d96f92aacf7f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_derive/2.9.3/download\"],\n strip_prefix = \"pest_derive-2.9.3\",\n build_file = Label(\"@crates//crates:BUILD.pest_derive-2.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest_generator-2.9.3\",\n sha256 = \"a87478d267e4de54a626af9754f2f0f58e927aac6ed0575fe89bc05ad6851694\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_generator/2.9.3/download\"],\n strip_prefix = \"pest_generator-2.9.3\",\n build_file = Label(\"@crates//crates:BUILD.pest_generator-2.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest_meta-2.9.3\",\n sha256 = \"4f986f248b4241ac359b831f6139aaa34e03b08a37b6caf7e201a33f95c869e1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_meta/2.9.3/download\"],\n strip_prefix = \"pest_meta-2.9.3\",\n build_file = Label(\"@crates//crates:BUILD.pest_meta-2.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__petgraph-0.6.5\",\n sha256 = \"b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/petgraph/0.6.5/download\"],\n strip_prefix = \"petgraph-0.6.5\",\n build_file = Label(\"@crates//crates:BUILD.petgraph-0.6.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pin-project-lite-0.2.17\",\n sha256 = \"a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-lite/0.2.17/download\"],\n strip_prefix = \"pin-project-lite-0.2.17\",\n build_file = Label(\"@crates//crates:BUILD.pin-project-lite-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pkg-config-0.3.34\",\n sha256 = \"f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pkg-config/0.3.34/download\"],\n strip_prefix = \"pkg-config-0.3.34\",\n build_file = Label(\"@crates//crates:BUILD.pkg-config-0.3.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__potential_utf-0.1.6\",\n sha256 = \"d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/potential_utf/0.1.6/download\"],\n strip_prefix = \"potential_utf-0.1.6\",\n build_file = Label(\"@crates//crates:BUILD.potential_utf-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__proc-macro-crate-3.5.0\",\n sha256 = \"e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro-crate/3.5.0/download\"],\n strip_prefix = \"proc-macro-crate-3.5.0\",\n build_file = Label(\"@crates//crates:BUILD.proc-macro-crate-3.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__proc-macro2-1.0.107\",\n sha256 = \"985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2/1.0.107/download\"],\n strip_prefix = \"proc-macro2-1.0.107\",\n build_file = Label(\"@crates//crates:BUILD.proc-macro2-1.0.107.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__psm-0.1.24\",\n sha256 = \"200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/psm/0.1.24/download\"],\n strip_prefix = \"psm-0.1.24\",\n build_file = Label(\"@crates//crates:BUILD.psm-0.1.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__quote-1.0.47\",\n sha256 = \"1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quote/1.0.47/download\"],\n strip_prefix = \"quote-1.0.47\",\n build_file = Label(\"@crates//crates:BUILD.quote-1.0.47.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__r-efi-6.0.0\",\n sha256 = \"f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/r-efi/6.0.0/download\"],\n strip_prefix = \"r-efi-6.0.0\",\n build_file = Label(\"@crates//crates:BUILD.r-efi-6.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand_core-0.10.1\",\n sha256 = \"63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_core/0.10.1/download\"],\n strip_prefix = \"rand_core-0.10.1\",\n build_file = Label(\"@crates//crates:BUILD.rand_core-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-1.13.1\",\n sha256 = \"f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex/1.13.1/download\"],\n strip_prefix = \"regex-1.13.1\",\n build_file = Label(\"@crates//crates:BUILD.regex-1.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-automata-0.4.18\",\n sha256 = \"ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-automata/0.4.18/download\"],\n strip_prefix = \"regex-automata-0.4.18\",\n build_file = Label(\"@crates//crates:BUILD.regex-automata-0.4.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-lite-0.1.9\",\n sha256 = \"cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-lite/0.1.9/download\"],\n strip_prefix = \"regex-lite-0.1.9\",\n build_file = Label(\"@crates//crates:BUILD.regex-lite-0.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-syntax-0.8.11\",\n sha256 = \"d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-syntax/0.8.11/download\"],\n strip_prefix = \"regex-syntax-0.8.11\",\n build_file = Label(\"@crates//crates:BUILD.regex-syntax-0.8.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__relative-path-1.9.3\",\n sha256 = \"ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/relative-path/1.9.3/download\"],\n strip_prefix = \"relative-path-1.9.3\",\n build_file = Label(\"@crates//crates:BUILD.relative-path-1.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rstest-0.25.0\",\n sha256 = \"6fc39292f8613e913f7df8fa892b8944ceb47c247b78e1b1ae2f09e019be789d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rstest/0.25.0/download\"],\n strip_prefix = \"rstest-0.25.0\",\n build_file = Label(\"@crates//crates:BUILD.rstest-0.25.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rstest_macros-0.25.0\",\n sha256 = \"1f168d99749d307be9de54d23fd226628d99768225ef08f6ffb52e0182a27746\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rstest_macros/0.25.0/download\"],\n strip_prefix = \"rstest_macros-0.25.0\",\n build_file = Label(\"@crates//crates:BUILD.rstest_macros-0.25.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustc_version-0.4.1\",\n sha256 = \"cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc_version/0.4.1/download\"],\n strip_prefix = \"rustc_version-0.4.1\",\n build_file = Label(\"@crates//crates:BUILD.rustc_version-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustix-1.1.5\",\n sha256 = \"891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustix/1.1.5/download\"],\n strip_prefix = \"rustix-1.1.5\",\n build_file = Label(\"@crates//crates:BUILD.rustix-1.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__safe_arch-1.2.0\",\n sha256 = \"42c6efa15875e6ecb39ca61fb0b0c1a40b84fac5a5ffe71eef7d1000c8eb3f5f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/safe_arch/1.2.0/download\"],\n strip_prefix = \"safe_arch-1.2.0\",\n build_file = Label(\"@crates//crates:BUILD.safe_arch-1.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__secp256k1-0.33.1\",\n sha256 = \"d7f404a8dab7a7a5a631e741d8699aa9c8e1d689fc26ccf897c7187565490b69\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/secp256k1/0.33.1/download\"],\n strip_prefix = \"secp256k1-0.33.1\",\n build_file = Label(\"@crates//crates:BUILD.secp256k1-0.33.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__secp256k1-sys-0.14.1\",\n sha256 = \"f6b2992d4a3cd244539a7d5d0966aadbe5ca7fb868a5d7e38c29499b9e709bbd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/secp256k1-sys/0.14.1/download\"],\n strip_prefix = \"secp256k1-sys-0.14.1\",\n build_file = Label(\"@crates//crates:BUILD.secp256k1-sys-0.14.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__semver-1.0.28\",\n sha256 = \"8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/semver/1.0.28/download\"],\n strip_prefix = \"semver-1.0.28\",\n build_file = Label(\"@crates//crates:BUILD.semver-1.0.28.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde-1.0.229\",\n sha256 = \"4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde/1.0.229/download\"],\n strip_prefix = \"serde-1.0.229\",\n build_file = Label(\"@crates//crates:BUILD.serde-1.0.229.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_core-1.0.229\",\n sha256 = \"67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_core/1.0.229/download\"],\n strip_prefix = \"serde_core-1.0.229\",\n build_file = Label(\"@crates//crates:BUILD.serde_core-1.0.229.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_derive-1.0.229\",\n sha256 = \"e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive/1.0.229/download\"],\n strip_prefix = \"serde_derive-1.0.229\",\n build_file = Label(\"@crates//crates:BUILD.serde_derive-1.0.229.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_json-1.0.154\",\n sha256 = \"e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_json/1.0.154/download\"],\n strip_prefix = \"serde_json-1.0.154\",\n build_file = Label(\"@crates//crates:BUILD.serde_json-1.0.154.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_spanned-0.6.9\",\n sha256 = \"bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_spanned/0.6.9/download\"],\n strip_prefix = \"serde_spanned-0.6.9\",\n build_file = Label(\"@crates//crates:BUILD.serde_spanned-0.6.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sha2-0.11.0\",\n sha256 = \"446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sha2/0.11.0/download\"],\n strip_prefix = \"sha2-0.11.0\",\n build_file = Label(\"@crates//crates:BUILD.sha2-0.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__shlex-2.0.1\",\n sha256 = \"f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/shlex/2.0.1/download\"],\n strip_prefix = \"shlex-2.0.1\",\n build_file = Label(\"@crates//crates:BUILD.shlex-2.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__signature-3.0.0\",\n sha256 = \"28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/signature/3.0.0/download\"],\n strip_prefix = \"signature-3.0.0\",\n build_file = Label(\"@crates//crates:BUILD.signature-3.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__slab-0.4.12\",\n sha256 = \"0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/slab/0.4.12/download\"],\n strip_prefix = \"slab-0.4.12\",\n build_file = Label(\"@crates//crates:BUILD.slab-0.4.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__smallvec-1.16.3\",\n sha256 = \"5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/smallvec/1.16.3/download\"],\n strip_prefix = \"smallvec-1.16.3\",\n build_file = Label(\"@crates//crates:BUILD.smallvec-1.16.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__stable_deref_trait-1.2.1\",\n sha256 = \"6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/stable_deref_trait/1.2.1/download\"],\n strip_prefix = \"stable_deref_trait-1.2.1\",\n build_file = Label(\"@crates//crates:BUILD.stable_deref_trait-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__stacker-0.1.25\",\n sha256 = \"707f49d46706bacf8a2b00d51dace3f9de527c13eec3778f570c411f89e69967\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/stacker/0.1.25/download\"],\n strip_prefix = \"stacker-0.1.25\",\n build_file = Label(\"@crates//crates:BUILD.stacker-0.1.25.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__subtle-2.6.1\",\n sha256 = \"13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/subtle/2.6.1/download\"],\n strip_prefix = \"subtle-2.6.1\",\n build_file = Label(\"@crates//crates:BUILD.subtle-2.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__syn-2.0.119\",\n sha256 = \"872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/2.0.119/download\"],\n strip_prefix = \"syn-2.0.119\",\n build_file = Label(\"@crates//crates:BUILD.syn-2.0.119.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__syn-3.0.8\",\n sha256 = \"01016da373cd8f7ef12624f796309f5c31ba8d646dd08856c02cd741d823c622\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/3.0.8/download\"],\n strip_prefix = \"syn-3.0.8\",\n build_file = Label(\"@crates//crates:BUILD.syn-3.0.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__synstructure-0.14.0\",\n sha256 = \"901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/synstructure/0.14.0/download\"],\n strip_prefix = \"synstructure-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.synstructure-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__terminal_size-0.4.4\",\n sha256 = \"230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/terminal_size/0.4.4/download\"],\n strip_prefix = \"terminal_size-0.4.4\",\n build_file = Label(\"@crates//crates:BUILD.terminal_size-0.4.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thiserror-2.0.21\",\n sha256 = \"09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror/2.0.21/download\"],\n strip_prefix = \"thiserror-2.0.21\",\n build_file = Label(\"@crates//crates:BUILD.thiserror-2.0.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thiserror-impl-2.0.21\",\n sha256 = \"fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror-impl/2.0.21/download\"],\n strip_prefix = \"thiserror-impl-2.0.21\",\n build_file = Label(\"@crates//crates:BUILD.thiserror-impl-2.0.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__threadpool-1.8.1\",\n sha256 = \"d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/threadpool/1.8.1/download\"],\n strip_prefix = \"threadpool-1.8.1\",\n build_file = Label(\"@crates//crates:BUILD.threadpool-1.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tinystr-0.8.4\",\n sha256 = \"b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tinystr/0.8.4/download\"],\n strip_prefix = \"tinystr-0.8.4\",\n build_file = Label(\"@crates//crates:BUILD.tinystr-0.8.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml-0.8.23\",\n sha256 = \"dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml/0.8.23/download\"],\n strip_prefix = \"toml-0.8.23\",\n build_file = Label(\"@crates//crates:BUILD.toml-0.8.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_datetime-0.6.11\",\n sha256 = \"22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_datetime/0.6.11/download\"],\n strip_prefix = \"toml_datetime-0.6.11\",\n build_file = Label(\"@crates//crates:BUILD.toml_datetime-0.6.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_datetime-1.1.2-spec-1.1.0\",\n sha256 = \"2b86d767906c6c42421dcba507eb9d203e779497710a47782a224bb871653053\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_datetime/1.1.2+spec-1.1.0/download\"],\n strip_prefix = \"toml_datetime-1.1.2+spec-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.toml_datetime-1.1.2+spec-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_edit-0.22.27\",\n sha256 = \"41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_edit/0.22.27/download\"],\n strip_prefix = \"toml_edit-0.22.27\",\n build_file = Label(\"@crates//crates:BUILD.toml_edit-0.22.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_edit-0.25.17-spec-1.1.0\",\n sha256 = \"e3641d5bbb5349a79e1020a242d251efbc546ad8048d133958323ce9c40a9c9c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_edit/0.25.17+spec-1.1.0/download\"],\n strip_prefix = \"toml_edit-0.25.17+spec-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.toml_edit-0.25.17+spec-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_parser-1.1.5-spec-1.1.0\",\n sha256 = \"baa693a8032d7e1cada7d0041e96126df243179ff061456783ac7f12bda4744c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_parser/1.1.5+spec-1.1.0/download\"],\n strip_prefix = \"toml_parser-1.1.5+spec-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.toml_parser-1.1.5+spec-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_write-0.1.2\",\n sha256 = \"5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_write/0.1.2/download\"],\n strip_prefix = \"toml_write-0.1.2\",\n build_file = Label(\"@crates//crates:BUILD.toml_write-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__typenum-1.20.1\",\n sha256 = \"b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typenum/1.20.1/download\"],\n strip_prefix = \"typenum-1.20.1\",\n build_file = Label(\"@crates//crates:BUILD.typenum-1.20.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ucd-trie-0.1.7\",\n sha256 = \"2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ucd-trie/0.1.7/download\"],\n strip_prefix = \"ucd-trie-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.ucd-trie-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-ident-1.0.26\",\n sha256 = \"d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-ident/1.0.26/download\"],\n strip_prefix = \"unicode-ident-1.0.26\",\n build_file = Label(\"@crates//crates:BUILD.unicode-ident-1.0.26.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__url-2.5.8\",\n sha256 = \"ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/url/2.5.8/download\"],\n strip_prefix = \"url-2.5.8\",\n build_file = Label(\"@crates//crates:BUILD.url-2.5.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__utf8_iter-1.0.4\",\n sha256 = \"b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/utf8_iter/1.0.4/download\"],\n strip_prefix = \"utf8_iter-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.utf8_iter-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__vcpkg-0.2.15\",\n sha256 = \"accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/vcpkg/0.2.15/download\"],\n strip_prefix = \"vcpkg-0.2.15\",\n build_file = Label(\"@crates//crates:BUILD.vcpkg-0.2.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wide-1.7.1\",\n sha256 = \"d920ac99c3c8edce110cb8d07dbb324d6d026011dce85b1e9355b70f0adacc4f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wide/1.7.1/download\"],\n strip_prefix = \"wide-1.7.1\",\n build_file = Label(\"@crates//crates:BUILD.wide-1.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-link-0.2.1\",\n sha256 = \"f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-link/0.2.1/download\"],\n strip_prefix = \"windows-link-0.2.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-link-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.61.2\",\n sha256 = \"ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.61.2/download\"],\n strip_prefix = \"windows-sys-0.61.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.61.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winnow-0.7.15\",\n sha256 = \"df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winnow/0.7.15/download\"],\n strip_prefix = \"winnow-0.7.15\",\n build_file = Label(\"@crates//crates:BUILD.winnow-0.7.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winnow-1.0.4\",\n sha256 = \"23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winnow/1.0.4/download\"],\n strip_prefix = \"winnow-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.winnow-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__writeable-0.6.4\",\n sha256 = \"3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/writeable/0.6.4/download\"],\n strip_prefix = \"writeable-0.6.4\",\n build_file = Label(\"@crates//crates:BUILD.writeable-0.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__xxhash-rust-0.8.19\",\n sha256 = \"550a2b930b62486a393c52d5c3b84bff264b28aa437ed64694d31e93b1757af7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/xxhash-rust/0.8.19/download\"],\n strip_prefix = \"xxhash-rust-0.8.19\",\n build_file = Label(\"@crates//crates:BUILD.xxhash-rust-0.8.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-0.8.3\",\n sha256 = \"709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke/0.8.3/download\"],\n strip_prefix = \"yoke-0.8.3\",\n build_file = Label(\"@crates//crates:BUILD.yoke-0.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-derive-0.8.4\",\n sha256 = \"ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke-derive/0.8.4/download\"],\n strip_prefix = \"yoke-derive-0.8.4\",\n build_file = Label(\"@crates//crates:BUILD.yoke-derive-0.8.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerocopy-0.8.62\",\n sha256 = \"86502bf56ac7c77571a32e2647bb2a15894565e981fb2a48d7bde2d91c965a9d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy/0.8.62/download\"],\n strip_prefix = \"zerocopy-0.8.62\",\n build_file = Label(\"@crates//crates:BUILD.zerocopy-0.8.62.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerocopy-derive-0.8.62\",\n sha256 = \"5457206954b06561e2608c7e19cf58b1926586d999c246eebe4502f7e2039d1a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy-derive/0.8.62/download\"],\n strip_prefix = \"zerocopy-derive-0.8.62\",\n build_file = Label(\"@crates//crates:BUILD.zerocopy-derive-0.8.62.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerofrom-0.1.8\",\n sha256 = \"0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom/0.1.8/download\"],\n strip_prefix = \"zerofrom-0.1.8\",\n build_file = Label(\"@crates//crates:BUILD.zerofrom-0.1.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerofrom-derive-0.1.8\",\n sha256 = \"f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom-derive/0.1.8/download\"],\n strip_prefix = \"zerofrom-derive-0.1.8\",\n build_file = Label(\"@crates//crates:BUILD.zerofrom-derive-0.1.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zeroize-1.9.1\",\n sha256 = \"e13084392c5e4bc371903e2935a5eaeed24905a7511356b883835e18a78f6879\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zeroize/1.9.1/download\"],\n strip_prefix = \"zeroize-1.9.1\",\n build_file = Label(\"@crates//crates:BUILD.zeroize-1.9.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zeroize_derive-1.5.0\",\n sha256 = \"3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zeroize_derive/1.5.0/download\"],\n strip_prefix = \"zeroize_derive-1.5.0\",\n build_file = Label(\"@crates//crates:BUILD.zeroize_derive-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerotrie-0.2.5\",\n sha256 = \"4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerotrie/0.2.5/download\"],\n strip_prefix = \"zerotrie-0.2.5\",\n build_file = Label(\"@crates//crates:BUILD.zerotrie-0.2.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerovec-0.11.8\",\n sha256 = \"bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec/0.11.8/download\"],\n strip_prefix = \"zerovec-0.11.8\",\n build_file = Label(\"@crates//crates:BUILD.zerovec-0.11.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerovec-derive-0.11.6\",\n sha256 = \"34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec-derive/0.11.6/download\"],\n strip_prefix = \"zerovec-derive-0.11.6\",\n build_file = Label(\"@crates//crates:BUILD.zerovec-derive-0.11.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zmij-1.0.23\",\n sha256 = \"29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zmij/1.0.23/download\"],\n strip_prefix = \"zmij-1.0.23\",\n build_file = Label(\"@crates//crates:BUILD.zmij-1.0.23.bazel\"),\n )\n\n return [\n struct(repo = \"crates\", is_dev_dep = False),\n struct(repo=\"crates__aes-0.9.3\", is_dev_dep = False),\n struct(repo=\"crates__ambassador-0.5.1\", is_dev_dep = False),\n struct(repo=\"crates__base58ck-0.5.0\", is_dev_dep = False),\n struct(repo=\"crates__bitcoin-consensus-encoding-1.2.0\", is_dev_dep = False),\n struct(repo=\"crates__bitcoin-internals-0.7.0\", is_dev_dep = False),\n struct(repo=\"crates__bitcoin-primitives-0.103.1\", is_dev_dep = False),\n struct(repo=\"crates__bitcoin-units-0.5.0\", is_dev_dep = False),\n struct(repo=\"crates__bitcoin_hashes-1.2.0\", is_dev_dep = False),\n struct(repo=\"crates__blst-0.3.17\", is_dev_dep = False),\n struct(repo=\"crates__built-0.7.7\", is_dev_dep = False),\n struct(repo=\"crates__cfg-if-1.0.5\", is_dev_dep = False),\n struct(repo=\"crates__ciborium-0.2.2\", is_dev_dep = False),\n struct(repo=\"crates__delegate-0.13.5\", is_dev_dep = False),\n struct(repo=\"crates__digest-0.11.3\", is_dev_dep = False),\n struct(repo=\"crates__ed25519-dalek-3.0.0\", is_dev_dep = False),\n struct(repo=\"crates__ff-0.14.0\", is_dev_dep = False),\n struct(repo=\"crates__group-0.14.0\", is_dev_dep = False),\n struct(repo=\"crates__hex-conservative-1.3.0\", is_dev_dep = False),\n struct(repo=\"crates__json5-0.4.1\", is_dev_dep = False),\n struct(repo=\"crates__libm-0.2.16\", is_dev_dep = False),\n struct(repo=\"crates__proc-macro2-1.0.107\", is_dev_dep = False),\n struct(repo=\"crates__quote-1.0.47\", is_dev_dep = False),\n struct(repo=\"crates__rand_core-0.10.1\", is_dev_dep = False),\n struct(repo=\"crates__secp256k1-0.33.1\", is_dev_dep = False),\n struct(repo=\"crates__serde-1.0.229\", is_dev_dep = False),\n struct(repo=\"crates__serde_json-1.0.154\", is_dev_dep = False),\n struct(repo=\"crates__sha2-0.11.0\", is_dev_dep = False),\n struct(repo=\"crates__subtle-2.6.1\", is_dev_dep = False),\n struct(repo=\"crates__syn-2.0.119\", is_dev_dep = False),\n struct(repo=\"crates__thiserror-2.0.21\", is_dev_dep = False),\n struct(repo=\"crates__wide-1.7.1\", is_dev_dep = False),\n struct(repo=\"crates__xxhash-rust-0.8.19\", is_dev_dep = False),\n struct(repo=\"crates__zeroize-1.9.1\", is_dev_dep = False),\n struct(repo = \"crates__divan-0.1.21\", is_dev_dep = True),\n struct(repo = \"crates__getrandom-0.4.3\", is_dev_dep = True),\n struct(repo = \"crates__rstest-0.25.0\", is_dev_dep = True),\n ]\n", "defs.bzl": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'dash_base_sdk'\n###############################################################################\n\"\"\"Deprecated: re-exports the crate_universe macros from `:crates.bzl`.\"\"\"\n\nload(\n \":crates.bzl\",\n _aliases = \"aliases\",\n _all_crate_deps = \"all_crate_deps\",\n _crate_deps = \"crate_deps\",\n _crate_edition = \"crate_edition\",\n _crate_repositories = \"crate_repositories\",\n)\n\naliases = _aliases\nall_crate_deps = _all_crate_deps\ncrate_deps = _crate_deps\ncrate_edition = _crate_edition\ncrate_repositories = _crate_repositories\n", "aes-0.9.3/BUILD.bazel": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'dash_base_sdk'\n###############################################################################\n\npackage(default_visibility = [\"//visibility:public\"])\n\nalias(\n name = \"aes-0.9.3\",\n actual = \"@crates__aes-0.9.3//:aes\",\n tags = [\"manual\"],\n)\n", "aes/BUILD.bazel": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'dash_base_sdk'\n###############################################################################\n\npackage(default_visibility = [\"//visibility:public\"])\n\nalias(\n name = \"aes\",\n actual = \"@crates__aes-0.9.3//:aes\",\n tags = [\"manual\"],\n)\n", diff --git a/pkgs/params/Cargo.toml b/pkgs/params/Cargo.toml index 70ba87a0..afd0d776 100644 --- a/pkgs/params/Cargo.toml +++ b/pkgs/params/Cargo.toml @@ -31,6 +31,11 @@ dash-types = { version = "0.2.0-beta", path = "../types", default-features = fal ] } hex-conservative = { workspace = true } +[dev-dependencies] +dash-dev = { version = "0.0.0", path = "../../meta/dev", features = ["full"] } +rstest = { workspace = true } +serde = { workspace = true, features = ["derive", "std"] } + [lints] workspace = true diff --git a/pkgs/params/corpus/chainparams.json5 b/pkgs/params/corpus/chainparams.json5 new file mode 100644 index 00000000..d6432d37 --- /dev/null +++ b/pkgs/params/corpus/chainparams.json5 @@ -0,0 +1,379 @@ +// +// Chain parameter vectors. Generated with the reference implementation +// (dashpay/dash v24.0.0-rc.3, 0364ed626e). +// +// Each entry is the output of the command above it, keyed by chain. The node +// of each chain runs with an empty data directory and no connections, so it +// stays at the genesis block: +// +// dashd -chain= -connect=0 -listen=0 -dnsseed=0 -fixedseeds=0 -daemon +// + +{ + "genesis": { + // dash-cli -chain=main getblockheader "$(dash-cli -chain=main getblockhash 0)" + "main": { + "hash": "00000ffd590b1485b3caadc19b22e6379c733355108f107a430458cdf3407ab6", + "confirmations": 1, + "height": 0, + "version": 1, + "versionHex": "00000001", + "merkleroot": "e0028eb9648db56b1ac77cf090b99048a8007e2bb64b68f092c03c7f56a662c7", + "time": 1390095618, + "mediantime": 1390095618, + "nonce": 28917698, + "bits": "1e0ffff0", + "difficulty": 0.000244140625, + "chainwork": "0000000000000000000000000000000000000000000000000000000000100010", + "nTx": 1, + "chainlock": false + }, + // dash-cli -chain=test getblockheader "$(dash-cli -chain=test getblockhash 0)" + "test": { + "hash": "00000bafbc94add76cb75e2ec92894837288a481e5c005f6563d91623bf8bc2c", + "confirmations": 1, + "height": 0, + "version": 1, + "versionHex": "00000001", + "merkleroot": "e0028eb9648db56b1ac77cf090b99048a8007e2bb64b68f092c03c7f56a662c7", + "time": 1390666206, + "mediantime": 1390666206, + "nonce": 3861367235, + "bits": "1e0ffff0", + "difficulty": 0.000244140625, + "chainwork": "0000000000000000000000000000000000000000000000000000000000100010", + "nTx": 1, + "chainlock": false + }, + // dash-cli -chain=regtest getblockheader "$(dash-cli -chain=regtest getblockhash 0)" + "regtest": { + "hash": "000008ca1832a4baf228eb1553c03d3a2c8e02399550dd6ea8d65cec3ef23d2e", + "confirmations": 1, + "height": 0, + "version": 1, + "versionHex": "00000001", + "merkleroot": "e0028eb9648db56b1ac77cf090b99048a8007e2bb64b68f092c03c7f56a662c7", + "time": 1417713337, + "mediantime": 1417713337, + "nonce": 1096447, + "bits": "207fffff", + "difficulty": 4.656542373906925e-10, + "chainwork": "0000000000000000000000000000000000000000000000000000000000000002", + "nTx": 1, + "chainlock": false + } + }, + "deployments": { + // dash-cli -chain=main getdeploymentinfo + "main": { + "hash": "00000ffd590b1485b3caadc19b22e6379c733355108f107a430458cdf3407ab6", + "height": 0, + "deployments": { + "bip34": { + "type": "buried", + "active": false, + "height": 951 + }, + "bip66": { + "type": "buried", + "active": false, + "height": 245817 + }, + "bip65": { + "type": "buried", + "active": false, + "height": 619382 + }, + "bip147": { + "type": "buried", + "active": false, + "height": 939456 + }, + "csv": { + "type": "buried", + "active": false, + "height": 622944 + }, + "dip0001": { + "type": "buried", + "active": false, + "height": 782208 + }, + "dip0003": { + "type": "buried", + "active": false, + "height": 1028160 + }, + "dip0008": { + "type": "buried", + "active": false, + "height": 1088640 + }, + "dip0020": { + "type": "buried", + "active": false, + "height": 1516032 + }, + "dip0024": { + "type": "buried", + "active": false, + "height": 1737792 + }, + "realloc": { + "type": "buried", + "active": false, + "height": 1374912 + }, + "v19": { + "type": "buried", + "active": false, + "height": 1899072 + }, + "v20": { + "type": "buried", + "active": false, + "height": 1987776 + }, + "mn_rr": { + "type": "buried", + "active": false, + "height": 2128896 + }, + "withdrawals": { + "type": "buried", + "active": false, + "height": 2201472 + } + } + }, + // dash-cli -chain=test getdeploymentinfo + "test": { + "hash": "00000bafbc94add76cb75e2ec92894837288a481e5c005f6563d91623bf8bc2c", + "height": 0, + "deployments": { + "bip34": { + "type": "buried", + "active": false, + "height": 76 + }, + "bip66": { + "type": "buried", + "active": false, + "height": 2075 + }, + "bip65": { + "type": "buried", + "active": false, + "height": 2431 + }, + "bip147": { + "type": "buried", + "active": false, + "height": 4300 + }, + "csv": { + "type": "buried", + "active": false, + "height": 8064 + }, + "dip0001": { + "type": "buried", + "active": false, + "height": 5500 + }, + "dip0003": { + "type": "buried", + "active": false, + "height": 7000 + }, + "dip0008": { + "type": "buried", + "active": false, + "height": 78800 + }, + "dip0020": { + "type": "buried", + "active": false, + "height": 414100 + }, + "dip0024": { + "type": "buried", + "active": false, + "height": 769700 + }, + "realloc": { + "type": "buried", + "active": false, + "height": 387500 + }, + "v19": { + "type": "buried", + "active": false, + "height": 850100 + }, + "v20": { + "type": "buried", + "active": false, + "height": 905100 + }, + "mn_rr": { + "type": "buried", + "active": false, + "height": 1066900 + }, + "withdrawals": { + "type": "buried", + "active": false, + "height": 1148500 + }, + "v24": { + "type": "bip9", + "active": false, + "bip9": { + "start_time": 1790208000, + "timeout": 9223372036854775807, + "ehf": true, + "min_activation_height": 0, + "status": "defined", + "since": 0, + "status_next": "defined" + } + }, + "evo_shares": { + "type": "bip9", + "active": false, + "bip9": { + "start_time": 1790208000, + "timeout": 9223372036854775807, + "ehf": true, + "min_activation_height": 0, + "status": "defined", + "since": 0, + "status_next": "defined" + } + } + } + }, + // dash-cli -chain=regtest getdeploymentinfo + "regtest": { + "hash": "000008ca1832a4baf228eb1553c03d3a2c8e02399550dd6ea8d65cec3ef23d2e", + "height": 0, + "deployments": { + "bip34": { + "type": "buried", + "active": true, + "height": 1 + }, + "bip66": { + "type": "buried", + "active": true, + "height": 1 + }, + "bip65": { + "type": "buried", + "active": true, + "height": 1 + }, + "bip147": { + "type": "buried", + "active": true, + "height": 0 + }, + "csv": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0001": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0003": { + "type": "buried", + "active": false, + "height": 432 + }, + "dip0008": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0020": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0024": { + "type": "buried", + "active": true, + "height": 1 + }, + "realloc": { + "type": "buried", + "active": true, + "height": 1 + }, + "v19": { + "type": "buried", + "active": true, + "height": 1 + }, + "v20": { + "type": "buried", + "active": false, + "height": 432 + }, + "mn_rr": { + "type": "buried", + "active": false, + "height": 432 + }, + "withdrawals": { + "type": "buried", + "active": false, + "height": 600 + }, + "v24": { + "type": "bip9", + "active": false, + "bip9": { + "start_time": 0, + "timeout": 9223372036854775807, + "ehf": true, + "min_activation_height": 0, + "status": "defined", + "since": 0, + "status_next": "defined" + } + }, + "evo_shares": { + "type": "bip9", + "active": false, + "bip9": { + "start_time": 0, + "timeout": 9223372036854775807, + "ehf": true, + "min_activation_height": 0, + "status": "defined", + "since": 0, + "status_next": "defined" + } + }, + "testdummy": { + "type": "bip9", + "active": false, + "bip9": { + "start_time": 0, + "timeout": 9223372036854775807, + "ehf": false, + "min_activation_height": 0, + "status": "defined", + "since": 0, + "status_next": "defined" + } + } + } + } + } +} diff --git a/pkgs/params/tests/corpus.rs b/pkgs/params/tests/corpus.rs new file mode 100644 index 00000000..1b90ec32 --- /dev/null +++ b/pkgs/params/tests/corpus.rs @@ -0,0 +1,149 @@ +// +// Copyright (c) 2026-present, The Dash Core developers +// SPDX-License-Identifier: MIT +// See the accompanying file LICENSE or https://opensource.org/license/MIT +// + +//! Chain parameters against the reference implementation's RPC output. + +use dash_dev::Corpus; +use dash_params::{Bip9Deployment, BuriedDeployment, ChainParams, Network}; +use rstest::rstest; +use serde::de::DeserializeOwned; +use serde::Deserialize; + +use std::collections::{BTreeMap, BTreeSet}; + +/// The fields of `getblockheader` that the genesis parameters hold. +#[derive(Debug, Deserialize, PartialEq)] +struct Header { + hash: String, + height: u32, + version: i32, + time: u32, + nonce: u32, + bits: String, +} + +impl From<&ChainParams> for Header { + fn from(chain: &ChainParams) -> Self { + Self { + hash: chain.consensus.hash_genesis_block.to_string(), + height: 0, + version: chain.genesis.version, + time: chain.genesis.time, + nonce: chain.genesis.nonce, + bits: format!("{:08x}", chain.genesis.bits), + } + } +} + +/// The fields of `getdeploymentinfo` that the deployment parameters hold. +#[derive(Debug, Deserialize, PartialEq)] +struct DeploymentInfo { + hash: String, + height: u32, + deployments: BTreeMap, +} + +#[derive(Debug, Deserialize, PartialEq)] +#[serde(tag = "type", rename_all = "lowercase")] +enum Deployment { + Buried { height: u32 }, + Bip9 { bip9: Bip9 }, +} + +#[derive(Debug, Deserialize, PartialEq)] +struct Bip9 { + start_time: i64, + timeout: i64, + ehf: bool, + min_activation_height: u32, +} + +/// The buried deployments under the names `getdeploymentinfo` reports them +/// under. +const BURIED: [(&str, BuriedDeployment); 15] = [ + ("bip34", BuriedDeployment::HeightInCoinbase), + ("bip66", BuriedDeployment::DerSig), + ("bip65", BuriedDeployment::Cltv), + ("bip147", BuriedDeployment::Bip147), + ("csv", BuriedDeployment::Csv), + ("dip0001", BuriedDeployment::Dip0001), + ("dip0003", BuriedDeployment::Dip0003), + ("dip0008", BuriedDeployment::Dip0008), + ("dip0020", BuriedDeployment::Dip0020), + ("dip0024", BuriedDeployment::Dip0024), + ("realloc", BuriedDeployment::Brr), + ("v19", BuriedDeployment::V19), + ("v20", BuriedDeployment::V20), + ("mn_rr", BuriedDeployment::MnRr), + ("withdrawals", BuriedDeployment::Withdrawals), +]; + +impl From<&ChainParams> for DeploymentInfo { + fn from(chain: &ChainParams) -> Self { + let buried = BURIED.into_iter().map(|(name, deployment)| { + let height = chain.consensus.deployment_height(deployment).to_u32(); + (name.into(), Deployment::Buried { height }) + }); + let deployments = chain.consensus.deployments; + let bip9 = [ + ("testdummy", deployments.test_dummy), + ("v24", deployments.v24), + ("evo_shares", deployments.evo_shares), + ] + .into_iter() + // A deployment that never activates is not reported. + .filter(|(_, deployment)| deployment.start_time != Bip9Deployment::NEVER_ACTIVE) + .map(|(name, deployment)| { + let bip9 = Bip9 { + start_time: deployment.start_time, + timeout: deployment.timeout, + ehf: deployment.use_ehf, + min_activation_height: deployment.min_activation_height.to_u32(), + }; + (name.into(), Deployment::Bip9 { bip9 }) + }); + Self { + hash: chain.consensus.hash_genesis_block.to_string(), + height: 0, + deployments: buried.chain(bip9).collect(), + } + } +} + +/// The entries of a section, which are keyed by chain. +fn section(name: &str) -> BTreeMap { + let entries: BTreeMap = Corpus::open(env!("CARGO_MANIFEST_DIR"), "chainparams").value(name); + let chains: BTreeSet<&str> = [Network::Main, Network::Testnet3, Network::Regtest] + .into_iter() + .map(|network| network.chain().network_id) + .collect(); + assert_eq!( + entries.keys().map(String::as_str).collect::>(), + chains, + "{name}" + ); + entries +} + +#[rstest] +#[case::mainnet(Network::Main)] +#[case::testnet(Network::Testnet3)] +#[case::regtest(Network::Regtest)] +fn genesis_matches_vectors(#[case] network: Network) { + let chain = network.chain(); + let headers = section::
("genesis"); + assert_eq!(headers.get(chain.network_id), Some(&Header::from(chain))); +} + +#[rstest] +#[case::mainnet(Network::Main)] +#[case::testnet(Network::Testnet3)] +#[case::regtest(Network::Regtest)] +fn deployments_match_vectors(#[case] network: Network) { + let chain = network.chain(); + let infos = section::("deployments"); + assert_eq!(infos.get(chain.network_id), Some(&DeploymentInfo::from(chain))); +} From 5db4c51b3883ed2f6d37a28510784853fd0ef6c8 Mon Sep 17 00:00:00 2001 From: pasta Date: Sat, 24 Oct 2026 21:06:19 +0000 Subject: [PATCH 2/4] params%fix: give regtest the placeholder DNS seed The reference implementation lists "dummySeed.invalid." for regtest, a name that never resolves. --- pkgs/params/src/params/regtest.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/params/src/params/regtest.rs b/pkgs/params/src/params/regtest.rs index a4b1648f..dde53f3a 100644 --- a/pkgs/params/src/params/regtest.rs +++ b/pkgs/params/src/params/regtest.rs @@ -121,7 +121,7 @@ pub static PARAMS: ChainParams = ChainParams { prune_after_height: 1000, assumed_blockchain_size_gb: 0, assumed_chain_state_size_gb: 0, - dns_seeds: &[], + dns_seeds: &["dummySeed.invalid."], addr_params: AddrParams { pubkey_addr: 140, // addresses start with 'y' script_addr: 19, // addresses start with '8' or '9' From 8ed53b4738c71f944974f890e7def506e4bb9b00 Mon Sep 17 00:00:00 2001 From: pasta Date: Sat, 24 Oct 2026 21:07:05 +0000 Subject: [PATCH 3/4] params%feat!: add the spork address Each chain carries the address of the key that signs its sporks, as the reference implementation sets it. --- pkgs/params/src/chain.rs | 2 ++ pkgs/params/src/params/mainnet.rs | 1 + pkgs/params/src/params/regtest.rs | 1 + pkgs/params/src/params/test3.rs | 1 + 4 files changed, 5 insertions(+) diff --git a/pkgs/params/src/chain.rs b/pkgs/params/src/chain.rs index 4ea77ef2..8336026c 100644 --- a/pkgs/params/src/chain.rs +++ b/pkgs/params/src/chain.rs @@ -65,6 +65,8 @@ pub struct ChainParams { pub pool_min_participants: i32, /// Maximum participants for a CoinJoin session. pub pool_max_participants: i32, + /// Address of the key that signs sporks. + pub spork_address: &'static str, /// Number of blocks in a credit-pool accounting period. pub credit_pool_period_blocks: i32, /// Hard-coded checkpoints for fast validation. diff --git a/pkgs/params/src/params/mainnet.rs b/pkgs/params/src/params/mainnet.rs index 1a1c70ab..4b5706ce 100644 --- a/pkgs/params/src/params/mainnet.rs +++ b/pkgs/params/src/params/mainnet.rs @@ -149,6 +149,7 @@ pub static PARAMS: ChainParams = ChainParams { is_mockable_chain: false, pool_min_participants: 3, pool_max_participants: 20, + spork_address: "Xgtyuk76vhuFW2iT7UAiHgNdWXCf3J34wh", credit_pool_period_blocks: 576, checkpoints: &CHECKPOINTS, chain_tx_data: ChainTxData { diff --git a/pkgs/params/src/params/regtest.rs b/pkgs/params/src/params/regtest.rs index dde53f3a..370a62b5 100644 --- a/pkgs/params/src/params/regtest.rs +++ b/pkgs/params/src/params/regtest.rs @@ -137,6 +137,7 @@ pub static PARAMS: ChainParams = ChainParams { is_mockable_chain: true, pool_min_participants: 2, pool_max_participants: 20, + spork_address: "yj949n1UH6fDhw6HtVE5VMj2iSTaSWBMcW", credit_pool_period_blocks: 100, checkpoints: &CHECKPOINTS, chain_tx_data: ChainTxData { diff --git a/pkgs/params/src/params/test3.rs b/pkgs/params/src/params/test3.rs index 5652e39b..90e7c437 100644 --- a/pkgs/params/src/params/test3.rs +++ b/pkgs/params/src/params/test3.rs @@ -147,6 +147,7 @@ pub static PARAMS: ChainParams = ChainParams { is_mockable_chain: false, pool_min_participants: 2, pool_max_participants: 20, + spork_address: "yjPtiKh2uwk3bDutTEA2q9mCtXyiZRWn55", credit_pool_period_blocks: 576, checkpoints: &CHECKPOINTS, chain_tx_data: ChainTxData { From 3374dc8ce461ba2dc1f633f1b2f425e160593dde Mon Sep 17 00:00:00 2001 From: pasta Date: Sun, 25 Oct 2026 16:15:20 +0000 Subject: [PATCH 4/4] params%feat!: add the LLMQs each chain runs Each chain lists the LLMQ types the reference implementation runs on it, in its order, and looks up the parameters of those types only. The types quorum list reports at the genesis block must be among them. --- pkgs/params/corpus/chainparams.json5 | 21 +++++++++++++++++++++ pkgs/params/src/consensus.rs | 10 +++++++++- pkgs/params/src/params/mainnet.rs | 7 +++++++ pkgs/params/src/params/regtest.rs | 7 +++++++ pkgs/params/src/params/test3.rs | 8 ++++++++ pkgs/params/tests/corpus.rs | 22 +++++++++++++++++++++- 6 files changed, 73 insertions(+), 2 deletions(-) diff --git a/pkgs/params/corpus/chainparams.json5 b/pkgs/params/corpus/chainparams.json5 index d6432d37..f6255162 100644 --- a/pkgs/params/corpus/chainparams.json5 +++ b/pkgs/params/corpus/chainparams.json5 @@ -375,5 +375,26 @@ } } } + }, + "quorums": { + // dash-cli -chain=main quorum list + "main": { + "llmq_50_60": [], + "llmq_400_60": [], + "llmq_400_85": [] + }, + // dash-cli -chain=test quorum list + "test": { + "llmq_50_60": [], + "llmq_400_60": [], + "llmq_400_85": [] + }, + // dash-cli -chain=regtest quorum list + "regtest": { + "llmq_test": [], + "llmq_test_instantsend": [], + "llmq_test_dip0024": [], + "llmq_test_platform": [] + } } } diff --git a/pkgs/params/src/consensus.rs b/pkgs/params/src/consensus.rs index 802ba93f..6db32879 100644 --- a/pkgs/params/src/consensus.rs +++ b/pkgs/params/src/consensus.rs @@ -6,7 +6,7 @@ //! Consensus parameters of a network. -use crate::{Bip9Deployments, LlmqType}; +use crate::{Bip9Deployments, LlmqParams, LlmqType}; use bitcoin_units::BlockHeight; use dash_num::{Arith256, Hash256}; @@ -160,6 +160,8 @@ pub struct ConsensusParams { /// Block hash assumed valid for fast initial /// sync. pub default_assume_valid: Hash256, + /// LLMQ types the chain runs, in the reference implementation's order. + pub llmqs: &'static [LlmqType], /// LLMQ type used for ChainLocks. pub llmq_type_chain_locks: LlmqType, /// LLMQ type used for DIP0024 InstantSend. @@ -192,4 +194,10 @@ impl ConsensusParams { BuriedDeployment::Withdrawals => self.withdrawals_height, } } + + /// Returns the parameters of an LLMQ type the chain runs, or `None` if the + /// chain does not run it. + pub fn llmq(&self, llmq_type: LlmqType) -> Option { + llmq_type.params().filter(|_| self.llmqs.contains(&llmq_type)) + } } diff --git a/pkgs/params/src/params/mainnet.rs b/pkgs/params/src/params/mainnet.rs index 4b5706ce..56cc9153 100644 --- a/pkgs/params/src/params/mainnet.rs +++ b/pkgs/params/src/params/mainnet.rs @@ -110,6 +110,13 @@ pub static PARAMS: ChainParams = ChainParams { default_assume_valid: Hash256::from_bendian(hex!( "00000000000000119fe42827219e0686d3f7b494ae65f823194c740c5dbab492" )), + llmqs: &[ + LlmqType::Llmq50_60, + LlmqType::Llmq60_75, + LlmqType::Llmq400_60, + LlmqType::Llmq400_85, + LlmqType::Llmq100_67, + ], llmq_type_chain_locks: LlmqType::Llmq400_60, llmq_type_dip0024_instant_send: LlmqType::Llmq60_75, llmq_type_platform: LlmqType::Llmq100_67, diff --git a/pkgs/params/src/params/regtest.rs b/pkgs/params/src/params/regtest.rs index 370a62b5..c7d8756a 100644 --- a/pkgs/params/src/params/regtest.rs +++ b/pkgs/params/src/params/regtest.rs @@ -98,6 +98,13 @@ pub static PARAMS: ChainParams = ChainParams { pow_dgw_height: BlockHeight::from_u32(34_140), minimum_chain_work: Arith256::ZERO, default_assume_valid: Hash256::ZERO, + llmqs: &[ + LlmqType::LlmqTest, + LlmqType::LlmqTestInstantsend, + LlmqType::LlmqTestV17, + LlmqType::LlmqTestDip0024, + LlmqType::LlmqTestPlatform, + ], llmq_type_chain_locks: LlmqType::LlmqTest, llmq_type_dip0024_instant_send: LlmqType::LlmqTestDip0024, llmq_type_platform: LlmqType::LlmqTestPlatform, diff --git a/pkgs/params/src/params/test3.rs b/pkgs/params/src/params/test3.rs index 90e7c437..2e4c4a2d 100644 --- a/pkgs/params/src/params/test3.rs +++ b/pkgs/params/src/params/test3.rs @@ -108,6 +108,14 @@ pub static PARAMS: ChainParams = ChainParams { default_assume_valid: Hash256::from_bendian(hex!( "000000541a23f9db7411cddbe50f9f1ebd4aa7108ebdcad62214753f648c0239" )), + llmqs: &[ + LlmqType::Llmq50_60, + LlmqType::Llmq60_75, + LlmqType::Llmq400_60, + LlmqType::Llmq400_85, + LlmqType::Llmq100_67, + LlmqType::Llmq25_67, + ], llmq_type_chain_locks: LlmqType::Llmq50_60, llmq_type_dip0024_instant_send: LlmqType::Llmq60_75, llmq_type_platform: LlmqType::Llmq25_67, diff --git a/pkgs/params/tests/corpus.rs b/pkgs/params/tests/corpus.rs index 1b90ec32..928135ec 100644 --- a/pkgs/params/tests/corpus.rs +++ b/pkgs/params/tests/corpus.rs @@ -7,7 +7,7 @@ //! Chain parameters against the reference implementation's RPC output. use dash_dev::Corpus; -use dash_params::{Bip9Deployment, BuriedDeployment, ChainParams, Network}; +use dash_params::{Bip9Deployment, BuriedDeployment, ChainParams, LlmqType, Network}; use rstest::rstest; use serde::de::DeserializeOwned; use serde::Deserialize; @@ -147,3 +147,23 @@ fn deployments_match_vectors(#[case] network: Network) { let infos = section::("deployments"); assert_eq!(infos.get(chain.network_id), Some(&DeploymentInfo::from(chain))); } + +#[rstest] +#[case::mainnet(Network::Main)] +#[case::testnet(Network::Testnet3)] +#[case::regtest(Network::Regtest)] +fn chains_run_the_llmqs_enabled_at_genesis(#[case] network: Network) { + let consensus = network.consensus(); + let quorums = section::>>("quorums"); + // `quorum list` reports the types enabled at the tip, here the genesis + // block. A chain also runs types that are enabled later. + let enabled = &quorums[network.chain().network_id]; + assert!(!enabled.is_empty()); + for name in enabled.keys() { + let llmq = LlmqType::variants() + .iter() + .find(|llmq_type| llmq_type.to_string() == *name) + .and_then(|&llmq_type| consensus.llmq(llmq_type)); + assert!(llmq.is_some(), "{name}"); + } +}