diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 8b8b9625c..3e43a45a9 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -1329,14 +1329,14 @@ "FILE:@@//src/invocation-plane-services/http-invocation/.cargo/config.toml ae53cb1d2d7a3b0ce4fb0c2172ef6f4fc8476673fef154d2efffbdf435e383c6", "FILE:@@//src/invocation-plane-services/http-invocation/Cargo.toml a092a718b3d93b3664e2434c5c89025e8db88a1971a995650977f6d03edaaaf9", "FILE:@@//src/invocation-plane-services/http-invocation/crates/server/Cargo.toml fd58955d67ba6d2f03a63f582f937a783a9ffa9590c52e5969ac7b993d95b97a", - "FILE:@@//src/libraries/rust/stargate/Cargo.lock 9ec968723d72e533e8c58787de835a237c5121e9d6234caa767179e6fe2b3773", - "FILE:@@//src/libraries/rust/stargate/Cargo.toml 9742923ab2851675add74b7ba34f503b76efeed4b8ccc212b92811558c28c56e", + "FILE:@@//src/libraries/rust/stargate/Cargo.lock 5e5fd03b7e6f70ef0d3fda071860863f1bed7901f8b4ece2dd66339d9b86d8bc", + "FILE:@@//src/libraries/rust/stargate/Cargo.toml a5796c2b8d570aa5f5e5a6bc7b0407d6b888f33620b5c45d53daeb5366ad64bc", "FILE:@@//src/libraries/rust/stargate/crates/mock-dynamo/Cargo.toml 775c65c930aae4b90cd0673fcae8f8004c69dab454175dba6a712a3dc331c4cf", "FILE:@@//src/libraries/rust/stargate/crates/proto/Cargo.toml 63496e849402873d1d64114ecdf609b88e7088b1ddcbac7910d2497d659bd444", "FILE:@@//src/libraries/rust/stargate/crates/protocol/Cargo.toml 7c5bfc370ae4bc6e91c882b598231a665fd952d0705ae6e6723bf9307c53cf5e", "FILE:@@//src/libraries/rust/stargate/crates/pylon/Cargo.toml 0c470fe3af3c18deb40fb8808b373ee2a342c5b659173888ba73eccb1cb2e81e", "FILE:@@//src/libraries/rust/stargate/crates/pylon-lib/Cargo.toml 8f1ccdff6f2febfb794b84c8ef7c53d5b346f46cc402aaf1be7fe30b1cbb4500", - "FILE:@@//src/libraries/rust/stargate/crates/stargate/Cargo.toml 670060ba06eca7bdc291e5aa883347d10b42f96cb8c459c5d47cd44998fadbb3", + "FILE:@@//src/libraries/rust/stargate/crates/stargate/Cargo.toml 3b1f5811f5f130ce32bd012ccdbee9f680fb2ed7239d758e999db800d9796c13", "FILE:@@//src/libraries/rust/stargate/crates/stargate-auth/Cargo.toml ad4fa3683e83b0f0f5a952fb85ebda91ef04967c348f1fc0be01ee2b08c14818", "FILE:@@//src/libraries/rust/stargate/crates/stargate-bench/Cargo.toml bb7ac758bdd1e001e818539984ad10af4fdab3c0f9381b666591f180c372b991", "FILE:@@//src/libraries/rust/stargate/crates/stargate-forwarding/Cargo.toml dc4ac520de615087a33277b7d3b13954d900fdde0ab9f9c76f27e463512839b6", @@ -14591,9 +14591,9 @@ "repoRuleId": "@@rules_rust+//crate_universe:extensions.bzl%_generate_repo", "attributes": { "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 'nvcf'\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 = \"anyhow-1.0.103\",\n actual = \"@stargate_crates__anyhow-1.0.103//:anyhow\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"anyhow\",\n actual = \"@stargate_crates__anyhow-1.0.103//:anyhow\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"async-stream-0.3.6\",\n actual = \"@stargate_crates__async-stream-0.3.6//:async_stream\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"async-stream\",\n actual = \"@stargate_crates__async-stream-0.3.6//:async_stream\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"async-trait-0.1.89\",\n actual = \"@stargate_crates__async-trait-0.1.89//:async_trait\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"async-trait\",\n actual = \"@stargate_crates__async-trait-0.1.89//:async_trait\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"axum-0.8.9\",\n actual = \"@stargate_crates__axum-0.8.9//:axum\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"axum\",\n actual = \"@stargate_crates__axum-0.8.9//:axum\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"built-0.8.1\",\n actual = \"@stargate_crates__built-0.8.1//:built\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"built\",\n actual = \"@stargate_crates__built-0.8.1//:built\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bytes-1.12.1\",\n actual = \"@stargate_crates__bytes-1.12.1//:bytes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bytes\",\n actual = \"@stargate_crates__bytes-1.12.1//:bytes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"capnp-0.23.2\",\n actual = \"@stargate_crates__capnp-0.23.2//:capnp\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"capnp\",\n actual = \"@stargate_crates__capnp-0.23.2//:capnp\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"capnp-futures-0.23.1\",\n actual = \"@stargate_crates__capnp-futures-0.23.1//:capnp_futures\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"capnp-futures\",\n actual = \"@stargate_crates__capnp-futures-0.23.1//:capnp_futures\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"capnpc-0.23.3\",\n actual = \"@stargate_crates__capnpc-0.23.3//:capnpc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"capnpc\",\n actual = \"@stargate_crates__capnpc-0.23.3//:capnpc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap-4.6.1\",\n actual = \"@stargate_crates__clap-4.6.1//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap\",\n actual = \"@stargate_crates__clap-4.6.1//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"criterion-0.5.1\",\n actual = \"@stargate_crates__criterion-0.5.1//:criterion\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"criterion\",\n actual = \"@stargate_crates__criterion-0.5.1//:criterion\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"flume-0.12.0\",\n actual = \"@stargate_crates__flume-0.12.0//:flume\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"flume\",\n actual = \"@stargate_crates__flume-0.12.0//:flume\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"futures-0.3.32\",\n actual = \"@stargate_crates__futures-0.3.32//:futures\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"futures\",\n actual = \"@stargate_crates__futures-0.3.32//:futures\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"git2-0.20.4\",\n actual = \"@stargate_crates__git2-0.20.4//:git2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"git2\",\n actual = \"@stargate_crates__git2-0.20.4//:git2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"h3-0.0.8\",\n actual = \"@stargate_crates__h3-0.0.8//:h3\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"h3\",\n actual = \"@stargate_crates__h3-0.0.8//:h3\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"h3-quinn-0.0.10\",\n actual = \"@stargate_crates__h3-quinn-0.0.10//:h3_quinn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"h3-quinn\",\n actual = \"@stargate_crates__h3-quinn-0.0.10//:h3_quinn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"hickory-resolver-0.24.4\",\n actual = \"@stargate_crates__hickory-resolver-0.24.4//:hickory_resolver\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"hickory-resolver\",\n actual = \"@stargate_crates__hickory-resolver-0.24.4//:hickory_resolver\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"http-1.4.2\",\n actual = \"@stargate_crates__http-1.4.2//:http\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"http\",\n actual = \"@stargate_crates__http-1.4.2//:http\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"httpdate-1.0.3\",\n actual = \"@stargate_crates__httpdate-1.0.3//:httpdate\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"httpdate\",\n actual = \"@stargate_crates__httpdate-1.0.3//:httpdate\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"hyper-util-0.1.20\",\n actual = \"@stargate_crates__hyper-util-0.1.20//:hyper_util\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"hyper-util\",\n actual = \"@stargate_crates__hyper-util-0.1.20//:hyper_util\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indexmap-2.14.0\",\n actual = \"@stargate_crates__indexmap-2.14.0//:indexmap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indexmap\",\n actual = \"@stargate_crates__indexmap-2.14.0//:indexmap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"k8s-openapi-0.27.1\",\n actual = \"@stargate_crates__k8s-openapi-0.27.1//:k8s_openapi\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"k8s-openapi\",\n actual = \"@stargate_crates__k8s-openapi-0.27.1//:k8s_openapi\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"kube-3.1.0\",\n actual = \"@stargate_crates__kube-3.1.0//:kube\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"kube\",\n actual = \"@stargate_crates__kube-3.1.0//:kube\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"memchr-2.8.3\",\n actual = \"@stargate_crates__memchr-2.8.3//:memchr\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"memchr\",\n actual = \"@stargate_crates__memchr-2.8.3//:memchr\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry-0.32.0\",\n actual = \"@stargate_crates__opentelemetry-0.32.0//:opentelemetry\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry\",\n actual = \"@stargate_crates__opentelemetry-0.32.0//:opentelemetry\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry-http-0.32.0\",\n actual = \"@stargate_crates__opentelemetry-http-0.32.0//:opentelemetry_http\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry-http\",\n actual = \"@stargate_crates__opentelemetry-http-0.32.0//:opentelemetry_http\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry-otlp-0.32.0\",\n actual = \"@stargate_crates__opentelemetry-otlp-0.32.0//:opentelemetry_otlp\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry-otlp\",\n actual = \"@stargate_crates__opentelemetry-otlp-0.32.0//:opentelemetry_otlp\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry_sdk-0.32.1\",\n actual = \"@stargate_crates__opentelemetry_sdk-0.32.1//:opentelemetry_sdk\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry_sdk\",\n actual = \"@stargate_crates__opentelemetry_sdk-0.32.1//:opentelemetry_sdk\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"parking_lot-0.12.5\",\n actual = \"@stargate_crates__parking_lot-0.12.5//:parking_lot\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"parking_lot\",\n actual = \"@stargate_crates__parking_lot-0.12.5//:parking_lot\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prometheus-0.14.0\",\n actual = \"@stargate_crates__prometheus-0.14.0//:prometheus\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prometheus\",\n actual = \"@stargate_crates__prometheus-0.14.0//:prometheus\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"proptest-1.11.0\",\n actual = \"@stargate_crates__proptest-1.11.0//:proptest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"proptest\",\n actual = \"@stargate_crates__proptest-1.11.0//:proptest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-0.14.4\",\n actual = \"@stargate_crates__prost-0.14.4//:prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost\",\n actual = \"@stargate_crates__prost-0.14.4//:prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"quinn-0.11.11\",\n actual = \"@stargate_crates__quinn-0.11.11//:quinn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"quinn\",\n actual = \"@stargate_crates__quinn-0.11.11//:quinn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand-0.9.3\",\n actual = \"@stargate_crates__rand-0.9.3//:rand\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand\",\n actual = \"@stargate_crates__rand-0.9.3//:rand\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rcgen-0.13.2\",\n actual = \"@stargate_crates__rcgen-0.13.2//:rcgen\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rcgen\",\n actual = \"@stargate_crates__rcgen-0.13.2//:rcgen\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"reqwest-0.13.4\",\n actual = \"@stargate_crates__reqwest-0.13.4//:reqwest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"reqwest\",\n actual = \"@stargate_crates__reqwest-0.13.4//:reqwest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustls-0.23.41\",\n actual = \"@stargate_crates__rustls-0.23.41//:rustls\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustls\",\n actual = \"@stargate_crates__rustls-0.23.41//:rustls\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustls-pemfile-2.2.0\",\n actual = \"@stargate_crates__rustls-pemfile-2.2.0//:rustls_pemfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustls-pemfile\",\n actual = \"@stargate_crates__rustls-pemfile-2.2.0//:rustls_pemfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustls-webpki-0.103.9\",\n actual = \"@stargate_crates__rustls-webpki-0.103.9//:webpki\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustls-webpki\",\n actual = \"@stargate_crates__rustls-webpki-0.103.9//:webpki\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"scc-3.7.1\",\n actual = \"@stargate_crates__scc-3.7.1//:scc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"scc\",\n actual = \"@stargate_crates__scc-3.7.1//:scc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde-1.0.228\",\n actual = \"@stargate_crates__serde-1.0.228//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde\",\n actual = \"@stargate_crates__serde-1.0.228//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json-1.0.150\",\n actual = \"@stargate_crates__serde_json-1.0.150//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json\",\n actual = \"@stargate_crates__serde_json-1.0.150//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_yaml_ng-0.10.0\",\n actual = \"@stargate_crates__serde_yaml_ng-0.10.0//:serde_yaml_ng\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_yaml_ng\",\n actual = \"@stargate_crates__serde_yaml_ng-0.10.0//:serde_yaml_ng\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sonic-rs-0.5.8\",\n actual = \"@stargate_crates__sonic-rs-0.5.8//:sonic_rs\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sonic-rs\",\n actual = \"@stargate_crates__sonic-rs-0.5.8//:sonic_rs\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"stargate-0.4.0\",\n actual = \"@stargate_crates__stargate-0.4.0//:stargate\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"stargate\",\n actual = \"@stargate_crates__stargate-0.4.0//:stargate\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"stargate-proto-0.4.0\",\n actual = \"@stargate_crates__stargate-proto-0.4.0//:stargate_proto\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"stargate-proto\",\n actual = \"@stargate_crates__stargate-proto-0.4.0//:stargate_proto\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"stargate-protocol-0.4.0\",\n actual = \"@stargate_crates__stargate-protocol-0.4.0//:stargate_protocol\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"stargate-protocol\",\n actual = \"@stargate_crates__stargate-protocol-0.4.0//:stargate_protocol\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile-3.27.0\",\n actual = \"@stargate_crates__tempfile-3.27.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile\",\n actual = \"@stargate_crates__tempfile-3.27.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"thiserror-2.0.18\",\n actual = \"@stargate_crates__thiserror-2.0.18//:thiserror\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"thiserror\",\n actual = \"@stargate_crates__thiserror-2.0.18//:thiserror\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-1.52.3\",\n actual = \"@stargate_crates__tokio-1.52.3//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio\",\n actual = \"@stargate_crates__tokio-1.52.3//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-stream-0.1.18\",\n actual = \"@stargate_crates__tokio-stream-0.1.18//:tokio_stream\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-stream\",\n actual = \"@stargate_crates__tokio-stream-0.1.18//:tokio_stream\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-util-0.7.18\",\n actual = \"@stargate_crates__tokio-util-0.7.18//:tokio_util\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-util\",\n actual = \"@stargate_crates__tokio-util-0.7.18//:tokio_util\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tonic-0.14.6\",\n actual = \"@stargate_crates__tonic-0.14.6//:tonic\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tonic\",\n actual = \"@stargate_crates__tonic-0.14.6//:tonic\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tonic-prost-0.14.6\",\n actual = \"@stargate_crates__tonic-prost-0.14.6//:tonic_prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tonic-prost\",\n actual = \"@stargate_crates__tonic-prost-0.14.6//:tonic_prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tonic-prost-build-0.14.6\",\n actual = \"@stargate_crates__tonic-prost-build-0.14.6//:tonic_prost_build\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tonic-prost-build\",\n actual = \"@stargate_crates__tonic-prost-build-0.14.6//:tonic_prost_build\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower-0.5.3\",\n actual = \"@stargate_crates__tower-0.5.3//:tower\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower\",\n actual = \"@stargate_crates__tower-0.5.3//:tower\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-0.1.44\",\n actual = \"@stargate_crates__tracing-0.1.44//:tracing\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing\",\n actual = \"@stargate_crates__tracing-0.1.44//:tracing\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-opentelemetry-0.33.0\",\n actual = \"@stargate_crates__tracing-opentelemetry-0.33.0//:tracing_opentelemetry\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-opentelemetry\",\n actual = \"@stargate_crates__tracing-opentelemetry-0.33.0//:tracing_opentelemetry\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-subscriber-0.3.23\",\n actual = \"@stargate_crates__tracing-subscriber-0.3.23//:tracing_subscriber\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-subscriber\",\n actual = \"@stargate_crates__tracing-subscriber-0.3.23//:tracing_subscriber\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"url-2.5.8\",\n actual = \"@stargate_crates__url-2.5.8//:url\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"url\",\n actual = \"@stargate_crates__url-2.5.8//:url\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"uuid-1.22.0\",\n actual = \"@stargate_crates__uuid-1.22.0//:uuid\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"uuid\",\n actual = \"@stargate_crates__uuid-1.22.0//:uuid\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"x509-parser-0.18.1\",\n actual = \"@stargate_crates__x509-parser-0.18.1//:x509_parser\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"x509-parser\",\n actual = \"@stargate_crates__x509-parser-0.18.1//:x509_parser\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"xxhash-rust-0.8.16\",\n actual = \"@stargate_crates__xxhash-rust-0.8.16//:xxhash_rust\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"xxhash-rust\",\n actual = \"@stargate_crates__xxhash-rust-0.8.16//:xxhash_rust\",\n tags = [\"manual\"],\n)\n", + "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 'nvcf'\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 = \"anyhow-1.0.103\",\n actual = \"@stargate_crates__anyhow-1.0.103//:anyhow\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"anyhow\",\n actual = \"@stargate_crates__anyhow-1.0.103//:anyhow\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"async-stream-0.3.6\",\n actual = \"@stargate_crates__async-stream-0.3.6//:async_stream\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"async-stream\",\n actual = \"@stargate_crates__async-stream-0.3.6//:async_stream\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"async-trait-0.1.89\",\n actual = \"@stargate_crates__async-trait-0.1.89//:async_trait\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"async-trait\",\n actual = \"@stargate_crates__async-trait-0.1.89//:async_trait\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"axum-0.8.9\",\n actual = \"@stargate_crates__axum-0.8.9//:axum\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"axum\",\n actual = \"@stargate_crates__axum-0.8.9//:axum\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"built-0.8.1\",\n actual = \"@stargate_crates__built-0.8.1//:built\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"built\",\n actual = \"@stargate_crates__built-0.8.1//:built\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bytes-1.12.1\",\n actual = \"@stargate_crates__bytes-1.12.1//:bytes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bytes\",\n actual = \"@stargate_crates__bytes-1.12.1//:bytes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"capnp-0.23.2\",\n actual = \"@stargate_crates__capnp-0.23.2//:capnp\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"capnp\",\n actual = \"@stargate_crates__capnp-0.23.2//:capnp\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"capnp-futures-0.23.1\",\n actual = \"@stargate_crates__capnp-futures-0.23.1//:capnp_futures\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"capnp-futures\",\n actual = \"@stargate_crates__capnp-futures-0.23.1//:capnp_futures\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"capnpc-0.23.3\",\n actual = \"@stargate_crates__capnpc-0.23.3//:capnpc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"capnpc\",\n actual = \"@stargate_crates__capnpc-0.23.3//:capnpc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap-4.6.1\",\n actual = \"@stargate_crates__clap-4.6.1//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap\",\n actual = \"@stargate_crates__clap-4.6.1//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"criterion-0.5.1\",\n actual = \"@stargate_crates__criterion-0.5.1//:criterion\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"criterion\",\n actual = \"@stargate_crates__criterion-0.5.1//:criterion\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"flume-0.12.0\",\n actual = \"@stargate_crates__flume-0.12.0//:flume\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"flume\",\n actual = \"@stargate_crates__flume-0.12.0//:flume\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"futures-0.3.32\",\n actual = \"@stargate_crates__futures-0.3.32//:futures\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"futures\",\n actual = \"@stargate_crates__futures-0.3.32//:futures\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"git2-0.20.4\",\n actual = \"@stargate_crates__git2-0.20.4//:git2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"git2\",\n actual = \"@stargate_crates__git2-0.20.4//:git2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"h3-0.0.8\",\n actual = \"@stargate_crates__h3-0.0.8//:h3\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"h3\",\n actual = \"@stargate_crates__h3-0.0.8//:h3\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"h3-quinn-0.0.10\",\n actual = \"@stargate_crates__h3-quinn-0.0.10//:h3_quinn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"h3-quinn\",\n actual = \"@stargate_crates__h3-quinn-0.0.10//:h3_quinn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"hickory-resolver-0.24.4\",\n actual = \"@stargate_crates__hickory-resolver-0.24.4//:hickory_resolver\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"hickory-resolver\",\n actual = \"@stargate_crates__hickory-resolver-0.24.4//:hickory_resolver\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"http-1.4.2\",\n actual = \"@stargate_crates__http-1.4.2//:http\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"http\",\n actual = \"@stargate_crates__http-1.4.2//:http\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"httpdate-1.0.3\",\n actual = \"@stargate_crates__httpdate-1.0.3//:httpdate\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"httpdate\",\n actual = \"@stargate_crates__httpdate-1.0.3//:httpdate\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"hyper-util-0.1.20\",\n actual = \"@stargate_crates__hyper-util-0.1.20//:hyper_util\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"hyper-util\",\n actual = \"@stargate_crates__hyper-util-0.1.20//:hyper_util\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indexmap-2.14.0\",\n actual = \"@stargate_crates__indexmap-2.14.0//:indexmap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indexmap\",\n actual = \"@stargate_crates__indexmap-2.14.0//:indexmap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"k8s-openapi-0.27.1\",\n actual = \"@stargate_crates__k8s-openapi-0.27.1//:k8s_openapi\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"k8s-openapi\",\n actual = \"@stargate_crates__k8s-openapi-0.27.1//:k8s_openapi\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"kube-3.1.0\",\n actual = \"@stargate_crates__kube-3.1.0//:kube\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"kube\",\n actual = \"@stargate_crates__kube-3.1.0//:kube\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"memchr-2.8.3\",\n actual = \"@stargate_crates__memchr-2.8.3//:memchr\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"memchr\",\n actual = \"@stargate_crates__memchr-2.8.3//:memchr\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry-0.32.0\",\n actual = \"@stargate_crates__opentelemetry-0.32.0//:opentelemetry\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry\",\n actual = \"@stargate_crates__opentelemetry-0.32.0//:opentelemetry\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry-http-0.32.0\",\n actual = \"@stargate_crates__opentelemetry-http-0.32.0//:opentelemetry_http\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry-http\",\n actual = \"@stargate_crates__opentelemetry-http-0.32.0//:opentelemetry_http\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry-otlp-0.32.0\",\n actual = \"@stargate_crates__opentelemetry-otlp-0.32.0//:opentelemetry_otlp\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry-otlp\",\n actual = \"@stargate_crates__opentelemetry-otlp-0.32.0//:opentelemetry_otlp\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry_sdk-0.32.1\",\n actual = \"@stargate_crates__opentelemetry_sdk-0.32.1//:opentelemetry_sdk\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry_sdk\",\n actual = \"@stargate_crates__opentelemetry_sdk-0.32.1//:opentelemetry_sdk\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"parking_lot-0.12.5\",\n actual = \"@stargate_crates__parking_lot-0.12.5//:parking_lot\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"parking_lot\",\n actual = \"@stargate_crates__parking_lot-0.12.5//:parking_lot\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prometheus-0.14.0\",\n actual = \"@stargate_crates__prometheus-0.14.0//:prometheus\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prometheus\",\n actual = \"@stargate_crates__prometheus-0.14.0//:prometheus\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"proptest-1.11.0\",\n actual = \"@stargate_crates__proptest-1.11.0//:proptest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"proptest\",\n actual = \"@stargate_crates__proptest-1.11.0//:proptest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-0.14.4\",\n actual = \"@stargate_crates__prost-0.14.4//:prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost\",\n actual = \"@stargate_crates__prost-0.14.4//:prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"quinn-0.11.11\",\n actual = \"@stargate_crates__quinn-0.11.11//:quinn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"quinn\",\n actual = \"@stargate_crates__quinn-0.11.11//:quinn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand-0.9.3\",\n actual = \"@stargate_crates__rand-0.9.3//:rand\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand\",\n actual = \"@stargate_crates__rand-0.9.3//:rand\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rcgen-0.13.2\",\n actual = \"@stargate_crates__rcgen-0.13.2//:rcgen\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rcgen\",\n actual = \"@stargate_crates__rcgen-0.13.2//:rcgen\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"reqwest-0.13.4\",\n actual = \"@stargate_crates__reqwest-0.13.4//:reqwest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"reqwest\",\n actual = \"@stargate_crates__reqwest-0.13.4//:reqwest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustls-0.23.41\",\n actual = \"@stargate_crates__rustls-0.23.41//:rustls\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustls\",\n actual = \"@stargate_crates__rustls-0.23.41//:rustls\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustls-pemfile-2.2.0\",\n actual = \"@stargate_crates__rustls-pemfile-2.2.0//:rustls_pemfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustls-pemfile\",\n actual = \"@stargate_crates__rustls-pemfile-2.2.0//:rustls_pemfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustls-webpki-0.103.9\",\n actual = \"@stargate_crates__rustls-webpki-0.103.9//:webpki\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustls-webpki\",\n actual = \"@stargate_crates__rustls-webpki-0.103.9//:webpki\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"scc-3.7.1\",\n actual = \"@stargate_crates__scc-3.7.1//:scc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"scc\",\n actual = \"@stargate_crates__scc-3.7.1//:scc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde-1.0.228\",\n actual = \"@stargate_crates__serde-1.0.228//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde\",\n actual = \"@stargate_crates__serde-1.0.228//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json-1.0.150\",\n actual = \"@stargate_crates__serde_json-1.0.150//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json\",\n actual = \"@stargate_crates__serde_json-1.0.150//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_with-3.22.0\",\n actual = \"@stargate_crates__serde_with-3.22.0//:serde_with\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_with\",\n actual = \"@stargate_crates__serde_with-3.22.0//:serde_with\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_yaml_ng-0.10.0\",\n actual = \"@stargate_crates__serde_yaml_ng-0.10.0//:serde_yaml_ng\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_yaml_ng\",\n actual = \"@stargate_crates__serde_yaml_ng-0.10.0//:serde_yaml_ng\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sonic-rs-0.5.8\",\n actual = \"@stargate_crates__sonic-rs-0.5.8//:sonic_rs\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sonic-rs\",\n actual = \"@stargate_crates__sonic-rs-0.5.8//:sonic_rs\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"stargate-0.4.0\",\n actual = \"@stargate_crates__stargate-0.4.0//:stargate\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"stargate\",\n actual = \"@stargate_crates__stargate-0.4.0//:stargate\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"stargate-proto-0.4.0\",\n actual = \"@stargate_crates__stargate-proto-0.4.0//:stargate_proto\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"stargate-proto\",\n actual = \"@stargate_crates__stargate-proto-0.4.0//:stargate_proto\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"stargate-protocol-0.4.0\",\n actual = \"@stargate_crates__stargate-protocol-0.4.0//:stargate_protocol\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"stargate-protocol\",\n actual = \"@stargate_crates__stargate-protocol-0.4.0//:stargate_protocol\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile-3.27.0\",\n actual = \"@stargate_crates__tempfile-3.27.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile\",\n actual = \"@stargate_crates__tempfile-3.27.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"thiserror-2.0.18\",\n actual = \"@stargate_crates__thiserror-2.0.18//:thiserror\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"thiserror\",\n actual = \"@stargate_crates__thiserror-2.0.18//:thiserror\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-1.52.3\",\n actual = \"@stargate_crates__tokio-1.52.3//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio\",\n actual = \"@stargate_crates__tokio-1.52.3//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-stream-0.1.18\",\n actual = \"@stargate_crates__tokio-stream-0.1.18//:tokio_stream\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-stream\",\n actual = \"@stargate_crates__tokio-stream-0.1.18//:tokio_stream\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-util-0.7.18\",\n actual = \"@stargate_crates__tokio-util-0.7.18//:tokio_util\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-util\",\n actual = \"@stargate_crates__tokio-util-0.7.18//:tokio_util\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"toml-1.1.4+spec-1.1.0\",\n actual = \"@stargate_crates__toml-1.1.4-spec-1.1.0//:toml\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"toml\",\n actual = \"@stargate_crates__toml-1.1.4-spec-1.1.0//:toml\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tonic-0.14.6\",\n actual = \"@stargate_crates__tonic-0.14.6//:tonic\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tonic\",\n actual = \"@stargate_crates__tonic-0.14.6//:tonic\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tonic-prost-0.14.6\",\n actual = \"@stargate_crates__tonic-prost-0.14.6//:tonic_prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tonic-prost\",\n actual = \"@stargate_crates__tonic-prost-0.14.6//:tonic_prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tonic-prost-build-0.14.6\",\n actual = \"@stargate_crates__tonic-prost-build-0.14.6//:tonic_prost_build\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tonic-prost-build\",\n actual = \"@stargate_crates__tonic-prost-build-0.14.6//:tonic_prost_build\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower-0.5.3\",\n actual = \"@stargate_crates__tower-0.5.3//:tower\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower\",\n actual = \"@stargate_crates__tower-0.5.3//:tower\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-0.1.44\",\n actual = \"@stargate_crates__tracing-0.1.44//:tracing\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing\",\n actual = \"@stargate_crates__tracing-0.1.44//:tracing\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-opentelemetry-0.33.0\",\n actual = \"@stargate_crates__tracing-opentelemetry-0.33.0//:tracing_opentelemetry\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-opentelemetry\",\n actual = \"@stargate_crates__tracing-opentelemetry-0.33.0//:tracing_opentelemetry\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-subscriber-0.3.23\",\n actual = \"@stargate_crates__tracing-subscriber-0.3.23//:tracing_subscriber\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-subscriber\",\n actual = \"@stargate_crates__tracing-subscriber-0.3.23//:tracing_subscriber\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"url-2.5.8\",\n actual = \"@stargate_crates__url-2.5.8//:url\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"url\",\n actual = \"@stargate_crates__url-2.5.8//:url\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"uuid-1.22.0\",\n actual = \"@stargate_crates__uuid-1.22.0//:uuid\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"uuid\",\n actual = \"@stargate_crates__uuid-1.22.0//:uuid\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"x509-parser-0.18.1\",\n actual = \"@stargate_crates__x509-parser-0.18.1//:x509_parser\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"x509-parser\",\n actual = \"@stargate_crates__x509-parser-0.18.1//:x509_parser\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"xxhash-rust-0.8.16\",\n actual = \"@stargate_crates__xxhash-rust-0.8.16//:xxhash_rust\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"xxhash-rust\",\n actual = \"@stargate_crates__xxhash-rust-0.8.16//:xxhash_rust\",\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", - "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 'nvcf'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\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\", \"new_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/private:local_crate_mirror.bzl\", \"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 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 AND ALIASES\n###############################################################################\n\n_NORMAL_DEPENDENCIES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"async-stream\": Label(\"@stargate_crates//:async-stream-0.3.6\"),\n \"axum\": Label(\"@stargate_crates//:axum-0.8.9\"),\n \"clap\": Label(\"@stargate_crates//:clap-4.6.1\"),\n \"serde\": Label(\"@stargate_crates//:serde-1.0.228\"),\n \"serde_json\": Label(\"@stargate_crates//:serde_json-1.0.150\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n \"tracing-subscriber\": Label(\"@stargate_crates//:tracing-subscriber-0.3.23\"),\n },\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"clap\": Label(\"@stargate_crates//:clap-4.6.1\"),\n \"flume\": Label(\"@stargate_crates//:flume-0.12.0\"),\n \"reqwest\": Label(\"@stargate_crates//:reqwest-0.13.4\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"rustls-pemfile\": Label(\"@stargate_crates//:rustls-pemfile-2.2.0\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n },\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"async-stream\": Label(\"@stargate_crates//:async-stream-0.3.6\"),\n \"axum\": Label(\"@stargate_crates//:axum-0.8.9\"),\n \"bytes\": Label(\"@stargate_crates//:bytes-1.12.1\"),\n \"flume\": Label(\"@stargate_crates//:flume-0.12.0\"),\n \"futures\": Label(\"@stargate_crates//:futures-0.3.32\"),\n \"h3\": Label(\"@stargate_crates//:h3-0.0.8\"),\n \"h3-quinn\": Label(\"@stargate_crates//:h3-quinn-0.0.10\"),\n \"http\": Label(\"@stargate_crates//:http-1.4.2\"),\n \"httpdate\": Label(\"@stargate_crates//:httpdate-1.0.3\"),\n \"indexmap\": Label(\"@stargate_crates//:indexmap-2.14.0\"),\n \"memchr\": Label(\"@stargate_crates//:memchr-2.8.3\"),\n \"opentelemetry\": Label(\"@stargate_crates//:opentelemetry-0.32.0\"),\n \"parking_lot\": Label(\"@stargate_crates//:parking_lot-0.12.5\"),\n \"prometheus\": Label(\"@stargate_crates//:prometheus-0.14.0\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"reqwest\": Label(\"@stargate_crates//:reqwest-0.13.4\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"serde\": Label(\"@stargate_crates//:serde-1.0.228\"),\n \"serde_json\": Label(\"@stargate_crates//:serde_json-1.0.150\"),\n \"sonic-rs\": Label(\"@stargate_crates//:sonic-rs-0.5.8\"),\n \"thiserror\": Label(\"@stargate_crates//:thiserror-2.0.18\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tokio-stream\": Label(\"@stargate_crates//:tokio-stream-0.1.18\"),\n \"tokio-util\": Label(\"@stargate_crates//:tokio-util-0.7.18\"),\n \"tonic\": Label(\"@stargate_crates//:tonic-0.14.6\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n \"tracing-opentelemetry\": Label(\"@stargate_crates//:tracing-opentelemetry-0.33.0\"),\n \"url\": Label(\"@stargate_crates//:url-2.5.8\"),\n \"uuid\": Label(\"@stargate_crates//:uuid-1.22.0\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"async-stream\": Label(\"@stargate_crates//:async-stream-0.3.6\"),\n \"axum\": Label(\"@stargate_crates//:axum-0.8.9\"),\n \"bytes\": Label(\"@stargate_crates//:bytes-1.12.1\"),\n \"clap\": Label(\"@stargate_crates//:clap-4.6.1\"),\n \"flume\": Label(\"@stargate_crates//:flume-0.12.0\"),\n \"futures\": Label(\"@stargate_crates//:futures-0.3.32\"),\n \"h3\": Label(\"@stargate_crates//:h3-0.0.8\"),\n \"h3-quinn\": Label(\"@stargate_crates//:h3-quinn-0.0.10\"),\n \"hickory-resolver\": Label(\"@stargate_crates//:hickory-resolver-0.24.4\"),\n \"http\": Label(\"@stargate_crates//:http-1.4.2\"),\n \"opentelemetry\": Label(\"@stargate_crates//:opentelemetry-0.32.0\"),\n \"parking_lot\": Label(\"@stargate_crates//:parking_lot-0.12.5\"),\n \"prometheus\": Label(\"@stargate_crates//:prometheus-0.14.0\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"rand\": Label(\"@stargate_crates//:rand-0.9.3\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"scc\": Label(\"@stargate_crates//:scc-3.7.1\"),\n \"serde\": Label(\"@stargate_crates//:serde-1.0.228\"),\n \"serde_json\": Label(\"@stargate_crates//:serde_json-1.0.150\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tokio-stream\": Label(\"@stargate_crates//:tokio-stream-0.1.18\"),\n \"tokio-util\": Label(\"@stargate_crates//:tokio-util-0.7.18\"),\n \"tonic\": Label(\"@stargate_crates//:tonic-0.14.6\"),\n \"tower\": Label(\"@stargate_crates//:tower-0.5.3\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n \"tracing-opentelemetry\": Label(\"@stargate_crates//:tracing-opentelemetry-0.33.0\"),\n \"tracing-subscriber\": Label(\"@stargate_crates//:tracing-subscriber-0.3.23\"),\n \"url\": Label(\"@stargate_crates//:url-2.5.8\"),\n \"xxhash-rust\": Label(\"@stargate_crates//:xxhash-rust-0.8.16\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"reqwest\": Label(\"@stargate_crates//:reqwest-0.13.4\"),\n \"sonic-rs\": Label(\"@stargate_crates//:sonic-rs-0.5.8\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"bytes\": Label(\"@stargate_crates//:bytes-1.12.1\"),\n \"clap\": Label(\"@stargate_crates//:clap-4.6.1\"),\n \"futures\": Label(\"@stargate_crates//:futures-0.3.32\"),\n \"h3\": Label(\"@stargate_crates//:h3-0.0.8\"),\n \"h3-quinn\": Label(\"@stargate_crates//:h3-quinn-0.0.10\"),\n \"http\": Label(\"@stargate_crates//:http-1.4.2\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"rand\": Label(\"@stargate_crates//:rand-0.9.3\"),\n \"reqwest\": Label(\"@stargate_crates//:reqwest-0.13.4\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"serde\": Label(\"@stargate_crates//:serde-1.0.228\"),\n \"serde_json\": Label(\"@stargate_crates//:serde_json-1.0.150\"),\n \"serde_yaml_ng\": Label(\"@stargate_crates//:serde_yaml_ng-0.10.0\"),\n \"tempfile\": Label(\"@stargate_crates//:tempfile-3.27.0\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"futures\": Label(\"@stargate_crates//:futures-0.3.32\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"async-stream\": Label(\"@stargate_crates//:async-stream-0.3.6\"),\n \"axum\": Label(\"@stargate_crates//:axum-0.8.9\"),\n \"bytes\": Label(\"@stargate_crates//:bytes-1.12.1\"),\n \"clap\": Label(\"@stargate_crates//:clap-4.6.1\"),\n \"futures\": Label(\"@stargate_crates//:futures-0.3.32\"),\n \"h3\": Label(\"@stargate_crates//:h3-0.0.8\"),\n \"h3-quinn\": Label(\"@stargate_crates//:h3-quinn-0.0.10\"),\n \"http\": Label(\"@stargate_crates//:http-1.4.2\"),\n \"k8s-openapi\": Label(\"@stargate_crates//:k8s-openapi-0.27.1\"),\n \"kube\": Label(\"@stargate_crates//:kube-3.1.0\"),\n \"prometheus\": Label(\"@stargate_crates//:prometheus-0.14.0\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tokio-stream\": Label(\"@stargate_crates//:tokio-stream-0.1.18\"),\n \"tokio-util\": Label(\"@stargate_crates//:tokio-util-0.7.18\"),\n \"tonic\": Label(\"@stargate_crates//:tonic-0.14.6\"),\n \"tower\": Label(\"@stargate_crates//:tower-0.5.3\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n \"tracing-subscriber\": Label(\"@stargate_crates//:tracing-subscriber-0.3.23\"),\n },\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n _COMMON_CONDITION: {\n \"prost\": Label(\"@stargate_crates//:prost-0.14.4\"),\n \"serde\": Label(\"@stargate_crates//:serde-1.0.228\"),\n \"tonic\": Label(\"@stargate_crates//:tonic-0.14.6\"),\n \"tonic-prost\": Label(\"@stargate_crates//:tonic-prost-0.14.6\"),\n },\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n _COMMON_CONDITION: {\n \"bytes\": Label(\"@stargate_crates//:bytes-1.12.1\"),\n \"capnp\": Label(\"@stargate_crates//:capnp-0.23.2\"),\n \"capnp-futures\": Label(\"@stargate_crates//:capnp-futures-0.23.1\"),\n \"http\": Label(\"@stargate_crates//:http-1.4.2\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"serde\": Label(\"@stargate_crates//:serde-1.0.228\"),\n \"thiserror\": Label(\"@stargate_crates//:thiserror-2.0.18\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"flume\": Label(\"@stargate_crates//:flume-0.12.0\"),\n \"futures\": Label(\"@stargate_crates//:futures-0.3.32\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tokio-util\": Label(\"@stargate_crates//:tokio-util-0.7.18\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"http\": Label(\"@stargate_crates//:http-1.4.2\"),\n \"opentelemetry\": Label(\"@stargate_crates//:opentelemetry-0.32.0\"),\n \"opentelemetry-http\": Label(\"@stargate_crates//:opentelemetry-http-0.32.0\"),\n \"opentelemetry-otlp\": Label(\"@stargate_crates//:opentelemetry-otlp-0.32.0\"),\n \"opentelemetry_sdk\": Label(\"@stargate_crates//:opentelemetry_sdk-0.32.1\"),\n \"tonic\": Label(\"@stargate_crates//:tonic-0.14.6\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n \"tracing-opentelemetry\": Label(\"@stargate_crates//:tracing-opentelemetry-0.33.0\"),\n \"tracing-subscriber\": Label(\"@stargate_crates//:tracing-subscriber-0.3.23\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"rcgen\": Label(\"@stargate_crates//:rcgen-0.13.2\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"rustls-pemfile\": Label(\"@stargate_crates//:rustls-pemfile-2.2.0\"),\n \"rustls-webpki\": Label(\"@stargate_crates//:rustls-webpki-0.103.9\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tokio-util\": Label(\"@stargate_crates//:tokio-util-0.7.18\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n \"x509-parser\": Label(\"@stargate_crates//:x509-parser-0.18.1\"),\n },\n },\n}\n\n\n_NORMAL_ALIASES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n _COMMON_CONDITION: {\n \"axum\": Label(\"@stargate_crates//:axum-0.8.9\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"rcgen\": Label(\"@stargate_crates//:rcgen-0.13.2\"),\n \"serde_json\": Label(\"@stargate_crates//:serde_json-1.0.150\"),\n \"tempfile\": Label(\"@stargate_crates//:tempfile-3.27.0\"),\n \"tokio-stream\": Label(\"@stargate_crates//:tokio-stream-0.1.18\"),\n \"tonic\": Label(\"@stargate_crates//:tonic-0.14.6\"),\n },\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n _COMMON_CONDITION: {\n \"criterion\": Label(\"@stargate_crates//:criterion-0.5.1\"),\n \"opentelemetry_sdk\": Label(\"@stargate_crates//:opentelemetry_sdk-0.32.1\"),\n \"rcgen\": Label(\"@stargate_crates//:rcgen-0.13.2\"),\n \"tempfile\": Label(\"@stargate_crates//:tempfile-3.27.0\"),\n \"tower\": Label(\"@stargate_crates//:tower-0.5.3\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n \"hyper-util\": Label(\"@stargate_crates//:hyper-util-0.1.20\"),\n \"opentelemetry_sdk\": Label(\"@stargate_crates//:opentelemetry_sdk-0.32.1\"),\n \"prost\": Label(\"@stargate_crates//:prost-0.14.4\"),\n \"reqwest\": Label(\"@stargate_crates//:reqwest-0.13.4\"),\n \"serde_yaml_ng\": Label(\"@stargate_crates//:serde_yaml_ng-0.10.0\"),\n \"tempfile\": Label(\"@stargate_crates//:tempfile-3.27.0\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n _COMMON_CONDITION: {\n \"axum\": Label(\"@stargate_crates//:axum-0.8.9\"),\n \"tempfile\": Label(\"@stargate_crates//:tempfile-3.27.0\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n _COMMON_CONDITION: {\n \"http\": Label(\"@stargate_crates//:http-1.4.2\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"rustls-pemfile\": Label(\"@stargate_crates//:rustls-pemfile-2.2.0\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n _COMMON_CONDITION: {\n \"hyper-util\": Label(\"@stargate_crates//:hyper-util-0.1.20\"),\n \"rustls-pemfile\": Label(\"@stargate_crates//:rustls-pemfile-2.2.0\"),\n \"tempfile\": Label(\"@stargate_crates//:tempfile-3.27.0\"),\n },\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n _COMMON_CONDITION: {\n \"serde_json\": Label(\"@stargate_crates//:serde_json-1.0.150\"),\n \"tonic-prost-build\": Label(\"@stargate_crates//:tonic-prost-build-0.14.6\"),\n },\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n _COMMON_CONDITION: {\n \"capnpc\": Label(\"@stargate_crates//:capnpc-0.23.3\"),\n \"proptest\": Label(\"@stargate_crates//:proptest-1.11.0\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"rustls-pemfile\": Label(\"@stargate_crates//:rustls-pemfile-2.2.0\"),\n \"serde_json\": Label(\"@stargate_crates//:serde_json-1.0.150\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n _COMMON_CONDITION: {\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n _COMMON_CONDITION: {\n \"tempfile\": Label(\"@stargate_crates//:tempfile-3.27.0\"),\n },\n },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n \"async-trait\": Label(\"@stargate_crates//:async-trait-0.1.89\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n },\n}\n\n\n_PROC_MACRO_ALIASES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_BUILD_DEPENDENCIES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n \"built\": Label(\"@stargate_crates//:built-0.8.1\"),\n \"git2\": Label(\"@stargate_crates//:git2-0.20.4\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n },\n}\n\n\n_BUILD_ALIASES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n },\n}\n\n\n_CONDITIONS = {\n \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"aarch64-linux-android\": [],\n \"aarch64-pc-windows-gnullvm\": [],\n \"aarch64-pc-windows-msvc\": [],\n \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"aarch64-uwp-windows-msvc\": [],\n \"cfg(all(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), target_os = \\\"windows\\\"))\": [],\n \"cfg(all(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), target_vendor = \\\"apple\\\", any(target_os = \\\"ios\\\", target_os = \\\"macos\\\", target_os = \\\"tvos\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\")))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(all(any(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), all(target_arch = \\\"arm\\\", target_endian = \\\"little\\\")), any(target_os = \\\"android\\\", target_os = \\\"linux\\\")))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(any(target_arch = \\\"x86_64\\\", target_arch = \\\"arm64ec\\\"), target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\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(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_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\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_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", not(target_os = \\\"wasi\\\")))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\", target_env = \\\"p2\\\"))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\", target_env = \\\"p3\\\"))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"gnu\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86_64\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(target_arch = \\\"x86_64\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_family = \\\"wasm\\\", target_os = \\\"unknown\\\"))\": [],\n \"cfg(all(target_os = \\\"uefi\\\", getrandom_backend = \\\"efi_rng\\\"))\": [],\n \"cfg(all(unix, not(target_os = \\\"android\\\"), not(target_vendor = \\\"apple\\\"), not(target_arch = \\\"wasm32\\\")))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(unix, not(target_os = \\\"macos\\\")))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\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(any(target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n \"cfg(any(unix, target_os = \\\"hermit\\\", target_os = \\\"wasi\\\"))\": [\"@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(unix, target_os = \\\"redox\\\"))\": [\"@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(unix, target_os = \\\"wasi\\\"))\": [\"@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(all(target_arch = \\\"arm\\\", target_os = \\\"none\\\")))\": [\"@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(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\"))))\": [\"@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(all(target_family = \\\"wasm\\\", target_os = \\\"unknown\\\")))\": [\"@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(target_has_atomic = \\\"64\\\"))\": [],\n \"cfg(not(target_has_atomic = \\\"ptr\\\"))\": [],\n \"cfg(not(windows_raw_dylib))\": [\"@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 = \\\"wasm32\\\")\": [],\n \"cfg(target_feature = \\\"atomics\\\")\": [],\n \"cfg(target_os = \\\"android\\\")\": [],\n \"cfg(target_os = \\\"hermit\\\")\": [],\n \"cfg(target_os = \\\"macos\\\")\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n \"cfg(target_os = \\\"netbsd\\\")\": [],\n \"cfg(target_os = \\\"redox\\\")\": [],\n \"cfg(target_os = \\\"solaris\\\")\": [],\n \"cfg(target_os = \\\"vxworks\\\")\": [],\n \"cfg(target_os = \\\"wasi\\\")\": [],\n \"cfg(target_os = \\\"windows\\\")\": [],\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 \"cfg(windows_raw_dylib)\": [],\n \"i686-pc-windows-gnu\": [],\n \"i686-pc-windows-gnullvm\": [],\n \"i686-pc-windows-msvc\": [],\n \"i686-uwp-windows-gnu\": [],\n \"i686-uwp-windows-msvc\": [],\n \"x86_64-apple-darwin\": [\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n \"x86_64-pc-windows-gnu\": [],\n \"x86_64-pc-windows-gnullvm\": [],\n \"x86_64-pc-windows-msvc\": [],\n \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"x86_64-uwp-windows-gnu\": [],\n \"x86_64-uwp-windows-msvc\": [],\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 http_archive,\n name = \"stargate_crates__ahash-0.8.12\",\n sha256 = \"5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ahash/0.8.12/download\"],\n strip_prefix = \"ahash-0.8.12\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ahash-0.8.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__aho-corasick-1.1.4\",\n sha256 = \"ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aho-corasick/1.1.4/download\"],\n strip_prefix = \"aho-corasick-1.1.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.aho-corasick-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__allocator-api2-0.2.21\",\n sha256 = \"683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/allocator-api2/0.2.21/download\"],\n strip_prefix = \"allocator-api2-0.2.21\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.allocator-api2-0.2.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__anes-0.1.6\",\n sha256 = \"4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anes/0.1.6/download\"],\n strip_prefix = \"anes-0.1.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.anes-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__anstream-1.0.0\",\n sha256 = \"824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstream/1.0.0/download\"],\n strip_prefix = \"anstream-1.0.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.anstream-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__anstyle-1.0.13\",\n sha256 = \"5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle/1.0.13/download\"],\n strip_prefix = \"anstyle-1.0.13\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.anstyle-1.0.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__anstyle-parse-1.0.0\",\n sha256 = \"52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-parse/1.0.0/download\"],\n strip_prefix = \"anstyle-parse-1.0.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.anstyle-parse-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__anstyle-query-1.1.5\",\n sha256 = \"40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-query/1.1.5/download\"],\n strip_prefix = \"anstyle-query-1.1.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.anstyle-query-1.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__anstyle-wincon-3.0.11\",\n sha256 = \"291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-wincon/3.0.11/download\"],\n strip_prefix = \"anstyle-wincon-3.0.11\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.anstyle-wincon-3.0.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__anyhow-1.0.103\",\n sha256 = \"2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anyhow/1.0.103/download\"],\n strip_prefix = \"anyhow-1.0.103\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.anyhow-1.0.103.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__asn1-rs-0.7.2\",\n sha256 = \"b7f43a50ac4fdca5df8e885c21b835997f0a1cdee65494a6847694a98652d9d8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/asn1-rs/0.7.2/download\"],\n strip_prefix = \"asn1-rs-0.7.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.asn1-rs-0.7.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__asn1-rs-derive-0.6.0\",\n sha256 = \"3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/asn1-rs-derive/0.6.0/download\"],\n strip_prefix = \"asn1-rs-derive-0.6.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.asn1-rs-derive-0.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__asn1-rs-impl-0.2.0\",\n sha256 = \"7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/asn1-rs-impl/0.2.0/download\"],\n strip_prefix = \"asn1-rs-impl-0.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.asn1-rs-impl-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__async-broadcast-0.7.2\",\n sha256 = \"435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-broadcast/0.7.2/download\"],\n strip_prefix = \"async-broadcast-0.7.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.async-broadcast-0.7.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__async-stream-0.3.6\",\n sha256 = \"0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-stream/0.3.6/download\"],\n strip_prefix = \"async-stream-0.3.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.async-stream-0.3.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__async-stream-impl-0.3.6\",\n sha256 = \"c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-stream-impl/0.3.6/download\"],\n strip_prefix = \"async-stream-impl-0.3.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.async-stream-impl-0.3.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__async-trait-0.1.89\",\n sha256 = \"9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-trait/0.1.89/download\"],\n strip_prefix = \"async-trait-0.1.89\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.async-trait-0.1.89.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__atomic-waker-1.1.2\",\n sha256 = \"1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/atomic-waker/1.1.2/download\"],\n strip_prefix = \"atomic-waker-1.1.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.atomic-waker-1.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__autocfg-1.5.0\",\n sha256 = \"c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/autocfg/1.5.0/download\"],\n strip_prefix = \"autocfg-1.5.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.autocfg-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__aws-lc-rs-1.16.0\",\n sha256 = \"d9a7b350e3bb1767102698302bc37256cbd48422809984b98d292c40e2579aa9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aws-lc-rs/1.16.0/download\"],\n strip_prefix = \"aws-lc-rs-1.16.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.aws-lc-rs-1.16.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__aws-lc-sys-0.37.1\",\n sha256 = \"b092fe214090261288111db7a2b2c2118e5a7f30dc2569f1732c4069a6840549\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aws-lc-sys/0.37.1/download\"],\n strip_prefix = \"aws-lc-sys-0.37.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.aws-lc-sys-0.37.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__axum-0.8.9\",\n sha256 = \"31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum/0.8.9/download\"],\n strip_prefix = \"axum-0.8.9\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.axum-0.8.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__axum-core-0.5.6\",\n sha256 = \"08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum-core/0.5.6/download\"],\n strip_prefix = \"axum-core-0.5.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.axum-core-0.5.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__axum-macros-0.5.1\",\n sha256 = \"7aa268c23bfbbd2c4363b9cd302a4f504fb2a9dfe7e3451d66f35dd392e20aca\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum-macros/0.5.1/download\"],\n strip_prefix = \"axum-macros-0.5.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.axum-macros-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__backon-1.6.0\",\n sha256 = \"cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/backon/1.6.0/download\"],\n strip_prefix = \"backon-1.6.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.backon-1.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__base64-0.22.1\",\n sha256 = \"72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64/0.22.1/download\"],\n strip_prefix = \"base64-0.22.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.base64-0.22.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__bit-set-0.8.0\",\n sha256 = \"08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bit-set/0.8.0/download\"],\n strip_prefix = \"bit-set-0.8.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.bit-set-0.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__bit-vec-0.8.0\",\n sha256 = \"5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bit-vec/0.8.0/download\"],\n strip_prefix = \"bit-vec-0.8.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.bit-vec-0.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__bitflags-2.11.0\",\n sha256 = \"843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/2.11.0/download\"],\n strip_prefix = \"bitflags-2.11.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.bitflags-2.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__block-buffer-0.10.4\",\n sha256 = \"3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block-buffer/0.10.4/download\"],\n strip_prefix = \"block-buffer-0.10.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.block-buffer-0.10.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__built-0.8.1\",\n sha256 = \"5c0e531d93d39c34eef561e929e8a7f86d77a5af08aac4f6d6e39976c51858e9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/built/0.8.1/download\"],\n strip_prefix = \"built-0.8.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.built-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__bumpalo-3.20.2\",\n sha256 = \"5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bumpalo/3.20.2/download\"],\n strip_prefix = \"bumpalo-3.20.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.bumpalo-3.20.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__bytes-1.12.1\",\n sha256 = \"fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytes/1.12.1/download\"],\n strip_prefix = \"bytes-1.12.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.bytes-1.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__capnp-0.23.2\",\n sha256 = \"fa8c2ce958193219f203a6887788231a1aaa0b22ed012d67436ea3b87a9645c4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/capnp/0.23.2/download\"],\n strip_prefix = \"capnp-0.23.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.capnp-0.23.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__capnp-futures-0.23.1\",\n sha256 = \"2f0ac8177a7bee149f8cfeb2b6ae7c58da0b57913ff31ed6bec2fd725894ee67\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/capnp-futures/0.23.1/download\"],\n strip_prefix = \"capnp-futures-0.23.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.capnp-futures-0.23.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__capnpc-0.23.3\",\n sha256 = \"ad416fa35bb240c41f2794ecf1a95a41885f16a03e51bba4cb6845ce7db4bab3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/capnpc/0.23.3/download\"],\n strip_prefix = \"capnpc-0.23.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.capnpc-0.23.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__cast-0.3.0\",\n sha256 = \"37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cast/0.3.0/download\"],\n strip_prefix = \"cast-0.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.cast-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__cc-1.2.56\",\n sha256 = \"aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cc/1.2.56/download\"],\n strip_prefix = \"cc-1.2.56\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.cc-1.2.56.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__cesu8-1.1.0\",\n sha256 = \"6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cesu8/1.1.0/download\"],\n strip_prefix = \"cesu8-1.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.cesu8-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__cfg-if-1.0.4\",\n sha256 = \"9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg-if/1.0.4/download\"],\n strip_prefix = \"cfg-if-1.0.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.cfg-if-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__cfg_aliases-0.2.1\",\n sha256 = \"613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg_aliases/0.2.1/download\"],\n strip_prefix = \"cfg_aliases-0.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.cfg_aliases-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.ciborium-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.ciborium-io-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.ciborium-ll-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__clap-4.6.1\",\n sha256 = \"1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap/4.6.1/download\"],\n strip_prefix = \"clap-4.6.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.clap-4.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__clap_builder-4.6.0\",\n sha256 = \"714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_builder/4.6.0/download\"],\n strip_prefix = \"clap_builder-4.6.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.clap_builder-4.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__clap_derive-4.6.1\",\n sha256 = \"f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_derive/4.6.1/download\"],\n strip_prefix = \"clap_derive-4.6.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.clap_derive-4.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__clap_lex-1.0.0\",\n sha256 = \"3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_lex/1.0.0/download\"],\n strip_prefix = \"clap_lex-1.0.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.clap_lex-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__cmake-0.1.57\",\n sha256 = \"75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cmake/0.1.57/download\"],\n strip_prefix = \"cmake-0.1.57\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.cmake-0.1.57.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__colorchoice-1.0.4\",\n sha256 = \"b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/colorchoice/1.0.4/download\"],\n strip_prefix = \"colorchoice-1.0.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.colorchoice-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__combine-4.6.7\",\n sha256 = \"ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/combine/4.6.7/download\"],\n strip_prefix = \"combine-4.6.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.combine-4.6.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__concurrent-queue-2.5.0\",\n sha256 = \"4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/concurrent-queue/2.5.0/download\"],\n strip_prefix = \"concurrent-queue-2.5.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.concurrent-queue-2.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__core-foundation-0.10.1\",\n sha256 = \"b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-foundation/0.10.1/download\"],\n strip_prefix = \"core-foundation-0.10.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.core-foundation-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__core-foundation-sys-0.8.7\",\n sha256 = \"773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-foundation-sys/0.8.7/download\"],\n strip_prefix = \"core-foundation-sys-0.8.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.core-foundation-sys-0.8.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__cpufeatures-0.2.17\",\n sha256 = \"59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cpufeatures/0.2.17/download\"],\n strip_prefix = \"cpufeatures-0.2.17\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.cpufeatures-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__criterion-0.5.1\",\n sha256 = \"f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/criterion/0.5.1/download\"],\n strip_prefix = \"criterion-0.5.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.criterion-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__criterion-plot-0.5.0\",\n sha256 = \"6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/criterion-plot/0.5.0/download\"],\n strip_prefix = \"criterion-plot-0.5.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.criterion-plot-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__crossbeam-deque-0.8.6\",\n sha256 = \"9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-deque/0.8.6/download\"],\n strip_prefix = \"crossbeam-deque-0.8.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.crossbeam-deque-0.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__crossbeam-epoch-0.9.18\",\n sha256 = \"5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-epoch/0.9.18/download\"],\n strip_prefix = \"crossbeam-epoch-0.9.18\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.crossbeam-epoch-0.9.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__crossbeam-utils-0.8.21\",\n sha256 = \"d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-utils/0.8.21/download\"],\n strip_prefix = \"crossbeam-utils-0.8.21\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.crossbeam-utils-0.8.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.crunchy-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__crypto-common-0.1.7\",\n sha256 = \"78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crypto-common/0.1.7/download\"],\n strip_prefix = \"crypto-common-0.1.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.crypto-common-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__data-encoding-2.10.0\",\n sha256 = \"d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/data-encoding/2.10.0/download\"],\n strip_prefix = \"data-encoding-2.10.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.data-encoding-2.10.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__der-parser-10.0.0\",\n sha256 = \"07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/der-parser/10.0.0/download\"],\n strip_prefix = \"der-parser-10.0.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.der-parser-10.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__deranged-0.5.8\",\n sha256 = \"7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/deranged/0.5.8/download\"],\n strip_prefix = \"deranged-0.5.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.deranged-0.5.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__derive_more-2.1.1\",\n sha256 = \"d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/derive_more/2.1.1/download\"],\n strip_prefix = \"derive_more-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.derive_more-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__derive_more-impl-2.1.1\",\n sha256 = \"799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/derive_more-impl/2.1.1/download\"],\n strip_prefix = \"derive_more-impl-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.derive_more-impl-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__digest-0.10.7\",\n sha256 = \"9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/digest/0.10.7/download\"],\n strip_prefix = \"digest-0.10.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.digest-0.10.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__displaydoc-0.2.5\",\n sha256 = \"97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/displaydoc/0.2.5/download\"],\n strip_prefix = \"displaydoc-0.2.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.displaydoc-0.2.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__dunce-1.0.5\",\n sha256 = \"92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dunce/1.0.5/download\"],\n strip_prefix = \"dunce-1.0.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.dunce-1.0.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__educe-0.6.0\",\n sha256 = \"1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/educe/0.6.0/download\"],\n strip_prefix = \"educe-0.6.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.educe-0.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__either-1.15.0\",\n sha256 = \"48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/either/1.15.0/download\"],\n strip_prefix = \"either-1.15.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.either-1.15.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__embedded-io-0.7.1\",\n sha256 = \"9eb1aa714776b75c7e67e1da744b81a129b3ff919c8712b5e1b32252c1f07cc7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/embedded-io/0.7.1/download\"],\n strip_prefix = \"embedded-io-0.7.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.embedded-io-0.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__enum-as-inner-0.6.1\",\n sha256 = \"a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/enum-as-inner/0.6.1/download\"],\n strip_prefix = \"enum-as-inner-0.6.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.enum-as-inner-0.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__enum-ordinalize-4.3.2\",\n sha256 = \"4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/enum-ordinalize/4.3.2/download\"],\n strip_prefix = \"enum-ordinalize-4.3.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.enum-ordinalize-4.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__enum-ordinalize-derive-4.3.2\",\n sha256 = \"8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/enum-ordinalize-derive/4.3.2/download\"],\n strip_prefix = \"enum-ordinalize-derive-4.3.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.enum-ordinalize-derive-4.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.equivalent-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.errno-0.3.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__event-listener-5.4.1\",\n sha256 = \"e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/event-listener/5.4.1/download\"],\n strip_prefix = \"event-listener-5.4.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.event-listener-5.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__event-listener-strategy-0.5.4\",\n sha256 = \"8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/event-listener-strategy/0.5.4/download\"],\n strip_prefix = \"event-listener-strategy-0.5.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.event-listener-strategy-0.5.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__fastbloom-0.14.1\",\n sha256 = \"4e7f34442dbe69c60fe8eaf58a8cafff81a1f278816d8ab4db255b3bef4ac3c4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fastbloom/0.14.1/download\"],\n strip_prefix = \"fastbloom-0.14.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.fastbloom-0.14.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__fastrand-2.3.0\",\n sha256 = \"37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fastrand/2.3.0/download\"],\n strip_prefix = \"fastrand-2.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.fastrand-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__faststr-0.2.34\",\n sha256 = \"1ca7d44d22004409a61c393afb3369c8f7bb74abcae49fe249ee01dcc3002113\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/faststr/0.2.34/download\"],\n strip_prefix = \"faststr-0.2.34\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.faststr-0.2.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__find-msvc-tools-0.1.9\",\n sha256 = \"5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/find-msvc-tools/0.1.9/download\"],\n strip_prefix = \"find-msvc-tools-0.1.9\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.find-msvc-tools-0.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__fixedbitset-0.5.7\",\n sha256 = \"1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fixedbitset/0.5.7/download\"],\n strip_prefix = \"fixedbitset-0.5.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.fixedbitset-0.5.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__flume-0.12.0\",\n sha256 = \"5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/flume/0.12.0/download\"],\n strip_prefix = \"flume-0.12.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.flume-0.12.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__fnv-1.0.7\",\n sha256 = \"3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fnv/1.0.7/download\"],\n strip_prefix = \"fnv-1.0.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.fnv-1.0.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__foldhash-0.1.5\",\n sha256 = \"d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foldhash/0.1.5/download\"],\n strip_prefix = \"foldhash-0.1.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.foldhash-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__foldhash-0.2.0\",\n sha256 = \"77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foldhash/0.2.0/download\"],\n strip_prefix = \"foldhash-0.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.foldhash-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.form_urlencoded-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__fs_extra-1.3.0\",\n sha256 = \"42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fs_extra/1.3.0/download\"],\n strip_prefix = \"fs_extra-1.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.fs_extra-1.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-0.3.32\",\n sha256 = \"8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures/0.3.32/download\"],\n strip_prefix = \"futures-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-channel-0.3.32\",\n sha256 = \"07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-channel/0.3.32/download\"],\n strip_prefix = \"futures-channel-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-channel-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-core-0.3.32\",\n sha256 = \"7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-core/0.3.32/download\"],\n strip_prefix = \"futures-core-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-core-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-executor-0.3.32\",\n sha256 = \"baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-executor/0.3.32/download\"],\n strip_prefix = \"futures-executor-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-executor-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-io-0.3.32\",\n sha256 = \"cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-io/0.3.32/download\"],\n strip_prefix = \"futures-io-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-io-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-macro-0.3.32\",\n sha256 = \"e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-macro/0.3.32/download\"],\n strip_prefix = \"futures-macro-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-macro-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-sink-0.3.32\",\n sha256 = \"c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-sink/0.3.32/download\"],\n strip_prefix = \"futures-sink-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-sink-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-task-0.3.32\",\n sha256 = \"037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-task/0.3.32/download\"],\n strip_prefix = \"futures-task-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-task-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-util-0.3.32\",\n sha256 = \"389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-util/0.3.32/download\"],\n strip_prefix = \"futures-util-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-util-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__generic-array-0.14.7\",\n sha256 = \"85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/generic-array/0.14.7/download\"],\n strip_prefix = \"generic-array-0.14.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.generic-array-0.14.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__getrandom-0.2.17\",\n sha256 = \"ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.2.17/download\"],\n strip_prefix = \"getrandom-0.2.17\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.getrandom-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__getrandom-0.3.4\",\n sha256 = \"899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.3.4/download\"],\n strip_prefix = \"getrandom-0.3.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.getrandom-0.3.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__getrandom-0.4.1\",\n sha256 = \"139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.4.1/download\"],\n strip_prefix = \"getrandom-0.4.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.getrandom-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.git2-0.20.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__git2-0.21.0\",\n sha256 = \"ddddbf932745a6be37109b6112d3ee09696106f848449069d3a57bba937ab82e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/git2/0.21.0/download\"],\n strip_prefix = \"git2-0.21.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.git2-0.21.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__gloo-timers-0.3.0\",\n sha256 = \"bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gloo-timers/0.3.0/download\"],\n strip_prefix = \"gloo-timers-0.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.gloo-timers-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__h2-0.4.13\",\n sha256 = \"2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/h2/0.4.13/download\"],\n strip_prefix = \"h2-0.4.13\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.h2-0.4.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__h3-0.0.8\",\n sha256 = \"10872b55cfb02a821b69dc7cf8dc6a71d6af25eb9a79662bec4a9d016056b3be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/h3/0.0.8/download\"],\n strip_prefix = \"h3-0.0.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.h3-0.0.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__h3-quinn-0.0.10\",\n sha256 = \"8b2e732c8d91a74731663ac8479ab505042fbf547b9a207213ab7fbcbfc4f8b4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/h3-quinn/0.0.10/download\"],\n strip_prefix = \"h3-quinn-0.0.10\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.h3-quinn-0.0.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.half-2.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hashbrown-0.15.5\",\n sha256 = \"9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.15.5/download\"],\n strip_prefix = \"hashbrown-0.15.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hashbrown-0.15.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hashbrown-0.16.1\",\n sha256 = \"841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.16.1/download\"],\n strip_prefix = \"hashbrown-0.16.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hashbrown-0.16.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.hashbrown-0.17.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__heck-0.5.0\",\n sha256 = \"2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/heck/0.5.0/download\"],\n strip_prefix = \"heck-0.5.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.heck-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hermit-abi-0.5.2\",\n sha256 = \"fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hermit-abi/0.5.2/download\"],\n strip_prefix = \"hermit-abi-0.5.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hermit-abi-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hickory-proto-0.24.4\",\n sha256 = \"92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hickory-proto/0.24.4/download\"],\n strip_prefix = \"hickory-proto-0.24.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hickory-proto-0.24.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hickory-resolver-0.24.4\",\n sha256 = \"cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hickory-resolver/0.24.4/download\"],\n strip_prefix = \"hickory-resolver-0.24.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hickory-resolver-0.24.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hostname-0.4.2\",\n sha256 = \"617aaa3557aef3810a6369d0a99fac8a080891b68bd9f9812a1eeda0c0730cbd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hostname/0.4.2/download\"],\n strip_prefix = \"hostname-0.4.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hostname-0.4.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__http-1.4.2\",\n sha256 = \"6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http/1.4.2/download\"],\n strip_prefix = \"http-1.4.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.http-1.4.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__http-body-1.0.1\",\n sha256 = \"1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body/1.0.1/download\"],\n strip_prefix = \"http-body-1.0.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.http-body-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__http-body-util-0.1.3\",\n sha256 = \"b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body-util/0.1.3/download\"],\n strip_prefix = \"http-body-util-0.1.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.http-body-util-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__httparse-1.10.1\",\n sha256 = \"6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/httparse/1.10.1/download\"],\n strip_prefix = \"httparse-1.10.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.httparse-1.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__httpdate-1.0.3\",\n sha256 = \"df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/httpdate/1.0.3/download\"],\n strip_prefix = \"httpdate-1.0.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.httpdate-1.0.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hyper-1.9.0\",\n sha256 = \"6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper/1.9.0/download\"],\n strip_prefix = \"hyper-1.9.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hyper-1.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hyper-rustls-0.27.7\",\n sha256 = \"e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-rustls/0.27.7/download\"],\n strip_prefix = \"hyper-rustls-0.27.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hyper-rustls-0.27.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hyper-timeout-0.5.2\",\n sha256 = \"2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-timeout/0.5.2/download\"],\n strip_prefix = \"hyper-timeout-0.5.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hyper-timeout-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hyper-util-0.1.20\",\n sha256 = \"96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-util/0.1.20/download\"],\n strip_prefix = \"hyper-util-0.1.20\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hyper-util-0.1.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__icu_collections-2.1.1\",\n sha256 = \"4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_collections/2.1.1/download\"],\n strip_prefix = \"icu_collections-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.icu_collections-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__icu_locale_core-2.1.1\",\n sha256 = \"edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_locale_core/2.1.1/download\"],\n strip_prefix = \"icu_locale_core-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.icu_locale_core-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__icu_normalizer-2.1.1\",\n sha256 = \"5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer/2.1.1/download\"],\n strip_prefix = \"icu_normalizer-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.icu_normalizer-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__icu_normalizer_data-2.1.1\",\n sha256 = \"7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer_data/2.1.1/download\"],\n strip_prefix = \"icu_normalizer_data-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.icu_normalizer_data-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__icu_properties-2.1.2\",\n sha256 = \"020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties/2.1.2/download\"],\n strip_prefix = \"icu_properties-2.1.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.icu_properties-2.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__icu_properties_data-2.1.2\",\n sha256 = \"616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties_data/2.1.2/download\"],\n strip_prefix = \"icu_properties_data-2.1.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.icu_properties_data-2.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__icu_provider-2.1.1\",\n sha256 = \"85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_provider/2.1.1/download\"],\n strip_prefix = \"icu_provider-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.icu_provider-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__id-arena-2.3.0\",\n sha256 = \"3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/id-arena/2.3.0/download\"],\n strip_prefix = \"id-arena-2.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.id-arena-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.idna-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__idna_adapter-1.2.1\",\n sha256 = \"3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/idna_adapter/1.2.1/download\"],\n strip_prefix = \"idna_adapter-1.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.idna_adapter-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__indexmap-2.14.0\",\n sha256 = \"d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/2.14.0/download\"],\n strip_prefix = \"indexmap-2.14.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.indexmap-2.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ipconfig-0.3.2\",\n sha256 = \"b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ipconfig/0.3.2/download\"],\n strip_prefix = \"ipconfig-0.3.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ipconfig-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ipnet-2.11.0\",\n sha256 = \"469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ipnet/2.11.0/download\"],\n strip_prefix = \"ipnet-2.11.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ipnet-2.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__iri-string-0.7.10\",\n sha256 = \"c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iri-string/0.7.10/download\"],\n strip_prefix = \"iri-string-0.7.10\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.iri-string-0.7.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__is-terminal-0.4.17\",\n sha256 = \"3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/is-terminal/0.4.17/download\"],\n strip_prefix = \"is-terminal-0.4.17\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.is-terminal-0.4.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__is_terminal_polyfill-1.70.2\",\n sha256 = \"a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/is_terminal_polyfill/1.70.2/download\"],\n strip_prefix = \"is_terminal_polyfill-1.70.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.is_terminal_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.itertools-0.10.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__itertools-0.14.0\",\n sha256 = \"2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itertools/0.14.0/download\"],\n strip_prefix = \"itertools-0.14.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.itertools-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__itoa-1.0.17\",\n sha256 = \"92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itoa/1.0.17/download\"],\n strip_prefix = \"itoa-1.0.17\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.itoa-1.0.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jiff-0.2.24\",\n sha256 = \"f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jiff/0.2.24/download\"],\n strip_prefix = \"jiff-0.2.24\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jiff-0.2.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jiff-static-0.2.24\",\n sha256 = \"e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jiff-static/0.2.24/download\"],\n strip_prefix = \"jiff-static-0.2.24\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jiff-static-0.2.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jni-0.21.1\",\n sha256 = \"1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jni/0.21.1/download\"],\n strip_prefix = \"jni-0.21.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jni-0.21.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jni-sys-0.3.0\",\n sha256 = \"8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jni-sys/0.3.0/download\"],\n strip_prefix = \"jni-sys-0.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jni-sys-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jobserver-0.1.34\",\n sha256 = \"9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jobserver/0.1.34/download\"],\n strip_prefix = \"jobserver-0.1.34\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jobserver-0.1.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__js-sys-0.3.90\",\n sha256 = \"14dc6f6450b3f6d4ed5b16327f38fed626d375a886159ca555bd7822c0c3a5a6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/js-sys/0.3.90/download\"],\n strip_prefix = \"js-sys-0.3.90\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.js-sys-0.3.90.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__json-patch-4.2.0\",\n sha256 = \"7421438de105a0827e44fadd05377727847d717c80ce29a229f85fd04c427b72\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/json-patch/4.2.0/download\"],\n strip_prefix = \"json-patch-4.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.json-patch-4.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jsonpath-rust-1.0.4\",\n sha256 = \"633a7320c4bb672863a3782e89b9094ad70285e097ff6832cddd0ec615beadfa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jsonpath-rust/1.0.4/download\"],\n strip_prefix = \"jsonpath-rust-1.0.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jsonpath-rust-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jsonptr-0.7.1\",\n sha256 = \"a5a3cc660ba5d72bce0b3bb295bf20847ccbb40fd423f3f05b61273672e561fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jsonptr/0.7.1/download\"],\n strip_prefix = \"jsonptr-0.7.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jsonptr-0.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__k8s-openapi-0.27.1\",\n sha256 = \"51b326f5219dd55872a72c1b6ddd1b830b8334996c667449c29391d657d78d5e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/k8s-openapi/0.27.1/download\"],\n strip_prefix = \"k8s-openapi-0.27.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.k8s-openapi-0.27.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__kube-3.1.0\",\n sha256 = \"acc5a6a69da2975ed9925d56b5dcfc9cc739b66f37add06785b7c9f6d1e88741\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/kube/3.1.0/download\"],\n strip_prefix = \"kube-3.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.kube-3.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__kube-client-3.1.0\",\n sha256 = \"0fcaf2d1f1a91e1805d4cd82e8333c022767ae8ffd65909bbef6802733a7dd40\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/kube-client/3.1.0/download\"],\n strip_prefix = \"kube-client-3.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.kube-client-3.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__kube-core-3.1.0\",\n sha256 = \"f126d2db7a8b532ec1d839ece2a71e2485dc3bbca6cc3c3f929becaa810e719e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/kube-core/3.1.0/download\"],\n strip_prefix = \"kube-core-3.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.kube-core-3.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__kube-runtime-3.1.0\",\n sha256 = \"c072737075826ee74d3e615e80334e41e617ca3d14fb46ef7cdfda822d6f15f2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/kube-runtime/3.1.0/download\"],\n strip_prefix = \"kube-runtime-3.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.kube-runtime-3.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__lazy_static-1.5.0\",\n sha256 = \"bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lazy_static/1.5.0/download\"],\n strip_prefix = \"lazy_static-1.5.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.lazy_static-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__leb128fmt-0.1.0\",\n sha256 = \"09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/leb128fmt/0.1.0/download\"],\n strip_prefix = \"leb128fmt-0.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.leb128fmt-0.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__libc-0.2.186\",\n sha256 = \"68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libc/0.2.186/download\"],\n strip_prefix = \"libc-0.2.186\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.libc-0.2.186.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__libgit2-sys-0.18.5-1.9.4\",\n sha256 = \"005d6ae6eac1912906073e069f7db60b1fa98e052a68227824afe3e3a1c59ca2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libgit2-sys/0.18.5+1.9.4/download\"],\n strip_prefix = \"libgit2-sys-0.18.5+1.9.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.libgit2-sys-0.18.5+1.9.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.libm-0.2.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.libz-sys-1.1.29.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__linked-hash-map-0.5.6\",\n sha256 = \"0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/linked-hash-map/0.5.6/download\"],\n strip_prefix = \"linked-hash-map-0.5.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.linked-hash-map-0.5.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.linux-raw-sys-0.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__litemap-0.8.1\",\n sha256 = \"6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/litemap/0.8.1/download\"],\n strip_prefix = \"litemap-0.8.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.litemap-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__lock_api-0.4.14\",\n sha256 = \"224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lock_api/0.4.14/download\"],\n strip_prefix = \"lock_api-0.4.14\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.lock_api-0.4.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__log-0.4.29\",\n sha256 = \"5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/log/0.4.29/download\"],\n strip_prefix = \"log-0.4.29\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.log-0.4.29.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__lru-cache-0.1.2\",\n sha256 = \"31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lru-cache/0.1.2/download\"],\n strip_prefix = \"lru-cache-0.1.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.lru-cache-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__lru-slab-0.1.2\",\n sha256 = \"112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lru-slab/0.1.2/download\"],\n strip_prefix = \"lru-slab-0.1.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.lru-slab-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__matchers-0.2.0\",\n sha256 = \"d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/matchers/0.2.0/download\"],\n strip_prefix = \"matchers-0.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.matchers-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__matchit-0.8.4\",\n sha256 = \"47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/matchit/0.8.4/download\"],\n strip_prefix = \"matchit-0.8.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.matchit-0.8.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.memchr-2.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__mime-0.3.17\",\n sha256 = \"6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mime/0.3.17/download\"],\n strip_prefix = \"mime-0.3.17\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.mime-0.3.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__minimal-lexical-0.2.1\",\n sha256 = \"68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/minimal-lexical/0.2.1/download\"],\n strip_prefix = \"minimal-lexical-0.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.minimal-lexical-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__mio-1.2.1\",\n sha256 = \"02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mio/1.2.1/download\"],\n strip_prefix = \"mio-1.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.mio-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__multimap-0.10.1\",\n sha256 = \"1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/multimap/0.10.1/download\"],\n strip_prefix = \"multimap-0.10.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.multimap-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__munge-0.4.7\",\n sha256 = \"5e17401f259eba956ca16491461b6e8f72913a0a114e39736ce404410f915a0c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/munge/0.4.7/download\"],\n strip_prefix = \"munge-0.4.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.munge-0.4.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__munge_macro-0.4.7\",\n sha256 = \"4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/munge_macro/0.4.7/download\"],\n strip_prefix = \"munge_macro-0.4.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.munge_macro-0.4.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__nom-7.1.3\",\n sha256 = \"d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nom/7.1.3/download\"],\n strip_prefix = \"nom-7.1.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.nom-7.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__nu-ansi-term-0.50.3\",\n sha256 = \"7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nu-ansi-term/0.50.3/download\"],\n strip_prefix = \"nu-ansi-term-0.50.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.nu-ansi-term-0.50.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__num-bigint-0.4.8\",\n sha256 = \"c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-bigint/0.4.8/download\"],\n strip_prefix = \"num-bigint-0.4.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.num-bigint-0.4.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__num-conv-0.2.1\",\n sha256 = \"c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-conv/0.2.1/download\"],\n strip_prefix = \"num-conv-0.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.num-conv-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__num-integer-0.1.47\",\n sha256 = \"7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-integer/0.1.47/download\"],\n strip_prefix = \"num-integer-0.1.47\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.num-integer-0.1.47.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__num-traits-0.2.19\",\n sha256 = \"071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-traits/0.2.19/download\"],\n strip_prefix = \"num-traits-0.2.19\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.num-traits-0.2.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__oid-registry-0.8.1\",\n sha256 = \"12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/oid-registry/0.8.1/download\"],\n strip_prefix = \"oid-registry-0.8.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.oid-registry-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__once_cell-1.21.3\",\n sha256 = \"42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell/1.21.3/download\"],\n strip_prefix = \"once_cell-1.21.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.once_cell-1.21.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__once_cell_polyfill-1.70.2\",\n sha256 = \"384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell_polyfill/1.70.2/download\"],\n strip_prefix = \"once_cell_polyfill-1.70.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.once_cell_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__oorandom-11.1.5\",\n sha256 = \"d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/oorandom/11.1.5/download\"],\n strip_prefix = \"oorandom-11.1.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.oorandom-11.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__openssl-probe-0.2.1\",\n sha256 = \"7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl-probe/0.2.1/download\"],\n strip_prefix = \"openssl-probe-0.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.openssl-probe-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__opentelemetry-0.32.0\",\n sha256 = \"b0142c63252a9e054e68a4c61a5778f7b14f576274d593f8ce883d191a099682\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry/0.32.0/download\"],\n strip_prefix = \"opentelemetry-0.32.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.opentelemetry-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__opentelemetry-http-0.32.0\",\n sha256 = \"5683015d09e2df236ef005b17f6f196f0d5f6313c4fa43a7b6a53b52776e4331\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry-http/0.32.0/download\"],\n strip_prefix = \"opentelemetry-http-0.32.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.opentelemetry-http-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__opentelemetry-otlp-0.32.0\",\n sha256 = \"9966929966d17620d7c316c643ba62631826e10021409357772d5eea84f62c35\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry-otlp/0.32.0/download\"],\n strip_prefix = \"opentelemetry-otlp-0.32.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.opentelemetry-otlp-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__opentelemetry-proto-0.32.0\",\n sha256 = \"56d658ba1faf63f7b9c492cfbe6e0ec365440a16132d3270c1065f7b33f1b638\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry-proto/0.32.0/download\"],\n strip_prefix = \"opentelemetry-proto-0.32.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.opentelemetry-proto-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__opentelemetry_sdk-0.32.1\",\n sha256 = \"9b59f80e1ac4d5ff7a2db8fb6c80badb7f0f3f858211fba08dd9aaec750894f9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry_sdk/0.32.1/download\"],\n strip_prefix = \"opentelemetry_sdk-0.32.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.opentelemetry_sdk-0.32.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ordered-float-2.10.1\",\n sha256 = \"68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ordered-float/2.10.1/download\"],\n strip_prefix = \"ordered-float-2.10.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ordered-float-2.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__parking-2.2.1\",\n sha256 = \"f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking/2.2.1/download\"],\n strip_prefix = \"parking-2.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.parking-2.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__parking_lot-0.12.5\",\n sha256 = \"93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot/0.12.5/download\"],\n strip_prefix = \"parking_lot-0.12.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.parking_lot-0.12.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__parking_lot_core-0.9.12\",\n sha256 = \"2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot_core/0.9.12/download\"],\n strip_prefix = \"parking_lot_core-0.9.12\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.parking_lot_core-0.9.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pem-3.0.6\",\n sha256 = \"1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pem/3.0.6/download\"],\n strip_prefix = \"pem-3.0.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pem-3.0.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.percent-encoding-2.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pest-2.8.6\",\n sha256 = \"e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest/2.8.6/download\"],\n strip_prefix = \"pest-2.8.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pest-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pest_derive-2.8.6\",\n sha256 = \"11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_derive/2.8.6/download\"],\n strip_prefix = \"pest_derive-2.8.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pest_derive-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pest_generator-2.8.6\",\n sha256 = \"8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_generator/2.8.6/download\"],\n strip_prefix = \"pest_generator-2.8.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pest_generator-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pest_meta-2.8.6\",\n sha256 = \"89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_meta/2.8.6/download\"],\n strip_prefix = \"pest_meta-2.8.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pest_meta-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__petgraph-0.8.3\",\n sha256 = \"8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/petgraph/0.8.3/download\"],\n strip_prefix = \"petgraph-0.8.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.petgraph-0.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pin-project-1.1.10\",\n sha256 = \"677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project/1.1.10/download\"],\n strip_prefix = \"pin-project-1.1.10\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pin-project-1.1.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pin-project-internal-1.1.10\",\n sha256 = \"6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-internal/1.1.10/download\"],\n strip_prefix = \"pin-project-internal-1.1.10\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pin-project-internal-1.1.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pin-project-lite-0.2.16\",\n sha256 = \"3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-lite/0.2.16/download\"],\n strip_prefix = \"pin-project-lite-0.2.16\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pin-project-lite-0.2.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pkg-config-0.3.33\",\n sha256 = \"19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pkg-config/0.3.33/download\"],\n strip_prefix = \"pkg-config-0.3.33\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pkg-config-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__plotters-0.3.7\",\n sha256 = \"5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/plotters/0.3.7/download\"],\n strip_prefix = \"plotters-0.3.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.plotters-0.3.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__plotters-backend-0.3.7\",\n sha256 = \"df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/plotters-backend/0.3.7/download\"],\n strip_prefix = \"plotters-backend-0.3.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.plotters-backend-0.3.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__plotters-svg-0.3.7\",\n sha256 = \"51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/plotters-svg/0.3.7/download\"],\n strip_prefix = \"plotters-svg-0.3.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.plotters-svg-0.3.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__portable-atomic-1.13.1\",\n sha256 = \"c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/portable-atomic/1.13.1/download\"],\n strip_prefix = \"portable-atomic-1.13.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.portable-atomic-1.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__portable-atomic-util-0.2.7\",\n sha256 = \"c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/portable-atomic-util/0.2.7/download\"],\n strip_prefix = \"portable-atomic-util-0.2.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.portable-atomic-util-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__potential_utf-0.1.4\",\n sha256 = \"b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/potential_utf/0.1.4/download\"],\n strip_prefix = \"potential_utf-0.1.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.potential_utf-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__powerfmt-0.2.0\",\n sha256 = \"439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/powerfmt/0.2.0/download\"],\n strip_prefix = \"powerfmt-0.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.powerfmt-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ppv-lite86-0.2.21\",\n sha256 = \"85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ppv-lite86/0.2.21/download\"],\n strip_prefix = \"ppv-lite86-0.2.21\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ppv-lite86-0.2.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__prettyplease-0.2.37\",\n sha256 = \"479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prettyplease/0.2.37/download\"],\n strip_prefix = \"prettyplease-0.2.37\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.prettyplease-0.2.37.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__proc-macro2-1.0.106\",\n sha256 = \"8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2/1.0.106/download\"],\n strip_prefix = \"proc-macro2-1.0.106\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.proc-macro2-1.0.106.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__prometheus-0.14.0\",\n sha256 = \"3ca5326d8d0b950a9acd87e6a3f94745394f62e4dae1b1ee22b2bc0c394af43a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prometheus/0.14.0/download\"],\n strip_prefix = \"prometheus-0.14.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.prometheus-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__proptest-1.11.0\",\n sha256 = \"4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proptest/1.11.0/download\"],\n strip_prefix = \"proptest-1.11.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.proptest-1.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__prost-0.14.4\",\n sha256 = \"528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost/0.14.4/download\"],\n strip_prefix = \"prost-0.14.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.prost-0.14.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__prost-build-0.14.3\",\n sha256 = \"343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-build/0.14.3/download\"],\n strip_prefix = \"prost-build-0.14.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.prost-build-0.14.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__prost-derive-0.14.4\",\n sha256 = \"b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-derive/0.14.4/download\"],\n strip_prefix = \"prost-derive-0.14.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.prost-derive-0.14.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__prost-types-0.14.3\",\n sha256 = \"8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-types/0.14.3/download\"],\n strip_prefix = \"prost-types-0.14.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.prost-types-0.14.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__protobuf-3.7.2\",\n sha256 = \"d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/protobuf/3.7.2/download\"],\n strip_prefix = \"protobuf-3.7.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.protobuf-3.7.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__protobuf-support-3.7.2\",\n sha256 = \"3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/protobuf-support/3.7.2/download\"],\n strip_prefix = \"protobuf-support-3.7.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.protobuf-support-3.7.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ptr_meta-0.3.1\",\n sha256 = \"0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ptr_meta/0.3.1/download\"],\n strip_prefix = \"ptr_meta-0.3.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ptr_meta-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ptr_meta_derive-0.3.1\",\n sha256 = \"7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ptr_meta_derive/0.3.1/download\"],\n strip_prefix = \"ptr_meta_derive-0.3.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ptr_meta_derive-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pulldown-cmark-0.13.4\",\n sha256 = \"e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pulldown-cmark/0.13.4/download\"],\n strip_prefix = \"pulldown-cmark-0.13.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pulldown-cmark-0.13.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pulldown-cmark-to-cmark-22.0.0\",\n sha256 = \"50793def1b900256624a709439404384204a5dc3a6ec580281bfaac35e882e90\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pulldown-cmark-to-cmark/22.0.0/download\"],\n strip_prefix = \"pulldown-cmark-to-cmark-22.0.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pulldown-cmark-to-cmark-22.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__quick-error-1.2.3\",\n sha256 = \"a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quick-error/1.2.3/download\"],\n strip_prefix = \"quick-error-1.2.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.quick-error-1.2.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__quinn-0.11.11\",\n sha256 = \"0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quinn/0.11.11/download\"],\n strip_prefix = \"quinn-0.11.11\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.quinn-0.11.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__quinn-proto-0.11.15\",\n sha256 = \"4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quinn-proto/0.11.15/download\"],\n strip_prefix = \"quinn-proto-0.11.15\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.quinn-proto-0.11.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__quinn-udp-0.5.14\",\n sha256 = \"addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quinn-udp/0.5.14/download\"],\n strip_prefix = \"quinn-udp-0.5.14\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.quinn-udp-0.5.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__quote-1.0.45\",\n sha256 = \"41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quote/1.0.45/download\"],\n strip_prefix = \"quote-1.0.45\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.quote-1.0.45.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__r-efi-5.3.0\",\n sha256 = \"69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/r-efi/5.3.0/download\"],\n strip_prefix = \"r-efi-5.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.r-efi-5.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rancor-0.1.1\",\n sha256 = \"a063ea72381527c2a0561da9c80000ef822bdd7c3241b1cc1b12100e3df081ee\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rancor/0.1.1/download\"],\n strip_prefix = \"rancor-0.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rancor-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rand-0.8.5\",\n sha256 = \"34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand/0.8.5/download\"],\n strip_prefix = \"rand-0.8.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rand-0.8.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rand-0.9.3\",\n sha256 = \"7ec095654a25171c2124e9e3393a930bddbffdc939556c914957a4c3e0a87166\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand/0.9.3/download\"],\n strip_prefix = \"rand-0.9.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rand-0.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rand_chacha-0.3.1\",\n sha256 = \"e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_chacha/0.3.1/download\"],\n strip_prefix = \"rand_chacha-0.3.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rand_chacha-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rand_chacha-0.9.0\",\n sha256 = \"d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_chacha/0.9.0/download\"],\n strip_prefix = \"rand_chacha-0.9.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rand_chacha-0.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rand_core-0.6.4\",\n sha256 = \"ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_core/0.6.4/download\"],\n strip_prefix = \"rand_core-0.6.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rand_core-0.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rand_core-0.9.5\",\n sha256 = \"76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_core/0.9.5/download\"],\n strip_prefix = \"rand_core-0.9.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rand_core-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rand_xorshift-0.4.0\",\n sha256 = \"513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_xorshift/0.4.0/download\"],\n strip_prefix = \"rand_xorshift-0.4.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rand_xorshift-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rayon-1.12.0\",\n sha256 = \"fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rayon/1.12.0/download\"],\n strip_prefix = \"rayon-1.12.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rayon-1.12.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rayon-core-1.13.0\",\n sha256 = \"22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rayon-core/1.13.0/download\"],\n strip_prefix = \"rayon-core-1.13.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rayon-core-1.13.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rcgen-0.13.2\",\n sha256 = \"75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rcgen/0.13.2/download\"],\n strip_prefix = \"rcgen-0.13.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rcgen-0.13.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__redox_syscall-0.5.18\",\n sha256 = \"ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/redox_syscall/0.5.18/download\"],\n strip_prefix = \"redox_syscall-0.5.18\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.redox_syscall-0.5.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ref-cast-1.0.25\",\n sha256 = \"f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ref-cast/1.0.25/download\"],\n strip_prefix = \"ref-cast-1.0.25\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ref-cast-1.0.25.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ref-cast-impl-1.0.25\",\n sha256 = \"b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ref-cast-impl/1.0.25/download\"],\n strip_prefix = \"ref-cast-impl-1.0.25\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ref-cast-impl-1.0.25.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__regex-1.12.3\",\n sha256 = \"e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex/1.12.3/download\"],\n strip_prefix = \"regex-1.12.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.regex-1.12.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__regex-automata-0.4.14\",\n sha256 = \"6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-automata/0.4.14/download\"],\n strip_prefix = \"regex-automata-0.4.14\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.regex-automata-0.4.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__regex-syntax-0.8.10\",\n sha256 = \"dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-syntax/0.8.10/download\"],\n strip_prefix = \"regex-syntax-0.8.10\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.regex-syntax-0.8.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rend-0.5.3\",\n sha256 = \"cadadef317c2f20755a64d7fdc48f9e7178ee6b0e1f7fce33fa60f1d68a276e6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rend/0.5.3/download\"],\n strip_prefix = \"rend-0.5.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rend-0.5.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__reqwest-0.13.4\",\n sha256 = \"219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/reqwest/0.13.4/download\"],\n strip_prefix = \"reqwest-0.13.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.reqwest-0.13.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__resolv-conf-0.7.6\",\n sha256 = \"1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/resolv-conf/0.7.6/download\"],\n strip_prefix = \"resolv-conf-0.7.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.resolv-conf-0.7.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ring-0.17.14\",\n sha256 = \"a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ring/0.17.14/download\"],\n strip_prefix = \"ring-0.17.14\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ring-0.17.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rkyv-0.8.15\",\n sha256 = \"1a30e631b7f4a03dee9056b8ef6982e8ba371dd5bedb74d3ec86df4499132c70\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rkyv/0.8.15/download\"],\n strip_prefix = \"rkyv-0.8.15\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rkyv-0.8.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rkyv_derive-0.8.15\",\n sha256 = \"8100bb34c0a1d0f907143db3149e6b4eea3c33b9ee8b189720168e818303986f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rkyv_derive/0.8.15/download\"],\n strip_prefix = \"rkyv_derive-0.8.15\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rkyv_derive-0.8.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustc-hash-2.1.1\",\n sha256 = \"357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc-hash/2.1.1/download\"],\n strip_prefix = \"rustc-hash-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustc-hash-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.rustc_version-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rusticata-macros-4.1.0\",\n sha256 = \"faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rusticata-macros/4.1.0/download\"],\n strip_prefix = \"rusticata-macros-4.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rusticata-macros-4.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustix-1.1.4\",\n sha256 = \"b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustix/1.1.4/download\"],\n strip_prefix = \"rustix-1.1.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustix-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustls-0.23.41\",\n sha256 = \"6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls/0.23.41/download\"],\n strip_prefix = \"rustls-0.23.41\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustls-0.23.41.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustls-native-certs-0.8.3\",\n sha256 = \"612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-native-certs/0.8.3/download\"],\n strip_prefix = \"rustls-native-certs-0.8.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustls-native-certs-0.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustls-pemfile-2.2.0\",\n sha256 = \"dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-pemfile/2.2.0/download\"],\n strip_prefix = \"rustls-pemfile-2.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustls-pemfile-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustls-pki-types-1.14.0\",\n sha256 = \"be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-pki-types/1.14.0/download\"],\n strip_prefix = \"rustls-pki-types-1.14.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustls-pki-types-1.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustls-platform-verifier-0.6.2\",\n sha256 = \"1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-platform-verifier/0.6.2/download\"],\n strip_prefix = \"rustls-platform-verifier-0.6.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustls-platform-verifier-0.6.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustls-platform-verifier-android-0.1.1\",\n sha256 = \"f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-platform-verifier-android/0.1.1/download\"],\n strip_prefix = \"rustls-platform-verifier-android-0.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustls-platform-verifier-android-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustls-webpki-0.103.9\",\n sha256 = \"d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-webpki/0.103.9/download\"],\n strip_prefix = \"rustls-webpki-0.103.9\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustls-webpki-0.103.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustversion-1.0.22\",\n sha256 = \"b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustversion/1.0.22/download\"],\n strip_prefix = \"rustversion-1.0.22\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustversion-1.0.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rusty-fork-0.3.1\",\n sha256 = \"cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rusty-fork/0.3.1/download\"],\n strip_prefix = \"rusty-fork-0.3.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rusty-fork-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ryu-1.0.23\",\n sha256 = \"9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ryu/1.0.23/download\"],\n strip_prefix = \"ryu-1.0.23\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ryu-1.0.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__saa-5.6.0\",\n sha256 = \"68f5acb362a0e75c2a963532fa7fabf13dff81626dc494df16488d30befcbea0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/saa/5.6.0/download\"],\n strip_prefix = \"saa-5.6.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.saa-5.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__same-file-1.0.6\",\n sha256 = \"93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/same-file/1.0.6/download\"],\n strip_prefix = \"same-file-1.0.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.same-file-1.0.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__scc-3.7.1\",\n sha256 = \"5bcd12b6caff5213cc3c03123cde8c3db5e413008a63b0c0ba35e6275825ea92\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/scc/3.7.1/download\"],\n strip_prefix = \"scc-3.7.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.scc-3.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__schannel-0.1.28\",\n sha256 = \"891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schannel/0.1.28/download\"],\n strip_prefix = \"schannel-0.1.28\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.schannel-0.1.28.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__scopeguard-1.2.0\",\n sha256 = \"94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/scopeguard/1.2.0/download\"],\n strip_prefix = \"scopeguard-1.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.scopeguard-1.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__sdd-4.8.6\",\n sha256 = \"e5f0e40a01b94e35d1dacbcfbe5bfd3d31e37d9590b2e6d86a82b0e87bd4f551\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sdd/4.8.6/download\"],\n strip_prefix = \"sdd-4.8.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.sdd-4.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__secrecy-0.10.3\",\n sha256 = \"e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/secrecy/0.10.3/download\"],\n strip_prefix = \"secrecy-0.10.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.secrecy-0.10.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__security-framework-3.7.0\",\n sha256 = \"b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/security-framework/3.7.0/download\"],\n strip_prefix = \"security-framework-3.7.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.security-framework-3.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__security-framework-sys-2.17.0\",\n sha256 = \"6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/security-framework-sys/2.17.0/download\"],\n strip_prefix = \"security-framework-sys-2.17.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.security-framework-sys-2.17.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__semver-1.0.27\",\n sha256 = \"d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/semver/1.0.27/download\"],\n strip_prefix = \"semver-1.0.27\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.semver-1.0.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde-1.0.228\",\n sha256 = \"9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde/1.0.228/download\"],\n strip_prefix = \"serde-1.0.228\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde-value-0.7.0\",\n sha256 = \"f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde-value/0.7.0/download\"],\n strip_prefix = \"serde-value-0.7.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde-value-0.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_core-1.0.228\",\n sha256 = \"41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_core/1.0.228/download\"],\n strip_prefix = \"serde_core-1.0.228\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_core-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_derive-1.0.228\",\n sha256 = \"d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive/1.0.228/download\"],\n strip_prefix = \"serde_derive-1.0.228\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_derive-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_json-1.0.150\",\n sha256 = \"e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_json/1.0.150/download\"],\n strip_prefix = \"serde_json-1.0.150\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_json-1.0.150.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_path_to_error-0.1.20\",\n sha256 = \"10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_path_to_error/0.1.20/download\"],\n strip_prefix = \"serde_path_to_error-0.1.20\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_path_to_error-0.1.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_urlencoded-0.7.1\",\n sha256 = \"d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_urlencoded/0.7.1/download\"],\n strip_prefix = \"serde_urlencoded-0.7.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_urlencoded-0.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_yaml-0.9.34-deprecated\",\n sha256 = \"6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_yaml/0.9.34+deprecated/download\"],\n strip_prefix = \"serde_yaml-0.9.34+deprecated\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_yaml-0.9.34+deprecated.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_yaml_ng-0.10.0\",\n sha256 = \"7b4db627b98b36d4203a7b458cf3573730f2bb591b28871d916dfa9efabfd41f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_yaml_ng/0.10.0/download\"],\n strip_prefix = \"serde_yaml_ng-0.10.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_yaml_ng-0.10.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__sha2-0.10.9\",\n sha256 = \"a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sha2/0.10.9/download\"],\n strip_prefix = \"sha2-0.10.9\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.sha2-0.10.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__sharded-slab-0.1.7\",\n sha256 = \"f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sharded-slab/0.1.7/download\"],\n strip_prefix = \"sharded-slab-0.1.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.sharded-slab-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__shlex-1.3.0\",\n sha256 = \"0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/shlex/1.3.0/download\"],\n strip_prefix = \"shlex-1.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.shlex-1.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__signal-hook-registry-1.4.8\",\n sha256 = \"c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/signal-hook-registry/1.4.8/download\"],\n strip_prefix = \"signal-hook-registry-1.4.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.signal-hook-registry-1.4.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__simdutf8-0.1.5\",\n sha256 = \"e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/simdutf8/0.1.5/download\"],\n strip_prefix = \"simdutf8-0.1.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.simdutf8-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__siphasher-1.0.2\",\n sha256 = \"b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/siphasher/1.0.2/download\"],\n strip_prefix = \"siphasher-1.0.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.siphasher-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.slab-0.4.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__smallvec-1.15.1\",\n sha256 = \"67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/smallvec/1.15.1/download\"],\n strip_prefix = \"smallvec-1.15.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.smallvec-1.15.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__socket2-0.5.10\",\n sha256 = \"e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/socket2/0.5.10/download\"],\n strip_prefix = \"socket2-0.5.10\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.socket2-0.5.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__socket2-0.6.4\",\n sha256 = \"52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/socket2/0.6.4/download\"],\n strip_prefix = \"socket2-0.6.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.socket2-0.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__sonic-number-0.1.1\",\n sha256 = \"5661364b38abad49cf1ade6631fcc35d2ccf882a7d68616b4228b7717feb5fba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sonic-number/0.1.1/download\"],\n strip_prefix = \"sonic-number-0.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.sonic-number-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__sonic-rs-0.5.8\",\n sha256 = \"d971cc77a245ccf1756dbd1a87c3e7f709c0191464096510d43eec056d0f2c4f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sonic-rs/0.5.8/download\"],\n strip_prefix = \"sonic-rs-0.5.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.sonic-rs-0.5.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__sonic-simd-0.1.3\",\n sha256 = \"e9f944718c33623919878cf74b4c9361eb3024f635733922b26722b14cd3f8cc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sonic-simd/0.1.3/download\"],\n strip_prefix = \"sonic-simd-0.1.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.sonic-simd-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__spin-0.9.8\",\n sha256 = \"6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/spin/0.9.8/download\"],\n strip_prefix = \"spin-0.9.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.spin-0.9.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.stable_deref_trait-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__strsim-0.11.1\",\n sha256 = \"7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/strsim/0.11.1/download\"],\n strip_prefix = \"strsim-0.11.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.strsim-0.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.subtle-2.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__syn-2.0.117\",\n sha256 = \"e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/2.0.117/download\"],\n strip_prefix = \"syn-2.0.117\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.syn-2.0.117.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__sync_wrapper-1.0.2\",\n sha256 = \"0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sync_wrapper/1.0.2/download\"],\n strip_prefix = \"sync_wrapper-1.0.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.sync_wrapper-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__synstructure-0.13.2\",\n sha256 = \"728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/synstructure/0.13.2/download\"],\n strip_prefix = \"synstructure-0.13.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.synstructure-0.13.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tempfile-3.27.0\",\n sha256 = \"32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tempfile/3.27.0/download\"],\n strip_prefix = \"tempfile-3.27.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tempfile-3.27.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__thiserror-1.0.69\",\n sha256 = \"b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror/1.0.69/download\"],\n strip_prefix = \"thiserror-1.0.69\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.thiserror-1.0.69.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__thiserror-2.0.18\",\n sha256 = \"4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror/2.0.18/download\"],\n strip_prefix = \"thiserror-2.0.18\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.thiserror-2.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__thiserror-impl-1.0.69\",\n sha256 = \"4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror-impl/1.0.69/download\"],\n strip_prefix = \"thiserror-impl-1.0.69\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.thiserror-impl-1.0.69.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__thiserror-impl-2.0.18\",\n sha256 = \"ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror-impl/2.0.18/download\"],\n strip_prefix = \"thiserror-impl-2.0.18\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.thiserror-impl-2.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__thread_local-1.1.9\",\n sha256 = \"f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thread_local/1.1.9/download\"],\n strip_prefix = \"thread_local-1.1.9\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.thread_local-1.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__time-0.3.47\",\n sha256 = \"743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time/0.3.47/download\"],\n strip_prefix = \"time-0.3.47\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.time-0.3.47.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__time-core-0.1.8\",\n sha256 = \"7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-core/0.1.8/download\"],\n strip_prefix = \"time-core-0.1.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.time-core-0.1.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__time-macros-0.2.27\",\n sha256 = \"2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-macros/0.2.27/download\"],\n strip_prefix = \"time-macros-0.2.27\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.time-macros-0.2.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tinystr-0.8.2\",\n sha256 = \"42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tinystr/0.8.2/download\"],\n strip_prefix = \"tinystr-0.8.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tinystr-0.8.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tinytemplate-1.2.1\",\n sha256 = \"be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tinytemplate/1.2.1/download\"],\n strip_prefix = \"tinytemplate-1.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tinytemplate-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tinyvec-1.10.0\",\n sha256 = \"bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tinyvec/1.10.0/download\"],\n strip_prefix = \"tinyvec-1.10.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tinyvec-1.10.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tinyvec_macros-0.1.1\",\n sha256 = \"1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tinyvec_macros/0.1.1/download\"],\n strip_prefix = \"tinyvec_macros-0.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tinyvec_macros-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tokio-1.52.3\",\n sha256 = \"8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio/1.52.3/download\"],\n strip_prefix = \"tokio-1.52.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tokio-1.52.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tokio-macros-2.7.0\",\n sha256 = \"385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-macros/2.7.0/download\"],\n strip_prefix = \"tokio-macros-2.7.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tokio-macros-2.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tokio-rustls-0.26.4\",\n sha256 = \"1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-rustls/0.26.4/download\"],\n strip_prefix = \"tokio-rustls-0.26.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tokio-rustls-0.26.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tokio-stream-0.1.18\",\n sha256 = \"32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-stream/0.1.18/download\"],\n strip_prefix = \"tokio-stream-0.1.18\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tokio-stream-0.1.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tokio-util-0.7.18\",\n sha256 = \"9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-util/0.7.18/download\"],\n strip_prefix = \"tokio-util-0.7.18\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tokio-util-0.7.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tonic-0.14.6\",\n sha256 = \"ac2a5518c70fa84342385732db33fb3f44bc4cc748936eb5833d2df34d6445ef\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tonic/0.14.6/download\"],\n strip_prefix = \"tonic-0.14.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tonic-0.14.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tonic-build-0.14.6\",\n sha256 = \"c68f61875ac5293cf72e6c8cf0158086428c82c37229e98c840878f1706b0322\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tonic-build/0.14.6/download\"],\n strip_prefix = \"tonic-build-0.14.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tonic-build-0.14.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tonic-prost-0.14.6\",\n sha256 = \"50849f68853be452acf590cde0b146665b8d507b3b8af17261df47e02c209ea0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tonic-prost/0.14.6/download\"],\n strip_prefix = \"tonic-prost-0.14.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tonic-prost-0.14.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tonic-prost-build-0.14.6\",\n sha256 = \"654e5643eff75d7f8c99197ce1440ed19a3474eada74c12bbac488b2cafdae27\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tonic-prost-build/0.14.6/download\"],\n strip_prefix = \"tonic-prost-build-0.14.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tonic-prost-build-0.14.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tonic-types-0.14.6\",\n sha256 = \"73ab1b02061f83d519bba3caa167f88f261ef05720ab8ebc954ade70de3348e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tonic-types/0.14.6/download\"],\n strip_prefix = \"tonic-types-0.14.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tonic-types-0.14.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tower-0.5.3\",\n sha256 = \"ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower/0.5.3/download\"],\n strip_prefix = \"tower-0.5.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tower-0.5.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tower-http-0.6.8\",\n sha256 = \"d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-http/0.6.8/download\"],\n strip_prefix = \"tower-http-0.6.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tower-http-0.6.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tower-layer-0.3.3\",\n sha256 = \"121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-layer/0.3.3/download\"],\n strip_prefix = \"tower-layer-0.3.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tower-layer-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tower-service-0.3.3\",\n sha256 = \"8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-service/0.3.3/download\"],\n strip_prefix = \"tower-service-0.3.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tower-service-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tracing-0.1.44\",\n sha256 = \"63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing/0.1.44/download\"],\n strip_prefix = \"tracing-0.1.44\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tracing-0.1.44.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tracing-attributes-0.1.31\",\n sha256 = \"7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-attributes/0.1.31/download\"],\n strip_prefix = \"tracing-attributes-0.1.31\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tracing-attributes-0.1.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tracing-core-0.1.36\",\n sha256 = \"db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-core/0.1.36/download\"],\n strip_prefix = \"tracing-core-0.1.36\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tracing-core-0.1.36.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tracing-log-0.2.0\",\n sha256 = \"ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-log/0.2.0/download\"],\n strip_prefix = \"tracing-log-0.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tracing-log-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tracing-opentelemetry-0.33.0\",\n sha256 = \"adbc64cba7137545b8044cb1fe9814f7aacf3c6b5f9b45be8bb5db538befdb26\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-opentelemetry/0.33.0/download\"],\n strip_prefix = \"tracing-opentelemetry-0.33.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tracing-opentelemetry-0.33.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tracing-subscriber-0.3.23\",\n sha256 = \"cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-subscriber/0.3.23/download\"],\n strip_prefix = \"tracing-subscriber-0.3.23\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tracing-subscriber-0.3.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__try-lock-0.2.5\",\n sha256 = \"e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/try-lock/0.2.5/download\"],\n strip_prefix = \"try-lock-0.2.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.try-lock-0.2.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__typenum-1.20.0\",\n sha256 = \"40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typenum/1.20.0/download\"],\n strip_prefix = \"typenum-1.20.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.typenum-1.20.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.ucd-trie-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__unarray-0.1.4\",\n sha256 = \"eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unarray/0.1.4/download\"],\n strip_prefix = \"unarray-0.1.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.unarray-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__unicase-2.9.0\",\n sha256 = \"dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicase/2.9.0/download\"],\n strip_prefix = \"unicase-2.9.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.unicase-2.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__unicode-ident-1.0.24\",\n sha256 = \"e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-ident/1.0.24/download\"],\n strip_prefix = \"unicode-ident-1.0.24\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.unicode-ident-1.0.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__unicode-xid-0.2.6\",\n sha256 = \"ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-xid/0.2.6/download\"],\n strip_prefix = \"unicode-xid-0.2.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.unicode-xid-0.2.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__unsafe-libyaml-0.2.11\",\n sha256 = \"673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unsafe-libyaml/0.2.11/download\"],\n strip_prefix = \"unsafe-libyaml-0.2.11\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.unsafe-libyaml-0.2.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__untrusted-0.9.0\",\n sha256 = \"8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/untrusted/0.9.0/download\"],\n strip_prefix = \"untrusted-0.9.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.untrusted-0.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.url-2.5.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.utf8_iter-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__utf8parse-0.2.2\",\n sha256 = \"06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/utf8parse/0.2.2/download\"],\n strip_prefix = \"utf8parse-0.2.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.utf8parse-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__uuid-1.22.0\",\n sha256 = \"a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/uuid/1.22.0/download\"],\n strip_prefix = \"uuid-1.22.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.uuid-1.22.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__valuable-0.1.1\",\n sha256 = \"ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/valuable/0.1.1/download\"],\n strip_prefix = \"valuable-0.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.valuable-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.vcpkg-0.2.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__version_check-0.9.5\",\n sha256 = \"0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/version_check/0.9.5/download\"],\n strip_prefix = \"version_check-0.9.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.version_check-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wait-timeout-0.2.1\",\n sha256 = \"09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wait-timeout/0.2.1/download\"],\n strip_prefix = \"wait-timeout-0.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wait-timeout-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__walkdir-2.5.0\",\n sha256 = \"29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/walkdir/2.5.0/download\"],\n strip_prefix = \"walkdir-2.5.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.walkdir-2.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__want-0.3.1\",\n sha256 = \"bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/want/0.3.1/download\"],\n strip_prefix = \"want-0.3.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.want-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasi-0.11.1-wasi-snapshot-preview1\",\n sha256 = \"ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasi/0.11.1+wasi-snapshot-preview1/download\"],\n strip_prefix = \"wasi-0.11.1+wasi-snapshot-preview1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasip2-1.0.2-wasi-0.2.9\",\n sha256 = \"9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasip2/1.0.2+wasi-0.2.9/download\"],\n strip_prefix = \"wasip2-1.0.2+wasi-0.2.9\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasip2-1.0.2+wasi-0.2.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasip3-0.4.0-wasi-0.3.0-rc-2026-01-06\",\n sha256 = \"5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasip3/0.4.0+wasi-0.3.0-rc-2026-01-06/download\"],\n strip_prefix = \"wasip3-0.4.0+wasi-0.3.0-rc-2026-01-06\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasip3-0.4.0+wasi-0.3.0-rc-2026-01-06.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-bindgen-0.2.113\",\n sha256 = \"60722a937f594b7fde9adb894d7c092fc1bb6612897c46368d18e7a20208eff2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen/0.2.113/download\"],\n strip_prefix = \"wasm-bindgen-0.2.113\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-bindgen-0.2.113.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-bindgen-futures-0.4.63\",\n sha256 = \"8a89f4650b770e4521aa6573724e2aed4704372151bd0de9d16a3bbabb87441a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-futures/0.4.63/download\"],\n strip_prefix = \"wasm-bindgen-futures-0.4.63\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-bindgen-futures-0.4.63.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-bindgen-macro-0.2.113\",\n sha256 = \"0fac8c6395094b6b91c4af293f4c79371c163f9a6f56184d2c9a85f5a95f3950\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro/0.2.113/download\"],\n strip_prefix = \"wasm-bindgen-macro-0.2.113\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-bindgen-macro-0.2.113.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-bindgen-macro-support-0.2.113\",\n sha256 = \"ab3fabce6159dc20728033842636887e4877688ae94382766e00b180abac9d60\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.113/download\"],\n strip_prefix = \"wasm-bindgen-macro-support-0.2.113\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-bindgen-macro-support-0.2.113.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-bindgen-shared-0.2.113\",\n sha256 = \"de0e091bdb824da87dc01d967388880d017a0a9bc4f3bdc0d86ee9f9336e3bb5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-shared/0.2.113/download\"],\n strip_prefix = \"wasm-bindgen-shared-0.2.113\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-bindgen-shared-0.2.113.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-encoder-0.244.0\",\n sha256 = \"990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-encoder/0.244.0/download\"],\n strip_prefix = \"wasm-encoder-0.244.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-encoder-0.244.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-metadata-0.244.0\",\n sha256 = \"bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-metadata/0.244.0/download\"],\n strip_prefix = \"wasm-metadata-0.244.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-metadata-0.244.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-streams-0.5.0\",\n sha256 = \"9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-streams/0.5.0/download\"],\n strip_prefix = \"wasm-streams-0.5.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-streams-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasmparser-0.244.0\",\n sha256 = \"47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasmparser/0.244.0/download\"],\n strip_prefix = \"wasmparser-0.244.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasmparser-0.244.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__web-sys-0.3.90\",\n sha256 = \"705eceb4ce901230f8625bd1d665128056ccbe4b7408faa625eec1ba80f59a97\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/web-sys/0.3.90/download\"],\n strip_prefix = \"web-sys-0.3.90\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.web-sys-0.3.90.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__web-time-1.1.0\",\n sha256 = \"5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/web-time/1.1.0/download\"],\n strip_prefix = \"web-time-1.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.web-time-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__webpki-root-certs-1.0.6\",\n sha256 = \"804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/webpki-root-certs/1.0.6/download\"],\n strip_prefix = \"webpki-root-certs-1.0.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.webpki-root-certs-1.0.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__webpki-roots-1.0.7\",\n sha256 = \"52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/webpki-roots/1.0.7/download\"],\n strip_prefix = \"webpki-roots-1.0.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.webpki-roots-1.0.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__widestring-1.2.1\",\n sha256 = \"72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/widestring/1.2.1/download\"],\n strip_prefix = \"widestring-1.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.widestring-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__winapi-util-0.1.11\",\n sha256 = \"c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi-util/0.1.11/download\"],\n strip_prefix = \"winapi-util-0.1.11\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.winapi-util-0.1.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.windows-link-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-sys-0.45.0\",\n sha256 = \"75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.45.0/download\"],\n strip_prefix = \"windows-sys-0.45.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-sys-0.45.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-sys-0.48.0\",\n sha256 = \"677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.48.0/download\"],\n strip_prefix = \"windows-sys-0.48.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-sys-0.48.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-sys-0.52.0\",\n sha256 = \"282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.52.0/download\"],\n strip_prefix = \"windows-sys-0.52.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-sys-0.52.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-sys-0.60.2\",\n sha256 = \"f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.60.2/download\"],\n strip_prefix = \"windows-sys-0.60.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-sys-0.60.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.windows-sys-0.61.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-targets-0.42.2\",\n sha256 = \"8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.42.2/download\"],\n strip_prefix = \"windows-targets-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-targets-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-targets-0.48.5\",\n sha256 = \"9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.48.5/download\"],\n strip_prefix = \"windows-targets-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-targets-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-targets-0.52.6\",\n sha256 = \"9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.52.6/download\"],\n strip_prefix = \"windows-targets-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-targets-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-targets-0.53.5\",\n sha256 = \"4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.53.5/download\"],\n strip_prefix = \"windows-targets-0.53.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-targets-0.53.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_gnullvm-0.42.2\",\n sha256 = \"597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.42.2/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_gnullvm-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_gnullvm-0.48.5\",\n sha256 = \"2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.48.5/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_gnullvm-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_gnullvm-0.52.6\",\n sha256 = \"32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_gnullvm-0.53.1\",\n sha256 = \"a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.53.1/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_gnullvm-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_msvc-0.42.2\",\n sha256 = \"e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.42.2/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_msvc-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_msvc-0.48.5\",\n sha256 = \"dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.48.5/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_msvc-0.52.6\",\n sha256 = \"09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_msvc-0.53.1\",\n sha256 = \"b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.53.1/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_msvc-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_gnu-0.42.2\",\n sha256 = \"c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.42.2/download\"],\n strip_prefix = \"windows_i686_gnu-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_gnu-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_gnu-0.48.5\",\n sha256 = \"a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.48.5/download\"],\n strip_prefix = \"windows_i686_gnu-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_gnu-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_gnu-0.52.6\",\n sha256 = \"8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnu-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_gnu-0.53.1\",\n sha256 = \"960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.53.1/download\"],\n strip_prefix = \"windows_i686_gnu-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_gnu-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_gnullvm-0.52.6\",\n sha256 = \"0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnullvm-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_gnullvm-0.53.1\",\n sha256 = \"fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnullvm/0.53.1/download\"],\n strip_prefix = \"windows_i686_gnullvm-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_gnullvm-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_msvc-0.42.2\",\n sha256 = \"44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.42.2/download\"],\n strip_prefix = \"windows_i686_msvc-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_msvc-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_msvc-0.48.5\",\n sha256 = \"8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.48.5/download\"],\n strip_prefix = \"windows_i686_msvc-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_msvc-0.52.6\",\n sha256 = \"240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.52.6/download\"],\n strip_prefix = \"windows_i686_msvc-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_msvc-0.53.1\",\n sha256 = \"1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.53.1/download\"],\n strip_prefix = \"windows_i686_msvc-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_msvc-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnu-0.42.2\",\n sha256 = \"8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.42.2/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnu-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnu-0.48.5\",\n sha256 = \"53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnu-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnu-0.52.6\",\n sha256 = \"147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnu-0.53.1\",\n sha256 = \"9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.53.1/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnu-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnullvm-0.42.2\",\n sha256 = \"26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.42.2/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnullvm-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnullvm-0.48.5\",\n sha256 = \"0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnullvm-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnullvm-0.52.6\",\n sha256 = \"24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnullvm-0.53.1\",\n sha256 = \"0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.53.1/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnullvm-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_msvc-0.42.2\",\n sha256 = \"9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.42.2/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_msvc-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_msvc-0.48.5\",\n sha256 = \"ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_msvc-0.52.6\",\n sha256 = \"589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_msvc-0.53.1\",\n sha256 = \"d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.53.1/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_msvc-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__winreg-0.50.0\",\n sha256 = \"524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winreg/0.50.0/download\"],\n strip_prefix = \"winreg-0.50.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.winreg-0.50.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wit-bindgen-0.51.0\",\n sha256 = \"d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen/0.51.0/download\"],\n strip_prefix = \"wit-bindgen-0.51.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wit-bindgen-0.51.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wit-bindgen-core-0.51.0\",\n sha256 = \"ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen-core/0.51.0/download\"],\n strip_prefix = \"wit-bindgen-core-0.51.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wit-bindgen-core-0.51.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wit-bindgen-rust-0.51.0\",\n sha256 = \"b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen-rust/0.51.0/download\"],\n strip_prefix = \"wit-bindgen-rust-0.51.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wit-bindgen-rust-0.51.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wit-bindgen-rust-macro-0.51.0\",\n sha256 = \"0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen-rust-macro/0.51.0/download\"],\n strip_prefix = \"wit-bindgen-rust-macro-0.51.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wit-bindgen-rust-macro-0.51.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wit-component-0.244.0\",\n sha256 = \"9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-component/0.244.0/download\"],\n strip_prefix = \"wit-component-0.244.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wit-component-0.244.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wit-parser-0.244.0\",\n sha256 = \"ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-parser/0.244.0/download\"],\n strip_prefix = \"wit-parser-0.244.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wit-parser-0.244.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__writeable-0.6.2\",\n sha256 = \"9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/writeable/0.6.2/download\"],\n strip_prefix = \"writeable-0.6.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.writeable-0.6.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__x509-parser-0.18.1\",\n sha256 = \"d43b0f71ce057da06bc0851b23ee24f3f86190b07203dd8f567d0b706a185202\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/x509-parser/0.18.1/download\"],\n strip_prefix = \"x509-parser-0.18.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.x509-parser-0.18.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__xxhash-rust-0.8.16\",\n sha256 = \"4d93c89cdc2d3a63c3ec48ffe926931bdc069eafa8e4402fe6d8f790c9d1e576\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/xxhash-rust/0.8.16/download\"],\n strip_prefix = \"xxhash-rust-0.8.16\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.xxhash-rust-0.8.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__yasna-0.5.2\",\n sha256 = \"e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yasna/0.5.2/download\"],\n strip_prefix = \"yasna-0.5.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.yasna-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__yoke-0.8.1\",\n sha256 = \"72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke/0.8.1/download\"],\n strip_prefix = \"yoke-0.8.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.yoke-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__yoke-derive-0.8.1\",\n sha256 = \"b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke-derive/0.8.1/download\"],\n strip_prefix = \"yoke-derive-0.8.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.yoke-derive-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zerocopy-0.8.39\",\n sha256 = \"db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy/0.8.39/download\"],\n strip_prefix = \"zerocopy-0.8.39\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zerocopy-0.8.39.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zerocopy-derive-0.8.39\",\n sha256 = \"4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy-derive/0.8.39/download\"],\n strip_prefix = \"zerocopy-derive-0.8.39\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zerocopy-derive-0.8.39.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zerofrom-0.1.6\",\n sha256 = \"50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom/0.1.6/download\"],\n strip_prefix = \"zerofrom-0.1.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zerofrom-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zerofrom-derive-0.1.6\",\n sha256 = \"d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom-derive/0.1.6/download\"],\n strip_prefix = \"zerofrom-derive-0.1.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zerofrom-derive-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zeroize-1.8.2\",\n sha256 = \"b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zeroize/1.8.2/download\"],\n strip_prefix = \"zeroize-1.8.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zeroize-1.8.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zerotrie-0.2.3\",\n sha256 = \"2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerotrie/0.2.3/download\"],\n strip_prefix = \"zerotrie-0.2.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zerotrie-0.2.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zerovec-0.11.5\",\n sha256 = \"6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec/0.11.5/download\"],\n strip_prefix = \"zerovec-0.11.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zerovec-0.11.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zerovec-derive-0.11.2\",\n sha256 = \"eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec-derive/0.11.2/download\"],\n strip_prefix = \"zerovec-derive-0.11.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zerovec-derive-0.11.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zmij-1.0.21\",\n sha256 = \"b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zmij/1.0.21/download\"],\n strip_prefix = \"zmij-1.0.21\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zmij-1.0.21.bazel\"),\n )\n\n return [\n struct(repo=\"stargate_crates__anyhow-1.0.103\", is_dev_dep = False),\n struct(repo=\"stargate_crates__async-stream-0.3.6\", is_dev_dep = False),\n struct(repo=\"stargate_crates__async-trait-0.1.89\", is_dev_dep = False),\n struct(repo=\"stargate_crates__axum-0.8.9\", is_dev_dep = False),\n struct(repo=\"stargate_crates__built-0.8.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__bytes-1.12.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__capnp-0.23.2\", is_dev_dep = False),\n struct(repo=\"stargate_crates__capnp-futures-0.23.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__clap-4.6.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__flume-0.12.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__futures-0.3.32\", is_dev_dep = False),\n struct(repo=\"stargate_crates__git2-0.20.4\", is_dev_dep = False),\n struct(repo=\"stargate_crates__h3-0.0.8\", is_dev_dep = False),\n struct(repo=\"stargate_crates__h3-quinn-0.0.10\", is_dev_dep = False),\n struct(repo=\"stargate_crates__hickory-resolver-0.24.4\", is_dev_dep = False),\n struct(repo=\"stargate_crates__http-1.4.2\", is_dev_dep = False),\n struct(repo=\"stargate_crates__httpdate-1.0.3\", is_dev_dep = False),\n struct(repo=\"stargate_crates__indexmap-2.14.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__k8s-openapi-0.27.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__kube-3.1.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__memchr-2.8.3\", is_dev_dep = False),\n struct(repo=\"stargate_crates__opentelemetry-0.32.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__opentelemetry-http-0.32.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__opentelemetry-otlp-0.32.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__opentelemetry_sdk-0.32.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__parking_lot-0.12.5\", is_dev_dep = False),\n struct(repo=\"stargate_crates__prometheus-0.14.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__prost-0.14.4\", is_dev_dep = False),\n struct(repo=\"stargate_crates__quinn-0.11.11\", is_dev_dep = False),\n struct(repo=\"stargate_crates__rand-0.9.3\", is_dev_dep = False),\n struct(repo=\"stargate_crates__rcgen-0.13.2\", is_dev_dep = False),\n struct(repo=\"stargate_crates__reqwest-0.13.4\", is_dev_dep = False),\n struct(repo=\"stargate_crates__rustls-0.23.41\", is_dev_dep = False),\n struct(repo=\"stargate_crates__rustls-pemfile-2.2.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__rustls-webpki-0.103.9\", is_dev_dep = False),\n struct(repo=\"stargate_crates__scc-3.7.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__serde-1.0.228\", is_dev_dep = False),\n struct(repo=\"stargate_crates__serde_json-1.0.150\", is_dev_dep = False),\n struct(repo=\"stargate_crates__serde_yaml_ng-0.10.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__sonic-rs-0.5.8\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tempfile-3.27.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__thiserror-2.0.18\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tokio-1.52.3\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tokio-stream-0.1.18\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tokio-util-0.7.18\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tonic-0.14.6\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tonic-prost-0.14.6\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tower-0.5.3\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tracing-0.1.44\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tracing-opentelemetry-0.33.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tracing-subscriber-0.3.23\", is_dev_dep = False),\n struct(repo=\"stargate_crates__url-2.5.8\", is_dev_dep = False),\n struct(repo=\"stargate_crates__uuid-1.22.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__x509-parser-0.18.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__xxhash-rust-0.8.16\", is_dev_dep = False),\n struct(repo = \"stargate_crates__capnpc-0.23.3\", is_dev_dep = True),\n struct(repo = \"stargate_crates__criterion-0.5.1\", is_dev_dep = True),\n struct(repo = \"stargate_crates__hyper-util-0.1.20\", is_dev_dep = True),\n struct(repo = \"stargate_crates__proptest-1.11.0\", is_dev_dep = True),\n struct(repo = \"stargate_crates__tonic-prost-build-0.14.6\", 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 'nvcf'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\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\", \"new_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/private:local_crate_mirror.bzl\", \"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 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 AND ALIASES\n###############################################################################\n\n_NORMAL_DEPENDENCIES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"async-stream\": Label(\"@stargate_crates//:async-stream-0.3.6\"),\n \"axum\": Label(\"@stargate_crates//:axum-0.8.9\"),\n \"clap\": Label(\"@stargate_crates//:clap-4.6.1\"),\n \"serde\": Label(\"@stargate_crates//:serde-1.0.228\"),\n \"serde_json\": Label(\"@stargate_crates//:serde_json-1.0.150\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n \"tracing-subscriber\": Label(\"@stargate_crates//:tracing-subscriber-0.3.23\"),\n },\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"clap\": Label(\"@stargate_crates//:clap-4.6.1\"),\n \"flume\": Label(\"@stargate_crates//:flume-0.12.0\"),\n \"reqwest\": Label(\"@stargate_crates//:reqwest-0.13.4\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"rustls-pemfile\": Label(\"@stargate_crates//:rustls-pemfile-2.2.0\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n },\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"async-stream\": Label(\"@stargate_crates//:async-stream-0.3.6\"),\n \"axum\": Label(\"@stargate_crates//:axum-0.8.9\"),\n \"bytes\": Label(\"@stargate_crates//:bytes-1.12.1\"),\n \"flume\": Label(\"@stargate_crates//:flume-0.12.0\"),\n \"futures\": Label(\"@stargate_crates//:futures-0.3.32\"),\n \"h3\": Label(\"@stargate_crates//:h3-0.0.8\"),\n \"h3-quinn\": Label(\"@stargate_crates//:h3-quinn-0.0.10\"),\n \"http\": Label(\"@stargate_crates//:http-1.4.2\"),\n \"httpdate\": Label(\"@stargate_crates//:httpdate-1.0.3\"),\n \"indexmap\": Label(\"@stargate_crates//:indexmap-2.14.0\"),\n \"memchr\": Label(\"@stargate_crates//:memchr-2.8.3\"),\n \"opentelemetry\": Label(\"@stargate_crates//:opentelemetry-0.32.0\"),\n \"parking_lot\": Label(\"@stargate_crates//:parking_lot-0.12.5\"),\n \"prometheus\": Label(\"@stargate_crates//:prometheus-0.14.0\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"reqwest\": Label(\"@stargate_crates//:reqwest-0.13.4\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"serde\": Label(\"@stargate_crates//:serde-1.0.228\"),\n \"serde_json\": Label(\"@stargate_crates//:serde_json-1.0.150\"),\n \"sonic-rs\": Label(\"@stargate_crates//:sonic-rs-0.5.8\"),\n \"thiserror\": Label(\"@stargate_crates//:thiserror-2.0.18\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tokio-stream\": Label(\"@stargate_crates//:tokio-stream-0.1.18\"),\n \"tokio-util\": Label(\"@stargate_crates//:tokio-util-0.7.18\"),\n \"tonic\": Label(\"@stargate_crates//:tonic-0.14.6\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n \"tracing-opentelemetry\": Label(\"@stargate_crates//:tracing-opentelemetry-0.33.0\"),\n \"url\": Label(\"@stargate_crates//:url-2.5.8\"),\n \"uuid\": Label(\"@stargate_crates//:uuid-1.22.0\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"async-stream\": Label(\"@stargate_crates//:async-stream-0.3.6\"),\n \"axum\": Label(\"@stargate_crates//:axum-0.8.9\"),\n \"bytes\": Label(\"@stargate_crates//:bytes-1.12.1\"),\n \"clap\": Label(\"@stargate_crates//:clap-4.6.1\"),\n \"flume\": Label(\"@stargate_crates//:flume-0.12.0\"),\n \"futures\": Label(\"@stargate_crates//:futures-0.3.32\"),\n \"h3\": Label(\"@stargate_crates//:h3-0.0.8\"),\n \"h3-quinn\": Label(\"@stargate_crates//:h3-quinn-0.0.10\"),\n \"hickory-resolver\": Label(\"@stargate_crates//:hickory-resolver-0.24.4\"),\n \"http\": Label(\"@stargate_crates//:http-1.4.2\"),\n \"opentelemetry\": Label(\"@stargate_crates//:opentelemetry-0.32.0\"),\n \"parking_lot\": Label(\"@stargate_crates//:parking_lot-0.12.5\"),\n \"prometheus\": Label(\"@stargate_crates//:prometheus-0.14.0\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"rand\": Label(\"@stargate_crates//:rand-0.9.3\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"scc\": Label(\"@stargate_crates//:scc-3.7.1\"),\n \"serde\": Label(\"@stargate_crates//:serde-1.0.228\"),\n \"serde_json\": Label(\"@stargate_crates//:serde_json-1.0.150\"),\n \"serde_with\": Label(\"@stargate_crates//:serde_with-3.22.0\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tokio-stream\": Label(\"@stargate_crates//:tokio-stream-0.1.18\"),\n \"tokio-util\": Label(\"@stargate_crates//:tokio-util-0.7.18\"),\n \"toml\": Label(\"@stargate_crates//:toml-1.1.4+spec-1.1.0\"),\n \"tonic\": Label(\"@stargate_crates//:tonic-0.14.6\"),\n \"tower\": Label(\"@stargate_crates//:tower-0.5.3\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n \"tracing-opentelemetry\": Label(\"@stargate_crates//:tracing-opentelemetry-0.33.0\"),\n \"tracing-subscriber\": Label(\"@stargate_crates//:tracing-subscriber-0.3.23\"),\n \"url\": Label(\"@stargate_crates//:url-2.5.8\"),\n \"xxhash-rust\": Label(\"@stargate_crates//:xxhash-rust-0.8.16\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"reqwest\": Label(\"@stargate_crates//:reqwest-0.13.4\"),\n \"sonic-rs\": Label(\"@stargate_crates//:sonic-rs-0.5.8\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"bytes\": Label(\"@stargate_crates//:bytes-1.12.1\"),\n \"clap\": Label(\"@stargate_crates//:clap-4.6.1\"),\n \"futures\": Label(\"@stargate_crates//:futures-0.3.32\"),\n \"h3\": Label(\"@stargate_crates//:h3-0.0.8\"),\n \"h3-quinn\": Label(\"@stargate_crates//:h3-quinn-0.0.10\"),\n \"http\": Label(\"@stargate_crates//:http-1.4.2\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"rand\": Label(\"@stargate_crates//:rand-0.9.3\"),\n \"reqwest\": Label(\"@stargate_crates//:reqwest-0.13.4\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"serde\": Label(\"@stargate_crates//:serde-1.0.228\"),\n \"serde_json\": Label(\"@stargate_crates//:serde_json-1.0.150\"),\n \"serde_yaml_ng\": Label(\"@stargate_crates//:serde_yaml_ng-0.10.0\"),\n \"tempfile\": Label(\"@stargate_crates//:tempfile-3.27.0\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"futures\": Label(\"@stargate_crates//:futures-0.3.32\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"async-stream\": Label(\"@stargate_crates//:async-stream-0.3.6\"),\n \"axum\": Label(\"@stargate_crates//:axum-0.8.9\"),\n \"bytes\": Label(\"@stargate_crates//:bytes-1.12.1\"),\n \"clap\": Label(\"@stargate_crates//:clap-4.6.1\"),\n \"futures\": Label(\"@stargate_crates//:futures-0.3.32\"),\n \"h3\": Label(\"@stargate_crates//:h3-0.0.8\"),\n \"h3-quinn\": Label(\"@stargate_crates//:h3-quinn-0.0.10\"),\n \"http\": Label(\"@stargate_crates//:http-1.4.2\"),\n \"k8s-openapi\": Label(\"@stargate_crates//:k8s-openapi-0.27.1\"),\n \"kube\": Label(\"@stargate_crates//:kube-3.1.0\"),\n \"prometheus\": Label(\"@stargate_crates//:prometheus-0.14.0\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tokio-stream\": Label(\"@stargate_crates//:tokio-stream-0.1.18\"),\n \"tokio-util\": Label(\"@stargate_crates//:tokio-util-0.7.18\"),\n \"tonic\": Label(\"@stargate_crates//:tonic-0.14.6\"),\n \"tower\": Label(\"@stargate_crates//:tower-0.5.3\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n \"tracing-subscriber\": Label(\"@stargate_crates//:tracing-subscriber-0.3.23\"),\n },\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n _COMMON_CONDITION: {\n \"prost\": Label(\"@stargate_crates//:prost-0.14.4\"),\n \"serde\": Label(\"@stargate_crates//:serde-1.0.228\"),\n \"tonic\": Label(\"@stargate_crates//:tonic-0.14.6\"),\n \"tonic-prost\": Label(\"@stargate_crates//:tonic-prost-0.14.6\"),\n },\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n _COMMON_CONDITION: {\n \"bytes\": Label(\"@stargate_crates//:bytes-1.12.1\"),\n \"capnp\": Label(\"@stargate_crates//:capnp-0.23.2\"),\n \"capnp-futures\": Label(\"@stargate_crates//:capnp-futures-0.23.1\"),\n \"http\": Label(\"@stargate_crates//:http-1.4.2\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"serde\": Label(\"@stargate_crates//:serde-1.0.228\"),\n \"thiserror\": Label(\"@stargate_crates//:thiserror-2.0.18\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"flume\": Label(\"@stargate_crates//:flume-0.12.0\"),\n \"futures\": Label(\"@stargate_crates//:futures-0.3.32\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tokio-util\": Label(\"@stargate_crates//:tokio-util-0.7.18\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"http\": Label(\"@stargate_crates//:http-1.4.2\"),\n \"opentelemetry\": Label(\"@stargate_crates//:opentelemetry-0.32.0\"),\n \"opentelemetry-http\": Label(\"@stargate_crates//:opentelemetry-http-0.32.0\"),\n \"opentelemetry-otlp\": Label(\"@stargate_crates//:opentelemetry-otlp-0.32.0\"),\n \"opentelemetry_sdk\": Label(\"@stargate_crates//:opentelemetry_sdk-0.32.1\"),\n \"tonic\": Label(\"@stargate_crates//:tonic-0.14.6\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n \"tracing-opentelemetry\": Label(\"@stargate_crates//:tracing-opentelemetry-0.33.0\"),\n \"tracing-subscriber\": Label(\"@stargate_crates//:tracing-subscriber-0.3.23\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n _COMMON_CONDITION: {\n \"anyhow\": Label(\"@stargate_crates//:anyhow-1.0.103\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"rcgen\": Label(\"@stargate_crates//:rcgen-0.13.2\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"rustls-pemfile\": Label(\"@stargate_crates//:rustls-pemfile-2.2.0\"),\n \"rustls-webpki\": Label(\"@stargate_crates//:rustls-webpki-0.103.9\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n \"tokio-util\": Label(\"@stargate_crates//:tokio-util-0.7.18\"),\n \"tracing\": Label(\"@stargate_crates//:tracing-0.1.44\"),\n \"x509-parser\": Label(\"@stargate_crates//:x509-parser-0.18.1\"),\n },\n },\n}\n\n\n_NORMAL_ALIASES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n _COMMON_CONDITION: {\n \"axum\": Label(\"@stargate_crates//:axum-0.8.9\"),\n \"quinn\": Label(\"@stargate_crates//:quinn-0.11.11\"),\n \"rcgen\": Label(\"@stargate_crates//:rcgen-0.13.2\"),\n \"serde_json\": Label(\"@stargate_crates//:serde_json-1.0.150\"),\n \"tempfile\": Label(\"@stargate_crates//:tempfile-3.27.0\"),\n \"tokio-stream\": Label(\"@stargate_crates//:tokio-stream-0.1.18\"),\n \"tonic\": Label(\"@stargate_crates//:tonic-0.14.6\"),\n },\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n _COMMON_CONDITION: {\n \"criterion\": Label(\"@stargate_crates//:criterion-0.5.1\"),\n \"opentelemetry_sdk\": Label(\"@stargate_crates//:opentelemetry_sdk-0.32.1\"),\n \"rcgen\": Label(\"@stargate_crates//:rcgen-0.13.2\"),\n \"tempfile\": Label(\"@stargate_crates//:tempfile-3.27.0\"),\n \"tower\": Label(\"@stargate_crates//:tower-0.5.3\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n \"hyper-util\": Label(\"@stargate_crates//:hyper-util-0.1.20\"),\n \"opentelemetry_sdk\": Label(\"@stargate_crates//:opentelemetry_sdk-0.32.1\"),\n \"prost\": Label(\"@stargate_crates//:prost-0.14.4\"),\n \"reqwest\": Label(\"@stargate_crates//:reqwest-0.13.4\"),\n \"serde_yaml_ng\": Label(\"@stargate_crates//:serde_yaml_ng-0.10.0\"),\n \"tempfile\": Label(\"@stargate_crates//:tempfile-3.27.0\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n _COMMON_CONDITION: {\n \"axum\": Label(\"@stargate_crates//:axum-0.8.9\"),\n \"tempfile\": Label(\"@stargate_crates//:tempfile-3.27.0\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n _COMMON_CONDITION: {\n \"http\": Label(\"@stargate_crates//:http-1.4.2\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"rustls-pemfile\": Label(\"@stargate_crates//:rustls-pemfile-2.2.0\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n _COMMON_CONDITION: {\n \"hyper-util\": Label(\"@stargate_crates//:hyper-util-0.1.20\"),\n \"rustls-pemfile\": Label(\"@stargate_crates//:rustls-pemfile-2.2.0\"),\n \"tempfile\": Label(\"@stargate_crates//:tempfile-3.27.0\"),\n },\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n _COMMON_CONDITION: {\n \"serde_json\": Label(\"@stargate_crates//:serde_json-1.0.150\"),\n \"tonic-prost-build\": Label(\"@stargate_crates//:tonic-prost-build-0.14.6\"),\n },\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n _COMMON_CONDITION: {\n \"capnpc\": Label(\"@stargate_crates//:capnpc-0.23.3\"),\n \"proptest\": Label(\"@stargate_crates//:proptest-1.11.0\"),\n \"rustls\": Label(\"@stargate_crates//:rustls-0.23.41\"),\n \"rustls-pemfile\": Label(\"@stargate_crates//:rustls-pemfile-2.2.0\"),\n \"serde_json\": Label(\"@stargate_crates//:serde_json-1.0.150\"),\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n _COMMON_CONDITION: {\n \"tokio\": Label(\"@stargate_crates//:tokio-1.52.3\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n _COMMON_CONDITION: {\n \"tempfile\": Label(\"@stargate_crates//:tempfile-3.27.0\"),\n },\n },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n \"async-trait\": Label(\"@stargate_crates//:async-trait-0.1.89\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n },\n}\n\n\n_PROC_MACRO_ALIASES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_BUILD_DEPENDENCIES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n \"built\": Label(\"@stargate_crates//:built-0.8.1\"),\n \"git2\": Label(\"@stargate_crates//:git2-0.20.4\"),\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n },\n}\n\n\n_BUILD_ALIASES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n _COMMON_CONDITION: {\n },\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n \"src/libraries/rust/stargate/crates/mock-dynamo\": {\n },\n \"src/libraries/rust/stargate/crates/pylon\": {\n },\n \"src/libraries/rust/stargate/crates/pylon-lib\": {\n },\n \"src/libraries/rust/stargate/crates/stargate\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-auth\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-bench\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-forwarding\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-k8s-router\": {\n },\n \"src/libraries/rust/stargate/crates/proto\": {\n },\n \"src/libraries/rust/stargate/crates/protocol\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-runtime\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-telemetry\": {\n },\n \"src/libraries/rust/stargate/crates/stargate-tls\": {\n },\n}\n\n\n_CONDITIONS = {\n \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"aarch64-linux-android\": [],\n \"aarch64-pc-windows-gnullvm\": [],\n \"aarch64-pc-windows-msvc\": [],\n \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"aarch64-uwp-windows-msvc\": [],\n \"cfg(all(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), target_os = \\\"windows\\\"))\": [],\n \"cfg(all(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), target_vendor = \\\"apple\\\", any(target_os = \\\"ios\\\", target_os = \\\"macos\\\", target_os = \\\"tvos\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\")))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(all(any(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), all(target_arch = \\\"arm\\\", target_endian = \\\"little\\\")), any(target_os = \\\"android\\\", target_os = \\\"linux\\\")))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(any(target_arch = \\\"x86_64\\\", target_arch = \\\"arm64ec\\\"), target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\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(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_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\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_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", not(target_os = \\\"wasi\\\")))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\", target_env = \\\"p2\\\"))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\", target_env = \\\"p3\\\"))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"gnu\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86_64\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(target_arch = \\\"x86_64\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_family = \\\"wasm\\\", target_os = \\\"unknown\\\"))\": [],\n \"cfg(all(target_os = \\\"uefi\\\", getrandom_backend = \\\"efi_rng\\\"))\": [],\n \"cfg(all(unix, not(target_os = \\\"android\\\"), not(target_vendor = \\\"apple\\\"), not(target_arch = \\\"wasm32\\\")))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(unix, not(target_os = \\\"macos\\\")))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\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(any(target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n \"cfg(any(unix, target_os = \\\"hermit\\\", target_os = \\\"wasi\\\"))\": [\"@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(unix, target_os = \\\"redox\\\"))\": [\"@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(unix, target_os = \\\"wasi\\\"))\": [\"@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(all(target_arch = \\\"arm\\\", target_os = \\\"none\\\")))\": [\"@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(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\"))))\": [\"@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(all(target_family = \\\"wasm\\\", target_os = \\\"unknown\\\")))\": [\"@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(target_has_atomic = \\\"64\\\"))\": [],\n \"cfg(not(target_has_atomic = \\\"ptr\\\"))\": [],\n \"cfg(not(windows_raw_dylib))\": [\"@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 = \\\"wasm32\\\")\": [],\n \"cfg(target_feature = \\\"atomics\\\")\": [],\n \"cfg(target_os = \\\"android\\\")\": [],\n \"cfg(target_os = \\\"haiku\\\")\": [],\n \"cfg(target_os = \\\"hermit\\\")\": [],\n \"cfg(target_os = \\\"macos\\\")\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n \"cfg(target_os = \\\"netbsd\\\")\": [],\n \"cfg(target_os = \\\"redox\\\")\": [],\n \"cfg(target_os = \\\"solaris\\\")\": [],\n \"cfg(target_os = \\\"vxworks\\\")\": [],\n \"cfg(target_os = \\\"wasi\\\")\": [],\n \"cfg(target_os = \\\"windows\\\")\": [],\n \"cfg(target_vendor = \\\"apple\\\")\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\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 \"cfg(windows_raw_dylib)\": [],\n \"i686-pc-windows-gnu\": [],\n \"i686-pc-windows-gnullvm\": [],\n \"i686-pc-windows-msvc\": [],\n \"i686-uwp-windows-gnu\": [],\n \"i686-uwp-windows-msvc\": [],\n \"x86_64-apple-darwin\": [\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n \"x86_64-pc-windows-gnu\": [],\n \"x86_64-pc-windows-gnullvm\": [],\n \"x86_64-pc-windows-msvc\": [],\n \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"x86_64-uwp-windows-gnu\": [],\n \"x86_64-uwp-windows-msvc\": [],\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 http_archive,\n name = \"stargate_crates__ahash-0.8.12\",\n sha256 = \"5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ahash/0.8.12/download\"],\n strip_prefix = \"ahash-0.8.12\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ahash-0.8.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__aho-corasick-1.1.4\",\n sha256 = \"ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aho-corasick/1.1.4/download\"],\n strip_prefix = \"aho-corasick-1.1.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.aho-corasick-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__allocator-api2-0.2.21\",\n sha256 = \"683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/allocator-api2/0.2.21/download\"],\n strip_prefix = \"allocator-api2-0.2.21\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.allocator-api2-0.2.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__android_system_properties-0.1.6\",\n sha256 = \"ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/android_system_properties/0.1.6/download\"],\n strip_prefix = \"android_system_properties-0.1.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.android_system_properties-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__anes-0.1.6\",\n sha256 = \"4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anes/0.1.6/download\"],\n strip_prefix = \"anes-0.1.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.anes-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__anstream-1.0.0\",\n sha256 = \"824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstream/1.0.0/download\"],\n strip_prefix = \"anstream-1.0.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.anstream-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__anstyle-1.0.13\",\n sha256 = \"5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle/1.0.13/download\"],\n strip_prefix = \"anstyle-1.0.13\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.anstyle-1.0.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__anstyle-parse-1.0.0\",\n sha256 = \"52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-parse/1.0.0/download\"],\n strip_prefix = \"anstyle-parse-1.0.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.anstyle-parse-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__anstyle-query-1.1.5\",\n sha256 = \"40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-query/1.1.5/download\"],\n strip_prefix = \"anstyle-query-1.1.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.anstyle-query-1.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__anstyle-wincon-3.0.11\",\n sha256 = \"291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-wincon/3.0.11/download\"],\n strip_prefix = \"anstyle-wincon-3.0.11\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.anstyle-wincon-3.0.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__anyhow-1.0.103\",\n sha256 = \"2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anyhow/1.0.103/download\"],\n strip_prefix = \"anyhow-1.0.103\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.anyhow-1.0.103.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__asn1-rs-0.7.2\",\n sha256 = \"b7f43a50ac4fdca5df8e885c21b835997f0a1cdee65494a6847694a98652d9d8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/asn1-rs/0.7.2/download\"],\n strip_prefix = \"asn1-rs-0.7.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.asn1-rs-0.7.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__asn1-rs-derive-0.6.0\",\n sha256 = \"3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/asn1-rs-derive/0.6.0/download\"],\n strip_prefix = \"asn1-rs-derive-0.6.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.asn1-rs-derive-0.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__asn1-rs-impl-0.2.0\",\n sha256 = \"7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/asn1-rs-impl/0.2.0/download\"],\n strip_prefix = \"asn1-rs-impl-0.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.asn1-rs-impl-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__async-broadcast-0.7.2\",\n sha256 = \"435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-broadcast/0.7.2/download\"],\n strip_prefix = \"async-broadcast-0.7.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.async-broadcast-0.7.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__async-stream-0.3.6\",\n sha256 = \"0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-stream/0.3.6/download\"],\n strip_prefix = \"async-stream-0.3.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.async-stream-0.3.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__async-stream-impl-0.3.6\",\n sha256 = \"c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-stream-impl/0.3.6/download\"],\n strip_prefix = \"async-stream-impl-0.3.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.async-stream-impl-0.3.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__async-trait-0.1.89\",\n sha256 = \"9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-trait/0.1.89/download\"],\n strip_prefix = \"async-trait-0.1.89\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.async-trait-0.1.89.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__atomic-waker-1.1.2\",\n sha256 = \"1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/atomic-waker/1.1.2/download\"],\n strip_prefix = \"atomic-waker-1.1.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.atomic-waker-1.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__autocfg-1.5.0\",\n sha256 = \"c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/autocfg/1.5.0/download\"],\n strip_prefix = \"autocfg-1.5.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.autocfg-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__aws-lc-rs-1.16.0\",\n sha256 = \"d9a7b350e3bb1767102698302bc37256cbd48422809984b98d292c40e2579aa9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aws-lc-rs/1.16.0/download\"],\n strip_prefix = \"aws-lc-rs-1.16.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.aws-lc-rs-1.16.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__aws-lc-sys-0.37.1\",\n sha256 = \"b092fe214090261288111db7a2b2c2118e5a7f30dc2569f1732c4069a6840549\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aws-lc-sys/0.37.1/download\"],\n strip_prefix = \"aws-lc-sys-0.37.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.aws-lc-sys-0.37.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__axum-0.8.9\",\n sha256 = \"31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum/0.8.9/download\"],\n strip_prefix = \"axum-0.8.9\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.axum-0.8.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__axum-core-0.5.6\",\n sha256 = \"08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum-core/0.5.6/download\"],\n strip_prefix = \"axum-core-0.5.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.axum-core-0.5.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__axum-macros-0.5.1\",\n sha256 = \"7aa268c23bfbbd2c4363b9cd302a4f504fb2a9dfe7e3451d66f35dd392e20aca\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum-macros/0.5.1/download\"],\n strip_prefix = \"axum-macros-0.5.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.axum-macros-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__backon-1.6.0\",\n sha256 = \"cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/backon/1.6.0/download\"],\n strip_prefix = \"backon-1.6.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.backon-1.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__base64-0.22.1\",\n sha256 = \"72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64/0.22.1/download\"],\n strip_prefix = \"base64-0.22.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.base64-0.22.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__bit-set-0.8.0\",\n sha256 = \"08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bit-set/0.8.0/download\"],\n strip_prefix = \"bit-set-0.8.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.bit-set-0.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__bit-vec-0.8.0\",\n sha256 = \"5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bit-vec/0.8.0/download\"],\n strip_prefix = \"bit-vec-0.8.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.bit-vec-0.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__bitflags-2.11.0\",\n sha256 = \"843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/2.11.0/download\"],\n strip_prefix = \"bitflags-2.11.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.bitflags-2.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__block-buffer-0.10.4\",\n sha256 = \"3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block-buffer/0.10.4/download\"],\n strip_prefix = \"block-buffer-0.10.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.block-buffer-0.10.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__bs58-0.5.1\",\n sha256 = \"bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bs58/0.5.1/download\"],\n strip_prefix = \"bs58-0.5.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.bs58-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__built-0.8.1\",\n sha256 = \"5c0e531d93d39c34eef561e929e8a7f86d77a5af08aac4f6d6e39976c51858e9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/built/0.8.1/download\"],\n strip_prefix = \"built-0.8.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.built-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__bumpalo-3.20.2\",\n sha256 = \"5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bumpalo/3.20.2/download\"],\n strip_prefix = \"bumpalo-3.20.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.bumpalo-3.20.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__bytes-1.12.1\",\n sha256 = \"fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytes/1.12.1/download\"],\n strip_prefix = \"bytes-1.12.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.bytes-1.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__capnp-0.23.2\",\n sha256 = \"fa8c2ce958193219f203a6887788231a1aaa0b22ed012d67436ea3b87a9645c4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/capnp/0.23.2/download\"],\n strip_prefix = \"capnp-0.23.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.capnp-0.23.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__capnp-futures-0.23.1\",\n sha256 = \"2f0ac8177a7bee149f8cfeb2b6ae7c58da0b57913ff31ed6bec2fd725894ee67\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/capnp-futures/0.23.1/download\"],\n strip_prefix = \"capnp-futures-0.23.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.capnp-futures-0.23.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__capnpc-0.23.3\",\n sha256 = \"ad416fa35bb240c41f2794ecf1a95a41885f16a03e51bba4cb6845ce7db4bab3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/capnpc/0.23.3/download\"],\n strip_prefix = \"capnpc-0.23.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.capnpc-0.23.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__cast-0.3.0\",\n sha256 = \"37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cast/0.3.0/download\"],\n strip_prefix = \"cast-0.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.cast-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__cc-1.2.56\",\n sha256 = \"aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cc/1.2.56/download\"],\n strip_prefix = \"cc-1.2.56\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.cc-1.2.56.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__cesu8-1.1.0\",\n sha256 = \"6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cesu8/1.1.0/download\"],\n strip_prefix = \"cesu8-1.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.cesu8-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__cfg-if-1.0.4\",\n sha256 = \"9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg-if/1.0.4/download\"],\n strip_prefix = \"cfg-if-1.0.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.cfg-if-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__cfg_aliases-0.2.1\",\n sha256 = \"613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg_aliases/0.2.1/download\"],\n strip_prefix = \"cfg_aliases-0.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.cfg_aliases-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__chrono-0.4.45\",\n sha256 = \"1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/chrono/0.4.45/download\"],\n strip_prefix = \"chrono-0.4.45\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.chrono-0.4.45.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.ciborium-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.ciborium-io-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.ciborium-ll-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__clap-4.6.1\",\n sha256 = \"1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap/4.6.1/download\"],\n strip_prefix = \"clap-4.6.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.clap-4.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__clap_builder-4.6.0\",\n sha256 = \"714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_builder/4.6.0/download\"],\n strip_prefix = \"clap_builder-4.6.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.clap_builder-4.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__clap_derive-4.6.1\",\n sha256 = \"f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_derive/4.6.1/download\"],\n strip_prefix = \"clap_derive-4.6.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.clap_derive-4.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__clap_lex-1.0.0\",\n sha256 = \"3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_lex/1.0.0/download\"],\n strip_prefix = \"clap_lex-1.0.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.clap_lex-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__cmake-0.1.57\",\n sha256 = \"75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cmake/0.1.57/download\"],\n strip_prefix = \"cmake-0.1.57\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.cmake-0.1.57.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__colorchoice-1.0.4\",\n sha256 = \"b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/colorchoice/1.0.4/download\"],\n strip_prefix = \"colorchoice-1.0.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.colorchoice-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__combine-4.6.7\",\n sha256 = \"ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/combine/4.6.7/download\"],\n strip_prefix = \"combine-4.6.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.combine-4.6.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__concurrent-queue-2.5.0\",\n sha256 = \"4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/concurrent-queue/2.5.0/download\"],\n strip_prefix = \"concurrent-queue-2.5.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.concurrent-queue-2.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__core-foundation-0.10.1\",\n sha256 = \"b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-foundation/0.10.1/download\"],\n strip_prefix = \"core-foundation-0.10.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.core-foundation-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__core-foundation-sys-0.8.7\",\n sha256 = \"773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-foundation-sys/0.8.7/download\"],\n strip_prefix = \"core-foundation-sys-0.8.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.core-foundation-sys-0.8.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__cpufeatures-0.2.17\",\n sha256 = \"59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cpufeatures/0.2.17/download\"],\n strip_prefix = \"cpufeatures-0.2.17\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.cpufeatures-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__criterion-0.5.1\",\n sha256 = \"f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/criterion/0.5.1/download\"],\n strip_prefix = \"criterion-0.5.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.criterion-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__criterion-plot-0.5.0\",\n sha256 = \"6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/criterion-plot/0.5.0/download\"],\n strip_prefix = \"criterion-plot-0.5.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.criterion-plot-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__crossbeam-deque-0.8.6\",\n sha256 = \"9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-deque/0.8.6/download\"],\n strip_prefix = \"crossbeam-deque-0.8.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.crossbeam-deque-0.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__crossbeam-epoch-0.9.18\",\n sha256 = \"5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-epoch/0.9.18/download\"],\n strip_prefix = \"crossbeam-epoch-0.9.18\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.crossbeam-epoch-0.9.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__crossbeam-utils-0.8.21\",\n sha256 = \"d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-utils/0.8.21/download\"],\n strip_prefix = \"crossbeam-utils-0.8.21\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.crossbeam-utils-0.8.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.crunchy-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__crypto-common-0.1.7\",\n sha256 = \"78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crypto-common/0.1.7/download\"],\n strip_prefix = \"crypto-common-0.1.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.crypto-common-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__darling-0.23.0\",\n sha256 = \"25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling/0.23.0/download\"],\n strip_prefix = \"darling-0.23.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.darling-0.23.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__darling_core-0.23.0\",\n sha256 = \"9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling_core/0.23.0/download\"],\n strip_prefix = \"darling_core-0.23.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.darling_core-0.23.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__darling_macro-0.23.0\",\n sha256 = \"ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling_macro/0.23.0/download\"],\n strip_prefix = \"darling_macro-0.23.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.darling_macro-0.23.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__data-encoding-2.10.0\",\n sha256 = \"d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/data-encoding/2.10.0/download\"],\n strip_prefix = \"data-encoding-2.10.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.data-encoding-2.10.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__der-parser-10.0.0\",\n sha256 = \"07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/der-parser/10.0.0/download\"],\n strip_prefix = \"der-parser-10.0.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.der-parser-10.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__deranged-0.5.8\",\n sha256 = \"7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/deranged/0.5.8/download\"],\n strip_prefix = \"deranged-0.5.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.deranged-0.5.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__derive_more-2.1.1\",\n sha256 = \"d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/derive_more/2.1.1/download\"],\n strip_prefix = \"derive_more-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.derive_more-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__derive_more-impl-2.1.1\",\n sha256 = \"799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/derive_more-impl/2.1.1/download\"],\n strip_prefix = \"derive_more-impl-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.derive_more-impl-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__digest-0.10.7\",\n sha256 = \"9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/digest/0.10.7/download\"],\n strip_prefix = \"digest-0.10.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.digest-0.10.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__displaydoc-0.2.5\",\n sha256 = \"97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/displaydoc/0.2.5/download\"],\n strip_prefix = \"displaydoc-0.2.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.displaydoc-0.2.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__dunce-1.0.5\",\n sha256 = \"92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dunce/1.0.5/download\"],\n strip_prefix = \"dunce-1.0.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.dunce-1.0.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__dyn-clone-1.0.20\",\n sha256 = \"d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dyn-clone/1.0.20/download\"],\n strip_prefix = \"dyn-clone-1.0.20\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.dyn-clone-1.0.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__educe-0.6.0\",\n sha256 = \"1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/educe/0.6.0/download\"],\n strip_prefix = \"educe-0.6.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.educe-0.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__either-1.15.0\",\n sha256 = \"48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/either/1.15.0/download\"],\n strip_prefix = \"either-1.15.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.either-1.15.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__embedded-io-0.7.1\",\n sha256 = \"9eb1aa714776b75c7e67e1da744b81a129b3ff919c8712b5e1b32252c1f07cc7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/embedded-io/0.7.1/download\"],\n strip_prefix = \"embedded-io-0.7.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.embedded-io-0.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__enum-as-inner-0.6.1\",\n sha256 = \"a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/enum-as-inner/0.6.1/download\"],\n strip_prefix = \"enum-as-inner-0.6.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.enum-as-inner-0.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__enum-ordinalize-4.3.2\",\n sha256 = \"4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/enum-ordinalize/4.3.2/download\"],\n strip_prefix = \"enum-ordinalize-4.3.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.enum-ordinalize-4.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__enum-ordinalize-derive-4.3.2\",\n sha256 = \"8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/enum-ordinalize-derive/4.3.2/download\"],\n strip_prefix = \"enum-ordinalize-derive-4.3.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.enum-ordinalize-derive-4.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.equivalent-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.errno-0.3.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__event-listener-5.4.1\",\n sha256 = \"e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/event-listener/5.4.1/download\"],\n strip_prefix = \"event-listener-5.4.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.event-listener-5.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__event-listener-strategy-0.5.4\",\n sha256 = \"8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/event-listener-strategy/0.5.4/download\"],\n strip_prefix = \"event-listener-strategy-0.5.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.event-listener-strategy-0.5.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__fastbloom-0.14.1\",\n sha256 = \"4e7f34442dbe69c60fe8eaf58a8cafff81a1f278816d8ab4db255b3bef4ac3c4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fastbloom/0.14.1/download\"],\n strip_prefix = \"fastbloom-0.14.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.fastbloom-0.14.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__fastrand-2.3.0\",\n sha256 = \"37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fastrand/2.3.0/download\"],\n strip_prefix = \"fastrand-2.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.fastrand-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__faststr-0.2.34\",\n sha256 = \"1ca7d44d22004409a61c393afb3369c8f7bb74abcae49fe249ee01dcc3002113\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/faststr/0.2.34/download\"],\n strip_prefix = \"faststr-0.2.34\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.faststr-0.2.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__find-msvc-tools-0.1.9\",\n sha256 = \"5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/find-msvc-tools/0.1.9/download\"],\n strip_prefix = \"find-msvc-tools-0.1.9\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.find-msvc-tools-0.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__fixedbitset-0.5.7\",\n sha256 = \"1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fixedbitset/0.5.7/download\"],\n strip_prefix = \"fixedbitset-0.5.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.fixedbitset-0.5.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__flume-0.12.0\",\n sha256 = \"5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/flume/0.12.0/download\"],\n strip_prefix = \"flume-0.12.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.flume-0.12.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__fnv-1.0.7\",\n sha256 = \"3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fnv/1.0.7/download\"],\n strip_prefix = \"fnv-1.0.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.fnv-1.0.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__foldhash-0.1.5\",\n sha256 = \"d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foldhash/0.1.5/download\"],\n strip_prefix = \"foldhash-0.1.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.foldhash-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__foldhash-0.2.0\",\n sha256 = \"77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foldhash/0.2.0/download\"],\n strip_prefix = \"foldhash-0.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.foldhash-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.form_urlencoded-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__fs_extra-1.3.0\",\n sha256 = \"42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fs_extra/1.3.0/download\"],\n strip_prefix = \"fs_extra-1.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.fs_extra-1.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-0.3.32\",\n sha256 = \"8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures/0.3.32/download\"],\n strip_prefix = \"futures-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-channel-0.3.32\",\n sha256 = \"07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-channel/0.3.32/download\"],\n strip_prefix = \"futures-channel-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-channel-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-core-0.3.32\",\n sha256 = \"7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-core/0.3.32/download\"],\n strip_prefix = \"futures-core-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-core-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-executor-0.3.32\",\n sha256 = \"baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-executor/0.3.32/download\"],\n strip_prefix = \"futures-executor-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-executor-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-io-0.3.32\",\n sha256 = \"cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-io/0.3.32/download\"],\n strip_prefix = \"futures-io-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-io-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-macro-0.3.32\",\n sha256 = \"e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-macro/0.3.32/download\"],\n strip_prefix = \"futures-macro-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-macro-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-sink-0.3.32\",\n sha256 = \"c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-sink/0.3.32/download\"],\n strip_prefix = \"futures-sink-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-sink-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-task-0.3.32\",\n sha256 = \"037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-task/0.3.32/download\"],\n strip_prefix = \"futures-task-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-task-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__futures-util-0.3.32\",\n sha256 = \"389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-util/0.3.32/download\"],\n strip_prefix = \"futures-util-0.3.32\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.futures-util-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__generic-array-0.14.7\",\n sha256 = \"85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/generic-array/0.14.7/download\"],\n strip_prefix = \"generic-array-0.14.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.generic-array-0.14.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__getrandom-0.2.17\",\n sha256 = \"ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.2.17/download\"],\n strip_prefix = \"getrandom-0.2.17\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.getrandom-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__getrandom-0.3.4\",\n sha256 = \"899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.3.4/download\"],\n strip_prefix = \"getrandom-0.3.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.getrandom-0.3.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__getrandom-0.4.1\",\n sha256 = \"139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.4.1/download\"],\n strip_prefix = \"getrandom-0.4.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.getrandom-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.git2-0.20.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__git2-0.21.0\",\n sha256 = \"ddddbf932745a6be37109b6112d3ee09696106f848449069d3a57bba937ab82e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/git2/0.21.0/download\"],\n strip_prefix = \"git2-0.21.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.git2-0.21.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__gloo-timers-0.3.0\",\n sha256 = \"bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gloo-timers/0.3.0/download\"],\n strip_prefix = \"gloo-timers-0.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.gloo-timers-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__h2-0.4.13\",\n sha256 = \"2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/h2/0.4.13/download\"],\n strip_prefix = \"h2-0.4.13\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.h2-0.4.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__h3-0.0.8\",\n sha256 = \"10872b55cfb02a821b69dc7cf8dc6a71d6af25eb9a79662bec4a9d016056b3be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/h3/0.0.8/download\"],\n strip_prefix = \"h3-0.0.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.h3-0.0.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__h3-quinn-0.0.10\",\n sha256 = \"8b2e732c8d91a74731663ac8479ab505042fbf547b9a207213ab7fbcbfc4f8b4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/h3-quinn/0.0.10/download\"],\n strip_prefix = \"h3-quinn-0.0.10\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.h3-quinn-0.0.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.half-2.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hashbrown-0.12.3\",\n sha256 = \"8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.12.3/download\"],\n strip_prefix = \"hashbrown-0.12.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hashbrown-0.12.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hashbrown-0.15.5\",\n sha256 = \"9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.15.5/download\"],\n strip_prefix = \"hashbrown-0.15.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hashbrown-0.15.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hashbrown-0.16.1\",\n sha256 = \"841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.16.1/download\"],\n strip_prefix = \"hashbrown-0.16.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hashbrown-0.16.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.hashbrown-0.17.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__heck-0.5.0\",\n sha256 = \"2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/heck/0.5.0/download\"],\n strip_prefix = \"heck-0.5.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.heck-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hermit-abi-0.5.2\",\n sha256 = \"fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hermit-abi/0.5.2/download\"],\n strip_prefix = \"hermit-abi-0.5.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hermit-abi-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hex-0.4.3\",\n sha256 = \"7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hex/0.4.3/download\"],\n strip_prefix = \"hex-0.4.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hex-0.4.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hickory-proto-0.24.4\",\n sha256 = \"92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hickory-proto/0.24.4/download\"],\n strip_prefix = \"hickory-proto-0.24.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hickory-proto-0.24.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hickory-resolver-0.24.4\",\n sha256 = \"cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hickory-resolver/0.24.4/download\"],\n strip_prefix = \"hickory-resolver-0.24.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hickory-resolver-0.24.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hostname-0.4.2\",\n sha256 = \"617aaa3557aef3810a6369d0a99fac8a080891b68bd9f9812a1eeda0c0730cbd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hostname/0.4.2/download\"],\n strip_prefix = \"hostname-0.4.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hostname-0.4.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__http-1.4.2\",\n sha256 = \"6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http/1.4.2/download\"],\n strip_prefix = \"http-1.4.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.http-1.4.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__http-body-1.0.1\",\n sha256 = \"1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body/1.0.1/download\"],\n strip_prefix = \"http-body-1.0.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.http-body-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__http-body-util-0.1.3\",\n sha256 = \"b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body-util/0.1.3/download\"],\n strip_prefix = \"http-body-util-0.1.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.http-body-util-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__httparse-1.10.1\",\n sha256 = \"6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/httparse/1.10.1/download\"],\n strip_prefix = \"httparse-1.10.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.httparse-1.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__httpdate-1.0.3\",\n sha256 = \"df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/httpdate/1.0.3/download\"],\n strip_prefix = \"httpdate-1.0.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.httpdate-1.0.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hyper-1.9.0\",\n sha256 = \"6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper/1.9.0/download\"],\n strip_prefix = \"hyper-1.9.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hyper-1.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hyper-rustls-0.27.7\",\n sha256 = \"e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-rustls/0.27.7/download\"],\n strip_prefix = \"hyper-rustls-0.27.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hyper-rustls-0.27.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hyper-timeout-0.5.2\",\n sha256 = \"2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-timeout/0.5.2/download\"],\n strip_prefix = \"hyper-timeout-0.5.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hyper-timeout-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__hyper-util-0.1.20\",\n sha256 = \"96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-util/0.1.20/download\"],\n strip_prefix = \"hyper-util-0.1.20\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.hyper-util-0.1.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__iana-time-zone-0.1.65\",\n sha256 = \"e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iana-time-zone/0.1.65/download\"],\n strip_prefix = \"iana-time-zone-0.1.65\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.iana-time-zone-0.1.65.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__iana-time-zone-haiku-0.1.2\",\n sha256 = \"f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iana-time-zone-haiku/0.1.2/download\"],\n strip_prefix = \"iana-time-zone-haiku-0.1.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.iana-time-zone-haiku-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__icu_collections-2.1.1\",\n sha256 = \"4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_collections/2.1.1/download\"],\n strip_prefix = \"icu_collections-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.icu_collections-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__icu_locale_core-2.1.1\",\n sha256 = \"edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_locale_core/2.1.1/download\"],\n strip_prefix = \"icu_locale_core-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.icu_locale_core-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__icu_normalizer-2.1.1\",\n sha256 = \"5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer/2.1.1/download\"],\n strip_prefix = \"icu_normalizer-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.icu_normalizer-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__icu_normalizer_data-2.1.1\",\n sha256 = \"7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer_data/2.1.1/download\"],\n strip_prefix = \"icu_normalizer_data-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.icu_normalizer_data-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__icu_properties-2.1.2\",\n sha256 = \"020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties/2.1.2/download\"],\n strip_prefix = \"icu_properties-2.1.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.icu_properties-2.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__icu_properties_data-2.1.2\",\n sha256 = \"616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties_data/2.1.2/download\"],\n strip_prefix = \"icu_properties_data-2.1.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.icu_properties_data-2.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__icu_provider-2.1.1\",\n sha256 = \"85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_provider/2.1.1/download\"],\n strip_prefix = \"icu_provider-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.icu_provider-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__id-arena-2.3.0\",\n sha256 = \"3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/id-arena/2.3.0/download\"],\n strip_prefix = \"id-arena-2.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.id-arena-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ident_case-1.0.1\",\n sha256 = \"b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ident_case/1.0.1/download\"],\n strip_prefix = \"ident_case-1.0.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ident_case-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.idna-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__idna_adapter-1.2.1\",\n sha256 = \"3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/idna_adapter/1.2.1/download\"],\n strip_prefix = \"idna_adapter-1.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.idna_adapter-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__indexmap-1.9.3\",\n sha256 = \"bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/1.9.3/download\"],\n strip_prefix = \"indexmap-1.9.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.indexmap-1.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__indexmap-2.14.0\",\n sha256 = \"d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/2.14.0/download\"],\n strip_prefix = \"indexmap-2.14.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.indexmap-2.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ipconfig-0.3.2\",\n sha256 = \"b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ipconfig/0.3.2/download\"],\n strip_prefix = \"ipconfig-0.3.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ipconfig-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ipnet-2.11.0\",\n sha256 = \"469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ipnet/2.11.0/download\"],\n strip_prefix = \"ipnet-2.11.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ipnet-2.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__iri-string-0.7.10\",\n sha256 = \"c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iri-string/0.7.10/download\"],\n strip_prefix = \"iri-string-0.7.10\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.iri-string-0.7.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__is-terminal-0.4.17\",\n sha256 = \"3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/is-terminal/0.4.17/download\"],\n strip_prefix = \"is-terminal-0.4.17\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.is-terminal-0.4.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__is_terminal_polyfill-1.70.2\",\n sha256 = \"a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/is_terminal_polyfill/1.70.2/download\"],\n strip_prefix = \"is_terminal_polyfill-1.70.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.is_terminal_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.itertools-0.10.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__itertools-0.14.0\",\n sha256 = \"2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itertools/0.14.0/download\"],\n strip_prefix = \"itertools-0.14.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.itertools-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__itoa-1.0.17\",\n sha256 = \"92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itoa/1.0.17/download\"],\n strip_prefix = \"itoa-1.0.17\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.itoa-1.0.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jiff-0.2.24\",\n sha256 = \"f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jiff/0.2.24/download\"],\n strip_prefix = \"jiff-0.2.24\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jiff-0.2.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jiff-static-0.2.24\",\n sha256 = \"e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jiff-static/0.2.24/download\"],\n strip_prefix = \"jiff-static-0.2.24\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jiff-static-0.2.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jiff-tzdb-0.1.8\",\n sha256 = \"142bd39932ad231f10513df9ab62661fead8719872150b7ad02a2df79f4e141e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jiff-tzdb/0.1.8/download\"],\n strip_prefix = \"jiff-tzdb-0.1.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jiff-tzdb-0.1.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jiff-tzdb-platform-0.1.3\",\n sha256 = \"875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jiff-tzdb-platform/0.1.3/download\"],\n strip_prefix = \"jiff-tzdb-platform-0.1.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jiff-tzdb-platform-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jni-0.21.1\",\n sha256 = \"1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jni/0.21.1/download\"],\n strip_prefix = \"jni-0.21.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jni-0.21.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jni-sys-0.3.0\",\n sha256 = \"8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jni-sys/0.3.0/download\"],\n strip_prefix = \"jni-sys-0.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jni-sys-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jobserver-0.1.34\",\n sha256 = \"9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jobserver/0.1.34/download\"],\n strip_prefix = \"jobserver-0.1.34\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jobserver-0.1.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__js-sys-0.3.90\",\n sha256 = \"14dc6f6450b3f6d4ed5b16327f38fed626d375a886159ca555bd7822c0c3a5a6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/js-sys/0.3.90/download\"],\n strip_prefix = \"js-sys-0.3.90\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.js-sys-0.3.90.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__json-patch-4.2.0\",\n sha256 = \"7421438de105a0827e44fadd05377727847d717c80ce29a229f85fd04c427b72\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/json-patch/4.2.0/download\"],\n strip_prefix = \"json-patch-4.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.json-patch-4.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jsonpath-rust-1.0.4\",\n sha256 = \"633a7320c4bb672863a3782e89b9094ad70285e097ff6832cddd0ec615beadfa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jsonpath-rust/1.0.4/download\"],\n strip_prefix = \"jsonpath-rust-1.0.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jsonpath-rust-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__jsonptr-0.7.1\",\n sha256 = \"a5a3cc660ba5d72bce0b3bb295bf20847ccbb40fd423f3f05b61273672e561fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jsonptr/0.7.1/download\"],\n strip_prefix = \"jsonptr-0.7.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.jsonptr-0.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__k8s-openapi-0.27.1\",\n sha256 = \"51b326f5219dd55872a72c1b6ddd1b830b8334996c667449c29391d657d78d5e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/k8s-openapi/0.27.1/download\"],\n strip_prefix = \"k8s-openapi-0.27.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.k8s-openapi-0.27.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__kube-3.1.0\",\n sha256 = \"acc5a6a69da2975ed9925d56b5dcfc9cc739b66f37add06785b7c9f6d1e88741\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/kube/3.1.0/download\"],\n strip_prefix = \"kube-3.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.kube-3.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__kube-client-3.1.0\",\n sha256 = \"0fcaf2d1f1a91e1805d4cd82e8333c022767ae8ffd65909bbef6802733a7dd40\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/kube-client/3.1.0/download\"],\n strip_prefix = \"kube-client-3.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.kube-client-3.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__kube-core-3.1.0\",\n sha256 = \"f126d2db7a8b532ec1d839ece2a71e2485dc3bbca6cc3c3f929becaa810e719e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/kube-core/3.1.0/download\"],\n strip_prefix = \"kube-core-3.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.kube-core-3.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__kube-runtime-3.1.0\",\n sha256 = \"c072737075826ee74d3e615e80334e41e617ca3d14fb46ef7cdfda822d6f15f2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/kube-runtime/3.1.0/download\"],\n strip_prefix = \"kube-runtime-3.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.kube-runtime-3.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__lazy_static-1.5.0\",\n sha256 = \"bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lazy_static/1.5.0/download\"],\n strip_prefix = \"lazy_static-1.5.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.lazy_static-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__leb128fmt-0.1.0\",\n sha256 = \"09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/leb128fmt/0.1.0/download\"],\n strip_prefix = \"leb128fmt-0.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.leb128fmt-0.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__libc-0.2.186\",\n sha256 = \"68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libc/0.2.186/download\"],\n strip_prefix = \"libc-0.2.186\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.libc-0.2.186.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__libgit2-sys-0.18.5-1.9.4\",\n sha256 = \"005d6ae6eac1912906073e069f7db60b1fa98e052a68227824afe3e3a1c59ca2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libgit2-sys/0.18.5+1.9.4/download\"],\n strip_prefix = \"libgit2-sys-0.18.5+1.9.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.libgit2-sys-0.18.5+1.9.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.libm-0.2.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.libz-sys-1.1.29.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__linked-hash-map-0.5.6\",\n sha256 = \"0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/linked-hash-map/0.5.6/download\"],\n strip_prefix = \"linked-hash-map-0.5.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.linked-hash-map-0.5.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.linux-raw-sys-0.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__litemap-0.8.1\",\n sha256 = \"6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/litemap/0.8.1/download\"],\n strip_prefix = \"litemap-0.8.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.litemap-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__lock_api-0.4.14\",\n sha256 = \"224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lock_api/0.4.14/download\"],\n strip_prefix = \"lock_api-0.4.14\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.lock_api-0.4.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__log-0.4.29\",\n sha256 = \"5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/log/0.4.29/download\"],\n strip_prefix = \"log-0.4.29\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.log-0.4.29.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__lru-cache-0.1.2\",\n sha256 = \"31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lru-cache/0.1.2/download\"],\n strip_prefix = \"lru-cache-0.1.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.lru-cache-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__lru-slab-0.1.2\",\n sha256 = \"112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lru-slab/0.1.2/download\"],\n strip_prefix = \"lru-slab-0.1.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.lru-slab-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__matchers-0.2.0\",\n sha256 = \"d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/matchers/0.2.0/download\"],\n strip_prefix = \"matchers-0.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.matchers-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__matchit-0.8.4\",\n sha256 = \"47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/matchit/0.8.4/download\"],\n strip_prefix = \"matchit-0.8.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.matchit-0.8.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.memchr-2.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__mime-0.3.17\",\n sha256 = \"6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mime/0.3.17/download\"],\n strip_prefix = \"mime-0.3.17\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.mime-0.3.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__minimal-lexical-0.2.1\",\n sha256 = \"68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/minimal-lexical/0.2.1/download\"],\n strip_prefix = \"minimal-lexical-0.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.minimal-lexical-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__mio-1.2.1\",\n sha256 = \"02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mio/1.2.1/download\"],\n strip_prefix = \"mio-1.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.mio-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__multimap-0.10.1\",\n sha256 = \"1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/multimap/0.10.1/download\"],\n strip_prefix = \"multimap-0.10.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.multimap-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__munge-0.4.7\",\n sha256 = \"5e17401f259eba956ca16491461b6e8f72913a0a114e39736ce404410f915a0c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/munge/0.4.7/download\"],\n strip_prefix = \"munge-0.4.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.munge-0.4.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__munge_macro-0.4.7\",\n sha256 = \"4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/munge_macro/0.4.7/download\"],\n strip_prefix = \"munge_macro-0.4.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.munge_macro-0.4.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__nom-7.1.3\",\n sha256 = \"d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nom/7.1.3/download\"],\n strip_prefix = \"nom-7.1.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.nom-7.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__nu-ansi-term-0.50.3\",\n sha256 = \"7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nu-ansi-term/0.50.3/download\"],\n strip_prefix = \"nu-ansi-term-0.50.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.nu-ansi-term-0.50.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__num-bigint-0.4.8\",\n sha256 = \"c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-bigint/0.4.8/download\"],\n strip_prefix = \"num-bigint-0.4.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.num-bigint-0.4.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__num-conv-0.2.1\",\n sha256 = \"c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-conv/0.2.1/download\"],\n strip_prefix = \"num-conv-0.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.num-conv-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__num-integer-0.1.47\",\n sha256 = \"7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-integer/0.1.47/download\"],\n strip_prefix = \"num-integer-0.1.47\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.num-integer-0.1.47.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__num-traits-0.2.19\",\n sha256 = \"071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-traits/0.2.19/download\"],\n strip_prefix = \"num-traits-0.2.19\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.num-traits-0.2.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__oid-registry-0.8.1\",\n sha256 = \"12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/oid-registry/0.8.1/download\"],\n strip_prefix = \"oid-registry-0.8.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.oid-registry-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__once_cell-1.21.3\",\n sha256 = \"42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell/1.21.3/download\"],\n strip_prefix = \"once_cell-1.21.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.once_cell-1.21.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__once_cell_polyfill-1.70.2\",\n sha256 = \"384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell_polyfill/1.70.2/download\"],\n strip_prefix = \"once_cell_polyfill-1.70.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.once_cell_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__oorandom-11.1.5\",\n sha256 = \"d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/oorandom/11.1.5/download\"],\n strip_prefix = \"oorandom-11.1.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.oorandom-11.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__openssl-probe-0.2.1\",\n sha256 = \"7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl-probe/0.2.1/download\"],\n strip_prefix = \"openssl-probe-0.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.openssl-probe-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__opentelemetry-0.32.0\",\n sha256 = \"b0142c63252a9e054e68a4c61a5778f7b14f576274d593f8ce883d191a099682\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry/0.32.0/download\"],\n strip_prefix = \"opentelemetry-0.32.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.opentelemetry-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__opentelemetry-http-0.32.0\",\n sha256 = \"5683015d09e2df236ef005b17f6f196f0d5f6313c4fa43a7b6a53b52776e4331\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry-http/0.32.0/download\"],\n strip_prefix = \"opentelemetry-http-0.32.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.opentelemetry-http-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__opentelemetry-otlp-0.32.0\",\n sha256 = \"9966929966d17620d7c316c643ba62631826e10021409357772d5eea84f62c35\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry-otlp/0.32.0/download\"],\n strip_prefix = \"opentelemetry-otlp-0.32.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.opentelemetry-otlp-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__opentelemetry-proto-0.32.0\",\n sha256 = \"56d658ba1faf63f7b9c492cfbe6e0ec365440a16132d3270c1065f7b33f1b638\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry-proto/0.32.0/download\"],\n strip_prefix = \"opentelemetry-proto-0.32.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.opentelemetry-proto-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__opentelemetry_sdk-0.32.1\",\n sha256 = \"9b59f80e1ac4d5ff7a2db8fb6c80badb7f0f3f858211fba08dd9aaec750894f9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry_sdk/0.32.1/download\"],\n strip_prefix = \"opentelemetry_sdk-0.32.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.opentelemetry_sdk-0.32.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ordered-float-2.10.1\",\n sha256 = \"68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ordered-float/2.10.1/download\"],\n strip_prefix = \"ordered-float-2.10.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ordered-float-2.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__parking-2.2.1\",\n sha256 = \"f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking/2.2.1/download\"],\n strip_prefix = \"parking-2.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.parking-2.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__parking_lot-0.12.5\",\n sha256 = \"93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot/0.12.5/download\"],\n strip_prefix = \"parking_lot-0.12.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.parking_lot-0.12.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__parking_lot_core-0.9.12\",\n sha256 = \"2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot_core/0.9.12/download\"],\n strip_prefix = \"parking_lot_core-0.9.12\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.parking_lot_core-0.9.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pem-3.0.6\",\n sha256 = \"1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pem/3.0.6/download\"],\n strip_prefix = \"pem-3.0.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pem-3.0.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.percent-encoding-2.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pest-2.8.6\",\n sha256 = \"e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest/2.8.6/download\"],\n strip_prefix = \"pest-2.8.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pest-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pest_derive-2.8.6\",\n sha256 = \"11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_derive/2.8.6/download\"],\n strip_prefix = \"pest_derive-2.8.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pest_derive-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pest_generator-2.8.6\",\n sha256 = \"8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_generator/2.8.6/download\"],\n strip_prefix = \"pest_generator-2.8.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pest_generator-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pest_meta-2.8.6\",\n sha256 = \"89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_meta/2.8.6/download\"],\n strip_prefix = \"pest_meta-2.8.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pest_meta-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__petgraph-0.8.3\",\n sha256 = \"8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/petgraph/0.8.3/download\"],\n strip_prefix = \"petgraph-0.8.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.petgraph-0.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pin-project-1.1.10\",\n sha256 = \"677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project/1.1.10/download\"],\n strip_prefix = \"pin-project-1.1.10\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pin-project-1.1.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pin-project-internal-1.1.10\",\n sha256 = \"6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-internal/1.1.10/download\"],\n strip_prefix = \"pin-project-internal-1.1.10\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pin-project-internal-1.1.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pin-project-lite-0.2.16\",\n sha256 = \"3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-lite/0.2.16/download\"],\n strip_prefix = \"pin-project-lite-0.2.16\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pin-project-lite-0.2.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pkg-config-0.3.33\",\n sha256 = \"19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pkg-config/0.3.33/download\"],\n strip_prefix = \"pkg-config-0.3.33\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pkg-config-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__plotters-0.3.7\",\n sha256 = \"5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/plotters/0.3.7/download\"],\n strip_prefix = \"plotters-0.3.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.plotters-0.3.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__plotters-backend-0.3.7\",\n sha256 = \"df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/plotters-backend/0.3.7/download\"],\n strip_prefix = \"plotters-backend-0.3.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.plotters-backend-0.3.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__plotters-svg-0.3.7\",\n sha256 = \"51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/plotters-svg/0.3.7/download\"],\n strip_prefix = \"plotters-svg-0.3.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.plotters-svg-0.3.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__portable-atomic-1.13.1\",\n sha256 = \"c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/portable-atomic/1.13.1/download\"],\n strip_prefix = \"portable-atomic-1.13.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.portable-atomic-1.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__portable-atomic-util-0.2.7\",\n sha256 = \"c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/portable-atomic-util/0.2.7/download\"],\n strip_prefix = \"portable-atomic-util-0.2.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.portable-atomic-util-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__potential_utf-0.1.4\",\n sha256 = \"b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/potential_utf/0.1.4/download\"],\n strip_prefix = \"potential_utf-0.1.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.potential_utf-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__powerfmt-0.2.0\",\n sha256 = \"439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/powerfmt/0.2.0/download\"],\n strip_prefix = \"powerfmt-0.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.powerfmt-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ppv-lite86-0.2.21\",\n sha256 = \"85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ppv-lite86/0.2.21/download\"],\n strip_prefix = \"ppv-lite86-0.2.21\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ppv-lite86-0.2.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__prettyplease-0.2.37\",\n sha256 = \"479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prettyplease/0.2.37/download\"],\n strip_prefix = \"prettyplease-0.2.37\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.prettyplease-0.2.37.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__proc-macro2-1.0.106\",\n sha256 = \"8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2/1.0.106/download\"],\n strip_prefix = \"proc-macro2-1.0.106\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.proc-macro2-1.0.106.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__prometheus-0.14.0\",\n sha256 = \"3ca5326d8d0b950a9acd87e6a3f94745394f62e4dae1b1ee22b2bc0c394af43a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prometheus/0.14.0/download\"],\n strip_prefix = \"prometheus-0.14.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.prometheus-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__proptest-1.11.0\",\n sha256 = \"4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proptest/1.11.0/download\"],\n strip_prefix = \"proptest-1.11.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.proptest-1.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__prost-0.14.4\",\n sha256 = \"528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost/0.14.4/download\"],\n strip_prefix = \"prost-0.14.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.prost-0.14.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__prost-build-0.14.3\",\n sha256 = \"343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-build/0.14.3/download\"],\n strip_prefix = \"prost-build-0.14.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.prost-build-0.14.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__prost-derive-0.14.4\",\n sha256 = \"b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-derive/0.14.4/download\"],\n strip_prefix = \"prost-derive-0.14.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.prost-derive-0.14.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__prost-types-0.14.3\",\n sha256 = \"8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-types/0.14.3/download\"],\n strip_prefix = \"prost-types-0.14.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.prost-types-0.14.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__protobuf-3.7.2\",\n sha256 = \"d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/protobuf/3.7.2/download\"],\n strip_prefix = \"protobuf-3.7.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.protobuf-3.7.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__protobuf-support-3.7.2\",\n sha256 = \"3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/protobuf-support/3.7.2/download\"],\n strip_prefix = \"protobuf-support-3.7.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.protobuf-support-3.7.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ptr_meta-0.3.1\",\n sha256 = \"0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ptr_meta/0.3.1/download\"],\n strip_prefix = \"ptr_meta-0.3.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ptr_meta-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ptr_meta_derive-0.3.1\",\n sha256 = \"7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ptr_meta_derive/0.3.1/download\"],\n strip_prefix = \"ptr_meta_derive-0.3.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ptr_meta_derive-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pulldown-cmark-0.13.4\",\n sha256 = \"e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pulldown-cmark/0.13.4/download\"],\n strip_prefix = \"pulldown-cmark-0.13.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pulldown-cmark-0.13.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__pulldown-cmark-to-cmark-22.0.0\",\n sha256 = \"50793def1b900256624a709439404384204a5dc3a6ec580281bfaac35e882e90\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pulldown-cmark-to-cmark/22.0.0/download\"],\n strip_prefix = \"pulldown-cmark-to-cmark-22.0.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.pulldown-cmark-to-cmark-22.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__quick-error-1.2.3\",\n sha256 = \"a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quick-error/1.2.3/download\"],\n strip_prefix = \"quick-error-1.2.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.quick-error-1.2.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__quinn-0.11.11\",\n sha256 = \"0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quinn/0.11.11/download\"],\n strip_prefix = \"quinn-0.11.11\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.quinn-0.11.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__quinn-proto-0.11.15\",\n sha256 = \"4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quinn-proto/0.11.15/download\"],\n strip_prefix = \"quinn-proto-0.11.15\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.quinn-proto-0.11.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__quinn-udp-0.5.14\",\n sha256 = \"addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quinn-udp/0.5.14/download\"],\n strip_prefix = \"quinn-udp-0.5.14\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.quinn-udp-0.5.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__quote-1.0.45\",\n sha256 = \"41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quote/1.0.45/download\"],\n strip_prefix = \"quote-1.0.45\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.quote-1.0.45.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__r-efi-5.3.0\",\n sha256 = \"69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/r-efi/5.3.0/download\"],\n strip_prefix = \"r-efi-5.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.r-efi-5.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rancor-0.1.1\",\n sha256 = \"a063ea72381527c2a0561da9c80000ef822bdd7c3241b1cc1b12100e3df081ee\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rancor/0.1.1/download\"],\n strip_prefix = \"rancor-0.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rancor-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rand-0.8.5\",\n sha256 = \"34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand/0.8.5/download\"],\n strip_prefix = \"rand-0.8.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rand-0.8.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rand-0.9.3\",\n sha256 = \"7ec095654a25171c2124e9e3393a930bddbffdc939556c914957a4c3e0a87166\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand/0.9.3/download\"],\n strip_prefix = \"rand-0.9.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rand-0.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rand_chacha-0.3.1\",\n sha256 = \"e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_chacha/0.3.1/download\"],\n strip_prefix = \"rand_chacha-0.3.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rand_chacha-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rand_chacha-0.9.0\",\n sha256 = \"d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_chacha/0.9.0/download\"],\n strip_prefix = \"rand_chacha-0.9.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rand_chacha-0.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rand_core-0.6.4\",\n sha256 = \"ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_core/0.6.4/download\"],\n strip_prefix = \"rand_core-0.6.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rand_core-0.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rand_core-0.9.5\",\n sha256 = \"76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_core/0.9.5/download\"],\n strip_prefix = \"rand_core-0.9.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rand_core-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rand_xorshift-0.4.0\",\n sha256 = \"513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_xorshift/0.4.0/download\"],\n strip_prefix = \"rand_xorshift-0.4.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rand_xorshift-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rayon-1.12.0\",\n sha256 = \"fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rayon/1.12.0/download\"],\n strip_prefix = \"rayon-1.12.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rayon-1.12.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rayon-core-1.13.0\",\n sha256 = \"22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rayon-core/1.13.0/download\"],\n strip_prefix = \"rayon-core-1.13.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rayon-core-1.13.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rcgen-0.13.2\",\n sha256 = \"75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rcgen/0.13.2/download\"],\n strip_prefix = \"rcgen-0.13.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rcgen-0.13.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__redox_syscall-0.5.18\",\n sha256 = \"ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/redox_syscall/0.5.18/download\"],\n strip_prefix = \"redox_syscall-0.5.18\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.redox_syscall-0.5.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ref-cast-1.0.25\",\n sha256 = \"f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ref-cast/1.0.25/download\"],\n strip_prefix = \"ref-cast-1.0.25\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ref-cast-1.0.25.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ref-cast-impl-1.0.25\",\n sha256 = \"b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ref-cast-impl/1.0.25/download\"],\n strip_prefix = \"ref-cast-impl-1.0.25\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ref-cast-impl-1.0.25.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__regex-1.12.3\",\n sha256 = \"e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex/1.12.3/download\"],\n strip_prefix = \"regex-1.12.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.regex-1.12.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__regex-automata-0.4.14\",\n sha256 = \"6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-automata/0.4.14/download\"],\n strip_prefix = \"regex-automata-0.4.14\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.regex-automata-0.4.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__regex-syntax-0.8.10\",\n sha256 = \"dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-syntax/0.8.10/download\"],\n strip_prefix = \"regex-syntax-0.8.10\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.regex-syntax-0.8.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rend-0.5.3\",\n sha256 = \"cadadef317c2f20755a64d7fdc48f9e7178ee6b0e1f7fce33fa60f1d68a276e6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rend/0.5.3/download\"],\n strip_prefix = \"rend-0.5.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rend-0.5.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__reqwest-0.13.4\",\n sha256 = \"219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/reqwest/0.13.4/download\"],\n strip_prefix = \"reqwest-0.13.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.reqwest-0.13.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__resolv-conf-0.7.6\",\n sha256 = \"1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/resolv-conf/0.7.6/download\"],\n strip_prefix = \"resolv-conf-0.7.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.resolv-conf-0.7.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ring-0.17.14\",\n sha256 = \"a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ring/0.17.14/download\"],\n strip_prefix = \"ring-0.17.14\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ring-0.17.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rkyv-0.8.15\",\n sha256 = \"1a30e631b7f4a03dee9056b8ef6982e8ba371dd5bedb74d3ec86df4499132c70\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rkyv/0.8.15/download\"],\n strip_prefix = \"rkyv-0.8.15\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rkyv-0.8.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rkyv_derive-0.8.15\",\n sha256 = \"8100bb34c0a1d0f907143db3149e6b4eea3c33b9ee8b189720168e818303986f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rkyv_derive/0.8.15/download\"],\n strip_prefix = \"rkyv_derive-0.8.15\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rkyv_derive-0.8.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustc-hash-2.1.1\",\n sha256 = \"357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc-hash/2.1.1/download\"],\n strip_prefix = \"rustc-hash-2.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustc-hash-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.rustc_version-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rusticata-macros-4.1.0\",\n sha256 = \"faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rusticata-macros/4.1.0/download\"],\n strip_prefix = \"rusticata-macros-4.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rusticata-macros-4.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustix-1.1.4\",\n sha256 = \"b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustix/1.1.4/download\"],\n strip_prefix = \"rustix-1.1.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustix-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustls-0.23.41\",\n sha256 = \"6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls/0.23.41/download\"],\n strip_prefix = \"rustls-0.23.41\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustls-0.23.41.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustls-native-certs-0.8.3\",\n sha256 = \"612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-native-certs/0.8.3/download\"],\n strip_prefix = \"rustls-native-certs-0.8.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustls-native-certs-0.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustls-pemfile-2.2.0\",\n sha256 = \"dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-pemfile/2.2.0/download\"],\n strip_prefix = \"rustls-pemfile-2.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustls-pemfile-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustls-pki-types-1.14.0\",\n sha256 = \"be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-pki-types/1.14.0/download\"],\n strip_prefix = \"rustls-pki-types-1.14.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustls-pki-types-1.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustls-platform-verifier-0.6.2\",\n sha256 = \"1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-platform-verifier/0.6.2/download\"],\n strip_prefix = \"rustls-platform-verifier-0.6.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustls-platform-verifier-0.6.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustls-platform-verifier-android-0.1.1\",\n sha256 = \"f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-platform-verifier-android/0.1.1/download\"],\n strip_prefix = \"rustls-platform-verifier-android-0.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustls-platform-verifier-android-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustls-webpki-0.103.9\",\n sha256 = \"d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-webpki/0.103.9/download\"],\n strip_prefix = \"rustls-webpki-0.103.9\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustls-webpki-0.103.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rustversion-1.0.22\",\n sha256 = \"b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustversion/1.0.22/download\"],\n strip_prefix = \"rustversion-1.0.22\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rustversion-1.0.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__rusty-fork-0.3.1\",\n sha256 = \"cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rusty-fork/0.3.1/download\"],\n strip_prefix = \"rusty-fork-0.3.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.rusty-fork-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__ryu-1.0.23\",\n sha256 = \"9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ryu/1.0.23/download\"],\n strip_prefix = \"ryu-1.0.23\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.ryu-1.0.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__saa-5.6.0\",\n sha256 = \"68f5acb362a0e75c2a963532fa7fabf13dff81626dc494df16488d30befcbea0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/saa/5.6.0/download\"],\n strip_prefix = \"saa-5.6.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.saa-5.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__same-file-1.0.6\",\n sha256 = \"93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/same-file/1.0.6/download\"],\n strip_prefix = \"same-file-1.0.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.same-file-1.0.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__scc-3.7.1\",\n sha256 = \"5bcd12b6caff5213cc3c03123cde8c3db5e413008a63b0c0ba35e6275825ea92\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/scc/3.7.1/download\"],\n strip_prefix = \"scc-3.7.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.scc-3.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__schannel-0.1.28\",\n sha256 = \"891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schannel/0.1.28/download\"],\n strip_prefix = \"schannel-0.1.28\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.schannel-0.1.28.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__schemars-0.9.0\",\n sha256 = \"4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schemars/0.9.0/download\"],\n strip_prefix = \"schemars-0.9.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.schemars-0.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__schemars-1.2.2\",\n sha256 = \"687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schemars/1.2.2/download\"],\n strip_prefix = \"schemars-1.2.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.schemars-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__scopeguard-1.2.0\",\n sha256 = \"94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/scopeguard/1.2.0/download\"],\n strip_prefix = \"scopeguard-1.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.scopeguard-1.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__sdd-4.8.6\",\n sha256 = \"e5f0e40a01b94e35d1dacbcfbe5bfd3d31e37d9590b2e6d86a82b0e87bd4f551\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sdd/4.8.6/download\"],\n strip_prefix = \"sdd-4.8.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.sdd-4.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__secrecy-0.10.3\",\n sha256 = \"e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/secrecy/0.10.3/download\"],\n strip_prefix = \"secrecy-0.10.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.secrecy-0.10.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__security-framework-3.7.0\",\n sha256 = \"b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/security-framework/3.7.0/download\"],\n strip_prefix = \"security-framework-3.7.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.security-framework-3.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__security-framework-sys-2.17.0\",\n sha256 = \"6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/security-framework-sys/2.17.0/download\"],\n strip_prefix = \"security-framework-sys-2.17.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.security-framework-sys-2.17.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__semver-1.0.27\",\n sha256 = \"d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/semver/1.0.27/download\"],\n strip_prefix = \"semver-1.0.27\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.semver-1.0.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde-1.0.228\",\n sha256 = \"9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde/1.0.228/download\"],\n strip_prefix = \"serde-1.0.228\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde-value-0.7.0\",\n sha256 = \"f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde-value/0.7.0/download\"],\n strip_prefix = \"serde-value-0.7.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde-value-0.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_core-1.0.228\",\n sha256 = \"41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_core/1.0.228/download\"],\n strip_prefix = \"serde_core-1.0.228\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_core-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_derive-1.0.228\",\n sha256 = \"d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive/1.0.228/download\"],\n strip_prefix = \"serde_derive-1.0.228\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_derive-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_json-1.0.150\",\n sha256 = \"e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_json/1.0.150/download\"],\n strip_prefix = \"serde_json-1.0.150\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_json-1.0.150.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_path_to_error-0.1.20\",\n sha256 = \"10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_path_to_error/0.1.20/download\"],\n strip_prefix = \"serde_path_to_error-0.1.20\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_path_to_error-0.1.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_spanned-1.1.1\",\n sha256 = \"6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_spanned/1.1.1/download\"],\n strip_prefix = \"serde_spanned-1.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_spanned-1.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_urlencoded-0.7.1\",\n sha256 = \"d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_urlencoded/0.7.1/download\"],\n strip_prefix = \"serde_urlencoded-0.7.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_urlencoded-0.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_with-3.22.0\",\n sha256 = \"ee78f1fbe43ac4a0e47aadb3dbd357b69eb0d3793e948624cd03dd2750ab1c0a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_with/3.22.0/download\"],\n strip_prefix = \"serde_with-3.22.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_with-3.22.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_with_macros-3.22.0\",\n sha256 = \"8705578779c2b6bd90d84d66eb2e206b708b1a4d7b9f17641b293545bf1c7e46\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_with_macros/3.22.0/download\"],\n strip_prefix = \"serde_with_macros-3.22.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_with_macros-3.22.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_yaml-0.9.34-deprecated\",\n sha256 = \"6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_yaml/0.9.34+deprecated/download\"],\n strip_prefix = \"serde_yaml-0.9.34+deprecated\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_yaml-0.9.34+deprecated.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__serde_yaml_ng-0.10.0\",\n sha256 = \"7b4db627b98b36d4203a7b458cf3573730f2bb591b28871d916dfa9efabfd41f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_yaml_ng/0.10.0/download\"],\n strip_prefix = \"serde_yaml_ng-0.10.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.serde_yaml_ng-0.10.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__sha2-0.10.9\",\n sha256 = \"a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sha2/0.10.9/download\"],\n strip_prefix = \"sha2-0.10.9\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.sha2-0.10.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__sharded-slab-0.1.7\",\n sha256 = \"f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sharded-slab/0.1.7/download\"],\n strip_prefix = \"sharded-slab-0.1.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.sharded-slab-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__shlex-1.3.0\",\n sha256 = \"0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/shlex/1.3.0/download\"],\n strip_prefix = \"shlex-1.3.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.shlex-1.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__signal-hook-registry-1.4.8\",\n sha256 = \"c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/signal-hook-registry/1.4.8/download\"],\n strip_prefix = \"signal-hook-registry-1.4.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.signal-hook-registry-1.4.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__simdutf8-0.1.5\",\n sha256 = \"e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/simdutf8/0.1.5/download\"],\n strip_prefix = \"simdutf8-0.1.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.simdutf8-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__siphasher-1.0.2\",\n sha256 = \"b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/siphasher/1.0.2/download\"],\n strip_prefix = \"siphasher-1.0.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.siphasher-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.slab-0.4.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__smallvec-1.15.1\",\n sha256 = \"67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/smallvec/1.15.1/download\"],\n strip_prefix = \"smallvec-1.15.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.smallvec-1.15.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__socket2-0.5.10\",\n sha256 = \"e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/socket2/0.5.10/download\"],\n strip_prefix = \"socket2-0.5.10\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.socket2-0.5.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__socket2-0.6.4\",\n sha256 = \"52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/socket2/0.6.4/download\"],\n strip_prefix = \"socket2-0.6.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.socket2-0.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__sonic-number-0.1.1\",\n sha256 = \"5661364b38abad49cf1ade6631fcc35d2ccf882a7d68616b4228b7717feb5fba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sonic-number/0.1.1/download\"],\n strip_prefix = \"sonic-number-0.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.sonic-number-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__sonic-rs-0.5.8\",\n sha256 = \"d971cc77a245ccf1756dbd1a87c3e7f709c0191464096510d43eec056d0f2c4f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sonic-rs/0.5.8/download\"],\n strip_prefix = \"sonic-rs-0.5.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.sonic-rs-0.5.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__sonic-simd-0.1.3\",\n sha256 = \"e9f944718c33623919878cf74b4c9361eb3024f635733922b26722b14cd3f8cc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sonic-simd/0.1.3/download\"],\n strip_prefix = \"sonic-simd-0.1.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.sonic-simd-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__spin-0.9.8\",\n sha256 = \"6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/spin/0.9.8/download\"],\n strip_prefix = \"spin-0.9.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.spin-0.9.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.stable_deref_trait-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__strsim-0.11.1\",\n sha256 = \"7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/strsim/0.11.1/download\"],\n strip_prefix = \"strsim-0.11.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.strsim-0.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.subtle-2.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__syn-2.0.117\",\n sha256 = \"e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/2.0.117/download\"],\n strip_prefix = \"syn-2.0.117\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.syn-2.0.117.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__sync_wrapper-1.0.2\",\n sha256 = \"0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sync_wrapper/1.0.2/download\"],\n strip_prefix = \"sync_wrapper-1.0.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.sync_wrapper-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__synstructure-0.13.2\",\n sha256 = \"728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/synstructure/0.13.2/download\"],\n strip_prefix = \"synstructure-0.13.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.synstructure-0.13.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tempfile-3.27.0\",\n sha256 = \"32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tempfile/3.27.0/download\"],\n strip_prefix = \"tempfile-3.27.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tempfile-3.27.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__thiserror-1.0.69\",\n sha256 = \"b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror/1.0.69/download\"],\n strip_prefix = \"thiserror-1.0.69\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.thiserror-1.0.69.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__thiserror-2.0.18\",\n sha256 = \"4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror/2.0.18/download\"],\n strip_prefix = \"thiserror-2.0.18\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.thiserror-2.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__thiserror-impl-1.0.69\",\n sha256 = \"4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror-impl/1.0.69/download\"],\n strip_prefix = \"thiserror-impl-1.0.69\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.thiserror-impl-1.0.69.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__thiserror-impl-2.0.18\",\n sha256 = \"ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror-impl/2.0.18/download\"],\n strip_prefix = \"thiserror-impl-2.0.18\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.thiserror-impl-2.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__thread_local-1.1.9\",\n sha256 = \"f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thread_local/1.1.9/download\"],\n strip_prefix = \"thread_local-1.1.9\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.thread_local-1.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__time-0.3.47\",\n sha256 = \"743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time/0.3.47/download\"],\n strip_prefix = \"time-0.3.47\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.time-0.3.47.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__time-core-0.1.8\",\n sha256 = \"7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-core/0.1.8/download\"],\n strip_prefix = \"time-core-0.1.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.time-core-0.1.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__time-macros-0.2.27\",\n sha256 = \"2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-macros/0.2.27/download\"],\n strip_prefix = \"time-macros-0.2.27\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.time-macros-0.2.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tinystr-0.8.2\",\n sha256 = \"42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tinystr/0.8.2/download\"],\n strip_prefix = \"tinystr-0.8.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tinystr-0.8.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tinytemplate-1.2.1\",\n sha256 = \"be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tinytemplate/1.2.1/download\"],\n strip_prefix = \"tinytemplate-1.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tinytemplate-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tinyvec-1.10.0\",\n sha256 = \"bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tinyvec/1.10.0/download\"],\n strip_prefix = \"tinyvec-1.10.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tinyvec-1.10.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tinyvec_macros-0.1.1\",\n sha256 = \"1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tinyvec_macros/0.1.1/download\"],\n strip_prefix = \"tinyvec_macros-0.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tinyvec_macros-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tokio-1.52.3\",\n sha256 = \"8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio/1.52.3/download\"],\n strip_prefix = \"tokio-1.52.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tokio-1.52.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tokio-macros-2.7.0\",\n sha256 = \"385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-macros/2.7.0/download\"],\n strip_prefix = \"tokio-macros-2.7.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tokio-macros-2.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tokio-rustls-0.26.4\",\n sha256 = \"1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-rustls/0.26.4/download\"],\n strip_prefix = \"tokio-rustls-0.26.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tokio-rustls-0.26.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tokio-stream-0.1.18\",\n sha256 = \"32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-stream/0.1.18/download\"],\n strip_prefix = \"tokio-stream-0.1.18\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tokio-stream-0.1.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tokio-util-0.7.18\",\n sha256 = \"9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-util/0.7.18/download\"],\n strip_prefix = \"tokio-util-0.7.18\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tokio-util-0.7.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__toml-1.1.4-spec-1.1.0\",\n sha256 = \"3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml/1.1.4+spec-1.1.0/download\"],\n strip_prefix = \"toml-1.1.4+spec-1.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.toml-1.1.4+spec-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__toml_datetime-1.1.1-spec-1.1.0\",\n sha256 = \"3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_datetime/1.1.1+spec-1.1.0/download\"],\n strip_prefix = \"toml_datetime-1.1.1+spec-1.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.toml_datetime-1.1.1+spec-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__toml_parser-1.1.3-spec-1.1.0\",\n sha256 = \"1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_parser/1.1.3+spec-1.1.0/download\"],\n strip_prefix = \"toml_parser-1.1.3+spec-1.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.toml_parser-1.1.3+spec-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__toml_writer-1.1.2-spec-1.1.0\",\n sha256 = \"7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_writer/1.1.2+spec-1.1.0/download\"],\n strip_prefix = \"toml_writer-1.1.2+spec-1.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.toml_writer-1.1.2+spec-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tonic-0.14.6\",\n sha256 = \"ac2a5518c70fa84342385732db33fb3f44bc4cc748936eb5833d2df34d6445ef\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tonic/0.14.6/download\"],\n strip_prefix = \"tonic-0.14.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tonic-0.14.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tonic-build-0.14.6\",\n sha256 = \"c68f61875ac5293cf72e6c8cf0158086428c82c37229e98c840878f1706b0322\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tonic-build/0.14.6/download\"],\n strip_prefix = \"tonic-build-0.14.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tonic-build-0.14.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tonic-prost-0.14.6\",\n sha256 = \"50849f68853be452acf590cde0b146665b8d507b3b8af17261df47e02c209ea0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tonic-prost/0.14.6/download\"],\n strip_prefix = \"tonic-prost-0.14.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tonic-prost-0.14.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tonic-prost-build-0.14.6\",\n sha256 = \"654e5643eff75d7f8c99197ce1440ed19a3474eada74c12bbac488b2cafdae27\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tonic-prost-build/0.14.6/download\"],\n strip_prefix = \"tonic-prost-build-0.14.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tonic-prost-build-0.14.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tonic-types-0.14.6\",\n sha256 = \"73ab1b02061f83d519bba3caa167f88f261ef05720ab8ebc954ade70de3348e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tonic-types/0.14.6/download\"],\n strip_prefix = \"tonic-types-0.14.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tonic-types-0.14.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tower-0.5.3\",\n sha256 = \"ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower/0.5.3/download\"],\n strip_prefix = \"tower-0.5.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tower-0.5.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tower-http-0.6.8\",\n sha256 = \"d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-http/0.6.8/download\"],\n strip_prefix = \"tower-http-0.6.8\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tower-http-0.6.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tower-layer-0.3.3\",\n sha256 = \"121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-layer/0.3.3/download\"],\n strip_prefix = \"tower-layer-0.3.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tower-layer-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tower-service-0.3.3\",\n sha256 = \"8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-service/0.3.3/download\"],\n strip_prefix = \"tower-service-0.3.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tower-service-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tracing-0.1.44\",\n sha256 = \"63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing/0.1.44/download\"],\n strip_prefix = \"tracing-0.1.44\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tracing-0.1.44.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tracing-attributes-0.1.31\",\n sha256 = \"7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-attributes/0.1.31/download\"],\n strip_prefix = \"tracing-attributes-0.1.31\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tracing-attributes-0.1.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tracing-core-0.1.36\",\n sha256 = \"db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-core/0.1.36/download\"],\n strip_prefix = \"tracing-core-0.1.36\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tracing-core-0.1.36.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tracing-log-0.2.0\",\n sha256 = \"ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-log/0.2.0/download\"],\n strip_prefix = \"tracing-log-0.2.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tracing-log-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tracing-opentelemetry-0.33.0\",\n sha256 = \"adbc64cba7137545b8044cb1fe9814f7aacf3c6b5f9b45be8bb5db538befdb26\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-opentelemetry/0.33.0/download\"],\n strip_prefix = \"tracing-opentelemetry-0.33.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tracing-opentelemetry-0.33.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__tracing-subscriber-0.3.23\",\n sha256 = \"cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-subscriber/0.3.23/download\"],\n strip_prefix = \"tracing-subscriber-0.3.23\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.tracing-subscriber-0.3.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__try-lock-0.2.5\",\n sha256 = \"e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/try-lock/0.2.5/download\"],\n strip_prefix = \"try-lock-0.2.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.try-lock-0.2.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__typenum-1.20.0\",\n sha256 = \"40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typenum/1.20.0/download\"],\n strip_prefix = \"typenum-1.20.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.typenum-1.20.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.ucd-trie-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__unarray-0.1.4\",\n sha256 = \"eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unarray/0.1.4/download\"],\n strip_prefix = \"unarray-0.1.4\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.unarray-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__unicase-2.9.0\",\n sha256 = \"dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicase/2.9.0/download\"],\n strip_prefix = \"unicase-2.9.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.unicase-2.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__unicode-ident-1.0.24\",\n sha256 = \"e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-ident/1.0.24/download\"],\n strip_prefix = \"unicode-ident-1.0.24\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.unicode-ident-1.0.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__unicode-xid-0.2.6\",\n sha256 = \"ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-xid/0.2.6/download\"],\n strip_prefix = \"unicode-xid-0.2.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.unicode-xid-0.2.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__unsafe-libyaml-0.2.11\",\n sha256 = \"673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unsafe-libyaml/0.2.11/download\"],\n strip_prefix = \"unsafe-libyaml-0.2.11\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.unsafe-libyaml-0.2.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__untrusted-0.9.0\",\n sha256 = \"8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/untrusted/0.9.0/download\"],\n strip_prefix = \"untrusted-0.9.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.untrusted-0.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.url-2.5.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.utf8_iter-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__utf8parse-0.2.2\",\n sha256 = \"06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/utf8parse/0.2.2/download\"],\n strip_prefix = \"utf8parse-0.2.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.utf8parse-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__uuid-1.22.0\",\n sha256 = \"a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/uuid/1.22.0/download\"],\n strip_prefix = \"uuid-1.22.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.uuid-1.22.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__valuable-0.1.1\",\n sha256 = \"ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/valuable/0.1.1/download\"],\n strip_prefix = \"valuable-0.1.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.valuable-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.vcpkg-0.2.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__version_check-0.9.5\",\n sha256 = \"0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/version_check/0.9.5/download\"],\n strip_prefix = \"version_check-0.9.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.version_check-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wait-timeout-0.2.1\",\n sha256 = \"09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wait-timeout/0.2.1/download\"],\n strip_prefix = \"wait-timeout-0.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wait-timeout-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__walkdir-2.5.0\",\n sha256 = \"29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/walkdir/2.5.0/download\"],\n strip_prefix = \"walkdir-2.5.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.walkdir-2.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__want-0.3.1\",\n sha256 = \"bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/want/0.3.1/download\"],\n strip_prefix = \"want-0.3.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.want-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasi-0.11.1-wasi-snapshot-preview1\",\n sha256 = \"ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasi/0.11.1+wasi-snapshot-preview1/download\"],\n strip_prefix = \"wasi-0.11.1+wasi-snapshot-preview1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasip2-1.0.2-wasi-0.2.9\",\n sha256 = \"9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasip2/1.0.2+wasi-0.2.9/download\"],\n strip_prefix = \"wasip2-1.0.2+wasi-0.2.9\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasip2-1.0.2+wasi-0.2.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasip3-0.4.0-wasi-0.3.0-rc-2026-01-06\",\n sha256 = \"5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasip3/0.4.0+wasi-0.3.0-rc-2026-01-06/download\"],\n strip_prefix = \"wasip3-0.4.0+wasi-0.3.0-rc-2026-01-06\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasip3-0.4.0+wasi-0.3.0-rc-2026-01-06.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-bindgen-0.2.113\",\n sha256 = \"60722a937f594b7fde9adb894d7c092fc1bb6612897c46368d18e7a20208eff2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen/0.2.113/download\"],\n strip_prefix = \"wasm-bindgen-0.2.113\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-bindgen-0.2.113.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-bindgen-futures-0.4.63\",\n sha256 = \"8a89f4650b770e4521aa6573724e2aed4704372151bd0de9d16a3bbabb87441a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-futures/0.4.63/download\"],\n strip_prefix = \"wasm-bindgen-futures-0.4.63\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-bindgen-futures-0.4.63.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-bindgen-macro-0.2.113\",\n sha256 = \"0fac8c6395094b6b91c4af293f4c79371c163f9a6f56184d2c9a85f5a95f3950\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro/0.2.113/download\"],\n strip_prefix = \"wasm-bindgen-macro-0.2.113\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-bindgen-macro-0.2.113.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-bindgen-macro-support-0.2.113\",\n sha256 = \"ab3fabce6159dc20728033842636887e4877688ae94382766e00b180abac9d60\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.113/download\"],\n strip_prefix = \"wasm-bindgen-macro-support-0.2.113\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-bindgen-macro-support-0.2.113.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-bindgen-shared-0.2.113\",\n sha256 = \"de0e091bdb824da87dc01d967388880d017a0a9bc4f3bdc0d86ee9f9336e3bb5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-shared/0.2.113/download\"],\n strip_prefix = \"wasm-bindgen-shared-0.2.113\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-bindgen-shared-0.2.113.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-encoder-0.244.0\",\n sha256 = \"990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-encoder/0.244.0/download\"],\n strip_prefix = \"wasm-encoder-0.244.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-encoder-0.244.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-metadata-0.244.0\",\n sha256 = \"bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-metadata/0.244.0/download\"],\n strip_prefix = \"wasm-metadata-0.244.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-metadata-0.244.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasm-streams-0.5.0\",\n sha256 = \"9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-streams/0.5.0/download\"],\n strip_prefix = \"wasm-streams-0.5.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasm-streams-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wasmparser-0.244.0\",\n sha256 = \"47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasmparser/0.244.0/download\"],\n strip_prefix = \"wasmparser-0.244.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wasmparser-0.244.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__web-sys-0.3.90\",\n sha256 = \"705eceb4ce901230f8625bd1d665128056ccbe4b7408faa625eec1ba80f59a97\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/web-sys/0.3.90/download\"],\n strip_prefix = \"web-sys-0.3.90\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.web-sys-0.3.90.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__web-time-1.1.0\",\n sha256 = \"5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/web-time/1.1.0/download\"],\n strip_prefix = \"web-time-1.1.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.web-time-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__webpki-root-certs-1.0.6\",\n sha256 = \"804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/webpki-root-certs/1.0.6/download\"],\n strip_prefix = \"webpki-root-certs-1.0.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.webpki-root-certs-1.0.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__webpki-roots-1.0.7\",\n sha256 = \"52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/webpki-roots/1.0.7/download\"],\n strip_prefix = \"webpki-roots-1.0.7\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.webpki-roots-1.0.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__widestring-1.2.1\",\n sha256 = \"72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/widestring/1.2.1/download\"],\n strip_prefix = \"widestring-1.2.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.widestring-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__winapi-util-0.1.11\",\n sha256 = \"c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi-util/0.1.11/download\"],\n strip_prefix = \"winapi-util-0.1.11\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.winapi-util-0.1.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-core-0.62.2\",\n sha256 = \"b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-core/0.62.2/download\"],\n strip_prefix = \"windows-core-0.62.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-core-0.62.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-implement-0.60.2\",\n sha256 = \"053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-implement/0.60.2/download\"],\n strip_prefix = \"windows-implement-0.60.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-implement-0.60.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-interface-0.59.3\",\n sha256 = \"3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-interface/0.59.3/download\"],\n strip_prefix = \"windows-interface-0.59.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-interface-0.59.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.windows-link-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-result-0.4.1\",\n sha256 = \"7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-result/0.4.1/download\"],\n strip_prefix = \"windows-result-0.4.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-result-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-strings-0.5.1\",\n sha256 = \"7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-strings/0.5.1/download\"],\n strip_prefix = \"windows-strings-0.5.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-strings-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-sys-0.45.0\",\n sha256 = \"75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.45.0/download\"],\n strip_prefix = \"windows-sys-0.45.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-sys-0.45.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-sys-0.48.0\",\n sha256 = \"677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.48.0/download\"],\n strip_prefix = \"windows-sys-0.48.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-sys-0.48.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-sys-0.52.0\",\n sha256 = \"282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.52.0/download\"],\n strip_prefix = \"windows-sys-0.52.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-sys-0.52.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-sys-0.60.2\",\n sha256 = \"f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.60.2/download\"],\n strip_prefix = \"windows-sys-0.60.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-sys-0.60.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.windows-sys-0.61.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-targets-0.42.2\",\n sha256 = \"8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.42.2/download\"],\n strip_prefix = \"windows-targets-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-targets-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-targets-0.48.5\",\n sha256 = \"9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.48.5/download\"],\n strip_prefix = \"windows-targets-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-targets-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-targets-0.52.6\",\n sha256 = \"9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.52.6/download\"],\n strip_prefix = \"windows-targets-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-targets-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows-targets-0.53.5\",\n sha256 = \"4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.53.5/download\"],\n strip_prefix = \"windows-targets-0.53.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows-targets-0.53.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_gnullvm-0.42.2\",\n sha256 = \"597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.42.2/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_gnullvm-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_gnullvm-0.48.5\",\n sha256 = \"2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.48.5/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_gnullvm-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_gnullvm-0.52.6\",\n sha256 = \"32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_gnullvm-0.53.1\",\n sha256 = \"a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.53.1/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_gnullvm-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_msvc-0.42.2\",\n sha256 = \"e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.42.2/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_msvc-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_msvc-0.48.5\",\n sha256 = \"dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.48.5/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_msvc-0.52.6\",\n sha256 = \"09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_aarch64_msvc-0.53.1\",\n sha256 = \"b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.53.1/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_aarch64_msvc-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_gnu-0.42.2\",\n sha256 = \"c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.42.2/download\"],\n strip_prefix = \"windows_i686_gnu-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_gnu-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_gnu-0.48.5\",\n sha256 = \"a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.48.5/download\"],\n strip_prefix = \"windows_i686_gnu-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_gnu-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_gnu-0.52.6\",\n sha256 = \"8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnu-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_gnu-0.53.1\",\n sha256 = \"960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.53.1/download\"],\n strip_prefix = \"windows_i686_gnu-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_gnu-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_gnullvm-0.52.6\",\n sha256 = \"0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnullvm-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_gnullvm-0.53.1\",\n sha256 = \"fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnullvm/0.53.1/download\"],\n strip_prefix = \"windows_i686_gnullvm-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_gnullvm-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_msvc-0.42.2\",\n sha256 = \"44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.42.2/download\"],\n strip_prefix = \"windows_i686_msvc-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_msvc-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_msvc-0.48.5\",\n sha256 = \"8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.48.5/download\"],\n strip_prefix = \"windows_i686_msvc-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_msvc-0.52.6\",\n sha256 = \"240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.52.6/download\"],\n strip_prefix = \"windows_i686_msvc-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_i686_msvc-0.53.1\",\n sha256 = \"1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.53.1/download\"],\n strip_prefix = \"windows_i686_msvc-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_i686_msvc-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnu-0.42.2\",\n sha256 = \"8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.42.2/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnu-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnu-0.48.5\",\n sha256 = \"53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnu-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnu-0.52.6\",\n sha256 = \"147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnu-0.53.1\",\n sha256 = \"9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.53.1/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnu-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnullvm-0.42.2\",\n sha256 = \"26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.42.2/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnullvm-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnullvm-0.48.5\",\n sha256 = \"0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnullvm-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnullvm-0.52.6\",\n sha256 = \"24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_gnullvm-0.53.1\",\n sha256 = \"0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.53.1/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_gnullvm-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_msvc-0.42.2\",\n sha256 = \"9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.42.2/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.42.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_msvc-0.42.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_msvc-0.48.5\",\n sha256 = \"ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.48.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_msvc-0.52.6\",\n sha256 = \"589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.52.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__windows_x86_64_msvc-0.53.1\",\n sha256 = \"d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.53.1/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.53.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.windows_x86_64_msvc-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_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(\"@stargate_crates//stargate_crates:BUILD.winnow-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__winreg-0.50.0\",\n sha256 = \"524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winreg/0.50.0/download\"],\n strip_prefix = \"winreg-0.50.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.winreg-0.50.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wit-bindgen-0.51.0\",\n sha256 = \"d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen/0.51.0/download\"],\n strip_prefix = \"wit-bindgen-0.51.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wit-bindgen-0.51.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wit-bindgen-core-0.51.0\",\n sha256 = \"ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen-core/0.51.0/download\"],\n strip_prefix = \"wit-bindgen-core-0.51.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wit-bindgen-core-0.51.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wit-bindgen-rust-0.51.0\",\n sha256 = \"b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen-rust/0.51.0/download\"],\n strip_prefix = \"wit-bindgen-rust-0.51.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wit-bindgen-rust-0.51.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wit-bindgen-rust-macro-0.51.0\",\n sha256 = \"0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen-rust-macro/0.51.0/download\"],\n strip_prefix = \"wit-bindgen-rust-macro-0.51.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wit-bindgen-rust-macro-0.51.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wit-component-0.244.0\",\n sha256 = \"9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-component/0.244.0/download\"],\n strip_prefix = \"wit-component-0.244.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wit-component-0.244.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__wit-parser-0.244.0\",\n sha256 = \"ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-parser/0.244.0/download\"],\n strip_prefix = \"wit-parser-0.244.0\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.wit-parser-0.244.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__writeable-0.6.2\",\n sha256 = \"9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/writeable/0.6.2/download\"],\n strip_prefix = \"writeable-0.6.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.writeable-0.6.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__x509-parser-0.18.1\",\n sha256 = \"d43b0f71ce057da06bc0851b23ee24f3f86190b07203dd8f567d0b706a185202\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/x509-parser/0.18.1/download\"],\n strip_prefix = \"x509-parser-0.18.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.x509-parser-0.18.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__xxhash-rust-0.8.16\",\n sha256 = \"4d93c89cdc2d3a63c3ec48ffe926931bdc069eafa8e4402fe6d8f790c9d1e576\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/xxhash-rust/0.8.16/download\"],\n strip_prefix = \"xxhash-rust-0.8.16\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.xxhash-rust-0.8.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__yasna-0.5.2\",\n sha256 = \"e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yasna/0.5.2/download\"],\n strip_prefix = \"yasna-0.5.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.yasna-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__yoke-0.8.1\",\n sha256 = \"72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke/0.8.1/download\"],\n strip_prefix = \"yoke-0.8.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.yoke-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__yoke-derive-0.8.1\",\n sha256 = \"b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke-derive/0.8.1/download\"],\n strip_prefix = \"yoke-derive-0.8.1\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.yoke-derive-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zerocopy-0.8.39\",\n sha256 = \"db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy/0.8.39/download\"],\n strip_prefix = \"zerocopy-0.8.39\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zerocopy-0.8.39.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zerocopy-derive-0.8.39\",\n sha256 = \"4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy-derive/0.8.39/download\"],\n strip_prefix = \"zerocopy-derive-0.8.39\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zerocopy-derive-0.8.39.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zerofrom-0.1.6\",\n sha256 = \"50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom/0.1.6/download\"],\n strip_prefix = \"zerofrom-0.1.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zerofrom-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zerofrom-derive-0.1.6\",\n sha256 = \"d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom-derive/0.1.6/download\"],\n strip_prefix = \"zerofrom-derive-0.1.6\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zerofrom-derive-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zeroize-1.8.2\",\n sha256 = \"b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zeroize/1.8.2/download\"],\n strip_prefix = \"zeroize-1.8.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zeroize-1.8.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zerotrie-0.2.3\",\n sha256 = \"2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerotrie/0.2.3/download\"],\n strip_prefix = \"zerotrie-0.2.3\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zerotrie-0.2.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zerovec-0.11.5\",\n sha256 = \"6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec/0.11.5/download\"],\n strip_prefix = \"zerovec-0.11.5\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zerovec-0.11.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zerovec-derive-0.11.2\",\n sha256 = \"eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec-derive/0.11.2/download\"],\n strip_prefix = \"zerovec-derive-0.11.2\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zerovec-derive-0.11.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"stargate_crates__zmij-1.0.21\",\n sha256 = \"b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zmij/1.0.21/download\"],\n strip_prefix = \"zmij-1.0.21\",\n build_file = Label(\"@stargate_crates//stargate_crates:BUILD.zmij-1.0.21.bazel\"),\n )\n\n return [\n struct(repo=\"stargate_crates__anyhow-1.0.103\", is_dev_dep = False),\n struct(repo=\"stargate_crates__async-stream-0.3.6\", is_dev_dep = False),\n struct(repo=\"stargate_crates__async-trait-0.1.89\", is_dev_dep = False),\n struct(repo=\"stargate_crates__axum-0.8.9\", is_dev_dep = False),\n struct(repo=\"stargate_crates__built-0.8.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__bytes-1.12.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__capnp-0.23.2\", is_dev_dep = False),\n struct(repo=\"stargate_crates__capnp-futures-0.23.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__clap-4.6.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__flume-0.12.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__futures-0.3.32\", is_dev_dep = False),\n struct(repo=\"stargate_crates__git2-0.20.4\", is_dev_dep = False),\n struct(repo=\"stargate_crates__h3-0.0.8\", is_dev_dep = False),\n struct(repo=\"stargate_crates__h3-quinn-0.0.10\", is_dev_dep = False),\n struct(repo=\"stargate_crates__hickory-resolver-0.24.4\", is_dev_dep = False),\n struct(repo=\"stargate_crates__http-1.4.2\", is_dev_dep = False),\n struct(repo=\"stargate_crates__httpdate-1.0.3\", is_dev_dep = False),\n struct(repo=\"stargate_crates__indexmap-2.14.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__k8s-openapi-0.27.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__kube-3.1.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__memchr-2.8.3\", is_dev_dep = False),\n struct(repo=\"stargate_crates__opentelemetry-0.32.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__opentelemetry-http-0.32.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__opentelemetry-otlp-0.32.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__opentelemetry_sdk-0.32.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__parking_lot-0.12.5\", is_dev_dep = False),\n struct(repo=\"stargate_crates__prometheus-0.14.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__prost-0.14.4\", is_dev_dep = False),\n struct(repo=\"stargate_crates__quinn-0.11.11\", is_dev_dep = False),\n struct(repo=\"stargate_crates__rand-0.9.3\", is_dev_dep = False),\n struct(repo=\"stargate_crates__rcgen-0.13.2\", is_dev_dep = False),\n struct(repo=\"stargate_crates__reqwest-0.13.4\", is_dev_dep = False),\n struct(repo=\"stargate_crates__rustls-0.23.41\", is_dev_dep = False),\n struct(repo=\"stargate_crates__rustls-pemfile-2.2.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__rustls-webpki-0.103.9\", is_dev_dep = False),\n struct(repo=\"stargate_crates__scc-3.7.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__serde-1.0.228\", is_dev_dep = False),\n struct(repo=\"stargate_crates__serde_json-1.0.150\", is_dev_dep = False),\n struct(repo=\"stargate_crates__serde_with-3.22.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__serde_yaml_ng-0.10.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__sonic-rs-0.5.8\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tempfile-3.27.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__thiserror-2.0.18\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tokio-1.52.3\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tokio-stream-0.1.18\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tokio-util-0.7.18\", is_dev_dep = False),\n struct(repo=\"stargate_crates__toml-1.1.4-spec-1.1.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tonic-0.14.6\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tonic-prost-0.14.6\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tower-0.5.3\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tracing-0.1.44\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tracing-opentelemetry-0.33.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__tracing-subscriber-0.3.23\", is_dev_dep = False),\n struct(repo=\"stargate_crates__url-2.5.8\", is_dev_dep = False),\n struct(repo=\"stargate_crates__uuid-1.22.0\", is_dev_dep = False),\n struct(repo=\"stargate_crates__x509-parser-0.18.1\", is_dev_dep = False),\n struct(repo=\"stargate_crates__xxhash-rust-0.8.16\", is_dev_dep = False),\n struct(repo = \"stargate_crates__capnpc-0.23.3\", is_dev_dep = True),\n struct(repo = \"stargate_crates__criterion-0.5.1\", is_dev_dep = True),\n struct(repo = \"stargate_crates__hyper-util-0.1.20\", is_dev_dep = True),\n struct(repo = \"stargate_crates__proptest-1.11.0\", is_dev_dep = True),\n struct(repo = \"stargate_crates__tonic-prost-build-0.14.6\", is_dev_dep = True),\n ]\n" } } }, @@ -14636,6 +14636,19 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"allocator_api2\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=allocator-api2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.21\",\n)\n" } }, + "stargate_crates__android_system_properties-0.1.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/android_system_properties/0.1.6/download" + ], + "strip_prefix": "android_system_properties-0.1.6", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"android_system_properties\",\n deps = [\n \"@stargate_crates__libc-0.2.186//:libc\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=android_system_properties\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.6\",\n)\n" + } + }, "stargate_crates__anes-0.1.6": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -14987,6 +15000,19 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"block_buffer\",\n deps = [\n \"@stargate_crates__generic-array-0.14.7//:generic_array\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=block-buffer\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.10.4\",\n)\n" } }, + "stargate_crates__bs58-0.5.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/bs58/0.5.1/download" + ], + "strip_prefix": "bs58-0.5.1", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"bs58\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=bs58\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.1\",\n)\n" + } + }, "stargate_crates__built-0.8.1": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -15130,6 +15156,19 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"cfg_aliases\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=cfg_aliases\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.1\",\n)\n" } }, + "stargate_crates__chrono-0.4.45": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/chrono/0.4.45/download" + ], + "strip_prefix": "chrono-0.4.45", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"chrono\",\n deps = [\n \"@stargate_crates__num-traits-0.2.19//:num_traits\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=chrono\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.45\",\n)\n" + } + }, "stargate_crates__ciborium-0.2.2": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -15403,6 +15442,45 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"crypto_common\",\n deps = [\n \"@stargate_crates__generic-array-0.14.7//:generic_array\",\n \"@stargate_crates__typenum-1.20.0//:typenum\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=crypto-common\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.7\",\n)\n" } }, + "stargate_crates__darling-0.23.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/darling/0.23.0/download" + ], + "strip_prefix": "darling-0.23.0", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"darling\",\n deps = [\n \"@stargate_crates__darling_core-0.23.0//:darling_core\",\n ],\n proc_macro_deps = [\n \"@stargate_crates__darling_macro-0.23.0//:darling_macro\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"suggestions\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=darling\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.23.0\",\n)\n" + } + }, + "stargate_crates__darling_core-0.23.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/darling_core/0.23.0/download" + ], + "strip_prefix": "darling_core-0.23.0", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"darling_core\",\n deps = [\n \"@stargate_crates__ident_case-1.0.1//:ident_case\",\n \"@stargate_crates__proc-macro2-1.0.106//:proc_macro2\",\n \"@stargate_crates__quote-1.0.45//:quote\",\n \"@stargate_crates__strsim-0.11.1//:strsim\",\n \"@stargate_crates__syn-2.0.117//:syn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"strsim\",\n \"suggestions\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=darling_core\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.23.0\",\n)\n" + } + }, + "stargate_crates__darling_macro-0.23.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/darling_macro/0.23.0/download" + ], + "strip_prefix": "darling_macro-0.23.0", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"darling_macro\",\n deps = [\n \"@stargate_crates__darling_core-0.23.0//:darling_core\",\n \"@stargate_crates__quote-1.0.45//:quote\",\n \"@stargate_crates__syn-2.0.117//:syn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=darling_macro\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.23.0\",\n)\n" + } + }, "stargate_crates__data-encoding-2.10.0": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -15507,6 +15585,19 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"dunce\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=dunce\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.5\",\n)\n" } }, + "stargate_crates__dyn-clone-1.0.20": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/dyn-clone/1.0.20/download" + ], + "strip_prefix": "dyn-clone-1.0.20", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"dyn_clone\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=dyn-clone\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.20\",\n)\n" + } + }, "stargate_crates__educe-0.6.0": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -16040,6 +16131,19 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"half\",\n deps = [\n \"@stargate_crates__cfg-if-1.0.4//:cfg_if\",\n \"@stargate_crates__zerocopy-0.8.39//:zerocopy\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=half\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.7.1\",\n)\n" } }, + "stargate_crates__hashbrown-0.12.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/hashbrown/0.12.3/download" + ], + "strip_prefix": "hashbrown-0.12.3", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"hashbrown\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=hashbrown\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.12.3\",\n)\n" + } + }, "stargate_crates__hashbrown-0.15.5": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -16105,6 +16209,19 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"hermit_abi\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=hermit-abi\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.2\",\n)\n" } }, + "stargate_crates__hex-0.4.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/hex/0.4.3/download" + ], + "strip_prefix": "hex-0.4.3", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"hex\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=hex\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.3\",\n)\n" + } + }, "stargate_crates__hickory-proto-0.24.4": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -16261,6 +16378,32 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"hyper_util\",\n deps = [\n \"@stargate_crates__base64-0.22.1//:base64\",\n \"@stargate_crates__bytes-1.12.1//:bytes\",\n \"@stargate_crates__futures-channel-0.3.32//:futures_channel\",\n \"@stargate_crates__futures-util-0.3.32//:futures_util\",\n \"@stargate_crates__http-1.4.2//:http\",\n \"@stargate_crates__http-body-1.0.1//:http_body\",\n \"@stargate_crates__hyper-1.9.0//:hyper\",\n \"@stargate_crates__ipnet-2.11.0//:ipnet\",\n \"@stargate_crates__libc-0.2.186//:libc\",\n \"@stargate_crates__percent-encoding-2.3.2//:percent_encoding\",\n \"@stargate_crates__pin-project-lite-0.2.16//:pin_project_lite\",\n \"@stargate_crates__socket2-0.6.4//:socket2\",\n \"@stargate_crates__tokio-1.52.3//:tokio\",\n \"@stargate_crates__tower-service-0.3.3//:tower_service\",\n \"@stargate_crates__tracing-0.1.44//:tracing\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"client\",\n \"client-legacy\",\n \"client-proxy\",\n \"default\",\n \"http1\",\n \"http2\",\n \"server\",\n \"server-auto\",\n \"service\",\n \"tokio\",\n \"tracing\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=hyper-util\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.20\",\n)\n" } }, + "stargate_crates__iana-time-zone-0.1.65": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/iana-time-zone/0.1.65/download" + ], + "strip_prefix": "iana-time-zone-0.1.65", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iana_time_zone\",\n deps = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [\n \"@stargate_crates__core-foundation-sys-0.8.7//:core_foundation_sys\", # cfg(target_vendor = \"apple\")\n ],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [\n \"@stargate_crates__core-foundation-sys-0.8.7//:core_foundation_sys\", # cfg(target_vendor = \"apple\")\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iana-time-zone\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.65\",\n)\n" + } + }, + "stargate_crates__iana-time-zone-haiku-0.1.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/iana-time-zone-haiku/0.1.2/download" + ], + "strip_prefix": "iana-time-zone-haiku-0.1.2", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iana_time_zone_haiku\",\n deps = [\n \"@stargate_crates__iana-time-zone-haiku-0.1.2//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iana-time-zone-haiku\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.2\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n deps = [\n \"@stargate_crates__cc-1.2.56//:cc\",\n ],\n edition = \"2018\",\n pkg_name = \"iana-time-zone-haiku\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iana-time-zone-haiku\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.1.2\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, "stargate_crates__icu_collections-2.1.1": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -16365,6 +16508,19 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"id_arena\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=id-arena\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.3.0\",\n)\n" } }, + "stargate_crates__ident_case-1.0.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/ident_case/1.0.1/download" + ], + "strip_prefix": "ident_case-1.0.1", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"ident_case\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=ident_case\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.1\",\n)\n" + } + }, "stargate_crates__idna-1.1.0": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -16391,6 +16547,19 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"idna_adapter\",\n deps = [\n \"@stargate_crates__icu_normalizer-2.1.1//:icu_normalizer\",\n \"@stargate_crates__icu_properties-2.1.2//:icu_properties\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"compiled_data\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=idna_adapter\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.2.1\",\n)\n" } }, + "stargate_crates__indexmap-1.9.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/indexmap/1.9.3/download" + ], + "strip_prefix": "indexmap-1.9.3", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"indexmap\",\n deps = [\n \"@stargate_crates__hashbrown-0.12.3//:hashbrown\",\n \"@stargate_crates__indexmap-1.9.3//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=indexmap\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.9.3\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n deps = [\n \"@stargate_crates__autocfg-1.5.0//:autocfg\",\n ],\n edition = \"2021\",\n pkg_name = \"indexmap\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=indexmap\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.9.3\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, "stargate_crates__indexmap-2.14.0": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -16534,6 +16703,32 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"jiff_static\",\n deps = [\n \"@stargate_crates__proc-macro2-1.0.106//:proc_macro2\",\n \"@stargate_crates__quote-1.0.45//:quote\",\n \"@stargate_crates__syn-2.0.117//:syn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=jiff-static\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.24\",\n)\n" } }, + "stargate_crates__jiff-tzdb-0.1.8": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "142bd39932ad231f10513df9ab62661fead8719872150b7ad02a2df79f4e141e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/jiff-tzdb/0.1.8/download" + ], + "strip_prefix": "jiff-tzdb-0.1.8", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"jiff_tzdb\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=jiff-tzdb\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.8\",\n)\n" + } + }, + "stargate_crates__jiff-tzdb-platform-0.1.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/jiff-tzdb-platform/0.1.3/download" + ], + "strip_prefix": "jiff-tzdb-platform-0.1.3", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"jiff_tzdb_platform\",\n deps = [\n \"@stargate_crates__jiff-tzdb-0.1.8//:jiff_tzdb\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=jiff-tzdb-platform\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.3\",\n)\n" + } + }, "stargate_crates__jni-0.21.1": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -18276,6 +18471,32 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"schannel\",\n deps = [\n \"@stargate_crates__windows-sys-0.61.2//:windows_sys\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=schannel\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.28\",\n)\n" } }, + "stargate_crates__schemars-0.9.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/schemars/0.9.0/download" + ], + "strip_prefix": "schemars-0.9.0", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"schemars\",\n deps = [\n \"@stargate_crates__dyn-clone-1.0.20//:dyn_clone\",\n \"@stargate_crates__ref-cast-1.0.25//:ref_cast\",\n \"@stargate_crates__serde-1.0.228//:serde\",\n \"@stargate_crates__serde_json-1.0.150//:serde_json\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=schemars\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.9.0\",\n)\n" + } + }, + "stargate_crates__schemars-1.2.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/schemars/1.2.2/download" + ], + "strip_prefix": "schemars-1.2.2", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"schemars\",\n deps = [\n \"@stargate_crates__dyn-clone-1.0.20//:dyn_clone\",\n \"@stargate_crates__ref-cast-1.0.25//:ref_cast\",\n \"@stargate_crates__serde-1.0.228//:serde\",\n \"@stargate_crates__serde_json-1.0.150//:serde_json\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=schemars\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.2.2\",\n)\n" + } + }, "stargate_crates__scopeguard-1.2.0": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -18432,6 +18653,19 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"serde_path_to_error\",\n deps = [\n \"@stargate_crates__itoa-1.0.17//:itoa\",\n \"@stargate_crates__serde_core-1.0.228//:serde_core\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_path_to_error\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.20\",\n)\n" } }, + "stargate_crates__serde_spanned-1.1.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/serde_spanned/1.1.1/download" + ], + "strip_prefix": "serde_spanned-1.1.1", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"serde_spanned\",\n deps = [\n \"@stargate_crates__serde_core-1.0.228//:serde_core\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"serde\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_spanned\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.1\",\n)\n" + } + }, "stargate_crates__serde_urlencoded-0.7.1": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -18445,6 +18679,32 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"serde_urlencoded\",\n deps = [\n \"@stargate_crates__form_urlencoded-1.2.2//:form_urlencoded\",\n \"@stargate_crates__itoa-1.0.17//:itoa\",\n \"@stargate_crates__ryu-1.0.23//:ryu\",\n \"@stargate_crates__serde-1.0.228//:serde\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_urlencoded\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.1\",\n)\n" } }, + "stargate_crates__serde_with-3.22.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "ee78f1fbe43ac4a0e47aadb3dbd357b69eb0d3793e948624cd03dd2750ab1c0a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/serde_with/3.22.0/download" + ], + "strip_prefix": "serde_with-3.22.0", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"serde_with\",\n deps = [\n \"@stargate_crates__serde_core-1.0.228//:serde_core\",\n ],\n proc_macro_deps = [\n \"@stargate_crates__serde_with_macros-3.22.0//:serde_with_macros\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"macros\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_with\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"3.22.0\",\n)\n" + } + }, + "stargate_crates__serde_with_macros-3.22.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "8705578779c2b6bd90d84d66eb2e206b708b1a4d7b9f17641b293545bf1c7e46", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/serde_with_macros/3.22.0/download" + ], + "strip_prefix": "serde_with_macros-3.22.0", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"serde_with_macros\",\n deps = [\n \"@stargate_crates__darling-0.23.0//:darling\",\n \"@stargate_crates__proc-macro2-1.0.106//:proc_macro2\",\n \"@stargate_crates__quote-1.0.45//:quote\",\n \"@stargate_crates__syn-2.0.117//:syn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_with_macros\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"3.22.0\",\n)\n" + } + }, "stargate_crates__serde_yaml-0.9.34-deprecated": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -18965,6 +19225,58 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tokio_util\",\n deps = [\n \"@stargate_crates__bytes-1.12.1//:bytes\",\n \"@stargate_crates__futures-core-0.3.32//:futures_core\",\n \"@stargate_crates__futures-sink-0.3.32//:futures_sink\",\n \"@stargate_crates__futures-util-0.3.32//:futures_util\",\n \"@stargate_crates__pin-project-lite-0.2.16//:pin_project_lite\",\n \"@stargate_crates__slab-0.4.12//:slab\",\n \"@stargate_crates__tokio-1.52.3//:tokio\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"codec\",\n \"default\",\n \"futures-util\",\n \"io\",\n \"rt\",\n \"slab\",\n \"time\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tokio-util\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.18\",\n)\n" } }, + "stargate_crates__toml-1.1.4-spec-1.1.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/toml/1.1.4+spec-1.1.0/download" + ], + "strip_prefix": "toml-1.1.4+spec-1.1.0", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"toml\",\n deps = [\n \"@stargate_crates__serde_core-1.0.228//:serde_core\",\n \"@stargate_crates__serde_spanned-1.1.1//:serde_spanned\",\n \"@stargate_crates__toml_datetime-1.1.1-spec-1.1.0//:toml_datetime\",\n \"@stargate_crates__toml_parser-1.1.3-spec-1.1.0//:toml_parser\",\n \"@stargate_crates__toml_writer-1.1.2-spec-1.1.0//:toml_writer\",\n \"@stargate_crates__winnow-1.0.4//:winnow\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"display\",\n \"parse\",\n \"serde\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=toml\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.4+spec-1.1.0\",\n)\n" + } + }, + "stargate_crates__toml_datetime-1.1.1-spec-1.1.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/toml_datetime/1.1.1+spec-1.1.0/download" + ], + "strip_prefix": "toml_datetime-1.1.1+spec-1.1.0", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"toml_datetime\",\n deps = [\n \"@stargate_crates__serde_core-1.0.228//:serde_core\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"serde\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=toml_datetime\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.1+spec-1.1.0\",\n)\n" + } + }, + "stargate_crates__toml_parser-1.1.3-spec-1.1.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/toml_parser/1.1.3+spec-1.1.0/download" + ], + "strip_prefix": "toml_parser-1.1.3+spec-1.1.0", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"toml_parser\",\n deps = [\n \"@stargate_crates__winnow-1.0.4//:winnow\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=toml_parser\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.3+spec-1.1.0\",\n)\n" + } + }, + "stargate_crates__toml_writer-1.1.2-spec-1.1.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/toml_writer/1.1.2+spec-1.1.0/download" + ], + "strip_prefix": "toml_writer-1.1.2+spec-1.1.0", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"toml_writer\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=toml_writer\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.2+spec-1.1.0\",\n)\n" + } + }, "stargate_crates__tonic-0.14.6": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -19641,6 +19953,45 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"winapi_util\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winapi-util\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.11\",\n)\n" } }, + "stargate_crates__windows-core-0.62.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-core/0.62.2/download" + ], + "strip_prefix": "windows-core-0.62.2", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_core\",\n deps = [\n \"@stargate_crates__windows-link-0.2.1//:windows_link\",\n \"@stargate_crates__windows-result-0.4.1//:windows_result\",\n \"@stargate_crates__windows-strings-0.5.1//:windows_strings\",\n ],\n proc_macro_deps = [\n \"@stargate_crates__windows-implement-0.60.2//:windows_implement\",\n \"@stargate_crates__windows-interface-0.59.3//:windows_interface\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-core\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.62.2\",\n)\n" + } + }, + "stargate_crates__windows-implement-0.60.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-implement/0.60.2/download" + ], + "strip_prefix": "windows-implement-0.60.2", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"windows_implement\",\n deps = [\n \"@stargate_crates__proc-macro2-1.0.106//:proc_macro2\",\n \"@stargate_crates__quote-1.0.45//:quote\",\n \"@stargate_crates__syn-2.0.117//:syn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-implement\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.60.2\",\n)\n" + } + }, + "stargate_crates__windows-interface-0.59.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-interface/0.59.3/download" + ], + "strip_prefix": "windows-interface-0.59.3", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"windows_interface\",\n deps = [\n \"@stargate_crates__proc-macro2-1.0.106//:proc_macro2\",\n \"@stargate_crates__quote-1.0.45//:quote\",\n \"@stargate_crates__syn-2.0.117//:syn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-interface\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.59.3\",\n)\n" + } + }, "stargate_crates__windows-link-0.2.1": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -19654,6 +20005,32 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_link\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-link\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.1\",\n)\n" } }, + "stargate_crates__windows-result-0.4.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-result/0.4.1/download" + ], + "strip_prefix": "windows-result-0.4.1", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_result\",\n deps = [\n \"@stargate_crates__windows-link-0.2.1//:windows_link\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-result\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.1\",\n)\n" + } + }, + "stargate_crates__windows-strings-0.5.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-strings/0.5.1/download" + ], + "strip_prefix": "windows-strings-0.5.1", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_strings\",\n deps = [\n \"@stargate_crates__windows-link-0.2.1//:windows_link\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-strings\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.1\",\n)\n" + } + }, "stargate_crates__windows-sys-0.45.0": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -20161,6 +20538,19 @@ "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_x86_64_msvc\",\n deps = [\n \"@stargate_crates__windows_x86_64_msvc-0.53.1//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.53.1\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_x86_64_msvc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.53.1\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" } }, + "stargate_crates__winnow-1.0.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/winnow/1.0.4/download" + ], + "strip_prefix": "winnow-1.0.4", + "build_file_content": "###############################################################################\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 'nvcf'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"winnow\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winnow\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.4\",\n)\n" + } + }, "stargate_crates__winreg-0.50.0": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { diff --git a/STARGATE_CONFIG_FILE_PLAN.md b/STARGATE_CONFIG_FILE_PLAN.md new file mode 100644 index 000000000..47fa29530 --- /dev/null +++ b/STARGATE_CONFIG_FILE_PLAN.md @@ -0,0 +1,1061 @@ +# Stargate TOML Configuration Plan + +## Objective + +Replace Stargate's large flat set of runtime CLI options with a structured +TOML configuration file. + +Add this CLI option: + +~~~ +--config-file +~~~ + +When the option is present, Stargate uses only the referenced file as its +effective configuration. Legacy CLI options and their environment fallbacks do +not contribute values. When the option is absent, Stargate retains the current +CLI behavior and logs one deprecation warning. + +The new format groups related values into component-specific sections. A +section's presence selects an optional behavior or mode when practical. For +example, stargate_discovery.kubernetes_pods enables local pod enumeration and +pylon_transport.reverse selects reverse tunnel mode. + +## Scope + +This change includes: + +- The stargate service binary and its runtime configuration conversion. +- A public typed Rust configuration model shared with internal callers. +- The llm-request-router Helm chart and its render tests. +- The stargate-bench Compose and Kubernetes renderers. +- Existing BDD fixtures that inspect Stargate arguments. +- Cargo and Bazel dependency lock updates. +- Compatibility tests for the legacy CLI. +- Removal of generic DNS-based Stargate peer discovery while retaining + headless DNS enumeration of local Kubernetes pods. + +This change does not include: + +- Removing legacy CLI options, including --disable-dns-discovery. +- Layering or merging TOML, CLI, and environment configuration. +- Live configuration reload. +- Changing the stargate-k8s-router binary's CLI. +- Changing runtime behavior unrelated to configuration. + +## Behavior contract + +### Configuration source selection + +1. If --config-file is present, load that file. +2. Do not use legacy CLI values or legacy environment fallbacks in file mode. +3. If the file cannot be read, parsed, resolved, or validated, fail startup. +4. Do not fall back to CLI after a config file was requested. +5. If --config-file is absent, parse the legacy CLI and preserve its supported + Kubernetes pod discovery and self-only behavior. +6. Log one structured deprecation warning in legacy mode after telemetry is + initialized. +7. Do not log the deprecation warning in file mode. + +Legacy options may remain in a deployment during migration, but their values +must have no effect when --config-file is present. Normal help, version, and +unknown-argument handling should remain available. + +The legacy --disable-dns-discovery flag remains accepted only in CLI fallback +mode. It has no TOML field. The generic non-Kubernetes DNS peer-discovery +branch is removed because Stargate no longer discovers other Stargate +clusters through DNS. + +### File behavior + +- Read the file once during startup. +- Resolve relative file paths against the directory containing the TOML file. +- Reject unknown keys and sections. +- Report the config file path and TOML source location when parsing fails. +- Report the full logical field path when validation fails. +- Never print secret contents in errors or startup logs. +- Use one source of defaults for both TOML and the legacy CLI adapter. + +### Runtime environment values + +Some Kubernetes values are not known when Helm renders a shared ConfigMap. +These include the pod name, namespace, pod IP, and addresses derived from the +pod IP. + +Fields that need a per-process value accept either a literal or an explicit +environment reference: + +~~~ +id = "stargate-a" +id = { env = "POD_NAME" } +~~~ + +The Rust representation will use a Serde untagged enum similar to: + +~~~ +#[derive(Serialize, Deserialize)] +#[serde(untagged)] +enum ValueSource { + Literal(T), + Environment { env: String }, +} +~~~ + +Environment references are part of the TOML configuration, so the file remains +the authoritative source. A missing, empty, non-Unicode, or invalid value fails +startup with the field name and environment variable name. + +The Helm chart will define derived address variables after POD_IP, for example: + +~~~ +- name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP +- name: STARGATE_ADVERTISE_ADDR + value: "$(POD_IP):50071" +~~~ + +Kubernetes supports ordered dependent environment values using the +$(VAR_NAME) form: +https://kubernetes.io/docs/tasks/inject-data-application/define-interdependent-environment-variables/ + +This avoids custom string interpolation inside TOML and prevents environment +values from changing TOML syntax. + +## Dependency selection + +Use direct TOML and Serde integration: + +~~~ +toml = { version = "=1.1.4", default-features = false, features = ["parse", "serde", "std"] } +serde_with = { version = "=3.22.0", default-features = false, features = ["macros", "std"] } +~~~ + +Reasons: + +- toml provides direct Serde deserialization and source-positioned parse + errors. +- serde_with provides readable adapters for durations and FromStr-backed + types without handwritten serializers. +- Serde container attributes provide centralized defaults and strict unknown + field rejection. +- Stargate needs one selected source, not a merged configuration stack. +- The config and Figment crates focus on layered sources, profiles, and + merging. Those semantics conflict with the required file-or-CLI behavior. +- Both selected crates use licenses already allowed by the repository. + +References: + +- https://docs.rs/toml/1.1.4/toml/ +- https://docs.rs/serde_with/3.22.0/serde_with/ +- https://serde.rs/container-attrs.html +- https://serde.rs/field-attrs.html +- https://docs.rs/config/latest/config/ +- https://docs.rs/figment/latest/figment/ + +The workspace should use exact versions, update Cargo.lock and +MODULE.bazel.lock, and verify license and NOTICE requirements. + +## Configuration model + +Add a public configuration module to the stargate library. The binary, legacy +CLI adapter, benchmark renderer, and tests must all use the same model. + +Each struct should use deny_unknown_fields. Defaultable sections should use +Serde defaults backed by the same Default implementation used by the legacy +adapter. Do not use flatten because it weakens section boundaries and unknown +field diagnostics. + +Durations are represented as integer milliseconds in TOML and as +std::time::Duration after deserialization. Addresses, URI values, header names, +nonzero counts, paths, and tunnel protocol values should become typed before +runtime construction. + +### Sections + +| Section | Contents and selection behavior | +| --- | --- | +| stargate_identity | Stable Stargate identity and advertised hostname rendering | +| stargate_identity.kubernetes | Kubernetes pod name and namespace | +| stargate_network | Stargate gRPC, model discovery, HTTP, and advertised addresses | +| process_lifecycle | Process readiness warm-up and shutdown drain timeout | +| pylon_registration | Pylon registration stream idle limits | +| stargate_discovery | WatchStargates remote endpoints and snapshot heartbeat behavior | +| stargate_discovery.kubernetes_pods | Presence enumerates local Stargate pods through a Kubernetes headless Service | +| stargate_discovery.kubernetes_pods.development_peer_forwarding | Presence enables development-only forwarding to another local Stargate pod | +| pylon_transport | Common Pylon gRPC and QUIC tunnel configuration | +| pylon_transport.direct | Direct-mode Pylon connection count and optional trust bundle | +| pylon_transport.reverse | Presence selects reverse Pylon tunnels and contains the listener and server identity | +| pylon_transport.tls | Common outbound Pylon QUIC verification policy | +| request_proxy | Namespace for policies applied while proxying inference requests | +| request_proxy.retry | Proxied request retry counts, replay limit, retry signal, and budget header | +| request_proxy.load_balancer | Presence selects a proxied request load-balancer config file | +| observability | OpenTelemetry service identity | +| observability.metrics | Prometheus listener and metric prefix | +| observability.tracing | Presence enables OTLP trace export | +| observability.tracing.access_token | Optional trace exporter token source | +| worker_authentication | Presence enables worker authentication | +| worker_authentication.bearer_token | Static bearer token source | +| worker_authentication.oauth2 | OAuth2 client credential source | + +Section names identify the component or relationship they configure: + +- stargate_discovery owns the Stargate entries and remote watch URLs published + through WatchStargates, not the model discovery API. +- pylon_registration and pylon_transport identify the Pylon-facing settings. +- request_proxy identifies settings that affect proxied inference requests. +- process_lifecycle identifies process startup and shutdown behavior. +- Generic names such as identity, network, discovery, backend, proxy, and + registration are not used as top-level sections. + +### Section ownership + +The ownership boundaries below are part of the schema contract. A setting +should move to another section only when its runtime owner changes. + +#### Document root + +The document root owns schema_version. It identifies the configuration schema +understood by the binary and gives future versions an explicit compatibility +boundary. It does not own ordinary runtime settings. All runtime settings +belong to a named component section. + +#### stargate_identity + +This section owns the identity Stargate presents to the rest of the system: + +- id is the stable process or pod identity used in registration, discovery, + logs, and self-only discovery. +- advertised_hostname_template defines the per-Stargate hostname used as the + Pylon gRPC authority and reverse QUIC server name. It supports the existing + pod_name and namespace placeholders. + +This section does not own IP addresses or listening sockets. Those belong to +stargate_network. It also does not own the headless Service used to enumerate +local Stargate pods. That belongs to +stargate_discovery.kubernetes_pods. + +#### stargate_identity.kubernetes + +This section owns Kubernetes identity metadata: + +- pod_name identifies the current pod. +- namespace identifies the pod's Kubernetes namespace. + +Both values are required when the section is present. They may be literals or +explicit environment references. This section is required when +stargate_discovery.kubernetes_pods is present because pod enumeration needs a +stable pod identity and namespace. + +This section does not own the Downward API declaration in a Pod manifest. The +Helm chart owns that declaration and the configuration only names the +environment values it consumes. + +#### stargate_network + +This section owns the primary Stargate service addresses: + +- grpc_listen_addr is the backend-facing gRPC listener for Stargate watch and + Pylon registration traffic. +- model_discovery_listen_addr is the frontend-facing gRPC listener for the + model discovery API. +- http_listen_addr is the HTTP listener for inference proxy traffic and + health probes. +- advertise_addr is the gRPC address published for this Stargate. + +Listen addresses describe sockets bound by this process. advertise_addr +describes the address other processes should use and can differ from the bound +address. + +This section does not own the reverse QUIC listener, which belongs to +pylon_transport.reverse. It does not own the metrics listener, which belongs +to observability.metrics. + +#### process_lifecycle + +This section owns process-level startup and shutdown timing: + +- readiness_warmup_ms is the minimum process age before the readiness endpoint + accepts request traffic. Zero disables the warm-up. +- shutdown_drain_timeout_ms is the grace period allowed for draining and + shutdown tasks after termination begins. + +This section does not own network request timeouts, registration idle +timeouts, or discovery polling intervals. Those belong to the component that +performs the operation. + +#### pylon_registration + +This section owns idle enforcement for Pylon registration update streams: + +- update_idle_timeout_ms is the minimum heartbeat-aware idle timeout. +- update_max_idle_timeout_ms is the maximum heartbeat-aware idle timeout. + +Zero retains the existing meaning of disabling idle enforcement. These values +govern Pylon registration streams, not Stargate peer watch heartbeats. Peer +watch heartbeat timing belongs to stargate_discovery. + +#### stargate_discovery + +This section owns the Stargate membership information published to Pylons +through WatchStargates: + +- remote_watch_urls lists remote or cross-region WatchStargates seed + endpoints that Pylons should watch explicitly. +- allow_insecure_remote_watch_http permits explicit plaintext HTTP seeds for + development. +- watch_heartbeat_ms controls the maximum interval between unchanged + WatchStargates snapshots. + +Stargate does not resolve remote clusters through DNS. Remote clusters enter +the discovery graph only through explicit remote_watch_urls. Stargate includes +those URLs in WatchStargates responses and Pylons follow them. + +The section remains useful without its kubernetes_pods child because remote +watch URLs and snapshot heartbeat behavior also apply when the local +WatchStargates entry contains only this Stargate. + +This section does not own model discovery for frontend clients. The model +discovery API listener belongs to stargate_network. It does not own generic +DNS-based discovery because that behavior is removed. + +#### stargate_discovery.kubernetes_pods + +This section owns enumeration of local Stargate pods through a Kubernetes +headless Service: + +- headless_service_dns_name is the headless Service DNS name queried for local + pod SRV records. +- poll_interval_ms controls how often Stargate refreshes the local pod set. +- resolver_ttl_ms caps the resolver's positive cache lifetime. + +Presence makes this Stargate resolve local pod membership and publish concrete +StargateInfo entries through WatchStargates. Pylons never query this DNS name. +Absence publishes only this Stargate as the local membership entry. + +This section requires stargate_identity.kubernetes. There is no generic +non-Kubernetes DNS fallback. Other Stargate clusters are represented only by +the explicit remote_watch_urls in the parent section. + +This section does not enable development forwarding by itself. That behavior +requires its development_peer_forwarding child section. + +#### stargate_discovery.kubernetes_pods.development_peer_forwarding + +This empty marker section owns the development-only peer forwarding mode. +Presence enables the forwarding resolver; absence disables it. It has no +fields because there are no independent settings for the mode. + +It is valid only when stargate_identity.kubernetes and +stargate_discovery.kubernetes_pods are present. Production routing remains +owned by stargate-k8s-router or another supported load balancer. + +#### pylon_transport + +This section owns settings shared by direct and reverse communication with +Pylons: + +- pylon_grpc_dial_uri is an optional load-balanced gRPC dial URI for Pylon + registration traffic. +- tunnel_protocol selects the request stream protocol used by both ends. +- quic_connect_timeout_ms bounds outbound QUIC connection establishment and + development peer relay connection attempts. +- quic_request_timeout_ms bounds each proxied request over an established + tunnel. + +The section does not select direct or reverse mode with a boolean. Its direct +and reverse child sections own mode-specific settings. + +#### pylon_transport.direct + +This section owns settings used only when Stargate directly opens QUIC +connections to Pylons: + +- connections is the nonzero number of QUIC connections opened per Pylon. +- trust_bundle_path is an optional certificate bundle used to verify Pylon + certificates. + +If neither direct nor reverse is present, direct mode uses its defaults. +Explicit direct settings and pylon_transport.reverse are mutually exclusive. + +This section does not own the common QUIC timeouts or verification bypass. +Those belong to pylon_transport and pylon_transport.tls. + +#### pylon_transport.reverse + +This section owns settings used only when Pylons connect back to Stargate: + +- listen_addr is the local UDP address for incoming reverse QUIC tunnels. +- pylon_dial_addr is the optional address advertised to Pylons when it differs + from the per-pod target. +- connect_timeout_ms bounds the wait for a reverse tunnel after registration. +- certificate_path and private_key_path provide the reverse listener's server + identity. + +Presence selects reverse mode. listen_addr is required. The certificate and +private key are optional as a pair; when both are absent, Stargate preserves +the current generated identity behavior. Supplying only one is invalid. + +This section does not own the Pylon gRPC registration endpoint or common QUIC +request timeout. Those remain in pylon_transport. + +#### pylon_transport.tls + +This section owns TLS policy shared by outbound QUIC connections and +development peer relays: + +- insecure_skip_verify controls certificate verification for outbound + connections. + +This boolean is a security policy, not a transport mode selector. Direct-mode +trust material belongs to pylon_transport.direct. Reverse listener identity +belongs to pylon_transport.reverse. + +#### request_proxy + +This parent section defines the ownership boundary for settings applied while +Stargate proxies inference requests. It currently has no direct fields. Retry +and load-balancing behavior live in focused child sections so transport, +discovery, and observability settings do not become mixed with request policy. + +#### request_proxy.retry + +This section owns retry and replay policy for proxied inference requests: + +- max_connect_retries limits reconnect attempts on the direct proxy path. +- max_request_retries limits retries for explicitly retryable upstream + responses. +- max_replay_body_bytes limits request-body buffering for retry replay. +- require_pylon_retry_signal controls whether an upstream response must carry + Pylon's explicit retry signal. +- request_budget_header names the header that carries the remaining request + budget in milliseconds. An empty value retains the existing disabled + behavior. + +This section does not own QUIC connection or per-request timeouts. Those +belong to pylon_transport because they govern the tunnel operation itself. + +#### request_proxy.load_balancer + +This section owns selection of an external load-balancer policy file: + +- config_path points to the load-balancer JSON configuration. + +Presence tells Stargate to load the file. Absence preserves the built-in +power-of-n behavior with the built-in algorithms available per request. +Relative paths are resolved from the TOML file's directory. + +This section owns the reference, not creation or mounting of the JSON file. +Helm and benchmark deployment code own those artifacts. + +#### observability + +This section owns the identity shared by Stargate telemetry: + +- service_name supplies the OpenTelemetry service.name resource and tracer + name. + +Metrics and tracing have separate child sections because their listeners, +export destinations, and authentication are independent. + +#### observability.metrics + +This section owns Prometheus metric serving: + +- listen_addr is the HTTP socket used by the metrics endpoint. +- prefix is prepended to Stargate metric names. + +Omitting explicit values uses the existing listener and prefix defaults. +Metrics remain enabled to preserve current behavior. This section does not own +the main HTTP proxy listener, which belongs to stargate_network. + +#### observability.tracing + +This section owns OTLP trace export: + +- endpoint is the OTLP gRPC collector endpoint. + +Presence enables trace export. Absence disables it. The OpenTelemetry service +identity remains in the parent observability section so it is not coupled to a +specific exporter. + +#### observability.tracing.access_token + +This section owns the optional source for the trace export access token: + +- secrets_path identifies the JSON secrets file. +- json_path identifies the nested JSON key containing the token. + +The token value is read only when tracing is enabled and is never stored in the +deserialized configuration or logged. Absence preserves unauthenticated trace +export and its existing warning. + +This source is intentionally separate from worker authentication credentials. +The two consumers may use the same file, but neither owns the other's secret +configuration. + +#### worker_authentication + +This section owns authentication of proxied requests against the worker +authentication gRPC service: + +- endpoint is the worker authentication service URI. + +Presence enables the gRPC authenticator. Absence preserves the open +authenticator. The section may omit a credential child to preserve the current +unauthenticated client behavior. + +This section does not own authentication for the OTLP exporter. That belongs +to observability.tracing.access_token. + +#### worker_authentication.bearer_token + +This section owns a static bearer token source for worker authentication: + +- secrets_path identifies the JSON secrets file. +- json_path is an array of JSON object keys leading to the token. + +Using an array keeps key boundaries explicit and permits keys that contain +dots. The legacy dot-separated CLI path is split into this representation by +the compatibility adapter. + +This section is mutually exclusive with worker_authentication.oauth2. + +#### worker_authentication.oauth2 + +This section owns OAuth2 client-credential token acquisition for worker +authentication: + +- provider_host is the OAuth2 service host used for its token endpoint. +- secrets_path identifies the JSON file containing the client ID and secret. + +The existing llm:check_worker scope remains a runtime constant rather than a +configuration option. This section is mutually exclusive with +worker_authentication.bearer_token. + +### Presence-based selections + +- If stargate_discovery.kubernetes_pods is absent, publish only this Stargate + as the local WatchStargates membership entry. +- If stargate_discovery.kubernetes_pods is present, enumerate local Stargate + pods through the configured Kubernetes headless Service. +- stargate_discovery.kubernetes_pods requires + stargate_identity.kubernetes. +- If stargate_discovery.kubernetes_pods.development_peer_forwarding is present, + enable the development-only forwarding resolver. +- Generic non-Kubernetes DNS discovery is not supported. +- If pylon_transport.reverse is present, use reverse Pylon connectivity. +- If pylon_transport.reverse is absent, use direct Pylon connectivity. +- pylon_transport.direct and pylon_transport.reverse cannot both be present. +- If request_proxy.load_balancer is present, load its referenced JSON file. +- If observability.tracing is present, enable OTLP export. +- If worker_authentication is present, enable worker authentication. +- worker_authentication.bearer_token and worker_authentication.oauth2 cannot + both be present. + +Boolean values remain appropriate for actual policy toggles, such as allowing +insecure remote HTTP, skipping TLS verification, and requiring Pylon's retry +signal. They must not be used to select a configuration mode that can be +represented by section presence. + +## Full TOML example + +This is a complete valid example for a Kubernetes deployment using local pod +enumeration, reverse tunnels, TLS, a load-balancer file, remote watch seeds, +authenticated tracing, metrics, retries, and OAuth2 worker authentication. + +The Helm chart supplies the referenced environment variables. Static +deployments can replace each environment reference with a literal string. + +~~~toml +schema_version = 1 + +[stargate_identity] +id = { env = "POD_NAME" } +advertised_hostname_template = "{pod_name}.llm-request-router-headless.{namespace}.svc.cluster.local" + +[stargate_identity.kubernetes] +pod_name = { env = "POD_NAME" } +namespace = { env = "POD_NAMESPACE" } + +[stargate_network] +grpc_listen_addr = "0.0.0.0:50071" +model_discovery_listen_addr = "0.0.0.0:50073" +http_listen_addr = "0.0.0.0:8000" +advertise_addr = { env = "STARGATE_ADVERTISE_ADDR" } + +[process_lifecycle] +readiness_warmup_ms = 60000 +shutdown_drain_timeout_ms = 30000 + +[pylon_registration] +update_idle_timeout_ms = 60000 +update_max_idle_timeout_ms = 300000 + +[stargate_discovery] +remote_watch_urls = [ + "https://stargate-watch.us-west.example.com", + "https://stargate-watch.us-east.example.com", +] +allow_insecure_remote_watch_http = false +watch_heartbeat_ms = 5000 + +[stargate_discovery.kubernetes_pods] +headless_service_dns_name = "llm-request-router-headless.nvcf.svc.cluster.local" +poll_interval_ms = 1000 +resolver_ttl_ms = 1000 + +[pylon_transport] +pylon_grpc_dial_uri = "https://stargate-k8s-router.nvcf.svc.cluster.local:50071" +tunnel_protocol = "raw-quic" +quic_connect_timeout_ms = 2000 +quic_request_timeout_ms = 30000 + +[pylon_transport.reverse] +listen_addr = "0.0.0.0:50072" +pylon_dial_addr = { env = "STARGATE_REVERSE_PYLON_DIAL_ADDR" } +connect_timeout_ms = 10000 +certificate_path = "/var/run/stargate-tls/tls.crt" +private_key_path = "/var/run/stargate-tls/tls.key" + +[pylon_transport.tls] +insecure_skip_verify = false + +[request_proxy.retry] +max_connect_retries = 2 +max_request_retries = 2 +max_replay_body_bytes = 67108864 +require_pylon_retry_signal = true +request_budget_header = "x-stargate-max-wait-ms" + +[request_proxy.load_balancer] +config_path = "/etc/llm-request-router/lb-config.json" + +[observability] +service_name = "stargate" + +[observability.metrics] +listen_addr = "0.0.0.0:9090" +prefix = "stargate_" + +[observability.tracing] +endpoint = "https://otel-collector.nvcf.svc.cluster.local:4317" + +[observability.tracing.access_token] +secrets_path = "/var/run/secrets/stargate/secrets.json" +json_path = ["tracingAccessToken"] + +[worker_authentication] +endpoint = "http://llm-gateway.nvcf.svc.cluster.local:50051" + +[worker_authentication.oauth2] +provider_host = "https://oauth.example.com" +secrets_path = "/var/run/secrets/stargate/secrets.json" +~~~ + +### Direct tunnel alternative + +For direct mode, remove pylon_transport.reverse and replace it with: + +~~~toml +[pylon_transport.direct] +connections = 1 +trust_bundle_path = "/var/run/stargate-tls/ca.crt" +~~~ + +The legacy adapter maps --tls-cert-path to trust_bundle_path in direct mode. + +### Self-only discovery alternative + +For self-only local membership, remove +stargate_discovery.kubernetes_pods and its child sections. Keep the top-level +stargate_discovery section if remote watch URLs or snapshot heartbeat settings +are needed. + +### Development-only peer forwarding + +To enable development-only peer forwarding, add this empty section: + +~~~toml +[stargate_discovery.kubernetes_pods.development_peer_forwarding] +~~~ + +It is valid only when stargate_identity.kubernetes and +stargate_discovery.kubernetes_pods are both present. Production deployments +must continue to use stargate-k8s-router or another supported load balancer. + +### Static bearer token alternative + +To use a token from a JSON file, remove worker_authentication.oauth2 and +replace it with: + +~~~toml +[worker_authentication.bearer_token] +secrets_path = "/var/run/secrets/stargate/secrets.json" +json_path = ["authToken"] +~~~ + +An absent credential subsection preserves the current unauthenticated +worker-auth client behavior. + +### Unauthenticated tracing alternative + +Remove observability.tracing.access_token to export traces without an access +token. Stargate should preserve the current warning for unauthenticated trace +export. + +## Legacy mapping + +The legacy adapter must account for every current option. All retained runtime +settings map into the typed model; --disable-dns-discovery remains a +legacy-only source selector. + +| Legacy option | TOML destination | +| --- | --- | +| --stargate-id | stargate_identity.id | +| --listen-addr | stargate_network.grpc_listen_addr | +| --model-discovery-listen-addr | stargate_network.model_discovery_listen_addr | +| --http-listen-addr | stargate_network.http_listen_addr | +| --advertise-addr | stargate_network.advertise_addr | +| --stargate-discovery-dns-name | stargate_discovery.kubernetes_pods.headless_service_dns_name when local pod enumeration is active | +| --remote-stargate-url | stargate_discovery.remote_watch_urls | +| --allow-insecure-remote-watch-http | stargate_discovery.allow_insecure_remote_watch_http | +| --grpc-pylon-dial-addr | pylon_transport.pylon_grpc_dial_uri | +| --advertised-hostname-template | stargate_identity.advertised_hostname_template | +| --pod-name | stargate_identity.kubernetes.pod_name | +| --pod-namespace | stargate_identity.kubernetes.namespace | +| --disable-dns-discovery | Legacy-only selector for self-only local membership; no TOML field | +| --enable-dev-peer-forwarding | Presence of stargate_discovery.kubernetes_pods.development_peer_forwarding | +| --dns-poll-ms | stargate_discovery.kubernetes_pods.poll_interval_ms | +| --dns-resolver-ttl-ms | stargate_discovery.kubernetes_pods.resolver_ttl_ms | +| --watch-heartbeat-ms | stargate_discovery.watch_heartbeat_ms | +| --registration-update-idle-timeout-ms | pylon_registration.update_idle_timeout_ms | +| --registration-update-max-idle-timeout-ms | pylon_registration.update_max_idle_timeout_ms | +| --shutdown-drain-timeout-ms | process_lifecycle.shutdown_drain_timeout_ms | +| --readiness-warmup-ms | process_lifecycle.readiness_warmup_ms | +| --quic-connect-timeout-ms | pylon_transport.quic_connect_timeout_ms | +| --quic-request-timeout-ms | pylon_transport.quic_request_timeout_ms | +| --direct-quic-connections | pylon_transport.direct.connections | +| --proxy-max-connect-retries | request_proxy.retry.max_connect_retries | +| --proxy-max-request-retries | request_proxy.retry.max_request_retries | +| --proxy-max-replay-body-bytes | request_proxy.retry.max_replay_body_bytes | +| --proxy-require-pylon-retry-signal | request_proxy.retry.require_pylon_retry_signal | +| --proxy-retry-budget-header | request_proxy.retry.request_budget_header | +| --tls-cert-path | pylon_transport.direct.trust_bundle_path in direct mode or pylon_transport.reverse.certificate_path in reverse mode | +| --tls-key-path | pylon_transport.reverse.private_key_path in reverse mode | +| --quic-insecure | pylon_transport.tls.insecure_skip_verify | +| --lb-config-path | request_proxy.load_balancer.config_path | +| --otel-endpoint | observability.tracing.endpoint | +| --otel-service-name | observability.service_name | +| --metrics-port | observability.metrics.listen_addr using 0.0.0.0 and the supplied port | +| --metrics-prefix | observability.metrics.prefix | +| --backend-connectivity=direct | Absence of pylon_transport.reverse | +| --backend-connectivity=reverse | Presence of pylon_transport.reverse | +| --reverse-tunnel-listen-addr | pylon_transport.reverse.listen_addr | +| --reverse-tunnel-pylon-dial-addr | pylon_transport.reverse.pylon_dial_addr | +| --reverse-tunnel-connect-timeout-ms | pylon_transport.reverse.connect_timeout_ms | +| --tunnel-protocol | pylon_transport.tunnel_protocol | +| --worker-auth-endpoint | worker_authentication.endpoint | +| --secrets-path | Worker auth credential source and tracing access token source when applicable | +| --secrets-json-path | worker_authentication.bearer_token.json_path | +| --oauth2-provider-host | worker_authentication.oauth2.provider_host | + +The adapter must preserve the legacy shared secrets-path behavior. In the TOML +model, tracing and worker authentication use independent, properly grouped +secret sources. + +The adapter also retains --disable-dns-discovery for compatibility: + +- If the flag is present, select self-only local membership. +- If the flag is absent and both pod name and namespace are available, build + stargate_discovery.kubernetes_pods from the legacy DNS options. +- If the flag is absent and Kubernetes pod identity is unavailable, select + self-only local membership instead of invoking generic DNS discovery. +- If only one Kubernetes identity value is present, fail validation rather + than silently selecting a different discovery implementation. + +The flag is omitted from the TOML schema and remains covered by the single +legacy CLI deprecation warning. + +## Validation rules + +Validation occurs after deserialization and environment resolution, before any +listener is bound or external connection is opened. + +Required rules include: + +- schema_version must equal 1. +- stargate_identity.id must not be empty. +- Required listen and advertised addresses must parse as socket addresses. +- Remote watch URLs must use explicit http or https schemes. +- Plain HTTP remote watch URLs require + stargate_discovery.allow_insecure_remote_watch_http. +- Kubernetes pod poll intervals and direct connection counts must be nonzero. +- Registration timeout value 0 retains its existing disabled meaning. +- stargate_identity.kubernetes requires both pod_name and namespace. +- stargate_discovery.kubernetes_pods requires + stargate_identity.kubernetes. +- headless_service_dns_name must be nonempty when Kubernetes pod enumeration + is configured. +- Development peer forwarding requires Kubernetes identity and local pod + enumeration. +- Remote Stargate clusters must use explicit remote_watch_urls; no generic DNS + peer-discovery configuration is accepted. +- pylon_transport.direct and pylon_transport.reverse are mutually exclusive. +- pylon_transport.reverse requires listen_addr. +- Reverse TLS certificate and private key paths must be supplied together. +- A direct trust bundle is valid only in pylon_transport.direct. +- Pylon gRPC dial values must use explicit http or https schemes. +- Proxy retry budget headers must be empty or valid HTTP header names. +- worker_authentication.bearer_token and worker_authentication.oauth2 are + mutually exclusive. +- OAuth2 worker authentication requires a secrets file. +- JSON key paths must contain at least one nonempty component. +- All referenced files should fail with contextual path errors when read. + +Configuration parsing and validation must not bind sockets, read credentials, +initialize clients, or otherwise perform runtime side effects. + +## Implementation steps + +### 1. Add dependencies and the typed model + +- Add exact toml and serde_with dependencies to the Stargate Cargo workspace. +- Add src/config.rs to the stargate library and export its public types. +- Derive Serialize, Deserialize, Debug, Clone, and PartialEq where useful. +- Redact or provide custom Debug behavior for secret-bearing configuration. +- Implement defaults once in the typed model. +- Add typed environment value resolution. +- Add config validation and path resolution. +- Update Cargo.lock and MODULE.bazel.lock. + +### 2. Add config source selection + +- Add --config-file to the binary CLI. +- Make legacy required options conditional on config-file being absent. +- Resolve the source before constructing runtime settings. +- In file mode, load only TOML-derived values. +- In legacy mode, convert the existing Args values into StargateConfig. +- Retain --disable-dns-discovery only in LegacyArgs and map it to self-only + local membership. +- Require --stargate-discovery-dns-name only when the legacy inputs select + Kubernetes pod enumeration. +- Keep --help and --version behavior. +- Add the one-time legacy deprecation warning after telemetry initialization. + +### 3. Refactor startup conversion + +- Change startup helpers to accept StargateConfig or focused nested config + structures instead of the flat Args type. +- Delete the generic DnsDiscovery implementation, its startup branch, and its + tests. +- Retain SelfOnlyDiscovery for configurations without local pod enumeration. +- Rename HeadlessDnsDiscovery and HeadlessDnsDiscoveryConfig to names that + state their actual responsibility, such as KubernetesPodDiscovery and + KubernetesPodDiscoveryConfig. +- Make the runtime carry optional Kubernetes pod discovery settings instead of + an always-required generic stargate_discovery_dns_name. +- Keep remote_watch_urls independent from local pod enumeration. Stargate + publishes those explicit URLs for Pylons and never resolves remote clusters + through DNS. +- Preserve existing listener binding, pod enumeration, TLS reload, retry, + authentication, and shutdown behavior. +- Preserve legacy direct-mode handling of --tls-key-path while mapping the + meaningful certificate value into pylon_transport.direct.trust_bundle_path. +- Keep file parsing and pure validation separate from runtime side effects. +- Log the selected source and safe effective settings. + +Primary source files: + +- src/libraries/rust/stargate/crates/stargate/src/main.rs +- src/libraries/rust/stargate/crates/stargate/src/main/startup.rs +- src/libraries/rust/stargate/crates/stargate/src/lib.rs +- src/libraries/rust/stargate/crates/stargate/src/config.rs + +### 4. Migrate the Helm chart + +- Render stargate.toml in a ConfigMap. +- Mount it read-only under /etc/llm-request-router. +- Invoke the main Stargate container with only: + +~~~ +--config-file=/etc/llm-request-router/stargate.toml +~~~ + +- Define POD_NAME, POD_NAMESPACE, POD_IP, and derived address variables in + dependency order. +- Remove llmRequestRouter.discovery.disableDnsDiscovery from chart values. It + does not have a TOML equivalent. +- Render stargate_discovery.kubernetes_pods for StatefulSets and for + Deployments that use the EndpointSlice backend router. +- Omit stargate_discovery.kubernetes_pods for the supported single-replica + Deployment topology that publishes only itself. +- Continue mounting the load-balancer JSON and reference it from TOML. +- Keep stargate-k8s-router arguments unchanged. +- Update checked-in generated manifests. +- Update render tests to extract and validate TOML instead of grepping + Stargate CLI flags. +- Continue asserting backend-router CLI flags separately. + +Primary deployment files: + +- deploy/helm/llm-request-router/llm-request-router/templates/deployment.yaml +- deploy/helm/llm-request-router/llm-request-router/values.yaml +- deploy/helm/llm-request-router/bin/manifest.yaml +- deploy/helm/llm-request-router/scripts/check-multi-replica-render.sh +- deploy/helm/llm-request-router/scripts/check-pki-render.sh +- deploy/helm/llm-request-router/scripts/check-backend-router-render.sh + +### 5. Migrate benchmark and integration callers + +- Make stargate-bench construct and serialize StargateConfig. +- Mount the serialized file for Compose runs. +- Add the serialized file to a ConfigMap for Kubernetes runs. +- Use self-only local membership for the single-Stargate Compose topology. +- Use stargate_discovery.kubernetes_pods for the Kubernetes StatefulSet + topology. +- Replace generated Stargate flags with --config-file. +- Keep the benchmark's load-balancer JSON as a separate mounted file. +- Update benchmark unit tests to assert the parsed config and mount. +- Update multiregion BDD fixtures that currently expect + --remote-stargate-url. + +Primary benchmark files: + +- src/libraries/rust/stargate/crates/stargate-bench/src/orchestrator.rs +- src/libraries/rust/stargate/crates/stargate-bench/src/k8s/render.rs +- src/libraries/rust/stargate/crates/stargate-bench/src/k8s/tests.rs + +### 6. Update user-facing material + +- Add a complete configuration reference and example. +- Mark legacy flags as deprecated in CLI help. +- Explain file precedence, relative paths, environment references, and + presence-based mode selection. +- Update existing architecture or sequence diagrams if they describe the + startup configuration flow. + +Repository guidance requires explicit approval before reading existing +Markdown documentation. Obtain that approval before inspecting or editing +those documentation files. + +## Test plan + +### Configuration unit tests + +- Parse a minimal direct-mode file. +- Parse the complete reverse-mode example in this plan. +- Parse self-only local membership when + stargate_discovery.kubernetes_pods is absent. +- Serialize and deserialize a constructed StargateConfig. +- Verify every retained setting default matches legacy CLI behavior. +- Reject unknown top-level, section, and nested keys. +- Report useful file, line, column, and logical field context. +- Reject unsupported schema versions. +- Resolve literal and environment-backed values. +- Reject missing, empty, non-Unicode, and invalid environment values. +- Resolve relative paths from the config file directory. +- Validate every section-presence rule. +- Reject obsolete generic DNS peer-discovery fields. +- Validate remote URLs, TLS combinations, retry headers, auth sources, and + nonzero values. + +### CLI compatibility tests + +- --config-file works without legacy required options. +- Valid contradictory legacy values do not affect file mode. +- Legacy environment variables do not affect file mode. +- A missing or invalid config file never falls back to CLI. +- The no-file path retains current parsing, defaults, and environment support. +- --disable-dns-discovery remains accepted in legacy mode and selects + self-only local membership. +- Legacy Kubernetes identity plus a headless Service DNS name selects local + pod enumeration. +- Legacy inputs without Kubernetes identity select self-only membership and + never invoke generic DNS discovery. +- A partial legacy Kubernetes identity is rejected. +- Legacy mode emits exactly one deprecation warning. +- File mode emits no legacy deprecation warning. +- Help and version output remain usable. +- Unknown CLI options still fail. + +### Runtime startup tests + +- Move runtime conversion coverage from flat Args to StargateConfig. +- Keep adapter tests proving legacy values produce the same effective config. +- Verify direct, reverse, self-only, Kubernetes pod enumeration, forwarding, + TLS, retry, auth, tracing, and load-balancer construction. +- Remove generic DnsDiscovery unit tests and retain focused tests for + KubernetesPodDiscovery and SelfOnlyDiscovery. +- Verify parsing and validation happen before listener binding. + +### Deployment and benchmark tests + +- Rendered Helm resources contain valid TOML. +- The main container has one --config-file argument and the expected mount. +- The rendered TOML reflects values overrides. +- Dynamic pod values use explicit environment references. +- StatefulSet and backend-router Deployment renders include + stargate_discovery.kubernetes_pods. +- Single-replica Deployment renders omit + stargate_discovery.kubernetes_pods. +- The removed discovery.disableDnsDiscovery Helm value is no longer accepted + or rendered. +- Backend-router flags remain unchanged. +- Compose and Kubernetes benchmark output mounts a valid generated file. +- Multiregion remote watch configuration appears in TOML. + +## Verification + +Run from the repository root as applicable: + +~~~ +cargo fmt --all -- --check +cargo test -p stargate +cargo test -p stargate-bench +cargo clippy -p stargate -p stargate-bench --all-targets --all-features -- -D warnings +bazel test //src/libraries/rust/stargate/crates/stargate:stargate_test +bazel build //src/libraries/rust/stargate/crates/stargate:stargate +bazel build //src/libraries/rust/stargate/crates/stargate-bench:stargate-bench +make -C deploy/helm/llm-request-router lint +git diff --check HEAD +~~~ + +Also run the chart render scripts and the relevant multiregion BDD tests. +Regenerate any checked-in Cargo, Bazel, Helm, or generated manifest artifacts +using their repository-native generators. + +## Rollout + +1. Land the typed model, config-file path, compatibility adapter, and tests in + one change. +2. Migrate all first-party Stargate invocations in the same change so the new + path receives production and test coverage immediately. +3. Remove generic DnsDiscovery in the same change so no unsupported + cross-cluster DNS behavior survives behind the new model. +4. Retain the legacy CLI, --disable-dns-discovery, and their tests during the + deprecation period. +5. Track removal of legacy options as separate follow-up work after downstream + users have migrated. + +## Completion criteria + +- A config-file-only Stargate invocation starts successfully. +- File mode has no effective dependency on legacy CLI or legacy environment + values. +- Legacy mode preserves supported Kubernetes pod and self-only discovery, + retains --disable-dns-discovery, and warns once. +- Generic non-Kubernetes DNS peer discovery and its tests are removed. +- Every retained runtime setting has a typed TOML destination; + --disable-dns-discovery remains legacy-only. +- Related values are nested together. +- Mode booleans are replaced by section presence where practical. +- stargate_discovery.kubernetes_pods is the only DNS-backed local membership + source, and remote clusters require explicit remote_watch_urls. +- Unknown keys and invalid cross-section combinations fail clearly. +- Helm, benchmark, and BDD callers use the TOML path. +- Direct and reverse mode behavior remains covered. +- Cargo, Bazel, Helm, and integration verification passes. +- No generated artifacts, documentation, or compatibility tests are left + stale. diff --git a/deploy/helm/llm-request-router/bin/manifest.yaml b/deploy/helm/llm-request-router/bin/manifest.yaml index aef26d0d0..b5ba8a95e 100644 --- a/deploy/helm/llm-request-router/bin/manifest.yaml +++ b/deploy/helm/llm-request-router/bin/manifest.yaml @@ -1,3 +1,43 @@ +--- +# Source: helm-nvcf-llm-request-router/templates/backend-router-poddisruptionbudget.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: llm-request-router-backend-router + namespace: nvcf + labels: + helm.sh/chart: helm-nvcf-llm-request-router-0.0.0 + app.kubernetes.io/name: llm-request-router-backend-router + app.kubernetes.io/instance: llm-request-router + app.kubernetes.io/component: backend-router + app.kubernetes.io/version: "0.14.2" + app.kubernetes.io/managed-by: Helm +spec: + maxUnavailable: 1 + selector: + matchLabels: + app.kubernetes.io/name: llm-request-router-backend-router + app.kubernetes.io/instance: llm-request-router +--- +# Source: helm-nvcf-llm-request-router/templates/backend-router-serviceaccount.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +apiVersion: v1 +kind: ServiceAccount +metadata: + name: llm-request-router-backend-router + namespace: nvcf + labels: + helm.sh/chart: helm-nvcf-llm-request-router-0.0.0 + app.kubernetes.io/name: llm-request-router-backend-router + app.kubernetes.io/instance: llm-request-router + app.kubernetes.io/component: backend-router + app.kubernetes.io/version: "0.14.2" + app.kubernetes.io/managed-by: Helm +--- +# Source: helm-nvcf-llm-request-router/templates/serviceaccount.yaml # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 # @@ -12,30 +52,136 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - ---- -# Source: llm-request-router/templates/serviceaccount.yaml apiVersion: v1 kind: ServiceAccount metadata: name: llm-request-router + namespace: nvcf + labels: + helm.sh/chart: helm-nvcf-llm-request-router-0.0.0 + app.kubernetes.io/name: llm-request-router + app.kubernetes.io/instance: llm-request-router + app.kubernetes.io/version: "0.14.2" + app.kubernetes.io/managed-by: Helm +--- +# Source: helm-nvcf-llm-request-router/templates/configmap-stargate.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License.apiVersion: v1 +kind: ConfigMap +metadata: + name: llm-request-router-stargate + namespace: nvcf labels: - helm.sh/chart: llm-request-router-0.0.0 + helm.sh/chart: helm-nvcf-llm-request-router-0.0.0 app.kubernetes.io/name: llm-request-router app.kubernetes.io/instance: llm-request-router - app.kubernetes.io/version: "0.1.0" + app.kubernetes.io/version: "0.14.2" app.kubernetes.io/managed-by: Helm +data: + stargate.toml: | + schema_version = 1 + + [stargate_identity] + id = { env = "POD_NAME" } + advertised_hostname_template = "{pod_name}.llm-request-router-headless.nvcf.svc.cluster.local" + + [stargate_identity.kubernetes] + pod_name = { env = "POD_NAME" } + namespace = { env = "POD_NAMESPACE" } + + [stargate_network] + grpc_listen_addr = "0.0.0.0:50071" + model_discovery_listen_addr = "0.0.0.0:50073" + http_listen_addr = "0.0.0.0:8000" + advertise_addr = { env = "STARGATE_ADVERTISE_ADDR" } + + [process_lifecycle] + readiness_warmup_ms = 60000 + shutdown_drain_timeout_ms = 30000 + + [stargate_discovery] + remote_watch_urls = [] + allow_insecure_remote_watch_http = false + watch_heartbeat_ms = 5000 + + [stargate_discovery.kubernetes_pods] + headless_service_dns_name = "llm-request-router-headless.nvcf.svc.cluster.local" + poll_interval_ms = 1000 + resolver_ttl_ms = 1000 + + [pylon_transport] + tunnel_protocol = "raw-quic" + quic_connect_timeout_ms = 2000 + quic_request_timeout_ms = 30000 + + pylon_grpc_dial_uri = "http://llm-request-router-backend-router.nvcf.svc.cluster.local:50071" + + + [pylon_transport.reverse] + listen_addr = "0.0.0.0:50072" + connect_timeout_ms = 10000 + + pylon_dial_addr = "llm-request-router-backend-router.nvcf.svc.cluster.local:50072" + + + + + [pylon_transport.tls] + insecure_skip_verify = true + + + [observability.metrics] + listen_addr = "0.0.0.0:9090" + prefix = "stargate_" + + + + [worker_authentication] + endpoint = "http://api.nvcf.svc.cluster.local:9090" + + + [worker_authentication.bearer_token] + secrets_path = "/vault/secrets/secrets.json" + json_path = ["nvcfApiToken"] --- -# Source: llm-request-router/templates/configmap-vault-agent-template.yaml +# Source: helm-nvcf-llm-request-router/templates/configmap-vault-agent-template.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + apiVersion: v1 kind: ConfigMap metadata: name: llm-request-router-vault-agent-tpl + namespace: nvcf labels: - helm.sh/chart: llm-request-router-0.0.0 + helm.sh/chart: helm-nvcf-llm-request-router-0.0.0 app.kubernetes.io/name: llm-request-router app.kubernetes.io/instance: llm-request-router - app.kubernetes.io/version: "0.1.0" + app.kubernetes.io/version: "0.14.2" app.kubernetes.io/managed-by: Helm data: secrets.json.tmpl: |- @@ -45,32 +191,90 @@ data: {{- end }} } --- -# Source: llm-request-router/templates/rbac.yaml +# Source: helm-nvcf-llm-request-router/templates/backend-router-rbac.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: llm-request-router-backend-router-endpointslice-reader + namespace: nvcf + labels: + helm.sh/chart: helm-nvcf-llm-request-router-0.0.0 + app.kubernetes.io/name: llm-request-router-backend-router + app.kubernetes.io/instance: llm-request-router + app.kubernetes.io/component: backend-router + app.kubernetes.io/version: "0.14.2" + app.kubernetes.io/managed-by: Helm +rules: + - apiGroups: ["discovery.k8s.io"] + resources: ["endpointslices"] + verbs: ["get", "list", "watch"] +--- +# Source: helm-nvcf-llm-request-router/templates/rbac.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: llm-request-router-pod-reader + namespace: nvcf labels: - helm.sh/chart: llm-request-router-0.0.0 + helm.sh/chart: helm-nvcf-llm-request-router-0.0.0 app.kubernetes.io/name: llm-request-router app.kubernetes.io/instance: llm-request-router - app.kubernetes.io/version: "0.1.0" + app.kubernetes.io/version: "0.14.2" app.kubernetes.io/managed-by: Helm rules: - apiGroups: [""] resources: ["pods"] verbs: ["list", "watch"] --- -# Source: llm-request-router/templates/rbac.yaml +# Source: helm-nvcf-llm-request-router/templates/backend-router-rbac.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: llm-request-router-backend-router-endpointslice-reader + namespace: nvcf + labels: + helm.sh/chart: helm-nvcf-llm-request-router-0.0.0 + app.kubernetes.io/name: llm-request-router-backend-router + app.kubernetes.io/instance: llm-request-router + app.kubernetes.io/component: backend-router + app.kubernetes.io/version: "0.14.2" + app.kubernetes.io/managed-by: Helm +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: llm-request-router-backend-router-endpointslice-reader +subjects: + - kind: ServiceAccount + name: llm-request-router-backend-router + namespace: nvcf +--- +# Source: helm-nvcf-llm-request-router/templates/rbac.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: llm-request-router-pod-reader + namespace: nvcf labels: - helm.sh/chart: llm-request-router-0.0.0 + helm.sh/chart: helm-nvcf-llm-request-router-0.0.0 app.kubernetes.io/name: llm-request-router app.kubernetes.io/instance: llm-request-router - app.kubernetes.io/version: "0.1.0" + app.kubernetes.io/version: "0.14.2" app.kubernetes.io/managed-by: Helm roleRef: apiGroup: rbac.authorization.k8s.io @@ -79,17 +283,69 @@ roleRef: subjects: - kind: ServiceAccount name: llm-request-router + namespace: nvcf --- -# Source: llm-request-router/templates/headless-service.yaml +# Source: helm-nvcf-llm-request-router/templates/backend-router.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +apiVersion: v1 +kind: Service +metadata: + name: llm-request-router-backend-router + namespace: nvcf + labels: + helm.sh/chart: helm-nvcf-llm-request-router-0.0.0 + app.kubernetes.io/name: llm-request-router-backend-router + app.kubernetes.io/instance: llm-request-router + app.kubernetes.io/component: backend-router + app.kubernetes.io/version: "0.14.2" + app.kubernetes.io/managed-by: Helm +spec: + sessionAffinity: ClientIP + selector: + app.kubernetes.io/name: llm-request-router-backend-router + app.kubernetes.io/instance: llm-request-router + ports: + - name: grpc + port: 50071 + targetPort: grpc + protocol: TCP + appProtocol: kubernetes.io/h2c + - name: quic + port: 50072 + targetPort: quic + protocol: UDP + - name: health + port: 8080 + targetPort: health + protocol: TCP +--- +# Source: helm-nvcf-llm-request-router/templates/headless-service.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + apiVersion: v1 kind: Service metadata: name: llm-request-router-headless + namespace: nvcf labels: - helm.sh/chart: llm-request-router-0.0.0 + helm.sh/chart: helm-nvcf-llm-request-router-0.0.0 app.kubernetes.io/name: llm-request-router app.kubernetes.io/instance: llm-request-router - app.kubernetes.io/version: "0.1.0" + app.kubernetes.io/version: "0.14.2" app.kubernetes.io/managed-by: Helm spec: clusterIP: None @@ -98,25 +354,41 @@ spec: app.kubernetes.io/name: llm-request-router app.kubernetes.io/instance: llm-request-router ports: - - name: http - port: 8000 - targetPort: http - protocol: TCP - name: grpc port: 50071 targetPort: grpc protocol: TCP + - name: quic + port: 50072 + targetPort: reverse + protocol: UDP --- -# Source: llm-request-router/templates/service.yaml +# Source: helm-nvcf-llm-request-router/templates/service.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + apiVersion: v1 kind: Service metadata: name: llm-request-router + namespace: nvcf labels: - helm.sh/chart: llm-request-router-0.0.0 + helm.sh/chart: helm-nvcf-llm-request-router-0.0.0 app.kubernetes.io/name: llm-request-router app.kubernetes.io/instance: llm-request-router - app.kubernetes.io/version: "0.1.0" + app.kubernetes.io/version: "0.14.2" app.kubernetes.io/managed-by: Helm spec: type: ClusterIP @@ -124,23 +396,148 @@ spec: app.kubernetes.io/name: llm-request-router app.kubernetes.io/instance: llm-request-router ports: + - name: http + port: 8000 + targetPort: http + protocol: TCP - name: grpc port: 50071 targetPort: grpc protocol: TCP + - name: quic + port: 50072 + targetPort: reverse + protocol: UDP --- -# Source: llm-request-router/templates/deployment.yaml +# Source: helm-nvcf-llm-request-router/templates/backend-router.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: llm-request-router-backend-router + namespace: nvcf + labels: + helm.sh/chart: helm-nvcf-llm-request-router-0.0.0 + app.kubernetes.io/name: llm-request-router-backend-router + app.kubernetes.io/instance: llm-request-router + app.kubernetes.io/component: backend-router + app.kubernetes.io/version: "0.14.2" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 2 + selector: + matchLabels: + app.kubernetes.io/name: llm-request-router-backend-router + app.kubernetes.io/instance: llm-request-router + template: + metadata: + labels: + app.kubernetes.io/name: llm-request-router-backend-router + app.kubernetes.io/instance: llm-request-router + app.kubernetes.io/component: backend-router + spec: + serviceAccountName: llm-request-router-backend-router + securityContext: + fsGroup: 1000 + seccompProfile: + type: RuntimeDefault + containers: + - name: backend-router + image: stargate:0.14.2 + imagePullPolicy: IfNotPresent + command: + - /usr/local/bin/stargate-k8s-router + args: + - --listen-addr=0.0.0.0:50071 + - --reverse-tunnel-listen-addr=0.0.0.0:50072 + - --health-listen-addr=0.0.0.0:8080 + - --target-namespace=nvcf + - --target-service-name=llm-request-router-headless + - --advertised-hostname-template={pod_name}.llm-request-router-headless.nvcf.svc.cluster.local + - --advertised-grpc-port=50071 + - --grpc-pylon-dial-addr=http://llm-request-router-backend-router.nvcf.svc.cluster.local:50071 + - --watch-heartbeat-ms=5000 + - --grpc-port-name=grpc + - --quic-port-name=quic + - --tunnel-protocol=raw-quic + - --quic-insecure + ports: + - name: grpc + containerPort: 50071 + protocol: TCP + - name: quic + containerPort: 50072 + protocol: UDP + - name: health + containerPort: 8080 + protocol: TCP + readinessProbe: + httpGet: + path: /readyz + port: health + periodSeconds: 2 + livenessProbe: + httpGet: + path: /livez + port: health + periodSeconds: 5 + resources: + limits: + cpu: "2" + memory: 1Gi + requests: + cpu: 250m + memory: 256Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 1000 + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + podAffinityTerm: + topologyKey: kubernetes.io/hostname + labelSelector: + matchLabels: + app.kubernetes.io/name: llm-request-router-backend-router + app.kubernetes.io/instance: llm-request-router +--- +# Source: helm-nvcf-llm-request-router/templates/deployment.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. apiVersion: apps/v1 kind: Deployment metadata: name: llm-request-router + namespace: nvcf labels: - helm.sh/chart: llm-request-router-0.0.0 + helm.sh/chart: helm-nvcf-llm-request-router-0.0.0 app.kubernetes.io/name: llm-request-router app.kubernetes.io/instance: llm-request-router - app.kubernetes.io/version: "0.1.0" + app.kubernetes.io/version: "0.14.2" app.kubernetes.io/managed-by: Helm spec: + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 0 + type: RollingUpdate replicas: 3 selector: matchLabels: @@ -152,42 +549,28 @@ spec: app.kubernetes.io/name: llm-request-router app.kubernetes.io/instance: llm-request-router annotations: - vault.hashicorp.com/agent-copy-volume-mounts: llm-request-router + checksum/stargate-config: 6f39fa75cd38ff92144f8b6ceb7d368cc67ea7cb867ddf3934b08bf25defbb3d + vault.hashicorp.com/agent-copy-volume-mounts: helm-nvcf-llm-request-router vault.hashicorp.com/agent-inject: "true" vault.hashicorp.com/agent-inject-template-file-secrets.json: /vault/config/templates/secrets.json.tmpl vault.hashicorp.com/agent-run-as-same-user: "true" + vault.hashicorp.com/agent-service-account-token-volume-name: vault-token vault.hashicorp.com/auth-path: auth/jwt vault.hashicorp.com/role: llm-request-router vault.hashicorp.com/secret-volume-path: /vault/secrets spec: serviceAccountName: llm-request-router - automountServiceAccountToken: false securityContext: fsGroup: 1000 seccompProfile: type: RuntimeDefault terminationGracePeriodSeconds: 30 containers: - - name: llm-request-router - image: :0.1.0 + - name: helm-nvcf-llm-request-router + image: stargate:0.14.2 imagePullPolicy: IfNotPresent args: - - --stargate-id=$(POD_NAME) - - --listen-addr=0.0.0.0:50071 - - --http-listen-addr=0.0.0.0:8000 - - --advertise-addr=$(POD_IP):50071 - - --stargate-discovery-dns-name=llm-request-router-headless.default.svc.cluster.local - - --pod-name=$(POD_NAME) - - --pod-namespace=$(POD_NAMESPACE) - - --pod-label-selector=app.kubernetes.io/name=llm-request-router - - --dns-poll-ms=1000 - - --dns-resolver-ttl-ms=1000 - - --watch-heartbeat-ms=5000 - - --shutdown-drain-timeout-ms=30000 - - --quic-connect-timeout-ms=2000 - - --quic-request-timeout-ms=30000 - - --metrics-port=9090 - - --reverse-tunnel-connect-timeout-ms=10000 + - --config-file=/etc/stargate/stargate.toml env: - name: POD_NAME valueFrom: @@ -201,6 +584,8 @@ spec: valueFrom: fieldRef: fieldPath: status.podIP + - name: STARGATE_ADVERTISE_ADDR + value: "$(POD_IP):50071" ports: - name: http containerPort: 8000 @@ -211,6 +596,9 @@ spec: - name: metrics containerPort: 9090 protocol: TCP + - name: reverse + containerPort: 50072 + protocol: UDP readinessProbe: httpGet: path: /readyz @@ -237,14 +625,17 @@ spec: runAsNonRoot: true runAsUser: 1000 volumeMounts: - - name: token - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + - name: stargate-config + mountPath: /etc/stargate readOnly: true - name: vault-config-templates mountPath: /vault/config/templates readOnly: true volumes: - - name: token + - name: stargate-config + configMap: + name: llm-request-router-stargate + - name: vault-token projected: sources: - serviceAccountToken: @@ -257,3 +648,95 @@ spec: items: - key: secrets.json.tmpl path: secrets.json.tmpl +--- +# Source: helm-nvcf-llm-request-router/templates/backend-router-servicemonitor.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +--- +# Source: helm-nvcf-llm-request-router/templates/certificate.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +# Source: helm-nvcf-llm-request-router/templates/configmap-lb.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +# Source: helm-nvcf-llm-request-router/templates/hook-llm-migrations.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Helm hook Job that provisions the NVCF service-issuing PKI hierarchy in +# OpenBao that cert-manager will use to mint this chart's Certificate. Runs +# pre-install/pre-upgrade so the PKI backend exists before the Certificate +# resource is reconciled. Mirrors the SIS chart's hook-lls-migrations.yaml +# pattern: same nvcf-openbao-migrations image, env-var-driven dispatch +# (CORE_MIGRATIONS_ENABLED=false + ADDONS_LLM_ENABLED=true), Job-level +# fail-hard via restartPolicy: OnFailure + backoffLimit. +--- +# Source: helm-nvcf-llm-request-router/templates/poddisruptionbudget.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +# Source: helm-nvcf-llm-request-router/templates/servicemonitor.yaml +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/deploy/helm/llm-request-router/llm-request-router/templates/configmap-stargate.yaml b/deploy/helm/llm-request-router/llm-request-router/templates/configmap-stargate.yaml new file mode 100644 index 000000000..090a49df8 --- /dev/null +++ b/deploy/helm/llm-request-router/llm-request-router/templates/configmap-stargate.yaml @@ -0,0 +1,126 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +{{- $workloadKind := include "llm-request-router.workloadKind" . -}} +{{- $backendRouterEnabled := eq (include "llm-request-router.backendRouterEnabled" .) "true" -}} +{{- $directDeployment := and (eq $workloadKind "Deployment") (not $backendRouterEnabled) -}} +{{- $replicaCount := .Values.llmRequestRouter.replicaCount | int -}} +{{- $namespace := include "llm-request-router.namespace" . -}} +{{- $discoveryDnsName := dig "discovery" "dnsName" (printf "%s.%s.svc.cluster.local" .Values.llmRequestRouter.service.headlessName $namespace) .Values.llmRequestRouter -}} +{{- $advertisedHostnameTemplate := include "llm-request-router.advertisedHostnameTemplate" . -}} +{{- $useVaultSecrets := not (and .Values.llmRequestRouter.vault .Values.llmRequestRouter.vault.noVaultAnnotations) -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "llm-request-router.fullname" . }}-stargate + namespace: {{ $namespace }} + labels: + {{- include "llm-request-router.labels" . | nindent 4 }} +data: + stargate.toml: | + schema_version = 1 + + [stargate_identity] + id = { env = "POD_NAME" } + advertised_hostname_template = {{ $advertisedHostnameTemplate | quote }} + + [stargate_identity.kubernetes] + pod_name = { env = "POD_NAME" } + namespace = { env = "POD_NAMESPACE" } + + [stargate_network] + grpc_listen_addr = {{ printf "0.0.0.0:%v" .Values.llmRequestRouter.service.grpcPort | quote }} + model_discovery_listen_addr = "0.0.0.0:50073" + http_listen_addr = {{ printf "0.0.0.0:%v" .Values.llmRequestRouter.service.httpPort | quote }} + advertise_addr = { env = "STARGATE_ADVERTISE_ADDR" } + + [process_lifecycle] + readiness_warmup_ms = {{ .Values.llmRequestRouter.readiness.warmupMs }} + shutdown_drain_timeout_ms = {{ .Values.llmRequestRouter.shutdown.drainTimeoutMs }} + + [stargate_discovery] + remote_watch_urls = {{ .Values.llmRequestRouter.discovery.remoteWatchUrls | toJson }} + allow_insecure_remote_watch_http = {{ .Values.llmRequestRouter.discovery.allowInsecureRemoteWatchHttp }} + watch_heartbeat_ms = {{ .Values.llmRequestRouter.discovery.watchHeartbeatMs }} +{{ if not $directDeployment }} + [stargate_discovery.kubernetes_pods] + headless_service_dns_name = {{ $discoveryDnsName | quote }} + poll_interval_ms = {{ dig "discovery" "dnsPollMs" 1000 .Values.llmRequestRouter }} + resolver_ttl_ms = {{ dig "discovery" "dnsResolverTtlMs" 1000 .Values.llmRequestRouter }} +{{ end }} + [pylon_transport] + tunnel_protocol = "raw-quic" + quic_connect_timeout_ms = {{ .Values.llmRequestRouter.transport.quicConnectTimeoutMs }} + quic_request_timeout_ms = {{ .Values.llmRequestRouter.transport.quicRequestTimeoutMs }} +{{ if $backendRouterEnabled }} + pylon_grpc_dial_uri = {{ include "llm-request-router.backendRouterGrpcDialAddress" . | quote }} +{{ end }} +{{ if .Values.llmRequestRouter.transport.reverseTunnelListenAddr }} + [pylon_transport.reverse] + listen_addr = {{ .Values.llmRequestRouter.transport.reverseTunnelListenAddr | quote }} + connect_timeout_ms = {{ .Values.llmRequestRouter.transport.reverseTunnelConnectTimeoutMs }} +{{ if $backendRouterEnabled }} + pylon_dial_addr = {{ include "llm-request-router.backendRouterReverseTunnelDialAddress" . | quote }} +{{ else if gt $replicaCount 1 }} + pylon_dial_addr = { env = "STARGATE_REVERSE_PYLON_DIAL_ADDR" } +{{ end }} +{{ with .Values.llmRequestRouter.tls.certPath }} + certificate_path = {{ . | quote }} +{{ end }} +{{ with .Values.llmRequestRouter.tls.keyPath }} + private_key_path = {{ . | quote }} +{{ end }} +{{ else }} + [pylon_transport.direct] + connections = 1 +{{ with .Values.llmRequestRouter.tls.certPath }} + trust_bundle_path = {{ . | quote }} +{{ end }} +{{ end }} + [pylon_transport.tls] + insecure_skip_verify = {{ .Values.llmRequestRouter.tls.quicInsecure }} + +{{ if or .Values.llmRequestRouter.loadBalancer.config .Values.llmRequestRouter.loadBalancer.configPath }} + [request_proxy.load_balancer] +{{ if .Values.llmRequestRouter.loadBalancer.config }} + config_path = "/etc/llm-request-router/lb-config.json" +{{ else }} + config_path = {{ .Values.llmRequestRouter.loadBalancer.configPath | quote }} +{{ end }} +{{ end }} + [observability.metrics] + listen_addr = {{ printf "0.0.0.0:%v" .Values.llmRequestRouter.service.metricsPort | quote }} + prefix = "stargate_" + +{{ if and .Values.llmRequestRouter.observability.tracing.enabled .Values.llmRequestRouter.observability.tracing.endpoint }} + [observability.tracing] + endpoint = {{ .Values.llmRequestRouter.observability.tracing.endpoint | quote }} +{{ if and .Values.llmRequestRouter.auth.workerAuthEndpoint $useVaultSecrets }} + + [observability.tracing.access_token] + secrets_path = "/vault/secrets/secrets.json" + json_path = ["tracingAccessToken"] +{{ end }} +{{ end }} +{{ with .Values.llmRequestRouter.auth.workerAuthEndpoint }} + [worker_authentication] + endpoint = {{ . | quote }} +{{ if $useVaultSecrets }} + + [worker_authentication.bearer_token] + secrets_path = "/vault/secrets/secrets.json" + json_path = ["nvcfApiToken"] +{{ end }} +{{ end }} diff --git a/deploy/helm/llm-request-router/llm-request-router/templates/deployment.yaml b/deploy/helm/llm-request-router/llm-request-router/templates/deployment.yaml index 81e95335e..94a79c4e8 100644 --- a/deploy/helm/llm-request-router/llm-request-router/templates/deployment.yaml +++ b/deploy/helm/llm-request-router/llm-request-router/templates/deployment.yaml @@ -34,9 +34,6 @@ router instance that issued the tunnel target. */}} {{- $replicaCount := .Values.llmRequestRouter.replicaCount | int }} {{- $backendRouterEnabled := eq (include "llm-request-router.backendRouterEnabled" .) "true" }} -{{- $configuredDisableDnsDiscovery := dig "discovery" "disableDnsDiscovery" false .Values.llmRequestRouter }} -{{- $directDeployment := and (eq $workloadKind "Deployment") (not $backendRouterEnabled) }} -{{- $disableDnsDiscovery := or $configuredDisableDnsDiscovery $directDeployment }} {{- $watchHeartbeatMs := .Values.llmRequestRouter.discovery.watchHeartbeatMs | int }} {{- if le $watchHeartbeatMs 0 }} {{- fail "llmRequestRouter.discovery.watchHeartbeatMs must be greater than 0" }} @@ -48,15 +45,11 @@ router instance that issued the tunnel target. {{- if and (eq $workloadKind "Deployment") (gt $replicaCount 1) (not $backendRouterEnabled) }} {{- fail "llmRequestRouter.backendRouter.enabled must be true when llmRequestRouter.workload.kind is Deployment and replicaCount is greater than 1" }} {{- end }} -{{- if and $configuredDisableDnsDiscovery (gt $replicaCount 1) (not $backendRouterEnabled) }} -{{- fail "llmRequestRouter.discovery.disableDnsDiscovery cannot be true when llmRequestRouter.replicaCount is greater than 1; multi-replica routers require DNS discovery" }} -{{- end }} {{- /* The identity guard lives here, not in certificate.yaml: existingSecret mode renders no Certificate, so a guard in that template would never run. */}} {{- include "llm-request-router.validateTlsIdentity" . }} -{{- $advertisedHostnameTemplate := include "llm-request-router.advertisedHostnameTemplate" . }} {{- if and $backendRouterEnabled (not .Values.llmRequestRouter.transport.reverseTunnelListenAddr) }} {{- fail "llmRequestRouter.backendRouter.enabled requires llmRequestRouter.transport.reverseTunnelListenAddr" }} {{- end }} @@ -94,6 +87,7 @@ spec: {{- toYaml . | nindent 8 }} {{- end }} annotations: + checksum/stargate-config: {{ include (print $.Template.BasePath "/configmap-stargate.yaml") . | sha256sum }} {{- include "llm-request-router.podAnnotations" . | nindent 8 }} spec: serviceAccountName: {{ include "llm-request-router.serviceAccountName" . }} @@ -109,74 +103,7 @@ spec: image: {{ include "llm-request-router.image" . }} imagePullPolicy: {{ .Values.llmRequestRouter.image.pullPolicy }} args: - - --stargate-id=$(POD_NAME) - - --listen-addr=0.0.0.0:{{ .Values.llmRequestRouter.service.grpcPort }} - - --http-listen-addr=0.0.0.0:{{ .Values.llmRequestRouter.service.httpPort }} - - --advertise-addr=$(POD_IP):{{ .Values.llmRequestRouter.service.grpcPort }} - - --stargate-discovery-dns-name={{ dig "discovery" "dnsName" (printf "%s.%s.svc.cluster.local" .Values.llmRequestRouter.service.headlessName (include "llm-request-router.namespace" .)) .Values.llmRequestRouter }} - - --pod-name=$(POD_NAME) - - --pod-namespace=$(POD_NAMESPACE) - - --advertised-hostname-template={{ $advertisedHostnameTemplate }} - {{- if $disableDnsDiscovery }} - - --disable-dns-discovery - {{- end }} - {{- with dig "discovery" "dnsPollMs" "" .Values.llmRequestRouter }} - - --dns-poll-ms={{ . }} - {{- end }} - {{- with dig "discovery" "dnsResolverTtlMs" "" .Values.llmRequestRouter }} - - --dns-resolver-ttl-ms={{ . }} - {{- end }} - {{- with dig "discovery" "watchHeartbeatMs" "" .Values.llmRequestRouter }} - - --watch-heartbeat-ms={{ . }} - {{- end }} - {{- range .Values.llmRequestRouter.discovery.remoteWatchUrls }} - - --remote-stargate-url={{ . }} - {{- end }} - {{- if .Values.llmRequestRouter.discovery.allowInsecureRemoteWatchHttp }} - - --allow-insecure-remote-watch-http - {{- end }} - - --shutdown-drain-timeout-ms={{ .Values.llmRequestRouter.shutdown.drainTimeoutMs }} - - --readiness-warmup-ms={{ $readinessWarmupMs }} - - --quic-connect-timeout-ms={{ .Values.llmRequestRouter.transport.quicConnectTimeoutMs }} - - --quic-request-timeout-ms={{ .Values.llmRequestRouter.transport.quicRequestTimeoutMs }} - - --metrics-port={{ .Values.llmRequestRouter.service.metricsPort }} - {{- if .Values.llmRequestRouter.transport.reverseTunnelListenAddr }} - - --backend-connectivity=reverse - - --reverse-tunnel-listen-addr={{ .Values.llmRequestRouter.transport.reverseTunnelListenAddr }} - {{- end }} - {{- if $backendRouterEnabled }} - - --grpc-pylon-dial-addr={{ include "llm-request-router.backendRouterGrpcDialAddress" . }} - - --reverse-tunnel-pylon-dial-addr={{ include "llm-request-router.backendRouterReverseTunnelDialAddress" . }} - {{- else if and .Values.llmRequestRouter.transport.reverseTunnelListenAddr (gt $replicaCount 1) }} - - --reverse-tunnel-pylon-dial-addr=$(POD_IP):{{ .Values.llmRequestRouter.service.reverseTunnelPort }} - {{- end }} - {{- if .Values.llmRequestRouter.transport.reverseTunnelConnectTimeoutMs }} - - --reverse-tunnel-connect-timeout-ms={{ .Values.llmRequestRouter.transport.reverseTunnelConnectTimeoutMs }} - {{- end }} - {{- if .Values.llmRequestRouter.loadBalancer.config }} - - --lb-config-path=/etc/llm-request-router/lb-config.json - {{- else if .Values.llmRequestRouter.loadBalancer.configPath }} - - --lb-config-path={{ .Values.llmRequestRouter.loadBalancer.configPath }} - {{- end }} - {{- if and .Values.llmRequestRouter.observability.tracing.enabled .Values.llmRequestRouter.observability.tracing.endpoint }} - - --otel-endpoint={{ .Values.llmRequestRouter.observability.tracing.endpoint }} - {{- end }} - {{- with .Values.llmRequestRouter.auth.workerAuthEndpoint }} - - --worker-auth-endpoint={{ . }} - {{- if not (and $.Values.llmRequestRouter.vault $.Values.llmRequestRouter.vault.noVaultAnnotations) }} - - --secrets-path=/vault/secrets/secrets.json - - --secrets-json-path=nvcfApiToken - {{- end }} - {{- end }} - {{- with .Values.llmRequestRouter.tls.certPath }} - - --tls-cert-path={{ . }} - {{- end }} - {{- with .Values.llmRequestRouter.tls.keyPath }} - - --tls-key-path={{ . }} - {{- end }} - {{- if .Values.llmRequestRouter.tls.quicInsecure }} - - --quic-insecure - {{- end }} + - --config-file=/etc/stargate/stargate.toml env: - name: POD_NAME valueFrom: @@ -190,6 +117,12 @@ spec: valueFrom: fieldRef: fieldPath: status.podIP + - name: STARGATE_ADVERTISE_ADDR + value: "$(POD_IP):{{ .Values.llmRequestRouter.service.grpcPort }}" + {{- if and (not $backendRouterEnabled) .Values.llmRequestRouter.transport.reverseTunnelListenAddr (gt $replicaCount 1) }} + - name: STARGATE_REVERSE_PYLON_DIAL_ADDR + value: "$(POD_IP):{{ .Values.llmRequestRouter.service.reverseTunnelPort }}" + {{- end }} ports: - name: http containerPort: {{ .Values.llmRequestRouter.service.httpPort }} @@ -220,6 +153,9 @@ spec: securityContext: {{- toYaml .Values.llmRequestRouter.securityContext | nindent 12 }} volumeMounts: + - name: stargate-config + mountPath: /etc/stargate + readOnly: true - name: vault-config-templates mountPath: /vault/config/templates readOnly: true @@ -236,6 +172,9 @@ spec: readOnly: true {{- end }} volumes: + - name: stargate-config + configMap: + name: {{ include "llm-request-router.fullname" . }}-stargate - name: vault-token projected: sources: diff --git a/deploy/helm/llm-request-router/llm-request-router/values.yaml b/deploy/helm/llm-request-router/llm-request-router/values.yaml index 9a6dbd920..dceb41854 100644 --- a/deploy/helm/llm-request-router/llm-request-router/values.yaml +++ b/deploy/helm/llm-request-router/llm-request-router/values.yaml @@ -234,7 +234,6 @@ llmRequestRouter: memory: 256Mi discovery: - disableDnsDiscovery: false # Maximum interval between unchanged WatchStargates snapshots. This is # shared by Stargate and the EndpointSlice backend router. watchHeartbeatMs: 5000 diff --git a/deploy/helm/llm-request-router/scripts/check-backend-router-render.sh b/deploy/helm/llm-request-router/scripts/check-backend-router-render.sh index eb2cb50a1..b0937f045 100755 --- a/deploy/helm/llm-request-router/scripts/check-backend-router-render.sh +++ b/deploy/helm/llm-request-router/scripts/check-backend-router-render.sh @@ -166,9 +166,9 @@ assert_zero_config_contains() { fi } -assert_zero_config_contains "--grpc-pylon-dial-addr=http://llm-request-router-backend-router.nvcf.svc.cluster.local:50071" \ +assert_zero_config_contains 'pylon_grpc_dial_uri = "http://llm-request-router-backend-router.nvcf.svc.cluster.local:50071"' \ "gRPC dial address must default to the in-cluster backend-router Service" -assert_zero_config_contains "--reverse-tunnel-pylon-dial-addr=llm-request-router-backend-router.nvcf.svc.cluster.local:50072" \ +assert_zero_config_contains 'pylon_dial_addr = "llm-request-router-backend-router.nvcf.svc.cluster.local:50072"' \ "reverse-tunnel dial address must default to the in-cluster backend-router Service" # An explicitly configured address must still win over the default. @@ -207,9 +207,9 @@ assert_contains "image: registry.example.invalid/nvcf/stargate:next" \ "backend router must use its explicitly pinned Stargate image" assert_contains "app.kubernetes.io/version: \"next\"" \ "backend router labels must identify the explicitly pinned image version" -assert_contains "--grpc-pylon-dial-addr=https://llm-router.example.invalid:443" \ +assert_contains 'pylon_grpc_dial_uri = "https://llm-router.example.invalid:443"' \ "Stargate must advertise the external gRPC endpoint to pylon" -assert_contains "--reverse-tunnel-pylon-dial-addr=llm-router.example.invalid:8080" \ +assert_contains 'pylon_dial_addr = "llm-router.example.invalid:8080"' \ "Stargate must advertise the external reverse-tunnel endpoint to pylon" assert_contains "--tls-cert-path=/etc/stargate/tls/tls.crt" \ "backend router must use the Stargate TLS certificate" @@ -404,7 +404,7 @@ single_replica="$(helm template llm-request-router "$chart_dir" \ --set llmRequestRouter.backendRouter.image.tag=next \ --set llmRequestRouter.backendRouter.pylonGrpcDialAddress=https://llm-router.example.invalid:443 \ --set llmRequestRouter.backendRouter.pylonReverseTunnelDialAddress=llm-router.example.invalid:8080)" -if ! grep -Fq -- "--advertised-hostname-template={pod_name}.llm-request-router-headless.nvcf.svc.cluster.local" <<<"$single_replica"; then +if ! grep -Fq -- 'advertised_hostname_template = "{pod_name}.llm-request-router-headless.nvcf.svc.cluster.local"' <<<"$single_replica"; then echo "FAIL: backend routing must retain per-pod authority and SNI for one replica" >&2 exit 1 fi diff --git a/deploy/helm/llm-request-router/scripts/check-multi-replica-render.sh b/deploy/helm/llm-request-router/scripts/check-multi-replica-render.sh index ca8cc0a28..e8603dce2 100755 --- a/deploy/helm/llm-request-router/scripts/check-multi-replica-render.sh +++ b/deploy/helm/llm-request-router/scripts/check-multi-replica-render.sh @@ -43,6 +43,18 @@ workload_args() { yq -r "select(.kind == \"${kind}\" and .metadata.name == \"llm-request-router\") | .spec.template.spec.containers[0].args[]" "${manifest}" } +stargate_config() { + local manifest="$1" + yq -r 'select(.kind == "ConfigMap" and .metadata.name == "llm-request-router-stargate") | .data."stargate.toml"' "${manifest}" +} + +workload_env_value() { + local manifest="$1" + local kind="$2" + local name="$3" + yq -r "select(.kind == \"${kind}\" and .metadata.name == \"llm-request-router\") | .spec.template.spec.containers[0].env[] | select(.name == \"${name}\") | .value" "${manifest}" | head -n1 +} + backend_router_args() { local manifest="$1" yq -r 'select(.kind == "Deployment" and .metadata.name == "llm-request-router-backend-router") | .spec.template.spec.containers[0].args[]' "${manifest}" @@ -90,11 +102,14 @@ default_backend_kind="$(yq -r 'select(.kind == "Deployment" and .metadata.name = [ "${default_backend_kind}" = "Deployment" ] || fail "default multi-replica Deployment did not infer backend-router enablement" default_args="$(workload_args "${default_manifest}" Deployment)" +default_config="$(stargate_config "${default_manifest}")" default_backend_args="$(backend_router_args "${default_manifest}")" -printf '%s\n' "${default_args}" | grep -qx -- "--advertised-hostname-template={pod_name}.llm-request-router-headless.${namespace}.svc.cluster.local" || fail "default Deployment missing per-pod advertised hostname template" -printf '%s\n' "${default_args}" | grep -qx -- "--grpc-pylon-dial-addr=http://llm-request-router-backend-router.${namespace}.svc.cluster.local:50071" || fail "default Deployment missing explicit inferred backend-router gRPC dial URI" -printf '%s\n' "${default_args}" | grep -qx -- "--watch-heartbeat-ms=5000" || fail "default Deployment missing Watch heartbeat arg" -printf '%s\n' "${default_args}" | grep -qx -- '--readiness-warmup-ms=60000' || fail "default Deployment missing 60-second readiness warm-up" +[ "${default_args}" = "--config-file=/etc/stargate/stargate.toml" ] || fail "default Deployment must use only --config-file" +printf '%s\n' "${default_config}" | grep -Fqx -- "advertised_hostname_template = \"{pod_name}.llm-request-router-headless.${namespace}.svc.cluster.local\"" || fail "default config missing per-pod advertised hostname template" +printf '%s\n' "${default_config}" | grep -Fqx -- "pylon_grpc_dial_uri = \"http://llm-request-router-backend-router.${namespace}.svc.cluster.local:50071\"" || fail "default config missing explicit inferred backend-router gRPC dial URI" +printf '%s\n' "${default_config}" | grep -Fqx -- 'watch_heartbeat_ms = 5000' || fail "default config missing Watch heartbeat" +printf '%s\n' "${default_config}" | grep -Fqx -- 'readiness_warmup_ms = 60000' || fail "default config missing 60-second readiness warm-up" +printf '%s\n' "${default_config}" | grep -Fqx -- '[stargate_discovery.kubernetes_pods]' || fail "default multi-replica config missing Kubernetes pod discovery section" printf '%s\n' "${default_backend_args}" | grep -qx -- "--watch-heartbeat-ms=5000" || fail "backend router missing Watch heartbeat arg" multi_deployment_manifest="${tmp_dir}/multi-deployment.yaml" @@ -103,8 +118,10 @@ render "${multi_deployment_manifest}" \ --set llmRequestRouter.backendRouter.enabled=true multi_deployment_args="$(workload_args "${multi_deployment_manifest}" Deployment)" -printf '%s\n' "${multi_deployment_args}" | grep -qx -- "--advertised-hostname-template={pod_name}.llm-request-router-headless.${namespace}.svc.cluster.local" || fail "multi-replica Deployment missing per-pod advertised hostname template" -printf '%s\n' "${multi_deployment_args}" | grep -qx -- "--grpc-pylon-dial-addr=http://llm-request-router-backend-router.${namespace}.svc.cluster.local:50071" || fail "multi-replica Deployment missing explicit backend-router gRPC dial URI" +multi_deployment_config="$(stargate_config "${multi_deployment_manifest}")" +[ "${multi_deployment_args}" = "--config-file=/etc/stargate/stargate.toml" ] || fail "multi-replica Deployment must use only --config-file" +printf '%s\n' "${multi_deployment_config}" | grep -Fqx -- "advertised_hostname_template = \"{pod_name}.llm-request-router-headless.${namespace}.svc.cluster.local\"" || fail "multi-replica config missing per-pod advertised hostname template" +printf '%s\n' "${multi_deployment_config}" | grep -Fqx -- "pylon_grpc_dial_uri = \"http://llm-request-router-backend-router.${namespace}.svc.cluster.local:50071\"" || fail "multi-replica config missing explicit backend-router gRPC dial URI" statefulset_manifest="${tmp_dir}/statefulset.yaml" render "${statefulset_manifest}" \ @@ -121,8 +138,12 @@ statefulset_backend_kind="$(yq -r 'select(.kind == "Deployment" and .metadata.na [ -z "${statefulset_backend_kind}" ] || fail "pinned StatefulSet unexpectedly inferred backend-router enablement" statefulset_args="$(workload_args "${statefulset_manifest}" StatefulSet)" -printf '%s\n' "${statefulset_args}" | grep -qx -- "--stargate-discovery-dns-name=llm-request-router-headless.${namespace}.svc.cluster.local" || fail "StatefulSet direct mode missing headless discovery DNS arg" -printf '%s\n' "${statefulset_args}" | grep -qx -- '--reverse-tunnel-pylon-dial-addr=$(POD_IP):50072' || fail "StatefulSet direct mode missing per-pod reverse tunnel address" +statefulset_config="$(stargate_config "${statefulset_manifest}")" +[ "${statefulset_args}" = "--config-file=/etc/stargate/stargate.toml" ] || fail "StatefulSet must use only --config-file" +printf '%s\n' "${statefulset_config}" | grep -Fqx -- '[stargate_discovery.kubernetes_pods]' || fail "StatefulSet config missing Kubernetes pod discovery section" +printf '%s\n' "${statefulset_config}" | grep -Fqx -- "headless_service_dns_name = \"llm-request-router-headless.${namespace}.svc.cluster.local\"" || fail "StatefulSet config missing headless discovery DNS name" +printf '%s\n' "${statefulset_config}" | grep -Fqx -- 'pylon_dial_addr = { env = "STARGATE_REVERSE_PYLON_DIAL_ADDR" }' || fail "StatefulSet config missing per-pod reverse tunnel environment reference" +[ "$(workload_env_value "${statefulset_manifest}" StatefulSet STARGATE_REVERSE_PYLON_DIAL_ADDR)" = '$(POD_IP):50072' ] || fail "StatefulSet missing derived reverse tunnel environment value" assert_render_fails "llmRequestRouter.workload.kind must be Deployment or StatefulSet, got \"DaemonSet\"" \ --set llmRequestRouter.workload.kind=DaemonSet @@ -139,13 +160,11 @@ render "${single_deployment_manifest}" \ --set llmRequestRouter.backendRouter.enabled=false single_deployment_args="$(workload_args "${single_deployment_manifest}" Deployment)" -printf '%s\n' "${single_deployment_args}" | grep -qx -- "--disable-dns-discovery" || fail "single-replica direct Deployment missing --disable-dns-discovery" - -assert_render_fails "llmRequestRouter.discovery.disableDnsDiscovery cannot be true when llmRequestRouter.replicaCount is greater than 1; multi-replica routers require DNS discovery" \ - --set llmRequestRouter.workload.kind=StatefulSet \ - --set llmRequestRouter.replicaCount=3 \ - --set llmRequestRouter.backendRouter.enabled=false \ - --set llmRequestRouter.discovery.disableDnsDiscovery=true +single_deployment_config="$(stargate_config "${single_deployment_manifest}")" +[ "${single_deployment_args}" = "--config-file=/etc/stargate/stargate.toml" ] || fail "single-replica Deployment must use only --config-file" +if printf '%s\n' "${single_deployment_config}" | grep -Fq -- '[stargate_discovery.kubernetes_pods]'; then + fail "single-replica direct Deployment must select self-only discovery by omitting the Kubernetes pod section" +fi assert_render_fails "llmRequestRouter.discovery.watchHeartbeatMs must be greater than 0" \ --set llmRequestRouter.discovery.watchHeartbeatMs=0 @@ -154,17 +173,17 @@ secure_remote_manifest="${tmp_dir}/secure-remote.yaml" render "${secure_remote_manifest}" \ --set-string 'llmRequestRouter.discovery.remoteWatchUrls[0]=https://region-b.example.test:50071' -secure_remote_args="$(workload_args "${secure_remote_manifest}" Deployment)" +secure_remote_config="$(stargate_config "${secure_remote_manifest}")" secure_remote_backend_args="$(backend_router_args "${secure_remote_manifest}")" -printf '%s\n' "${secure_remote_args}" | grep -qx -- '--remote-stargate-url=https://region-b.example.test:50071' || fail "Stargate missing secure remote Watch URI" +printf '%s\n' "${secure_remote_config}" | grep -Fqx -- 'remote_watch_urls = ["https://region-b.example.test:50071"]' || fail "Stargate config missing secure remote Watch URI" printf '%s\n' "${secure_remote_backend_args}" | grep -qx -- '--remote-stargate-url=https://region-b.example.test:50071' || fail "backend router missing secure remote Watch URI" custom_warmup_manifest="${tmp_dir}/custom-warmup.yaml" render "${custom_warmup_manifest}" \ --set llmRequestRouter.readiness.warmupMs=1234 -custom_warmup_args="$(workload_args "${custom_warmup_manifest}" Deployment)" -printf '%s\n' "${custom_warmup_args}" | grep -qx -- '--readiness-warmup-ms=1234' || fail "custom readiness warm-up did not reach Stargate args" +custom_warmup_config="$(stargate_config "${custom_warmup_manifest}")" +printf '%s\n' "${custom_warmup_config}" | grep -Fqx -- 'readiness_warmup_ms = 1234' || fail "custom readiness warm-up did not reach Stargate config" assert_render_fails "llmRequestRouter.readiness.warmupMs must be a non-negative integer" \ --set llmRequestRouter.readiness.warmupMs=-1 @@ -180,10 +199,10 @@ development_remote_manifest="${tmp_dir}/development-remote.yaml" render "${development_remote_manifest}" \ --set llmRequestRouter.discovery.allowInsecureRemoteWatchHttp=true \ --set-string 'llmRequestRouter.discovery.remoteWatchUrls[0]=http://127.0.0.1:50071' -development_remote_args="$(workload_args "${development_remote_manifest}" Deployment)" +development_remote_config="$(stargate_config "${development_remote_manifest}")" development_remote_backend_args="$(backend_router_args "${development_remote_manifest}")" -printf '%s\n' "${development_remote_args}" | grep -qx -- '--remote-stargate-url=http://127.0.0.1:50071' || fail "development HTTP remote Watch URI was not rendered" -printf '%s\n' "${development_remote_args}" | grep -qx -- '--allow-insecure-remote-watch-http' || fail "Stargate missing development HTTP opt-in" +printf '%s\n' "${development_remote_config}" | grep -Fqx -- 'remote_watch_urls = ["http://127.0.0.1:50071"]' || fail "development HTTP remote Watch URI was not rendered" +printf '%s\n' "${development_remote_config}" | grep -Fqx -- 'allow_insecure_remote_watch_http = true' || fail "Stargate config missing development HTTP opt-in" printf '%s\n' "${development_remote_backend_args}" | grep -qx -- '--allow-insecure-remote-watch-http' || fail "backend router missing development HTTP opt-in" for invalid_remote_url in \ diff --git a/deploy/helm/llm-request-router/scripts/check-pki-render.sh b/deploy/helm/llm-request-router/scripts/check-pki-render.sh index 34964ac1f..62eaf65ed 100644 --- a/deploy/helm/llm-request-router/scripts/check-pki-render.sh +++ b/deploy/helm/llm-request-router/scripts/check-pki-render.sh @@ -117,12 +117,11 @@ cert_dns_name="$(yq -rN 'select(.kind == "Certificate" and .metadata.name == "st [ "${cert_dns_name}" = "*.stargate.localhost" ] workload_args="$(yq -rN 'select((.kind == "Deployment" or .kind == "StatefulSet") and .metadata.name == "llm-request-router") | .spec.template.spec.containers[0].args[]' "${manifest}")" -printf '%s\n' "${workload_args}" | grep -qx -- "--tls-cert-path=/etc/stargate/tls/tls.crt" -printf '%s\n' "${workload_args}" | grep -qx -- "--tls-key-path=/etc/stargate/tls/tls.key" -if printf '%s\n' "${workload_args}" | grep -qx -- "--quic-insecure"; then - echo "unexpected --quic-insecure flag rendered" >&2 - exit 1 -fi +[ "${workload_args}" = "--config-file=/etc/stargate/stargate.toml" ] || fail "request router must use only --config-file" +workload_config="$(yq -rN 'select(.kind == "ConfigMap" and .metadata.name == "llm-request-router-stargate") | .data."stargate.toml"' "${manifest}")" +printf '%s\n' "${workload_config}" | grep -Fqx -- 'certificate_path = "/etc/stargate/tls/tls.crt"' +printf '%s\n' "${workload_config}" | grep -Fqx -- 'private_key_path = "/etc/stargate/tls/tls.key"' +printf '%s\n' "${workload_config}" | grep -Fqx -- 'insecure_skip_verify = false' tls_mount_name="$(yq -rN 'select((.kind == "Deployment" or .kind == "StatefulSet") and .metadata.name == "llm-request-router") | .spec.template.spec.containers[0].volumeMounts[] | select(.name == "stargate-tls" and .mountPath == "/etc/stargate/tls" and .readOnly == true) | .name' "${manifest}")" tls_volume_name="$(yq -rN 'select((.kind == "Deployment" or .kind == "StatefulSet") and .metadata.name == "llm-request-router") | .spec.template.spec.volumes[] | select(.name == "stargate-tls" and .secret.secretName == "stargate-quic-tls") | .name' "${manifest}")" @@ -172,7 +171,6 @@ helm template llm-request-router ./llm-request-router \ --values ./llm-request-router/values.yaml \ --set llmRequestRouter.image.repository=stargate \ --set llmRequestRouter.replicaCount=1 \ - --set llmRequestRouter.discovery.disableDnsDiscovery=true \ --set llmRequestRouter.certificate.enabled=true \ --set llmRequestRouter.certificate.secretName=stargate-quic-tls \ --set llmRequestRouter.certificate.issuerRef.name=nvcf-openbao-pki \ @@ -182,8 +180,8 @@ helm template llm-request-router ./llm-request-router \ single_replica_dns_name="$(yq -rN 'select(.kind == "Certificate" and .metadata.name == "stargate-quic-tls") | .spec.dnsNames[0]' "${single_replica_manifest}")" [ "${single_replica_dns_name}" = "llm-request-router.nvcf.svc.cluster.local" ] || fail "single-replica Certificate SAN did not render the advertised hostname" -single_replica_args="$(yq -rN 'select((.kind == "Deployment" or .kind == "StatefulSet") and .metadata.name == "llm-request-router") | .spec.template.spec.containers[0].args[]' "${single_replica_manifest}")" -printf '%s\n' "${single_replica_args}" | grep -qx -- "--advertised-hostname-template=llm-request-router.nvcf.svc.cluster.local" || fail "single-replica render missing the advertised hostname template" +single_replica_config="$(yq -rN 'select(.kind == "ConfigMap" and .metadata.name == "llm-request-router-stargate") | .data."stargate.toml"' "${single_replica_manifest}")" +printf '%s\n' "${single_replica_config}" | grep -Fqx -- 'advertised_hostname_template = "llm-request-router.nvcf.svc.cluster.local"' || fail "single-replica config missing the advertised hostname template" # Certificate validation resolves both supported placeholders. The pod name # remains one DNS label, while the namespace is known at chart render time. @@ -338,12 +336,10 @@ existing_secret_volume="$(yq -rN 'select((.kind == "Deployment" or .kind == "Sta existing_secret_mount="$(yq -rN 'select((.kind == "Deployment" or .kind == "StatefulSet") and .metadata.name == "llm-request-router") | .spec.template.spec.containers[0].volumeMounts[] | select(.name == "stargate-tls" and .mountPath == "/etc/stargate/tls" and .readOnly == true) | .name' "${existing_secret_manifest}")" [ "${existing_secret_mount}" = "stargate-tls" ] || fail "existing-Secret mode did not mount stargate-tls read-only" -existing_secret_args="$(yq -rN 'select((.kind == "Deployment" or .kind == "StatefulSet") and .metadata.name == "llm-request-router") | .spec.template.spec.containers[0].args[]' "${existing_secret_manifest}")" -printf '%s\n' "${existing_secret_args}" | grep -qx -- "--tls-cert-path=/etc/stargate/tls/tls.crt" || fail "existing-Secret mode did not pass the certificate path" -printf '%s\n' "${existing_secret_args}" | grep -qx -- "--tls-key-path=/etc/stargate/tls/tls.key" || fail "existing-Secret mode did not pass the private key path" -if printf '%s\n' "${existing_secret_args}" | grep -qx -- "--quic-insecure"; then - fail "existing-Secret mode enabled insecure request-router transport" -fi +existing_secret_config="$(yq -rN 'select(.kind == "ConfigMap" and .metadata.name == "llm-request-router-stargate") | .data."stargate.toml"' "${existing_secret_manifest}")" +printf '%s\n' "${existing_secret_config}" | grep -Fqx -- 'certificate_path = "/etc/stargate/tls/tls.crt"' || fail "existing-Secret mode did not configure the certificate path" +printf '%s\n' "${existing_secret_config}" | grep -Fqx -- 'private_key_path = "/etc/stargate/tls/tls.key"' || fail "existing-Secret mode did not configure the private key path" +printf '%s\n' "${existing_secret_config}" | grep -Fqx -- 'insecure_skip_verify = false' || fail "existing-Secret mode enabled insecure request-router transport" # Mixed ownership: cert-manager and the operator cannot both own the identity. mixed_ownership_error="${tmp_dir}/mixed-ownership.err" diff --git a/deploy/stacks/self-managed/environments/base.yaml b/deploy/stacks/self-managed/environments/base.yaml index 07bb9bfd0..eea1a4245 100644 --- a/deploy/stacks/self-managed/environments/base.yaml +++ b/deploy/stacks/self-managed/environments/base.yaml @@ -332,7 +332,6 @@ addons: kind: Deployment discovery: - disableDnsDiscovery: false # Maximum interval between unchanged local and remote Watch snapshots. watchHeartbeatMs: 5000 # Recursive Watch endpoints require an explicit HTTPS URI. Plaintext diff --git a/deploy/stacks/self-managed/tests/check-llm-pki-issuer.sh b/deploy/stacks/self-managed/tests/check-llm-pki-issuer.sh index e56e05364..7ede08a8b 100755 --- a/deploy/stacks/self-managed/tests/check-llm-pki-issuer.sh +++ b/deploy/stacks/self-managed/tests/check-llm-pki-issuer.sh @@ -251,11 +251,11 @@ expect_external_router() { ! grep -Fq "name: $issuer_name" "$certificate_file"; then fail "$case_name did not render Certificate issuer name $issuer_name" fi - grep -Fq -- '--tls-cert-path=/etc/stargate/tls/tls.crt' "$manifests_file" || + grep -Fq -- 'certificate_path = "/etc/stargate/tls/tls.crt"' "$manifests_file" || fail "$case_name did not enable the request-router TLS certificate" - grep -Fq -- '--tls-key-path=/etc/stargate/tls/tls.key' "$manifests_file" || + grep -Fq -- 'private_key_path = "/etc/stargate/tls/tls.key"' "$manifests_file" || fail "$case_name did not enable the request-router TLS key" - if grep -Fq -- '--quic-insecure' "$manifests_file"; then + if grep -Fq -- 'insecure_skip_verify = true' "$manifests_file"; then fail "$case_name enabled insecure request-router transport" fi if grep -Fq 'name: addons-llm-migrations' "$manifests_file"; then @@ -332,11 +332,11 @@ expect_existing_secret_router() { test "$mounted_secret" = "$secret_name" || fail "$case_name mounted secret $mounted_secret, expected $secret_name" - grep -Fq -- '--tls-cert-path=/etc/stargate/tls/tls.crt' "$manifests_file" || + grep -Fq -- 'certificate_path = "/etc/stargate/tls/tls.crt"' "$manifests_file" || fail "$case_name did not pass the request-router certificate path" - grep -Fq -- '--tls-key-path=/etc/stargate/tls/tls.key' "$manifests_file" || + grep -Fq -- 'private_key_path = "/etc/stargate/tls/tls.key"' "$manifests_file" || fail "$case_name did not pass the request-router private key path" - if grep -Fq -- '--quic-insecure' "$manifests_file"; then + if grep -Fq -- 'insecure_skip_verify = true' "$manifests_file"; then fail "$case_name enabled insecure request-router transport" fi } @@ -371,9 +371,9 @@ expect_managed_router() { fail "$case_name did not render ClusterIssuer name $issuer_name" grep -Fq 'name: addons-llm-migrations' "$manifests_file" || fail "$case_name did not render the managed OpenBao provisioning hook" - grep -Fq -- '--tls-cert-path=/etc/stargate/tls/tls.crt' "$manifests_file" || + grep -Fq -- 'certificate_path = "/etc/stargate/tls/tls.crt"' "$manifests_file" || fail "$case_name did not enable the request-router TLS certificate" - if grep -Fq -- '--quic-insecure' "$manifests_file"; then + if grep -Fq -- 'insecure_skip_verify = true' "$manifests_file"; then fail "$case_name enabled insecure request-router transport" fi } @@ -420,7 +420,7 @@ test "$secure_defaults_dns_names" = "$(printf '%s\n%s' \ fail "secure defaults did not render the stable and per-pod request-router DNS names" grep -Fq 'name: addons-llm-migrations' "$secure_defaults_manifests" || fail "secure defaults did not render the managed OpenBao provisioning hook" -if grep -Fq -- '--quic-insecure' "$secure_defaults_manifests"; then +if grep -Fq -- 'insecure_skip_verify = true' "$secure_defaults_manifests"; then fail "secure defaults enabled insecure request-router transport" fi diff --git a/deploy/stacks/self-managed/tests/llm-router-local-chart.sh b/deploy/stacks/self-managed/tests/llm-router-local-chart.sh index c8ea3c47a..abce417bf 100755 --- a/deploy/stacks/self-managed/tests/llm-router-local-chart.sh +++ b/deploy/stacks/self-managed/tests/llm-router-local-chart.sh @@ -32,7 +32,6 @@ test "$actual" = "$chart_path" || { --environment default \ --state-values-set addons.llm.enabled=true \ --state-values-set-string "addons.llm.requestRouter.chartPath=$chart_path" \ - --state-values-set addons.llm.requestRouter.discovery.disableDnsDiscovery=true \ --state-values-set addons.llm.requestRouter.discovery.watchHeartbeatMs=7000 \ --state-values-set-string 'addons.llm.requestRouter.discovery.remoteWatchUrls[0]=https://region-b.example.invalid:50071' \ --state-values-set addons.llm.requestRouter.discovery.allowInsecureRemoteWatchHttp=true \ @@ -102,12 +101,6 @@ test "$allow_insecure_remote_watch_http" = "true" || { exit 1 } -disable_dns_discovery="$(yq -r '.llmRequestRouter.discovery.disableDnsDiscovery' "$values_file")" -test "$disable_dns_discovery" = "true" || { - echo "llm-router-local-chart: expected DNS discovery override forwarding, got ${disable_dns_discovery:-missing}" >&2 - exit 1 -} - watch_heartbeat_ms="$(yq -r '.llmRequestRouter.discovery.watchHeartbeatMs' "$values_file")" test "$watch_heartbeat_ms" = "7000" || { echo "llm-router-local-chart: expected Watch heartbeat forwarding, got ${watch_heartbeat_ms:-missing}" >&2 diff --git a/src/libraries/rust/stargate/Cargo.lock b/src/libraries/rust/stargate/Cargo.lock index 86a20a9ca..3dc7df2a9 100644 --- a/src/libraries/rust/stargate/Cargo.lock +++ b/src/libraries/rust/stargate/Cargo.lock @@ -30,6 +30,15 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "android_system_properties" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" +dependencies = [ + "libc", +] + [[package]] name = "anes" version = "0.1.6" @@ -321,6 +330,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "built" version = "0.8.1" @@ -407,6 +425,18 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "chrono" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link", +] + [[package]] name = "ciborium" version = "0.2.2" @@ -610,6 +640,40 @@ dependencies = [ "typenum", ] +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core", + "quote", + "syn", +] + [[package]] name = "data-encoding" version = "2.10.0" @@ -637,6 +701,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", + "serde_core", ] [[package]] @@ -687,6 +752,12 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + [[package]] name = "educe" version = "0.6.0" @@ -1057,7 +1128,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap", + "indexmap 2.14.0", "slab", "tokio", "tokio-util", @@ -1103,6 +1174,12 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.15.5" @@ -1141,6 +1218,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "hickory-proto" version = "0.24.4" @@ -1318,6 +1401,30 @@ dependencies = [ "tracing", ] +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "icu_collections" version = "2.1.1" @@ -1405,6 +1512,12 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "1.1.0" @@ -1426,6 +1539,17 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.14.0" @@ -1514,10 +1638,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d" dependencies = [ "jiff-static", + "jiff-tzdb-platform", "log", "portable-atomic", "portable-atomic-util", "serde_core", + "windows-sys 0.61.2", ] [[package]] @@ -1531,6 +1657,21 @@ dependencies = [ "syn", ] +[[package]] +name = "jiff-tzdb" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "142bd39932ad231f10513df9ab62661fead8719872150b7ad02a2df79f4e141e" + +[[package]] +name = "jiff-tzdb-platform" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" +dependencies = [ + "jiff-tzdb", +] + [[package]] name = "jni" version = "0.21.1" @@ -2158,7 +2299,7 @@ checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" dependencies = [ "fixedbitset", "hashbrown 0.15.5", - "indexmap", + "indexmap 2.14.0", ] [[package]] @@ -2468,7 +2609,7 @@ dependencies = [ "h3-quinn", "http", "httpdate", - "indexmap", + "indexmap 2.14.0", "memchr", "opentelemetry", "opentelemetry_sdk", @@ -2823,7 +2964,7 @@ checksum = "1a30e631b7f4a03dee9056b8ef6982e8ba371dd5bedb74d3ec86df4499132c70" dependencies = [ "bytes", "hashbrown 0.16.1", - "indexmap", + "indexmap 2.14.0", "munge", "ptr_meta", "rancor", @@ -3025,6 +3166,30 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -3142,6 +3307,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "serde_spanned" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +dependencies = [ + "serde_core", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3154,13 +3328,46 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee78f1fbe43ac4a0e47aadb3dbd357b69eb0d3793e948624cd03dd2750ab1c0a" +dependencies = [ + "base64", + "bs58", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.14.0", + "jiff", + "schemars 0.9.0", + "schemars 1.2.2", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8705578779c2b6bd90d84d66eb2e206b708b1a4d7b9f17641b293545bf1c7e46" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "serde_yaml" version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap", + "indexmap 2.14.0", "itoa", "ryu", "serde", @@ -3173,7 +3380,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b4db627b98b36d4203a7b458cf3573730f2bb591b28871d916dfa9efabfd41f" dependencies = [ - "indexmap", + "indexmap 2.14.0", "itoa", "ryu", "serde", @@ -3346,6 +3553,7 @@ dependencies = [ "scc", "serde", "serde_json", + "serde_with", "serde_yaml_ng", "stargate-auth", "stargate-forwarding", @@ -3358,6 +3566,7 @@ dependencies = [ "tokio", "tokio-stream", "tokio-util", + "toml", "tonic", "tower", "tracing", @@ -3770,6 +3979,45 @@ dependencies = [ "tokio", ] +[[package]] +name = "toml" +version = "1.1.4+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" +dependencies = [ + "indexmap 2.14.0", + "serde_core", + "serde_spanned", + "toml_datetime", + "toml_parser", + "toml_writer", + "winnow", +] + +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_parser" +version = "1.1.3+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" +dependencies = [ + "winnow", +] + +[[package]] +name = "toml_writer" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" + [[package]] name = "tonic" version = "0.14.6" @@ -3860,7 +4108,7 @@ checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", - "indexmap", + "indexmap 2.14.0", "pin-project-lite", "slab", "sync_wrapper", @@ -4217,7 +4465,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" dependencies = [ "anyhow", - "indexmap", + "indexmap 2.14.0", "wasm-encoder", "wasmparser", ] @@ -4243,7 +4491,7 @@ checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ "bitflags", "hashbrown 0.15.5", - "indexmap", + "indexmap 2.14.0", "semver", ] @@ -4300,12 +4548,65 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.45.0" @@ -4594,6 +4895,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" +[[package]] +name = "winnow" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" + [[package]] name = "winreg" version = "0.50.0" @@ -4632,7 +4939,7 @@ checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" dependencies = [ "anyhow", "heck", - "indexmap", + "indexmap 2.14.0", "prettyplease", "syn", "wasm-metadata", @@ -4663,7 +4970,7 @@ checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", "bitflags", - "indexmap", + "indexmap 2.14.0", "log", "serde", "serde_derive", @@ -4682,7 +4989,7 @@ checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" dependencies = [ "anyhow", "id-arena", - "indexmap", + "indexmap 2.14.0", "log", "semver", "serde", diff --git a/src/libraries/rust/stargate/Cargo.toml b/src/libraries/rust/stargate/Cargo.toml index 5a3fd5d4d..521a7b866 100644 --- a/src/libraries/rust/stargate/Cargo.toml +++ b/src/libraries/rust/stargate/Cargo.toml @@ -60,6 +60,7 @@ reqwest = { version = "=0.13.4", default-features = false, features = ["json", " scc = "=3.7.1" serde = { version = "=1.0.228", features = ["derive"] } serde_json = "=1.0.150" +serde_with = { version = "=3.22.0", default-features = false, features = ["macros", "std"] } serde_yaml_ng = "=0.10.0" sonic-rs = "=0.5.8" thiserror = "=2.0.18" @@ -100,6 +101,7 @@ http = "=1.4.2" async-trait = "=0.1.89" xxhash-rust = { version = "=0.8.16", features = ["xxh3"] } x509-parser = "=0.18.1" +toml = { version = "=1.1.4", default-features = false, features = ["display", "parse", "serde", "std"] } stargate-auth = { path = "crates/stargate-auth" } stargate-forwarding = { path = "crates/stargate-forwarding" } diff --git a/src/libraries/rust/stargate/crates/stargate-bench/src/k8s/render.rs b/src/libraries/rust/stargate/crates/stargate-bench/src/k8s/render.rs index 4630a044e..6659552bb 100644 --- a/src/libraries/rust/stargate/crates/stargate-bench/src/k8s/render.rs +++ b/src/libraries/rust/stargate/crates/stargate-bench/src/k8s/render.rs @@ -73,14 +73,58 @@ pub(super) fn render_manifest(render: RenderManifestConfig<'_>) -> RenderedManif stargate.push_str(line); stargate.push('\n'); } + stargate.push_str(" stargate.toml: |\n"); + let stargate_config = format!( + r#"schema_version = 1 + +[stargate_identity] +id = {{ env = "POD_NAME" }} +advertised_hostname_template = "{{pod_name}}-external.{stargate_ns}.svc.cluster.local" + +[stargate_identity.kubernetes] +pod_name = {{ env = "POD_NAME" }} +namespace = {{ env = "POD_NAMESPACE" }} + +[stargate_network] +grpc_listen_addr = "0.0.0.0:50071" +model_discovery_listen_addr = "0.0.0.0:50073" +http_listen_addr = "0.0.0.0:8000" +advertise_addr = {{ env = "STARGATE_ADVERTISE_ADDR" }} + +[stargate_discovery.kubernetes_pods] +headless_service_dns_name = "stargate-headless.{stargate_ns}.svc.cluster.local" +poll_interval_ms = 1000 +resolver_ttl_ms = 1000 + +[pylon_transport] +tunnel_protocol = "{tunnel_protocol}" + +[pylon_transport.reverse] +listen_addr = "0.0.0.0:50072" + +[pylon_transport.tls] +insecure_skip_verify = true + +[request_proxy.load_balancer] +config_path = "/config/lb-config.json" + +[observability.metrics] +listen_addr = "0.0.0.0:9090" +"#, + tunnel_protocol = config.tunnel_protocol, + ); + for line in stargate_config.lines() { + stargate.push_str(" "); + stargate.push_str(line); + stargate.push('\n'); + } stargate.push_str(&format!( - "---\napiVersion: v1\nkind: Service\nmetadata:\n name: stargate\n namespace: {stargate_ns}\nspec:\n selector:\n app: stargate\n ports:\n - name: grpc\n port: 50071\n targetPort: grpc\n - name: reverse\n port: 50072\n targetPort: reverse\n protocol: UDP\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: stargate-http\n namespace: {stargate_ns}\nspec:\n type: NodePort\n selector:\n app: stargate\n ports:\n - name: http\n port: 8000\n targetPort: http\n nodePort: {http_node_port}\n - name: metrics\n port: 9090\n targetPort: metrics\n nodePort: {metrics_node_port}\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: stargate-headless\n namespace: {stargate_ns}\nspec:\n clusterIP: None\n selector:\n app: stargate\n ports:\n - name: http\n port: 8000\n targetPort: http\n - name: metrics\n port: 9090\n targetPort: metrics\n - name: grpc\n port: 50071\n targetPort: grpc\n - name: reverse\n port: 50072\n targetPort: reverse\n protocol: UDP\n---\napiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n name: stargate\n namespace: {stargate_ns}\nspec:\n serviceName: stargate-headless\n replicas: {stargate_count}\n selector:\n matchLabels:\n app: stargate\n template:\n metadata:\n labels:\n app: stargate\n spec:\n containers:\n - name: stargate\n image: {stargate_image}\n imagePullPolicy: IfNotPresent\n args:\n - --stargate-id=$(POD_NAME)\n - --listen-addr=0.0.0.0:50071\n - --model-discovery-listen-addr=0.0.0.0:50073\n - --http-listen-addr=0.0.0.0:8000\n - --advertise-addr=$(POD_IP):50071\n - --stargate-discovery-dns-name=stargate-headless.{stargate_ns}.svc.cluster.local\n - --advertised-hostname-template={{pod_name}}-external.{stargate_ns}.svc.cluster.local\n - --pod-name=$(POD_NAME)\n - --pod-namespace=$(POD_NAMESPACE)\n - --metrics-port=9090\n - --lb-config-path=/config/lb-config.json\n - --backend-connectivity=reverse\n - --reverse-tunnel-listen-addr=0.0.0.0:50072\n - --quic-insecure\n - --tunnel-protocol={tunnel_protocol}\n env:\n - name: POD_NAME\n valueFrom:\n fieldRef:\n fieldPath: metadata.name\n - name: POD_NAMESPACE\n valueFrom:\n fieldRef:\n fieldPath: metadata.namespace\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n ports:\n - name: grpc\n containerPort: 50071\n - name: model-discovery\n containerPort: 50073\n - name: reverse\n containerPort: 50072\n protocol: UDP\n - name: http\n containerPort: 8000\n - name: metrics\n containerPort: 9090\n readinessProbe:\n httpGet:\n path: /readyz\n port: http\n initialDelaySeconds: 2\n periodSeconds: 2\n livenessProbe:\n httpGet:\n path: /healthz\n port: http\n initialDelaySeconds: 5\n periodSeconds: 5\n volumeMounts:\n - name: lb-config\n mountPath: /config\n volumes:\n - name: lb-config\n configMap:\n name: stargate-lb-config\n---\n", + "---\napiVersion: v1\nkind: Service\nmetadata:\n name: stargate\n namespace: {stargate_ns}\nspec:\n selector:\n app: stargate\n ports:\n - name: grpc\n port: 50071\n targetPort: grpc\n - name: reverse\n port: 50072\n targetPort: reverse\n protocol: UDP\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: stargate-http\n namespace: {stargate_ns}\nspec:\n type: NodePort\n selector:\n app: stargate\n ports:\n - name: http\n port: 8000\n targetPort: http\n nodePort: {http_node_port}\n - name: metrics\n port: 9090\n targetPort: metrics\n nodePort: {metrics_node_port}\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: stargate-headless\n namespace: {stargate_ns}\nspec:\n clusterIP: None\n selector:\n app: stargate\n ports:\n - name: http\n port: 8000\n targetPort: http\n - name: metrics\n port: 9090\n targetPort: metrics\n - name: grpc\n port: 50071\n targetPort: grpc\n - name: reverse\n port: 50072\n targetPort: reverse\n protocol: UDP\n---\napiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n name: stargate\n namespace: {stargate_ns}\nspec:\n serviceName: stargate-headless\n replicas: {stargate_count}\n selector:\n matchLabels:\n app: stargate\n template:\n metadata:\n labels:\n app: stargate\n spec:\n containers:\n - name: stargate\n image: {stargate_image}\n imagePullPolicy: IfNotPresent\n args:\n - --config-file=/config/stargate.toml\n env:\n - name: POD_NAME\n valueFrom:\n fieldRef:\n fieldPath: metadata.name\n - name: POD_NAMESPACE\n valueFrom:\n fieldRef:\n fieldPath: metadata.namespace\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n - name: STARGATE_ADVERTISE_ADDR\n value: \"$(POD_IP):50071\"\n ports:\n - name: grpc\n containerPort: 50071\n - name: model-discovery\n containerPort: 50073\n - name: reverse\n containerPort: 50072\n protocol: UDP\n - name: http\n containerPort: 8000\n - name: metrics\n containerPort: 9090\n readinessProbe:\n httpGet:\n path: /readyz\n port: http\n initialDelaySeconds: 2\n periodSeconds: 2\n livenessProbe:\n httpGet:\n path: /healthz\n port: http\n initialDelaySeconds: 5\n periodSeconds: 5\n volumeMounts:\n - name: lb-config\n mountPath: /config\n volumes:\n - name: lb-config\n configMap:\n name: stargate-lb-config\n---\n", http_node_port = render.http_node_port, metrics_node_port = render.metrics_node_port, stargate_count = config.stargates.count, stargate_image = image_refs.stargate, - tunnel_protocol = config.tunnel_protocol, )); stargate.push_str(&render_otel_collector( stargate_ns, diff --git a/src/libraries/rust/stargate/crates/stargate-bench/src/k8s/tests.rs b/src/libraries/rust/stargate/crates/stargate-bench/src/k8s/tests.rs index e48495859..a7a0a197e 100644 --- a/src/libraries/rust/stargate/crates/stargate-bench/src/k8s/tests.rs +++ b/src/libraries/rust/stargate/crates/stargate-bench/src/k8s/tests.rs @@ -692,7 +692,13 @@ fn rendered_manifests_include_tunnel_protocol() { config.tunnel_protocol = stargate_protocol::TunnelTransportProtocol::WebTransport; let rendered = render_default_test_manifest(&config); - assert_contains_all(&rendered.stargate, &["- --tunnel-protocol=webtransport"]); + assert_contains_all( + &rendered.stargate, + &[ + "- --config-file=/config/stargate.toml", + "tunnel_protocol = \"webtransport\"", + ], + ); assert_contains_all(&rendered.backends, &["- --tunnel-protocol=webtransport"]); } diff --git a/src/libraries/rust/stargate/crates/stargate-bench/src/orchestrator.rs b/src/libraries/rust/stargate/crates/stargate-bench/src/orchestrator.rs index 185127b72..6fd08b2c8 100644 --- a/src/libraries/rust/stargate/crates/stargate-bench/src/orchestrator.rs +++ b/src/libraries/rust/stargate/crates/stargate-bench/src/orchestrator.rs @@ -14,10 +14,18 @@ // limitations under the License. use std::collections::BTreeMap; +use std::net::SocketAddr; use std::path::{Path, PathBuf}; +use std::time::Duration; use anyhow::{Context, ensure}; use serde::Serialize; +use stargate::config::{ + LoadBalancerFileConfig, MetricsConfig, ObservabilityConfig, ProcessLifecycleConfig, + PylonRegistrationConfig, PylonTlsConfig, PylonTransportConfig, RequestProxyConfig, + ReversePylonTransportConfig, StargateConfig, StargateDiscoveryConfig, StargateIdentityConfig, + StargateNetworkConfig, +}; use crate::config::{AlgorithmConfig, BenchmarkConfig}; use crate::manifest::{Manifest, write_manifest_json}; @@ -48,6 +56,7 @@ pub struct PreparedAlgorithmRun { pub algorithm_name: String, pub run_dir: PathBuf, pub compose_path: PathBuf, + pub stargate_config_path: PathBuf, pub lb_config_path: PathBuf, pub run_info_path: PathBuf, pub stargate_http_endpoint: String, @@ -91,6 +100,12 @@ pub fn prepare_suite( &format!("LB config for {}", algorithm.name), )?; + let stargate_config_path = run_dir.join("stargate.toml"); + let stargate_config = + benchmark_stargate_config(config.tunnel_protocol, Path::new("/config/lb-config.json")); + std::fs::write(&stargate_config_path, stargate_config.to_toml_string()?) + .with_context(|| format!("failed to write {}", stargate_config_path.display()))?; + let host_port_offset = (index as u16) * 10; let stargate_grpc_host_port = STARGATE_GRPC_PORT + host_port_offset; let stargate_http_host_port = STARGATE_HTTP_PORT + host_port_offset; @@ -100,6 +115,7 @@ pub fn prepare_suite( config, algorithm, &lb_config_path, + &stargate_config_path, stargate_grpc_host_port, stargate_http_host_port, stargate_metrics_host_port, @@ -121,6 +137,7 @@ pub fn prepare_suite( "stargate_grpc_endpoint": &stargate_grpc_endpoint, "stargate_metrics_endpoint": &stargate_metrics_endpoint, "compose_path": compose_path, + "stargate_config_path": stargate_config_path, "lb_config_path": lb_config_path, "manifest_path": manifest_path, }); @@ -131,6 +148,7 @@ pub fn prepare_suite( algorithm_name: algorithm.name.clone(), run_dir, compose_path, + stargate_config_path, lb_config_path, run_info_path, stargate_http_endpoint, @@ -203,6 +221,7 @@ fn build_compose_spec( config: &BenchmarkConfig, algorithm: &AlgorithmConfig, lb_config_path: &Path, + stargate_config_path: &Path, stargate_grpc_host_port: u16, stargate_http_host_port: u16, stargate_metrics_host_port: u16, @@ -211,34 +230,30 @@ fn build_compose_spec( let dockerfile = repo_root.join("Dockerfile"); let mut services = BTreeMap::new(); let stargate_lb_config_container_path = "/config/lb-config.json"; + let stargate_config_container_path = "/config/stargate.toml"; services.insert( "stargate".to_string(), ComposeService { build: compose_build(&repo_root, &dockerfile, "stargate-runtime"), - command: Vec::from(command![ - "--stargate-id" => "benchmark-stargate", - "--listen-addr" => format!("0.0.0.0:{STARGATE_GRPC_PORT}"), - "--http-listen-addr" => format!("0.0.0.0:{STARGATE_HTTP_PORT}"), - "--advertise-addr" => format!("127.0.0.1:{STARGATE_GRPC_PORT}"), - "--stargate-discovery-dns-name" => "stargate", - "--metrics-port" => STARGATE_METRICS_PORT.to_string(), - "--lb-config-path" => stargate_lb_config_container_path, - "--backend-connectivity=reverse", - "--reverse-tunnel-listen-addr" => "0.0.0.0:50072", - "--advertised-hostname-template" => "stargate", - "--tunnel-protocol" => config.tunnel_protocol.to_string(), - ]), + command: Vec::from(command!["--config-file" => stargate_config_container_path]), ports: vec![ format!("{stargate_grpc_host_port}:{STARGATE_GRPC_PORT}"), format!("{stargate_http_host_port}:{STARGATE_HTTP_PORT}"), format!("{stargate_metrics_host_port}:{STARGATE_METRICS_PORT}"), ], - volumes: vec![format!( - "{}:{}:ro", - absolute_bind_path(lb_config_path)?.display(), - stargate_lb_config_container_path - )], + volumes: vec![ + format!( + "{}:{}:ro", + absolute_bind_path(lb_config_path)?.display(), + stargate_lb_config_container_path + ), + format!( + "{}:{}:ro", + absolute_bind_path(stargate_config_path)?.display(), + stargate_config_container_path + ), + ], depends_on: BTreeMap::new(), }, ); @@ -317,6 +332,57 @@ fn build_compose_spec( Ok(ComposeSpec { services }) } +fn benchmark_stargate_config( + tunnel_protocol: stargate_protocol::TunnelTransportProtocol, + lb_config_path: &Path, +) -> StargateConfig { + StargateConfig { + schema_version: stargate::config::SCHEMA_VERSION, + stargate_identity: StargateIdentityConfig { + id: "benchmark-stargate".to_string(), + advertised_hostname_template: "stargate".to_string(), + kubernetes: None, + }, + stargate_network: StargateNetworkConfig { + grpc_listen_addr: SocketAddr::from(([0, 0, 0, 0], STARGATE_GRPC_PORT)), + model_discovery_listen_addr: SocketAddr::from(([0, 0, 0, 0], 50073)), + http_listen_addr: SocketAddr::from(([0, 0, 0, 0], STARGATE_HTTP_PORT)), + advertise_addr: SocketAddr::from(([127, 0, 0, 1], STARGATE_GRPC_PORT)), + }, + process_lifecycle: ProcessLifecycleConfig::default(), + pylon_registration: PylonRegistrationConfig::default(), + stargate_discovery: StargateDiscoveryConfig::default(), + pylon_transport: PylonTransportConfig { + tunnel_protocol, + reverse: Some(ReversePylonTransportConfig { + listen_addr: SocketAddr::from(([0, 0, 0, 0], 50072)), + pylon_dial_addr: None, + connect_timeout: Duration::from_secs(10), + certificate_path: None, + private_key_path: None, + }), + tls: PylonTlsConfig { + insecure_skip_verify: true, + }, + ..PylonTransportConfig::default() + }, + request_proxy: RequestProxyConfig { + load_balancer: Some(LoadBalancerFileConfig { + config_path: lb_config_path.to_path_buf(), + }), + ..RequestProxyConfig::default() + }, + observability: ObservabilityConfig { + metrics: MetricsConfig { + listen_addr: SocketAddr::from(([0, 0, 0, 0], STARGATE_METRICS_PORT)), + ..MetricsConfig::default() + }, + ..ObservabilityConfig::default() + }, + worker_authentication: None, + } +} + fn absolute_bind_path(path: &Path) -> anyhow::Result { if path.is_absolute() { return Ok(path.to_path_buf()); @@ -387,6 +453,7 @@ algorithms: config, &config.algorithms[0], Path::new("/tmp/lb-config.json"), + Path::new("/tmp/stargate.toml"), STARGATE_GRPC_PORT, STARGATE_HTTP_PORT, STARGATE_METRICS_PORT, @@ -413,6 +480,10 @@ algorithms: assert_eq!(prepared.algorithm_runs.len(), 2); for run in prepared.algorithm_runs { assert!(run.compose_path.exists(), "compose file should exist"); + assert!( + run.stargate_config_path.exists(), + "Stargate config file should exist" + ); assert!(run.lb_config_path.exists(), "lb config should exist"); assert!(run.run_info_path.exists(), "run info should exist"); } @@ -449,6 +520,7 @@ algorithms: &config, &config.algorithms[0], Path::new(".bench-out/prepare/run-power-of-n/lb-config.json"), + Path::new(".bench-out/prepare/run-power-of-n/stargate.toml"), STARGATE_GRPC_PORT, STARGATE_HTTP_PORT, STARGATE_METRICS_PORT, @@ -470,22 +542,16 @@ algorithms: } #[test] - fn compose_clients_use_explicit_reverse_connectivity() { + fn compose_stargate_uses_config_file_and_clients_use_reverse_connectivity() { let config = config(); let compose = compose(&config); let stargate = service(&compose, "stargate"); let client = service(&compose, "client-0"); - assert!( - stargate - .command - .iter() - .any(|arg| arg == "--backend-connectivity=reverse"), - "compose stargate should explicitly own the reverse listener" - ); assert_eq!( - command_value(&stargate.command, "--reverse-tunnel-listen-addr"), - Some("0.0.0.0:50072") + stargate.command, + ["--config-file", "/config/stargate.toml"], + "compose Stargate should receive only its config file" ); assert!( client @@ -536,12 +602,16 @@ algorithms: let mut config = config(); config.tunnel_protocol = stargate_protocol::TunnelTransportProtocol::WebTransport; let compose = compose(&config); - for name in ["stargate", "client-0"] { - assert_eq!( - command_value(&service(&compose, name).command, "--tunnel-protocol"), - Some("webtransport") - ); - } + assert_eq!( + command_value(&service(&compose, "client-0").command, "--tunnel-protocol"), + Some("webtransport") + ); + let stargate = + benchmark_stargate_config(config.tunnel_protocol, Path::new("/config/lb-config.json")); + assert_eq!( + stargate.pylon_transport.tunnel_protocol, + stargate_protocol::TunnelTransportProtocol::WebTransport + ); } #[test] diff --git a/src/libraries/rust/stargate/crates/stargate/Cargo.toml b/src/libraries/rust/stargate/crates/stargate/Cargo.toml index efb4383e7..8a1f0b432 100644 --- a/src/libraries/rust/stargate/crates/stargate/Cargo.toml +++ b/src/libraries/rust/stargate/crates/stargate/Cargo.toml @@ -37,6 +37,8 @@ stargate-tls = { workspace = true } scc = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } +serde_with = { workspace = true } +toml = { workspace = true } anyhow = { workspace = true } axum = { workspace = true } bytes = { workspace = true } diff --git a/src/libraries/rust/stargate/crates/stargate/src/config.rs b/src/libraries/rust/stargate/crates/stargate/src/config.rs new file mode 100644 index 000000000..40357dd0e --- /dev/null +++ b/src/libraries/rust/stargate/crates/stargate/src/config.rs @@ -0,0 +1,883 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use std::fmt::Display; +use std::net::SocketAddr; +use std::num::NonZeroUsize; +use std::path::{Path, PathBuf}; +use std::str::FromStr; +use std::time::Duration; + +use anyhow::{Context, Result, ensure}; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{DurationMilliSeconds, serde_as}; +use stargate_protocol::{TunnelTransportProtocol, parse_explicit_http_uri}; + +pub const SCHEMA_VERSION: u32 = 1; +pub const DEFAULT_PROXY_MAX_REPLAY_BODY_BYTES: usize = 64 * 1024 * 1024; + +fn default_schema_version() -> u32 { + SCHEMA_VERSION +} + +fn default_grpc_listen_addr() -> SocketAddr { + SocketAddr::from(([0, 0, 0, 0], 50071)) +} + +fn default_model_discovery_listen_addr() -> SocketAddr { + SocketAddr::from(([0, 0, 0, 0], 50073)) +} + +fn default_http_listen_addr() -> SocketAddr { + SocketAddr::from(([0, 0, 0, 0], 8000)) +} + +fn default_metrics_listen_addr() -> SocketAddr { + SocketAddr::from(([0, 0, 0, 0], 9090)) +} + +fn default_advertised_hostname_template() -> String { + "{pod_name}.stargate.external".to_string() +} + +fn default_poll_interval() -> Duration { + Duration::from_millis(1_000) +} + +fn default_watch_heartbeat() -> Duration { + Duration::from_millis(5_000) +} + +fn default_shutdown_drain_timeout() -> Duration { + Duration::from_millis(30_000) +} + +fn default_quic_connect_timeout() -> Duration { + Duration::from_millis(2_000) +} + +fn default_quic_request_timeout() -> Duration { + Duration::from_millis(30_000) +} + +fn default_reverse_connect_timeout() -> Duration { + Duration::from_millis(10_000) +} + +fn default_direct_connections() -> NonZeroUsize { + NonZeroUsize::MIN +} + +fn default_proxy_connect_retries() -> u32 { + 2 +} + +fn default_proxy_request_retries() -> u32 { + 2 +} + +fn default_proxy_replay_body_bytes() -> usize { + DEFAULT_PROXY_MAX_REPLAY_BODY_BYTES +} + +fn default_true() -> bool { + true +} + +fn default_request_budget_header() -> String { + "x-stargate-max-wait-ms".to_string() +} + +fn default_service_name() -> String { + crate::telemetry::DEFAULT_SERVICE_NAME.to_string() +} + +fn default_metrics_prefix() -> String { + crate::metrics::DEFAULT_PREFIX.to_string() +} + +fn default_bearer_json_path() -> Vec { + vec!["authToken".to_string()] +} + +fn default_tracing_json_path() -> Vec { + vec!["tracingAccessToken".to_string()] +} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct EnvironmentReference { + env: String, +} + +#[derive(Debug, Deserialize)] +#[serde(untagged)] +enum ValueSource { + Literal(T), + Environment(EnvironmentReference), +} + +impl ValueSource +where + T: FromStr, + T::Err: Display, +{ + fn resolve_with( + self, + read_environment: impl FnOnce(&str) -> std::result::Result, + ) -> std::result::Result { + match self { + Self::Literal(value) => Ok(value), + Self::Environment(reference) => { + if reference.env.trim().is_empty() { + return Err("environment variable name must not be empty".to_string()); + } + let value = read_environment(&reference.env)?; + if value.is_empty() { + return Err(format!( + "environment variable '{}' must not be empty", + reference.env + )); + } + value.parse().map_err(|error| { + format!( + "environment variable '{}' has an invalid value: {error}", + reference.env + ) + }) + } + } + } + + fn resolve_environment(self) -> std::result::Result { + self.resolve_with(|name| { + std::env::var(name) + .map_err(|error| format!("failed to read environment variable '{name}': {error}")) + }) + } +} + +fn deserialize_value_source<'de, D, T>(deserializer: D) -> std::result::Result +where + D: Deserializer<'de>, + T: Deserialize<'de> + FromStr, + T::Err: Display, +{ + ValueSource::::deserialize(deserializer)? + .resolve_environment() + .map_err(serde::de::Error::custom) +} + +fn deserialize_optional_value_source<'de, D, T>( + deserializer: D, +) -> std::result::Result, D::Error> +where + D: Deserializer<'de>, + T: Deserialize<'de> + FromStr, + T::Err: Display, +{ + Option::>::deserialize(deserializer)? + .map(ValueSource::resolve_environment) + .transpose() + .map_err(serde::de::Error::custom) +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct StargateConfig { + #[serde(default = "default_schema_version")] + pub schema_version: u32, + pub stargate_identity: StargateIdentityConfig, + pub stargate_network: StargateNetworkConfig, + #[serde(default)] + pub process_lifecycle: ProcessLifecycleConfig, + #[serde(default)] + pub pylon_registration: PylonRegistrationConfig, + #[serde(default)] + pub stargate_discovery: StargateDiscoveryConfig, + #[serde(default)] + pub pylon_transport: PylonTransportConfig, + #[serde(default)] + pub request_proxy: RequestProxyConfig, + #[serde(default)] + pub observability: ObservabilityConfig, + #[serde(default)] + pub worker_authentication: Option, +} + +impl StargateConfig { + pub fn from_toml_file(path: &Path) -> Result { + let source = std::fs::read_to_string(path) + .with_context(|| format!("failed to read config file '{}'", path.display()))?; + let mut config: Self = toml::from_str(&source) + .with_context(|| format!("failed to parse config file '{}'", path.display()))?; + config.resolve_relative_paths(path.parent().unwrap_or_else(|| Path::new("."))); + config + .validate() + .with_context(|| format!("invalid config file '{}'", path.display()))?; + Ok(config) + } + + pub fn from_toml_str(source: &str) -> Result { + let config: Self = toml::from_str(source).context("failed to parse TOML configuration")?; + config.validate().context("invalid TOML configuration")?; + Ok(config) + } + + pub fn to_toml_string(&self) -> Result { + self.validate()?; + toml::to_string_pretty(self).context("failed to serialize Stargate configuration") + } + + pub fn validate(&self) -> Result<()> { + ensure!( + self.schema_version == SCHEMA_VERSION, + "unsupported schema_version {}; expected {SCHEMA_VERSION}", + self.schema_version + ); + ensure!( + !self.stargate_identity.id.trim().is_empty(), + "stargate_identity.id must not be empty" + ); + ensure!( + !self + .stargate_identity + .advertised_hostname_template + .trim() + .is_empty(), + "stargate_identity.advertised_hostname_template must not be empty" + ); + + if let Some(kubernetes) = &self.stargate_identity.kubernetes { + ensure!( + !kubernetes.pod_name.trim().is_empty(), + "stargate_identity.kubernetes.pod_name must not be empty" + ); + ensure!( + !kubernetes.namespace.trim().is_empty(), + "stargate_identity.kubernetes.namespace must not be empty" + ); + } + + for url in &self.stargate_discovery.remote_watch_urls { + let normalized = parse_explicit_http_uri(url) + .map_err(anyhow::Error::msg) + .with_context(|| { + format!("invalid stargate_discovery.remote_watch_urls entry '{url}'") + })?; + ensure!( + self.stargate_discovery.allow_insecure_remote_watch_http + || !normalized.starts_with("http://"), + "http:// remote Watch URLs require \ + stargate_discovery.allow_insecure_remote_watch_http=true" + ); + } + + if let Some(pods) = &self.stargate_discovery.kubernetes_pods { + ensure!( + self.stargate_identity.kubernetes.is_some(), + "stargate_discovery.kubernetes_pods requires \ + stargate_identity.kubernetes" + ); + ensure!( + !pods.headless_service_dns_name.trim().is_empty(), + "stargate_discovery.kubernetes_pods.headless_service_dns_name \ + must not be empty" + ); + ensure!( + !pods.poll_interval.is_zero(), + "stargate_discovery.kubernetes_pods.poll_interval_ms must be \ + greater than 0" + ); + } + + if let Some(uri) = &self.pylon_transport.pylon_grpc_dial_uri { + parse_explicit_http_uri(uri) + .map_err(anyhow::Error::msg) + .context("invalid pylon_transport.pylon_grpc_dial_uri")?; + } + + ensure!( + !(self.pylon_transport.direct.is_some() && self.pylon_transport.reverse.is_some()), + "pylon_transport.direct and pylon_transport.reverse are mutually exclusive" + ); + if let Some(reverse) = &self.pylon_transport.reverse { + ensure!( + reverse.certificate_path.is_some() == reverse.private_key_path.is_some(), + "pylon_transport.reverse.certificate_path and private_key_path \ + must be supplied together" + ); + } + + let header = self.request_proxy.retry.request_budget_header.trim(); + if !header.is_empty() { + http::HeaderName::from_bytes(header.as_bytes()) + .with_context(|| format!("invalid request proxy budget header '{header}'"))?; + } + + if let Some(tracing) = &self.observability.tracing + && let Some(token) = &tracing.access_token + { + validate_json_path( + &token.json_path, + "observability.tracing.access_token.json_path", + )?; + } + + if let Some(auth) = &self.worker_authentication { + ensure!( + !auth.endpoint.trim().is_empty(), + "worker_authentication.endpoint must not be empty" + ); + ensure!( + !(auth.bearer_token.is_some() && auth.oauth2.is_some()), + "worker_authentication.bearer_token and \ + worker_authentication.oauth2 are mutually exclusive" + ); + if let Some(token) = &auth.bearer_token { + validate_json_path( + &token.json_path, + "worker_authentication.bearer_token.json_path", + )?; + } + if let Some(oauth2) = &auth.oauth2 { + ensure!( + !oauth2.provider_host.trim().is_empty(), + "worker_authentication.oauth2.provider_host must not be empty" + ); + } + } + Ok(()) + } + + pub fn direct_transport(&self) -> DirectPylonTransportConfig { + self.pylon_transport.direct.clone().unwrap_or_default() + } + + fn resolve_relative_paths(&mut self, base_dir: &Path) { + if let Some(direct) = &mut self.pylon_transport.direct { + resolve_relative_path(&mut direct.trust_bundle_path, base_dir); + } + if let Some(reverse) = &mut self.pylon_transport.reverse { + resolve_relative_path(&mut reverse.certificate_path, base_dir); + resolve_relative_path(&mut reverse.private_key_path, base_dir); + } + if let Some(load_balancer) = &mut self.request_proxy.load_balancer { + resolve_path(&mut load_balancer.config_path, base_dir); + } + if let Some(tracing) = &mut self.observability.tracing + && let Some(token) = &mut tracing.access_token + { + resolve_path(&mut token.secrets_path, base_dir); + } + if let Some(auth) = &mut self.worker_authentication { + if let Some(token) = &mut auth.bearer_token { + resolve_path(&mut token.secrets_path, base_dir); + } + if let Some(oauth2) = &mut auth.oauth2 { + resolve_path(&mut oauth2.secrets_path, base_dir); + } + } + } +} + +fn validate_json_path(path: &[String], field: &str) -> Result<()> { + ensure!(!path.is_empty(), "{field} must contain at least one key"); + ensure!( + path.iter().all(|component| !component.is_empty()), + "{field} components must not be empty" + ); + Ok(()) +} + +fn resolve_relative_path(path: &mut Option, base_dir: &Path) { + if let Some(path) = path { + resolve_path(path, base_dir); + } +} + +fn resolve_path(path: &mut PathBuf, base_dir: &Path) { + if path.is_relative() { + *path = base_dir.join(&*path); + } +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct StargateIdentityConfig { + #[serde(deserialize_with = "deserialize_value_source")] + pub id: String, + #[serde(default = "default_advertised_hostname_template")] + pub advertised_hostname_template: String, + #[serde(default)] + pub kubernetes: Option, +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct KubernetesIdentityConfig { + #[serde(deserialize_with = "deserialize_value_source")] + pub pod_name: String, + #[serde(deserialize_with = "deserialize_value_source")] + pub namespace: String, +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct StargateNetworkConfig { + #[serde(default = "default_grpc_listen_addr")] + pub grpc_listen_addr: SocketAddr, + #[serde(default = "default_model_discovery_listen_addr")] + pub model_discovery_listen_addr: SocketAddr, + #[serde(default = "default_http_listen_addr")] + pub http_listen_addr: SocketAddr, + #[serde(deserialize_with = "deserialize_value_source")] + pub advertise_addr: SocketAddr, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(default, deny_unknown_fields)] +pub struct ProcessLifecycleConfig { + #[serde_as(as = "DurationMilliSeconds")] + #[serde(rename = "readiness_warmup_ms")] + pub readiness_warmup: Duration, + #[serde_as(as = "DurationMilliSeconds")] + #[serde(rename = "shutdown_drain_timeout_ms")] + pub shutdown_drain_timeout: Duration, +} + +impl Default for ProcessLifecycleConfig { + fn default() -> Self { + Self { + readiness_warmup: crate::runtime::DEFAULT_READINESS_WARMUP, + shutdown_drain_timeout: default_shutdown_drain_timeout(), + } + } +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(default, deny_unknown_fields)] +pub struct PylonRegistrationConfig { + #[serde_as(as = "DurationMilliSeconds")] + #[serde(rename = "update_idle_timeout_ms")] + pub update_idle_timeout: Duration, + #[serde_as(as = "DurationMilliSeconds")] + #[serde(rename = "update_max_idle_timeout_ms")] + pub update_max_idle_timeout: Duration, +} + +impl Default for PylonRegistrationConfig { + fn default() -> Self { + Self { + update_idle_timeout: crate::registration::DEFAULT_REGISTRATION_UPDATE_IDLE_TIMEOUT, + update_max_idle_timeout: + crate::registration::DEFAULT_REGISTRATION_UPDATE_MAX_IDLE_TIMEOUT, + } + } +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(default, deny_unknown_fields)] +pub struct StargateDiscoveryConfig { + pub remote_watch_urls: Vec, + pub allow_insecure_remote_watch_http: bool, + #[serde_as(as = "DurationMilliSeconds")] + #[serde(rename = "watch_heartbeat_ms")] + pub watch_heartbeat: Duration, + pub kubernetes_pods: Option, +} + +impl Default for StargateDiscoveryConfig { + fn default() -> Self { + Self { + remote_watch_urls: Vec::new(), + allow_insecure_remote_watch_http: false, + watch_heartbeat: default_watch_heartbeat(), + kubernetes_pods: None, + } + } +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct KubernetesPodDiscoveryConfig { + pub headless_service_dns_name: String, + #[serde_as(as = "DurationMilliSeconds")] + #[serde(rename = "poll_interval_ms", default = "default_poll_interval")] + pub poll_interval: Duration, + #[serde_as(as = "DurationMilliSeconds")] + #[serde(rename = "resolver_ttl_ms", default = "default_poll_interval")] + pub resolver_ttl: Duration, + #[serde(default)] + pub development_peer_forwarding: Option, +} + +#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct DevelopmentPeerForwardingConfig {} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(default, deny_unknown_fields)] +pub struct PylonTransportConfig { + pub pylon_grpc_dial_uri: Option, + pub tunnel_protocol: TunnelTransportProtocol, + #[serde_as(as = "DurationMilliSeconds")] + #[serde(rename = "quic_connect_timeout_ms")] + pub quic_connect_timeout: Duration, + #[serde_as(as = "DurationMilliSeconds")] + #[serde(rename = "quic_request_timeout_ms")] + pub quic_request_timeout: Duration, + pub direct: Option, + pub reverse: Option, + pub tls: PylonTlsConfig, +} + +impl Default for PylonTransportConfig { + fn default() -> Self { + Self { + pylon_grpc_dial_uri: None, + tunnel_protocol: TunnelTransportProtocol::RawQuic, + quic_connect_timeout: default_quic_connect_timeout(), + quic_request_timeout: default_quic_request_timeout(), + direct: None, + reverse: None, + tls: PylonTlsConfig::default(), + } + } +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(default, deny_unknown_fields)] +pub struct DirectPylonTransportConfig { + #[serde(default = "default_direct_connections")] + pub connections: NonZeroUsize, + pub trust_bundle_path: Option, +} + +impl Default for DirectPylonTransportConfig { + fn default() -> Self { + Self { + connections: default_direct_connections(), + trust_bundle_path: None, + } + } +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct ReversePylonTransportConfig { + pub listen_addr: SocketAddr, + #[serde(default, deserialize_with = "deserialize_optional_value_source")] + pub pylon_dial_addr: Option, + #[serde_as(as = "DurationMilliSeconds")] + #[serde( + rename = "connect_timeout_ms", + default = "default_reverse_connect_timeout" + )] + pub connect_timeout: Duration, + #[serde(default)] + pub certificate_path: Option, + #[serde(default)] + pub private_key_path: Option, +} + +#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +#[serde(default, deny_unknown_fields)] +pub struct PylonTlsConfig { + pub insecure_skip_verify: bool, +} + +#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)] +#[serde(default, deny_unknown_fields)] +pub struct RequestProxyConfig { + pub retry: RequestProxyRetryConfig, + pub load_balancer: Option, +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(default, deny_unknown_fields)] +pub struct RequestProxyRetryConfig { + pub max_connect_retries: u32, + pub max_request_retries: u32, + pub max_replay_body_bytes: usize, + pub require_pylon_retry_signal: bool, + pub request_budget_header: String, +} + +impl Default for RequestProxyRetryConfig { + fn default() -> Self { + Self { + max_connect_retries: default_proxy_connect_retries(), + max_request_retries: default_proxy_request_retries(), + max_replay_body_bytes: default_proxy_replay_body_bytes(), + require_pylon_retry_signal: default_true(), + request_budget_header: default_request_budget_header(), + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct LoadBalancerFileConfig { + pub config_path: PathBuf, +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(default, deny_unknown_fields)] +pub struct ObservabilityConfig { + pub service_name: String, + pub metrics: MetricsConfig, + pub tracing: Option, +} + +impl Default for ObservabilityConfig { + fn default() -> Self { + Self { + service_name: default_service_name(), + metrics: MetricsConfig::default(), + tracing: None, + } + } +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(default, deny_unknown_fields)] +pub struct MetricsConfig { + pub listen_addr: SocketAddr, + pub prefix: String, +} + +impl Default for MetricsConfig { + fn default() -> Self { + Self { + listen_addr: default_metrics_listen_addr(), + prefix: default_metrics_prefix(), + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct TracingConfig { + pub endpoint: String, + #[serde(default)] + pub access_token: Option, +} + +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct TracingAccessTokenConfig { + pub secrets_path: PathBuf, + #[serde(default = "default_tracing_json_path")] + pub json_path: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct WorkerAuthenticationConfig { + pub endpoint: String, + #[serde(default)] + pub bearer_token: Option, + #[serde(default)] + pub oauth2: Option, +} + +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct BearerTokenConfig { + pub secrets_path: PathBuf, + #[serde(default = "default_bearer_json_path")] + pub json_path: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct OAuth2Config { + pub provider_host: String, + pub secrets_path: PathBuf, +} + +#[cfg(test)] +mod tests { + use super::*; + + const MINIMAL: &str = r#" +schema_version = 1 + +[stargate_identity] +id = "stargate-a" + +[stargate_network] +advertise_addr = "127.0.0.1:50071" +"#; + + #[test] + fn minimal_config_uses_runtime_defaults_and_self_only_membership() { + let config = StargateConfig::from_toml_str(MINIMAL).expect("config should parse"); + assert_eq!( + config.stargate_network.grpc_listen_addr, + default_grpc_listen_addr() + ); + assert_eq!( + config.process_lifecycle.readiness_warmup, + crate::runtime::DEFAULT_READINESS_WARMUP + ); + assert!(config.stargate_discovery.kubernetes_pods.is_none()); + assert_eq!(config.direct_transport().connections, NonZeroUsize::MIN); + } + + #[test] + fn complete_reverse_config_parses() { + let config = StargateConfig::from_toml_str( + r#" +schema_version = 1 + +[stargate_identity] +id = "stargate-0" +advertised_hostname_template = "{pod_name}.stargate.example" + +[stargate_identity.kubernetes] +pod_name = "stargate-0" +namespace = "inference" + +[stargate_network] +advertise_addr = "10.0.0.2:50071" + +[stargate_discovery] +remote_watch_urls = ["https://remote.example:50071"] +watch_heartbeat_ms = 5000 + +[stargate_discovery.kubernetes_pods] +headless_service_dns_name = "stargate-headless.inference.svc.cluster.local" +poll_interval_ms = 1000 +resolver_ttl_ms = 1000 + +[pylon_transport] +tunnel_protocol = "raw-quic" +quic_connect_timeout_ms = 2000 +quic_request_timeout_ms = 30000 + +[pylon_transport.reverse] +listen_addr = "0.0.0.0:50072" +connect_timeout_ms = 10000 + +[request_proxy.retry] +max_connect_retries = 2 +max_request_retries = 2 +max_replay_body_bytes = 67108864 +require_pylon_retry_signal = true +request_budget_header = "x-stargate-max-wait-ms" +"#, + ) + .expect("config should parse"); + assert!(config.pylon_transport.reverse.is_some()); + assert!(config.stargate_discovery.kubernetes_pods.is_some()); + let serialized = config + .to_toml_string() + .expect("config should serialize to TOML"); + let round_trip = StargateConfig::from_toml_str(&serialized) + .expect("serialized config should parse again"); + assert_eq!(round_trip, config); + } + + #[test] + fn unknown_and_obsolete_discovery_sections_are_rejected() { + for section in ["[stargate_discovery.dns]", "[unknown]"] { + let source = format!("{MINIMAL}\n{section}\nname = \"stargate.local\"\n"); + let error = StargateConfig::from_toml_str(&source) + .expect_err("unknown section should be rejected"); + assert!(error.to_string().contains("failed to parse")); + } + } + + #[test] + fn kubernetes_pod_discovery_requires_kubernetes_identity() { + let source = format!( + "{MINIMAL}\n\ + [stargate_discovery.kubernetes_pods]\n\ + headless_service_dns_name = \"stargate-headless\"\n" + ); + let error = + StargateConfig::from_toml_str(&source).expect_err("identity should be required"); + assert!( + format!("{error:#}").contains( + "stargate_discovery.kubernetes_pods requires stargate_identity.kubernetes" + ) + ); + } + + #[test] + fn direct_and_reverse_sections_are_mutually_exclusive() { + let source = format!( + "{MINIMAL}\n\ + [pylon_transport.direct]\n\ + connections = 1\n\ + [pylon_transport.reverse]\n\ + listen_addr = \"127.0.0.1:50072\"\n" + ); + let error = StargateConfig::from_toml_str(&source).expect_err("modes should conflict"); + assert!(format!("{error:#}").contains("mutually exclusive")); + } + + #[test] + fn environment_value_source_uses_named_value_and_rejects_empty_values() { + let source = ValueSource::::Environment(EnvironmentReference { + env: "POD_ADDR".to_string(), + }); + let address = source + .resolve_with(|name| { + assert_eq!(name, "POD_ADDR"); + Ok("127.0.0.1:50071".to_string()) + }) + .expect("environment address should parse"); + assert_eq!(address, "127.0.0.1:50071".parse().unwrap()); + + let source = ValueSource::::Environment(EnvironmentReference { + env: "POD_NAME".to_string(), + }); + assert!(source.resolve_with(|_| Ok(String::new())).is_err()); + } + + #[test] + fn config_file_resolves_relative_paths_from_its_directory() { + let directory = tempfile::tempdir().expect("temp directory should exist"); + let path = directory.path().join("stargate.toml"); + std::fs::write( + &path, + format!( + "{MINIMAL}\n\ + [request_proxy.load_balancer]\n\ + config_path = \"lb.json\"\n" + ), + ) + .expect("config should be writable"); + + let config = StargateConfig::from_toml_file(&path).expect("config should load"); + assert_eq!( + config + .request_proxy + .load_balancer + .expect("load balancer config should exist") + .config_path, + directory.path().join("lb.json") + ); + } +} diff --git a/src/libraries/rust/stargate/crates/stargate/src/control_plane.rs b/src/libraries/rust/stargate/crates/stargate/src/control_plane.rs index 0c8227db2..d8eaad0b1 100644 --- a/src/libraries/rust/stargate/crates/stargate/src/control_plane.rs +++ b/src/libraries/rust/stargate/crates/stargate/src/control_plane.rs @@ -61,7 +61,7 @@ use self::watch_stargates::{ pub struct StargateService { stargate_id: String, advertise_addr: SocketAddr, - discovery_dns_name: String, + kubernetes_pod_discovery_dns_name: Option, watch_stargates_rx: watch::Receiver, state: Arc, registration_connection_config: RegistrationConnectionConfig, @@ -75,7 +75,7 @@ pub struct StargateService { pub(crate) struct StargateServiceConfig { pub(crate) stargate_id: String, pub(crate) advertise_addr: SocketAddr, - pub(crate) discovery_dns_name: String, + pub(crate) kubernetes_pod_discovery_dns_name: Option, pub(crate) discovery: Box, pub(crate) remote_watch_stargate_urls: Vec, pub(crate) grpc_pylon_dial_addr: Option, @@ -108,7 +108,7 @@ impl StargateService { let tasks = config.tasks.clone(); let watch_stargates_rx = spawn_watch_stargates_publisher(WatchStargatesPublisherConfig { advertise_addr: config.advertise_addr, - discovery_dns_name: config.discovery_dns_name.clone(), + kubernetes_pod_discovery_dns_name: config.kubernetes_pod_discovery_dns_name.clone(), discovery: config.discovery, remote_watch_stargate_urls: config.remote_watch_stargate_urls, grpc_pylon_dial_addr: config.grpc_pylon_dial_addr, @@ -120,7 +120,7 @@ impl StargateService { Self { stargate_id: config.stargate_id, advertise_addr: config.advertise_addr, - discovery_dns_name: config.discovery_dns_name, + kubernetes_pod_discovery_dns_name: config.kubernetes_pod_discovery_dns_name, watch_stargates_rx, state: config.state, registration_connection_config: config.registration_connection_config, @@ -204,7 +204,7 @@ impl StargateControlPlane for StargateService { info!( stargate_id = %self.stargate_id, advertise_addr = %self.advertise_addr, - dns_name = %self.discovery_dns_name, + kubernetes_pod_discovery_dns_name = ?self.kubernetes_pod_discovery_dns_name, "watch stargates stream opened" ); diff --git a/src/libraries/rust/stargate/crates/stargate/src/control_plane/watch_stargates.rs b/src/libraries/rust/stargate/crates/stargate/src/control_plane/watch_stargates.rs index 685a79a50..6470eaa90 100644 --- a/src/libraries/rust/stargate/crates/stargate/src/control_plane/watch_stargates.rs +++ b/src/libraries/rust/stargate/crates/stargate/src/control_plane/watch_stargates.rs @@ -31,7 +31,7 @@ use stargate_runtime::CriticalTaskGroup; pub(super) struct WatchStargatesPublisherConfig { pub(super) advertise_addr: SocketAddr, - pub(super) discovery_dns_name: String, + pub(super) kubernetes_pod_discovery_dns_name: Option, pub(super) discovery: Box, pub(super) remote_watch_stargate_urls: Vec, pub(super) grpc_pylon_dial_addr: Option, @@ -43,7 +43,7 @@ pub(super) struct WatchStargatesPublisherConfig { pub(super) fn spawn_watch_stargates_publisher( WatchStargatesPublisherConfig { advertise_addr, - discovery_dns_name, + kubernetes_pod_discovery_dns_name, discovery, remote_watch_stargate_urls, grpc_pylon_dial_addr, @@ -52,7 +52,8 @@ pub(super) fn spawn_watch_stargates_publisher( tasks, }: WatchStargatesPublisherConfig, ) -> watch::Receiver { - let local_watch_endpoint_keys = local_watch_endpoint_keys(advertise_addr, &discovery_dns_name); + let local_watch_endpoint_keys = + local_watch_endpoint_keys(advertise_addr, kubernetes_pod_discovery_dns_name.as_deref()); let remote_watch_stargate_urls = normalize_remote_watch_urls(remote_watch_stargate_urls, &local_watch_endpoint_keys); let (watch_stargates_tx, watch_stargates_rx) = @@ -177,20 +178,26 @@ fn normalize_remote_watch_urls( fn local_watch_endpoint_keys( advertise_addr: SocketAddr, - discovery_dns_name: &str, + kubernetes_pod_discovery_dns_name: Option<&str>, ) -> BTreeSet { - let discovery_dns_name = discovery_dns_name.trim(); - let cluster_service_dns_name = discovery_dns_name.replace("-headless.", "."); - [ - Some(advertise_addr.to_string()), - Some(format!("{discovery_dns_name}:{}", advertise_addr.port())), - (cluster_service_dns_name != discovery_dns_name) - .then(|| format!("{cluster_service_dns_name}:{}", advertise_addr.port())), - ] - .into_iter() - .flatten() - .filter_map(|endpoint| watch_endpoint_key(&endpoint)) - .collect() + let mut endpoints = vec![advertise_addr.to_string()]; + if let Some(discovery_dns_name) = kubernetes_pod_discovery_dns_name + .map(str::trim) + .filter(|name| !name.is_empty()) + { + endpoints.push(format!("{discovery_dns_name}:{}", advertise_addr.port())); + let cluster_service_dns_name = discovery_dns_name.replace("-headless.", "."); + if cluster_service_dns_name != discovery_dns_name { + endpoints.push(format!( + "{cluster_service_dns_name}:{}", + advertise_addr.port() + )); + } + } + endpoints + .into_iter() + .filter_map(|endpoint| watch_endpoint_key(&endpoint)) + .collect() } fn watch_endpoint_key(endpoint: &str) -> Option { @@ -313,7 +320,7 @@ mod tests { fn remote_watch_urls_are_normalized_and_filter_self_endpoints() { let excluded = local_watch_endpoint_keys( "10.0.0.1:50071".parse().unwrap(), - "stargate-headless.ns.svc.cluster.local", + Some("stargate-headless.ns.svc.cluster.local"), ); let urls = normalize_remote_watch_urls( vec![ diff --git a/src/libraries/rust/stargate/crates/stargate/src/discovery.rs b/src/libraries/rust/stargate/crates/stargate/src/discovery.rs index 14f0d55a4..39fbee71c 100644 --- a/src/libraries/rust/stargate/crates/stargate/src/discovery.rs +++ b/src/libraries/rust/stargate/crates/stargate/src/discovery.rs @@ -13,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use std::net::{IpAddr, SocketAddr}; +use std::net::SocketAddr; use hickory_resolver::TokioAsyncResolver; use stargate_forwarding::render_hostname; @@ -38,7 +38,7 @@ impl Discovery for Box { } } -pub struct HeadlessDnsDiscoveryConfig { +pub struct KubernetesPodDiscoveryConfig { pub self_pod_name: String, pub pod_namespace: String, pub advertised_hostname_template: String, @@ -47,12 +47,12 @@ pub struct HeadlessDnsDiscoveryConfig { pub grpc_port: u16, } -pub struct HeadlessDnsDiscovery { - config: HeadlessDnsDiscoveryConfig, +pub struct KubernetesPodDiscovery { + config: KubernetesPodDiscoveryConfig, } -impl HeadlessDnsDiscovery { - pub fn new(config: HeadlessDnsDiscoveryConfig) -> Self { +impl KubernetesPodDiscovery { + pub fn new(config: KubernetesPodDiscoveryConfig) -> Self { Self { config } } @@ -98,7 +98,7 @@ impl HeadlessDnsDiscovery { } #[async_trait::async_trait] -impl Discovery for HeadlessDnsDiscovery { +impl Discovery for KubernetesPodDiscovery { fn initial_stargates(&self) -> Vec { vec![self.stargate_info_for_endpoint(&self.config.self_pod_name, self.config.grpc_port)] } @@ -187,99 +187,6 @@ impl Discovery for SelfOnlyDiscovery { } } -pub struct DnsDiscovery { - self_addr: SocketAddr, - self_stargate_id: String, - discovery_dns_name: String, - resolver: TokioAsyncResolver, - http_port: u16, -} - -impl DnsDiscovery { - pub fn new( - self_addr: SocketAddr, - self_stargate_id: String, - discovery_dns_name: String, - resolver: TokioAsyncResolver, - http_port: u16, - ) -> Self { - Self { - self_addr, - self_stargate_id, - discovery_dns_name, - resolver, - http_port, - } - } - - fn stargate_info_for_ip(&self, ip: IpAddr) -> Option { - let addr = SocketAddr::new(ip, self.self_addr.port()); - let is_self = addr == self.self_addr; - if !is_self && (ip.is_loopback() || ip.is_unspecified()) { - return None; - } - - let addr = addr.to_string(); - Some(StargateInfo { - stargate_id: if is_self { - self.self_stargate_id.clone() - } else { - addr.clone() - }, - advertise_addr: addr, - http_advertise_addr: if is_self { - SocketAddr::new(ip, self.http_port).to_string() - } else { - String::new() - }, - grpc_pylon_dial_addr: String::new(), - }) - } - - fn self_stargate_info(&self) -> StargateInfo { - StargateInfo { - stargate_id: self.self_stargate_id.clone(), - advertise_addr: self.self_addr.to_string(), - http_advertise_addr: SocketAddr::new(self.self_addr.ip(), self.http_port).to_string(), - grpc_pylon_dial_addr: String::new(), - } - } - - fn stargates_from_ips(&self, ips: I) -> Vec - where - I: IntoIterator, - { - let stargates = ips - .into_iter() - .filter_map(|ip| self.stargate_info_for_ip(ip)) - .collect(); - finalize_stargates(stargates, self.self_stargate_info(), |stargate| { - &stargate.advertise_addr - }) - } -} - -#[async_trait::async_trait] -impl Discovery for DnsDiscovery { - fn initial_stargates(&self) -> Vec { - vec![self.self_stargate_info()] - } - - async fn discover_stargates(&self) -> Vec { - match self.resolver.lookup_ip(&self.discovery_dns_name).await { - Ok(lookup) => self.stargates_from_ips(lookup.iter()), - Err(err) => { - warn!( - dns_name = %self.discovery_dns_name, - error = %err, - "dns lookup failed" - ); - self.initial_stargates() - } - } - } -} - #[cfg(test)] mod tests { use super::*; @@ -294,10 +201,10 @@ mod tests { } } - fn make_headless_discovery() -> HeadlessDnsDiscovery { + fn make_kubernetes_pod_discovery() -> KubernetesPodDiscovery { let resolver = TokioAsyncResolver::tokio(ResolverConfig::default(), ResolverOpts::default()); - HeadlessDnsDiscovery::new(HeadlessDnsDiscoveryConfig { + KubernetesPodDiscovery::new(KubernetesPodDiscoveryConfig { self_pod_name: "stargate-0".to_string(), pod_namespace: "prod".to_string(), advertised_hostname_template: "{pod_name}.stargate.external".to_string(), @@ -308,8 +215,8 @@ mod tests { } #[test] - fn headless_dns_discovery_renders_self_from_pod_hostname() { - let discovery = make_headless_discovery(); + fn kubernetes_pod_discovery_renders_self_from_pod_hostname() { + let discovery = make_kubernetes_pod_discovery(); assert_eq!( discovery.initial_stargates(), @@ -322,8 +229,8 @@ mod tests { } #[test] - fn headless_dns_discovery_renders_peer_from_srv_target_hostname() { - let discovery = make_headless_discovery(); + fn kubernetes_pod_discovery_renders_peer_from_srv_target_hostname() { + let discovery = make_kubernetes_pod_discovery(); assert_eq!( discovery.stargate_info_for_endpoint("stargate-1", 50071), @@ -350,8 +257,8 @@ mod tests { } #[test] - fn headless_dns_discovery_finalizes_srv_records_with_self_fallback_and_sorting() { - let discovery = make_headless_discovery(); + fn kubernetes_pod_discovery_finalizes_srv_records_with_self_fallback_and_sorting() { + let discovery = make_kubernetes_pod_discovery(); let stargates = discovery.stargates_from_srv_records(vec![ ( @@ -379,8 +286,8 @@ mod tests { } #[test] - fn headless_dns_discovery_falls_back_to_self_when_no_srv_records_survive() { - let discovery = make_headless_discovery(); + fn kubernetes_pod_discovery_falls_back_to_self_when_no_srv_records_survive() { + let discovery = make_kubernetes_pod_discovery(); let stargates = discovery.stargates_from_srv_records(vec![( "stargate-9.other.prod.svc.cluster.local.".to_string(), @@ -390,34 +297,6 @@ mod tests { assert_eq!(stargates, discovery.initial_stargates()); } - #[test] - fn dns_discovery_finalizes_ips_with_self_fallback_alias_filter_and_sorting() { - let resolver = - TokioAsyncResolver::tokio(ResolverConfig::default(), ResolverOpts::default()); - let discovery = DnsDiscovery::new( - "10.0.0.2:50071".parse().unwrap(), - "local-stargate".to_string(), - "stargate-headless".to_string(), - resolver, - 8000, - ); - - let stargates = discovery.stargates_from_ips(vec![ - "10.0.0.3".parse().unwrap(), - "127.0.0.1".parse().unwrap(), - "10.0.0.1".parse().unwrap(), - ]); - - assert_eq!( - stargates, - vec![ - stargate("10.0.0.1:50071", "10.0.0.1:50071", ""), - stargate("10.0.0.3:50071", "10.0.0.3:50071", ""), - stargate("local-stargate", "10.0.0.2:50071", "10.0.0.2:8000"), - ] - ); - } - #[tokio::test] async fn self_only_discovery_returns_only_configured_stargate() { let discovery = SelfOnlyDiscovery::new( @@ -434,44 +313,4 @@ mod tests { assert_eq!(discovery.initial_stargates(), expected); assert_eq!(discovery.discover_stargates().await, expected); } - - #[test] - fn dns_discovery_skips_loopback_aliases_that_are_not_self() { - let resolver = - TokioAsyncResolver::tokio(ResolverConfig::default(), ResolverOpts::default()); - let discovery = DnsDiscovery::new( - "127.0.0.1:50071".parse().unwrap(), - "local-stargate".to_string(), - "localhost".to_string(), - resolver, - 8000, - ); - - assert_eq!( - discovery.stargate_info_for_ip("127.0.0.1".parse().unwrap()), - Some(stargate( - "local-stargate", - "127.0.0.1:50071", - "127.0.0.1:8000" - )) - ); - assert_eq!(discovery.stargate_info_for_ip("::1".parse().unwrap()), None); - - let scoped_self = "[fe80::1%3]:50071".parse().unwrap(); - let scoped = DnsDiscovery::new( - scoped_self, - "scoped-stargate".to_string(), - "headless".to_string(), - TokioAsyncResolver::tokio(ResolverConfig::default(), ResolverOpts::default()), - 8000, - ); - assert_eq!( - scoped.initial_stargates(), - vec![stargate( - "scoped-stargate", - &scoped_self.to_string(), - "[fe80::1]:8000" - )] - ); - } } diff --git a/src/libraries/rust/stargate/crates/stargate/src/http_proxy/diagnostics.rs b/src/libraries/rust/stargate/crates/stargate/src/http_proxy/diagnostics.rs index e1ab684c5..5ff1cbc36 100644 --- a/src/libraries/rust/stargate/crates/stargate/src/http_proxy/diagnostics.rs +++ b/src/libraries/rust/stargate/crates/stargate/src/http_proxy/diagnostics.rs @@ -34,7 +34,7 @@ pub(crate) struct DebugConfig { pub(crate) http_listen_addr: String, pub(crate) metrics_listen_addr: Option, pub(crate) advertise_addr: String, - pub(crate) stargate_discovery_dns_name: String, + pub(crate) kubernetes_pod_discovery_dns_name: Option, pub(crate) tunnel_protocol: String, pub(crate) backend_connectivity: BackendConnectivity, pub(crate) direct_quic_connections: usize, diff --git a/src/libraries/rust/stargate/crates/stargate/src/lib.rs b/src/libraries/rust/stargate/crates/stargate/src/lib.rs index 3f974c008..a1ca300ef 100644 --- a/src/libraries/rust/stargate/crates/stargate/src/lib.rs +++ b/src/libraries/rust/stargate/crates/stargate/src/lib.rs @@ -14,6 +14,7 @@ // limitations under the License. pub mod auth; +pub mod config; pub(crate) mod control_plane; pub mod discovery; pub(crate) mod http_proxy; diff --git a/src/libraries/rust/stargate/crates/stargate/src/main.rs b/src/libraries/rust/stargate/crates/stargate/src/main.rs index 4b04484f3..6e129d86a 100644 --- a/src/libraries/rust/stargate/crates/stargate/src/main.rs +++ b/src/libraries/rust/stargate/crates/stargate/src/main.rs @@ -13,10 +13,16 @@ // See the License for the specific language governing permissions and // limitations under the License. +use std::ffi::OsString; use std::future::Future; use std::net::SocketAddr; +use std::num::NonZeroUsize; +use std::path::PathBuf; +use std::time::Duration; -use anyhow::{Context, Result}; +use anyhow::{Context, Result, ensure}; +use clap::Parser; +use stargate::config as structured; use stargate::registration::{ DEFAULT_REGISTRATION_UPDATE_IDLE_TIMEOUT, DEFAULT_REGISTRATION_UPDATE_MAX_IDLE_TIMEOUT, }; @@ -29,14 +35,12 @@ use tracing::{error, info, warn}; #[path = "main/startup.rs"] mod startup; -use startup::runtime_from_args; +use startup::runtime_from_config; mod built_info { include!(concat!(env!("OUT_DIR"), "/built.rs")); } -const DEFAULT_PROXY_MAX_REPLAY_BODY_BYTES: usize = 64 * 1024 * 1024; - fn parse_nonzero_millis(value: &str) -> std::result::Result { let millis = value .parse::() @@ -66,9 +70,12 @@ fn parse_grpc_pylon_dial_uri(value: &str) -> std::result::Result }) } -#[derive(clap::Parser, Debug)] +#[derive(clap::Parser, Clone, Debug)] #[command(name = "stargate")] struct Args { + /// Load all Stargate settings from this TOML file. All legacy configuration flags and environment variables are ignored when present. + #[arg(long, value_name = "PATH")] + config_file: Option, /// Stable Stargate process or pod identity. #[arg(long, value_name = "ID")] stargate_id: String, @@ -84,9 +91,9 @@ struct Args { /// Self gRPC address published by non-Kubernetes discovery and used as the port source for Kubernetes advertised hostnames. #[arg(long, value_name = "ADDR")] advertise_addr: SocketAddr, - /// DNS name used for Stargate peer discovery. In Kubernetes this should be the headless Service so warming and ready peers remain discoverable. + /// Kubernetes headless Service DNS name used to enumerate local Stargate pods. #[arg(long, value_name = "DNS_NAME")] - stargate_discovery_dns_name: String, + stargate_discovery_dns_name: Option, /// Additional recursive WatchStargates seeds for remote regions. Pylons register only to concrete `stargates` entries returned by watch snapshots. Repeatable. #[arg( long, @@ -121,10 +128,10 @@ struct Args { /// Enable development-only peer relaying; requires Kubernetes identity and DNS discovery. Production must use `stargate-k8s-router` or a supported load balancer. #[arg(long, default_value_t = false)] enable_dev_peer_forwarding: bool, - /// Interval for refreshing DNS-discovered Stargate peers. + /// Interval for refreshing DNS-discovered Kubernetes Stargate pods. #[arg(long, default_value_t = 1000, value_parser = parse_nonzero_millis, value_name = "MS")] dns_poll_ms: u64, - /// Maximum resolver cache TTL used by Stargate DNS discovery. + /// Maximum resolver cache TTL used by Kubernetes Stargate pod discovery. #[arg(long, default_value_t = 1000, value_name = "MS")] dns_resolver_ttl_ms: u64, /// Maximum interval between unchanged WatchStargates snapshots. @@ -191,7 +198,7 @@ struct Args { /// Maximum request body bytes buffered for proxy retry replay #[arg( long, - default_value_t = DEFAULT_PROXY_MAX_REPLAY_BODY_BYTES, + default_value_t = structured::DEFAULT_PROXY_MAX_REPLAY_BODY_BYTES, env = "STARGATE_PROXY_MAX_REPLAY_BODY_BYTES", value_name = "BYTES" )] @@ -266,63 +273,353 @@ struct Args { oauth2_provider_host: Option, } +#[derive(Clone, Debug, PartialEq, Eq)] +enum ConfigSource { + File(PathBuf), + LegacyCli, +} + +fn select_config_from( + argv: impl IntoIterator>, +) -> Result<(structured::StargateConfig, ConfigSource)> { + let argv: Vec = argv.into_iter().map(Into::into).collect(); + if let Some(path) = config_file_from_argv(&argv)? { + let config = structured::StargateConfig::from_toml_file(&path)?; + return Ok((config, ConfigSource::File(path))); + } + + let args = Args::try_parse_from(argv).map_err(anyhow::Error::new)?; + Ok((config_from_legacy_args(args)?, ConfigSource::LegacyCli)) +} + +fn config_file_from_argv(argv: &[OsString]) -> Result> { + let mut config_file = None; + let mut index = 1; + while index < argv.len() { + if argv[index] == "--" { + break; + } + let path = if argv[index] == "--config-file" { + index += 1; + Some( + argv.get(index) + .filter(|value| !value.is_empty()) + .map(PathBuf::from) + .context("--config-file requires a non-empty path")?, + ) + } else { + argv[index] + .to_str() + .and_then(|value| value.strip_prefix("--config-file=")) + .map(|value| { + ensure!(!value.is_empty(), "--config-file requires a non-empty path"); + Ok(PathBuf::from(value)) + }) + .transpose()? + }; + if let Some(path) = path { + ensure!( + config_file.is_none(), + "--config-file may only be specified once" + ); + config_file = Some(path); + } + index += 1; + } + Ok(config_file) +} + +fn config_from_legacy_args(args: Args) -> Result { + ensure!( + args.config_file.is_none(), + "internal error: config-file input reached legacy conversion" + ); + ensure!( + !(args.disable_dns_discovery && args.enable_dev_peer_forwarding), + "--enable-dev-peer-forwarding cannot be combined with --disable-dns-discovery" + ); + ensure!( + args.pod_name.is_some() == args.pod_namespace.is_some(), + "--pod-name and --pod-namespace must be supplied together" + ); + ensure!( + args.allow_insecure_remote_watch_http + || !args + .remote_stargate_url + .iter() + .any(|url| url.starts_with("http://")), + "http:// remote Watch URLs require --allow-insecure-remote-watch-http" + ); + + let kubernetes = args + .pod_name + .zip(args.pod_namespace) + .map( + |(pod_name, namespace)| structured::KubernetesIdentityConfig { + pod_name, + namespace, + }, + ); + let kubernetes_pods = if args.disable_dns_discovery { + None + } else if kubernetes.is_some() { + Some(structured::KubernetesPodDiscoveryConfig { + headless_service_dns_name: args + .stargate_discovery_dns_name + .context( + "--stargate-discovery-dns-name is required when Kubernetes pod identity is configured", + )?, + poll_interval: Duration::from_millis(args.dns_poll_ms), + resolver_ttl: Duration::from_millis(args.dns_resolver_ttl_ms), + development_peer_forwarding: args + .enable_dev_peer_forwarding + .then_some(structured::DevelopmentPeerForwardingConfig {}), + }) + } else { + ensure!( + !args.enable_dev_peer_forwarding, + "--enable-dev-peer-forwarding requires both --pod-name and --pod-namespace" + ); + None + }; + + let direct_connections = NonZeroUsize::new(args.direct_quic_connections) + .context("--direct-quic-connections must be greater than 0")?; + let (direct, reverse) = match args.backend_connectivity { + BackendConnectivity::Direct => { + ensure!( + args.reverse_tunnel_listen_addr.is_none(), + "--reverse-tunnel-listen-addr requires --backend-connectivity=reverse" + ); + ensure!( + args.reverse_tunnel_pylon_dial_addr.is_none(), + "--reverse-tunnel-pylon-dial-addr requires --backend-connectivity=reverse" + ); + ( + Some(structured::DirectPylonTransportConfig { + connections: direct_connections, + trust_bundle_path: args.tls_cert_path.as_deref().map(PathBuf::from), + }), + None, + ) + } + BackendConnectivity::Reverse => { + let listen_addr = args + .reverse_tunnel_listen_addr + .as_deref() + .context("--backend-connectivity=reverse requires --reverse-tunnel-listen-addr")? + .parse() + .context("invalid --reverse-tunnel-listen-addr")?; + ( + None, + Some(structured::ReversePylonTransportConfig { + listen_addr, + pylon_dial_addr: args.reverse_tunnel_pylon_dial_addr, + connect_timeout: Duration::from_millis(args.reverse_tunnel_connect_timeout_ms), + certificate_path: args.tls_cert_path.as_deref().map(PathBuf::from), + private_key_path: args.tls_key_path.as_deref().map(PathBuf::from), + }), + ) + } + }; + + let secrets_path = args.secrets_path.as_deref().map(PathBuf::from); + let worker_authentication = args.worker_auth_endpoint.map(|endpoint| { + let (bearer_token, oauth2) = if let Some(provider_host) = args.oauth2_provider_host { + ( + None, + Some(structured::OAuth2Config { + provider_host, + secrets_path: secrets_path.clone().context( + "OAUTH2_PROVIDER_HOST is set but SECRETS_PATH is not; client-credentials worker auth needs the secrets file with the id/secret", + )?, + }), + ) + } else { + ( + secrets_path + .clone() + .map(|secrets_path| structured::BearerTokenConfig { + secrets_path, + json_path: args + .secrets_json_path + .as_deref() + .unwrap_or("authToken") + .split('.') + .map(str::to_owned) + .collect(), + }), + None, + ) + }; + Ok::<_, anyhow::Error>(structured::WorkerAuthenticationConfig { + endpoint, + bearer_token, + oauth2, + }) + }).transpose()?; + + let tracing = args + .otel_endpoint + .map(|endpoint| structured::TracingConfig { + endpoint, + access_token: secrets_path.map(|secrets_path| structured::TracingAccessTokenConfig { + secrets_path, + json_path: vec!["tracingAccessToken".to_string()], + }), + }); + let request_budget_header = args.proxy_retry_budget_header; + let config = structured::StargateConfig { + schema_version: structured::SCHEMA_VERSION, + stargate_identity: structured::StargateIdentityConfig { + id: args.stargate_id, + advertised_hostname_template: args + .advertised_hostname_template + .unwrap_or_else(|| "{pod_name}.stargate.external".to_string()), + kubernetes, + }, + stargate_network: structured::StargateNetworkConfig { + grpc_listen_addr: args.listen_addr.parse().context("invalid --listen-addr")?, + model_discovery_listen_addr: args + .model_discovery_listen_addr + .parse() + .context("invalid --model-discovery-listen-addr")?, + http_listen_addr: args + .http_listen_addr + .parse() + .context("invalid --http-listen-addr")?, + advertise_addr: args.advertise_addr, + }, + process_lifecycle: structured::ProcessLifecycleConfig { + readiness_warmup: Duration::from_millis(args.readiness_warmup_ms), + shutdown_drain_timeout: Duration::from_millis(args.shutdown_drain_timeout_ms), + }, + pylon_registration: structured::PylonRegistrationConfig { + update_idle_timeout: Duration::from_millis(args.registration_update_idle_timeout_ms), + update_max_idle_timeout: Duration::from_millis( + args.registration_update_max_idle_timeout_ms, + ), + }, + stargate_discovery: structured::StargateDiscoveryConfig { + remote_watch_urls: args.remote_stargate_url, + allow_insecure_remote_watch_http: args.allow_insecure_remote_watch_http, + watch_heartbeat: Duration::from_millis(args.watch_heartbeat_ms), + kubernetes_pods, + }, + pylon_transport: structured::PylonTransportConfig { + pylon_grpc_dial_uri: args.grpc_pylon_dial_addr, + tunnel_protocol: args.tunnel_protocol, + quic_connect_timeout: Duration::from_millis(args.quic_connect_timeout_ms), + quic_request_timeout: Duration::from_millis(args.quic_request_timeout_ms), + direct, + reverse, + tls: structured::PylonTlsConfig { + insecure_skip_verify: args.quic_insecure, + }, + }, + request_proxy: structured::RequestProxyConfig { + retry: structured::RequestProxyRetryConfig { + max_connect_retries: args.proxy_max_connect_retries, + max_request_retries: args.proxy_max_request_retries, + max_replay_body_bytes: args.proxy_max_replay_body_bytes, + require_pylon_retry_signal: args.proxy_require_pylon_retry_signal, + request_budget_header, + }, + load_balancer: args.lb_config_path.map(|config_path| { + structured::LoadBalancerFileConfig { + config_path: config_path.into(), + } + }), + }, + observability: structured::ObservabilityConfig { + service_name: args.otel_service_name, + metrics: structured::MetricsConfig { + listen_addr: SocketAddr::from(([0, 0, 0, 0], args.metrics_port)), + prefix: args.metrics_prefix, + }, + tracing, + }, + worker_authentication, + }; + config.validate()?; + Ok(config) +} + #[tokio::main] async fn main() -> Result<()> { let _ = rustls::crypto::aws_lc_rs::default_provider().install_default(); - run(clap::Parser::parse()).await + let argv: Vec = std::env::args_os().collect(); + if argv + .iter() + .skip(1) + .any(|argument| argument == "--help" || argument == "-h") + { + let _ = Args::parse_from(argv); + unreachable!("clap exits after displaying help"); + } + let (config, source) = select_config_from(argv)?; + run(config, source).await } /// Resolves the OTLP tracing access token, read only when tracing is enabled. /// Missing/empty key yields `None` (caller warns after the subscriber exists); /// an unreadable or malformed secrets file is a hard error. -async fn resolve_otel_access_token( - tracing_enabled: bool, - secrets_path: Option<&str>, +async fn resolve_tracing_access_token( + token: Option<&structured::TracingAccessTokenConfig>, ) -> Result> { - if !tracing_enabled { - return Ok(None); - } - let Some(path) = secrets_path else { + let Some(token) = token else { return Ok(None); }; - let bytes = tokio::fs::read(path) - .await - .with_context(|| format!("failed to read secrets file '{path}' for tracingAccessToken"))?; + let path = &token.secrets_path; + let bytes = tokio::fs::read(path).await.with_context(|| { + format!( + "failed to read secrets file '{}' for tracing access token", + path.display() + ) + })?; let secrets: serde_json::Value = serde_json::from_slice(&bytes) - .with_context(|| format!("secrets file '{path}' is not valid JSON"))?; - match secrets.get("tracingAccessToken") { - None => Ok(None), - Some(value) => { - let token = value - .as_str() - .context("tracingAccessToken in secrets file is not a string")? - .trim(); - if token.is_empty() { - Ok(None) - } else { - Ok(Some(token.to_owned())) - } - } + .with_context(|| format!("secrets file '{}' is not valid JSON", path.display()))?; + let mut value = &secrets; + for component in &token.json_path { + let Some(next) = value.get(component) else { + return Ok(None); + }; + value = next; + } + let json_path = token.json_path.join("."); + let value = value + .as_str() + .with_context(|| format!("{json_path} in secrets file is not a string"))? + .trim(); + if value.is_empty() { + Ok(None) + } else { + Ok(Some(value.to_owned())) } } -async fn run(args: Args) -> Result<()> { - let tracing_enabled = args.otel_endpoint.is_some(); +async fn run(config: structured::StargateConfig, source: ConfigSource) -> Result<()> { + let tracing = config.observability.tracing.as_ref(); + let tracing_enabled = tracing.is_some(); let otel_access_token = - resolve_otel_access_token(tracing_enabled, args.secrets_path.as_deref()).await?; + resolve_tracing_access_token(tracing.and_then(|tracing| tracing.access_token.as_ref())) + .await?; let _telemetry_guard = stargate::telemetry::init_telemetry( - args.otel_endpoint.as_deref(), - &args.otel_service_name, + tracing.map(|tracing| tracing.endpoint.as_str()), + &config.observability.service_name, otel_access_token.as_deref(), )?; // Warn after init_telemetry so the subscriber captures it. if tracing_enabled && otel_access_token.is_none() { - warn!("no tracingAccessToken; OTLP trace export is unauthenticated"); + warn!("no tracing access token; OTLP trace export is unauthenticated"); } - log_startup(&args); + if source == ConfigSource::LegacyCli { + warn_legacy_configuration(); + } + log_startup(&config, &source); - let startup = runtime_from_args(args).await?; + let startup = runtime_from_config(config).await?; let handle = startup.runtime.start().await?; let shutdown_error = match wait_for_runtime_shutdown_trigger( @@ -378,11 +675,21 @@ async fn run(args: Args) -> Result<()> { } } -fn log_startup(args: &Args) { +fn warn_legacy_configuration() { + warn!("CLI and environment-based Stargate configuration is deprecated; use --config-file"); +} + +fn log_startup(config: &structured::StargateConfig, source: &ConfigSource) { + let (configuration_source, config_file) = match source { + ConfigSource::File(path) => ("file", Some(path)), + ConfigSource::LegacyCli => ("legacy-cli", None), + }; info!( version = built_info::PKG_VERSION, commit_short_sha = built_info::GIT_COMMIT_HASH_SHORT.unwrap_or("unknown"), - config = ?args, + configuration_source, + config_file = ?config_file, + config = ?config, "starting stargate" ); } @@ -416,8 +723,9 @@ mod tests { use super::startup::{ DiscoveryAndForwarding, WorkerAuthStartup, bind_reverse_tunnel_from_args, - make_discovery_with_resolver_and_addresses, make_resolver, proxy_retry_config_from_args, - proxy_transport_config_from_args, runtime_config_from_args, worker_auth_startup_from_args, + make_discovery_with_resolver_and_addresses, proxy_retry_config_from_args, + proxy_transport_config_from_args, runtime_config_from_args, runtime_from_args, + worker_auth_startup_from_args, }; use super::*; @@ -487,6 +795,85 @@ mod tests { ); } + fn write_minimal_config() -> tempfile::NamedTempFile { + let mut file = tempfile::NamedTempFile::new().expect("create temp config file"); + file.write_all( + br#"schema_version = 1 + +[stargate_identity] +id = "from-file" + +[stargate_network] +advertise_addr = "127.0.0.1:50071" +"#, + ) + .expect("write config"); + file.flush().expect("flush config"); + file + } + + #[test] + fn config_file_ignores_all_legacy_arguments() { + let file = write_minimal_config(); + let (config, source) = select_config_from([ + OsString::from("stargate"), + OsString::from("--config-file"), + file.path().as_os_str().to_owned(), + OsString::from("--dns-poll-ms"), + OsString::from("0"), + OsString::from("--unknown-legacy-option"), + ]) + .expect("config-file mode must not parse legacy arguments"); + + assert_eq!(config.stargate_identity.id, "from-file"); + assert_eq!(source, ConfigSource::File(file.path().to_path_buf())); + } + + #[test] + fn legacy_arguments_are_used_without_config_file() { + let (config, source) = select_config_from([ + "stargate", + "--stargate-id", + "from-cli", + "--advertise-addr", + "127.0.0.1:50071", + ]) + .expect("legacy arguments should normalize"); + + assert_eq!(config.stargate_identity.id, "from-cli"); + assert!(config.stargate_discovery.kubernetes_pods.is_none()); + assert_eq!(source, ConfigSource::LegacyCli); + } + + #[test] + fn config_file_error_does_not_fall_back_to_legacy_arguments() { + let error = select_config_from([ + "stargate", + "--config-file", + "/path/that/does/not/exist.toml", + "--stargate-id", + "from-cli", + "--advertise-addr", + "127.0.0.1:50071", + ]) + .expect_err("an unreadable config file must be fatal"); + + assert_error_contains(&error, "failed to read config file"); + } + + #[test] + fn legacy_configuration_warning_is_emitted_once() { + let (_, logs) = capture_logs(tracing::Level::WARN, warn_legacy_configuration); + assert_eq!( + logs.matches( + "CLI and environment-based Stargate configuration is deprecated; use --config-file" + ) + .count(), + 1, + "expected exactly one deprecation warning: {logs}" + ); + } + fn proxy_transport(args: &Args) -> ProxyTransportConfig { proxy_transport_config_from_args(args).expect("proxy transport config should parse") } @@ -540,9 +927,10 @@ mod tests { args: &Args, make_resolver: impl FnOnce(Duration) -> Result, ) -> Result { + let config = config_from_legacy_args(args.clone())?; let http_listen_addr = args.http_listen_addr.parse()?; make_discovery_with_resolver_and_addresses( - args, + &config, args.advertise_addr, http_listen_addr, make_resolver, @@ -571,19 +959,23 @@ mod tests { } #[test] - fn startup_log_includes_build_identity_and_complete_args() { + fn startup_log_includes_build_identity_and_effective_config() { let args = parse_args( "--proxy-max-connect-retries 7 \ --worker-auth-endpoint http://worker-auth.example.test:50051 \ --secrets-path /var/run/secrets/worker-auth.json \ --secrets-json-path auth.token", ); - let (_, output) = capture_logs(tracing::Level::INFO, || log_startup(&args)); + let config = config_from_legacy_args(args).expect("legacy config should normalize"); + let (_, output) = capture_logs(tracing::Level::INFO, || { + log_startup(&config, &ConfigSource::LegacyCli) + }); let expected_commit = built_info::GIT_COMMIT_HASH_SHORT.unwrap_or("unknown"); for expected in [ format!("version=\"{}\"", built_info::PKG_VERSION), format!("commit_short_sha=\"{expected_commit}\""), - format!("config={args:?}"), + "configuration_source=\"legacy-cli\"".to_string(), + format!("config={config:?}"), ] { assert!(output.contains(&expected), "startup log: {output}"); } @@ -869,6 +1261,8 @@ mod tests { let cert = tempfile::NamedTempFile::new().expect("cert file should be creatable"); let path = cert.path().to_str().expect("cert path should be UTF-8"); let args = try_parse_argv([ + "--backend-connectivity", + "reverse", "--reverse-tunnel-listen-addr", "127.0.0.1:0", "--tls-cert-path", @@ -877,13 +1271,16 @@ mod tests { .expect("reverse listener arguments should parse"); let err = proxy_transport_config_from_args(&args) .expect_err("reverse listener server TLS still needs a complete PEM pair"); - assert_error_contains(&err, "--tls-key-path is required with --tls-cert-path"); + assert_error_contains( + &err, + "pylon_transport.reverse.certificate_path and private_key_path must be supplied together", + ); } #[test] fn main_binds_reverse_tunnel_config_before_runtime_start() { let args = parse_args( - "--reverse-tunnel-listen-addr 127.0.0.1:0 \ + "--backend-connectivity reverse --reverse-tunnel-listen-addr 127.0.0.1:0 \ --advertised-hostname-template {pod_name}.stargate-headless.{namespace}.svc.cluster.local \ --pod-name stargate-3 --pod-namespace inference \ --reverse-tunnel-pylon-dial-addr stargate-quic-lb.inference.svc.cluster.local:443 \ @@ -957,10 +1354,12 @@ mod tests { } #[test] - fn self_only_discovery_uses_proxy_http_port() { - let args = parse_args("--disable-dns-discovery --http-listen-addr 127.0.0.1:18000"); - let (discovery, forwarding) = make_discovery_with_resolver(&args, make_resolver) - .expect("self-only discovery should build without DNS"); + fn legacy_non_kubernetes_runtime_is_self_only_without_resolving_dns() { + let args = parse_args("--http-listen-addr 127.0.0.1:18000"); + let (discovery, forwarding) = make_discovery_with_resolver(&args, |_| { + panic!("non-Kubernetes discovery must not construct a DNS resolver") + }) + .expect("self-only discovery should build without DNS"); assert!(forwarding.is_none()); let initial = discovery.initial_stargates(); assert_eq!(initial.len(), 1); @@ -1055,10 +1454,16 @@ mod tests { file } + fn tracing_token(path: impl Into) -> structured::TracingAccessTokenConfig { + structured::TracingAccessTokenConfig { + secrets_path: path.into(), + json_path: vec!["tracingAccessToken".to_string()], + } + } + #[tokio::test] async fn otel_access_token_none_when_tracing_disabled() { - let file = write_secrets(r#"{"tracingAccessToken":"tok"}"#); - let token = resolve_otel_access_token(false, file.path().to_str()) + let token = resolve_tracing_access_token(None) .await .expect("resolve should succeed"); assert_eq!(token, None); @@ -1066,7 +1471,7 @@ mod tests { #[tokio::test] async fn otel_access_token_none_when_no_secrets_path() { - let token = resolve_otel_access_token(true, None) + let token = resolve_tracing_access_token(None) .await .expect("resolve should succeed"); assert_eq!(token, None); @@ -1075,7 +1480,7 @@ mod tests { #[tokio::test] async fn otel_access_token_reads_and_trims_value() { let file = write_secrets(r#"{"nvcfApiToken":"x","tracingAccessToken":" tok-123 "}"#); - let token = resolve_otel_access_token(true, file.path().to_str()) + let token = resolve_tracing_access_token(Some(&tracing_token(file.path()))) .await .expect("resolve should succeed"); assert_eq!(token.as_deref(), Some("tok-123")); @@ -1084,7 +1489,7 @@ mod tests { #[tokio::test] async fn otel_access_token_absent_key_is_allowed() { let file = write_secrets(r#"{"nvcfApiToken":"x"}"#); - let token = resolve_otel_access_token(true, file.path().to_str()) + let token = resolve_tracing_access_token(Some(&tracing_token(file.path()))) .await .expect("missing tracingAccessToken must not error"); assert_eq!(token, None); @@ -1093,7 +1498,7 @@ mod tests { #[tokio::test] async fn otel_access_token_empty_value_is_allowed() { let file = write_secrets(r#"{"tracingAccessToken":" "}"#); - let token = resolve_otel_access_token(true, file.path().to_str()) + let token = resolve_tracing_access_token(Some(&tracing_token(file.path()))) .await .expect("empty tracingAccessToken must not error"); assert_eq!(token, None); @@ -1102,7 +1507,7 @@ mod tests { #[tokio::test] async fn otel_access_token_non_string_value_fails() { let file = write_secrets(r#"{"tracingAccessToken":42}"#); - let error = resolve_otel_access_token(true, file.path().to_str()) + let error = resolve_tracing_access_token(Some(&tracing_token(file.path()))) .await .expect_err("non-string tracingAccessToken must fail"); assert!(error.to_string().contains("not a string"), "{error:#}"); @@ -1111,7 +1516,7 @@ mod tests { #[tokio::test] async fn otel_access_token_invalid_json_fails() { let file = write_secrets("not json"); - let error = resolve_otel_access_token(true, file.path().to_str()) + let error = resolve_tracing_access_token(Some(&tracing_token(file.path()))) .await .expect_err("invalid JSON secrets file must fail"); assert!(error.to_string().contains("not valid JSON"), "{error:#}"); @@ -1119,7 +1524,7 @@ mod tests { #[tokio::test] async fn otel_access_token_unreadable_file_fails() { - let error = resolve_otel_access_token(true, Some("/nonexistent/secrets.json")) + let error = resolve_tracing_access_token(Some(&tracing_token("/nonexistent/secrets.json"))) .await .expect_err("unreadable secrets file must fail"); assert!(error.to_string().contains("failed to read"), "{error:#}"); diff --git a/src/libraries/rust/stargate/crates/stargate/src/main/startup.rs b/src/libraries/rust/stargate/crates/stargate/src/main/startup.rs index 9ae7fd854..f548bfd1f 100644 --- a/src/libraries/rust/stargate/crates/stargate/src/main/startup.rs +++ b/src/libraries/rust/stargate/crates/stargate/src/main/startup.rs @@ -13,25 +13,22 @@ // See the License for the specific language governing permissions and // limitations under the License. -use std::net::SocketAddr; use std::sync::Arc; use std::time::Duration; -use anyhow::{Context, Result, bail, ensure}; +use anyhow::{Context, Result, bail}; use stargate::auth::OpenAuthenticator; +use stargate::config::{StargateConfig, WorkerAuthenticationConfig}; use stargate::discovery::{ - Discovery, DnsDiscovery, HeadlessDnsDiscovery, HeadlessDnsDiscoveryConfig, SelfOnlyDiscovery, + Discovery, KubernetesPodDiscovery, KubernetesPodDiscoveryConfig, SelfOnlyDiscovery, }; use stargate::proxy::{ProxyRetryConfig, ProxyTransportConfig, QuicTunnelConfig}; use stargate::runtime::{ BoundStargateListeners, ReverseTunnelConfig, StargateRuntime, StargateRuntimeConfig, }; use stargate_forwarding::{ForwardingResolver, HeadlessDnsResolver, render_hostname}; -use stargate_protocol::BackendConnectivity; use stargate_tls::{ServerIdentityReloader, ServerTlsIdentity}; -use super::Args; - pub(super) struct RuntimeStartup { pub(super) runtime: StargateRuntime, pub(super) shutdown_drain_timeout: Duration, @@ -41,22 +38,16 @@ pub(super) type DiscoveryAndForwarding = (Box, Option); -pub(super) async fn runtime_from_args(mut args: Args) -> Result { - validate_backend_connectivity_args(&args)?; - validate_discovery_args(&args)?; - let proxy_transport = proxy_transport_config_from_args(&args)?; - let reverse_tunnel = bind_reverse_tunnel_from_args(&args)?; - let worker_auth = worker_auth_startup_from_args( - args.worker_auth_endpoint.take(), - args.secrets_path.take(), - args.secrets_json_path.take(), - args.oauth2_provider_host.take(), - )?; +pub(super) async fn runtime_from_config(config: StargateConfig) -> Result { + config.validate()?; + let proxy_transport = proxy_transport_config_from_config(&config)?; + let reverse_tunnel = bind_reverse_tunnel_from_config(&config)?; + let worker_auth = worker_auth_startup_from_config(config.worker_authentication.as_ref())?; - let mut runtime_config = runtime_config_from_args(&args, proxy_transport)?; + let mut runtime_config = runtime_config_from_config(&config, proxy_transport); let listeners = BoundStargateListeners::bind(&mut runtime_config)?; let (discovery, forwarding) = make_discovery_with_resolver_and_addresses( - &args, + &config, runtime_config.advertise_addr, runtime_config.http_listen_addr, make_resolver, @@ -71,51 +62,31 @@ pub(super) async fn runtime_from_args(mut args: Args) -> Result } Ok(RuntimeStartup { runtime: StargateRuntime::new(runtime_config, discovery, listeners, reverse_tunnel), - shutdown_drain_timeout: Duration::from_millis(args.shutdown_drain_timeout_ms), + shutdown_drain_timeout: config.process_lifecycle.shutdown_drain_timeout, }) } -fn validate_backend_connectivity_args(args: &Args) -> Result<()> { - match args.backend_connectivity { - BackendConnectivity::Direct => { - ensure!( - args.reverse_tunnel_listen_addr.is_none(), - "--reverse-tunnel-listen-addr requires --backend-connectivity=reverse" - ); - ensure!( - args.reverse_tunnel_pylon_dial_addr.is_none(), - "--reverse-tunnel-pylon-dial-addr requires --backend-connectivity=reverse" - ); - } - BackendConnectivity::Reverse => ensure!( - args.reverse_tunnel_listen_addr.is_some(), - "--backend-connectivity=reverse requires --reverse-tunnel-listen-addr" - ), - } - Ok(()) -} - -pub(super) fn proxy_transport_config_from_args(args: &Args) -> Result { - let retry = proxy_retry_config_from_args(args)?; - // Only the reverse listener serves an identity, so only that mode reloads - // one. Direct mode reads the certificate as a trust bundle. - let server_identity_reloader = if args.reverse_tunnel_listen_addr.is_some() { - match (&args.tls_cert_path, &args.tls_key_path) { +pub(super) fn proxy_transport_config_from_config( + config: &StargateConfig, +) -> Result { + let retry = proxy_retry_config_from_config(config)?; + let reverse = config.pylon_transport.reverse.as_ref(); + let server_identity_reloader = match reverse { + Some(reverse) => match (&reverse.certificate_path, &reverse.private_key_path) { (Some(cert_path), Some(key_path)) => Some( - ServerIdentityReloader::load(cert_path.into(), key_path.into()) + ServerIdentityReloader::load(cert_path.clone(), key_path.clone()) .context("load initial reverse listener TLS server identity")?, ), (None, None) => None, - (Some(_), None) => bail!("--tls-key-path is required with --tls-cert-path"), - (None, Some(_)) => bail!("--tls-cert-path is required with --tls-key-path"), - } - } else { - None + (Some(_), None) => { + bail!("pylon_transport.reverse.private_key_path is required with certificate_path") + } + (None, Some(_)) => { + bail!("pylon_transport.reverse.certificate_path is required with private_key_path") + } + }, + None => None, }; - // Take the served pair from the reloader that validated and owns it. Two - // independent reads could straddle a rotation, which would leave the - // reloader treating the served identity as already current and never - // installing the replacement. let (tls_cert_pem, tls_key_pem) = match server_identity_reloader .as_ref() .map(ServerIdentityReloader::current_identity) @@ -123,18 +94,21 @@ pub(super) fn proxy_transport_config_from_args(args: &Args) -> Result { (Some(cert_pem.clone()), Some(key_pem.clone())) } - // Direct mode serves a generated identity and reads the certificate - // only as its outbound trust bundle. Some(ServerTlsIdentity::SelfSigned) | None => ( - args.tls_cert_path.as_ref().map(std::fs::read).transpose()?, + config + .direct_transport() + .trust_bundle_path + .as_ref() + .map(std::fs::read) + .transpose()?, None, ), }; Ok(ProxyTransportConfig { quic: QuicTunnelConfig { - connect_timeout: Duration::from_millis(args.quic_connect_timeout_ms), - request_timeout: Duration::from_millis(args.quic_request_timeout_ms), - server_tls_identity: if args.reverse_tunnel_listen_addr.is_some() { + connect_timeout: config.pylon_transport.quic_connect_timeout, + request_timeout: config.pylon_transport.quic_request_timeout, + server_tls_identity: if reverse.is_some() { ServerTlsIdentity::from_optional_pem(tls_cert_pem.clone(), tls_key_pem)? } else { ServerTlsIdentity::SelfSigned @@ -142,146 +116,129 @@ pub(super) fn proxy_transport_config_from_args(args: &Args) -> Result Result> { - let Some(listen_addr) = args.reverse_tunnel_listen_addr.as_deref() else { +pub(super) fn bind_reverse_tunnel_from_config( + config: &StargateConfig, +) -> Result> { + let Some(reverse) = &config.pylon_transport.reverse else { return Ok(None); }; + let kubernetes = config.stargate_identity.kubernetes.as_ref(); Ok(Some(ReverseTunnelConfig::bind( - listen_addr.parse()?, + reverse.listen_addr, render_hostname( - args.advertised_hostname_template - .as_deref() - .unwrap_or("{pod_name}.stargate.external"), - args.pod_name.as_deref().unwrap_or(&args.stargate_id), - args.pod_namespace.as_deref().unwrap_or(""), + &config.stargate_identity.advertised_hostname_template, + kubernetes + .map(|identity| identity.pod_name.as_str()) + .unwrap_or(&config.stargate_identity.id), + kubernetes + .map(|identity| identity.namespace.as_str()) + .unwrap_or(""), ), - args.reverse_tunnel_pylon_dial_addr.clone(), - Duration::from_millis(args.reverse_tunnel_connect_timeout_ms), + reverse.pylon_dial_addr.clone(), + reverse.connect_timeout, )?)) } -pub(super) fn runtime_config_from_args( - args: &Args, +pub(super) fn runtime_config_from_config( + config: &StargateConfig, proxy_transport: ProxyTransportConfig, -) -> Result { - let millis = Duration::from_millis; - Ok(StargateRuntimeConfig { - stargate_id: args.stargate_id.clone(), - grpc_listen_addr: args.listen_addr.parse()?, - model_discovery_listen_addr: args.model_discovery_listen_addr.parse()?, - http_listen_addr: args.http_listen_addr.parse()?, - readiness_warmup: millis(args.readiness_warmup_ms), - metrics_listen_addr: Some(SocketAddr::from(([0, 0, 0, 0], args.metrics_port))), - advertise_addr: args.advertise_addr, - stargate_discovery_dns_name: args.stargate_discovery_dns_name.clone(), - remote_watch_stargate_urls: args.remote_stargate_url.clone(), - grpc_pylon_dial_addr: args.grpc_pylon_dial_addr.clone(), - dns_poll_interval: millis(args.dns_poll_ms), - watch_heartbeat_interval: millis(args.watch_heartbeat_ms), - registration_update_idle_timeout: millis(args.registration_update_idle_timeout_ms), - registration_update_max_idle_timeout: millis(args.registration_update_max_idle_timeout_ms), +) -> StargateRuntimeConfig { + let pod_discovery = config.stargate_discovery.kubernetes_pods.as_ref(); + StargateRuntimeConfig { + stargate_id: config.stargate_identity.id.clone(), + grpc_listen_addr: config.stargate_network.grpc_listen_addr, + model_discovery_listen_addr: config.stargate_network.model_discovery_listen_addr, + http_listen_addr: config.stargate_network.http_listen_addr, + readiness_warmup: config.process_lifecycle.readiness_warmup, + metrics_listen_addr: Some(config.observability.metrics.listen_addr), + advertise_addr: config.stargate_network.advertise_addr, + kubernetes_pod_discovery_dns_name: pod_discovery + .map(|pods| pods.headless_service_dns_name.clone()), + remote_watch_stargate_urls: config.stargate_discovery.remote_watch_urls.clone(), + grpc_pylon_dial_addr: config.pylon_transport.pylon_grpc_dial_uri.clone(), + kubernetes_pod_discovery_poll_interval: pod_discovery + .map(|pods| pods.poll_interval) + .unwrap_or(Duration::from_secs(1)), + watch_heartbeat_interval: config.stargate_discovery.watch_heartbeat, + registration_update_idle_timeout: config.pylon_registration.update_idle_timeout, + registration_update_max_idle_timeout: config.pylon_registration.update_max_idle_timeout, proxy_transport, - lb_config_path: args.lb_config_path.clone(), - metrics_prefix: args.metrics_prefix.clone(), + lb_config_path: config + .request_proxy + .load_balancer + .as_ref() + .map(|load_balancer| load_balancer.config_path.to_string_lossy().into_owned()), + metrics_prefix: config.observability.metrics.prefix.clone(), forwarding: None, authenticator: Arc::new(OpenAuthenticator), - }) + } } pub(super) fn make_discovery_with_resolver_and_addresses( - args: &Args, - advertise_addr: SocketAddr, - http_listen_addr: SocketAddr, + config: &StargateConfig, + advertise_addr: std::net::SocketAddr, + http_listen_addr: std::net::SocketAddr, make_resolver: impl FnOnce(Duration) -> Result, ) -> Result { - validate_discovery_args(args)?; - - if args.disable_dns_discovery { + let Some(pods) = &config.stargate_discovery.kubernetes_pods else { return Ok(( Box::new(SelfOnlyDiscovery::new( advertise_addr, - args.stargate_id.clone(), + config.stargate_identity.id.clone(), http_listen_addr.port(), )), None, )); - } - - let resolver = make_resolver(Duration::from_millis(args.dns_resolver_ttl_ms))?; - if let (Some(pod_name), Some(pod_namespace)) = (&args.pod_name, &args.pod_namespace) { - let template = args - .advertised_hostname_template - .clone() - .unwrap_or_else(|| "{pod_name}.stargate.external".to_string()); - let forwarding = args.enable_dev_peer_forwarding.then(|| { - tracing::warn!( - development_only = true, - stargate_id = args.stargate_id.as_str(), - "development-only peer forwarding is enabled; it must not run in production" - ); - Arc::new(HeadlessDnsResolver { - self_pod_name: pod_name.clone(), - advertised_hostname_template: template.clone(), - namespace: pod_namespace.clone(), - headless_dns_suffix: args.stargate_discovery_dns_name.clone(), - }) as Arc - }); - return Ok(( - Box::new(HeadlessDnsDiscovery::new(HeadlessDnsDiscoveryConfig { - self_pod_name: pod_name.clone(), - pod_namespace: pod_namespace.clone(), - advertised_hostname_template: template, - discovery_dns_name: args.stargate_discovery_dns_name.clone(), - resolver, - grpc_port: advertise_addr.port(), - })), - forwarding, - )); - } - + }; + let identity = config + .stargate_identity + .kubernetes + .as_ref() + .context("stargate_discovery.kubernetes_pods requires stargate_identity.kubernetes")?; + let resolver = make_resolver(pods.resolver_ttl)?; + let forwarding = pods.development_peer_forwarding.as_ref().map(|_| { + tracing::warn!( + development_only = true, + stargate_id = config.stargate_identity.id.as_str(), + "development-only peer forwarding is enabled; it must not run in production" + ); + Arc::new(HeadlessDnsResolver { + self_pod_name: identity.pod_name.clone(), + advertised_hostname_template: config + .stargate_identity + .advertised_hostname_template + .clone(), + namespace: identity.namespace.clone(), + headless_dns_suffix: pods.headless_service_dns_name.clone(), + }) as Arc + }); Ok(( - Box::new(DnsDiscovery::new( - advertise_addr, - args.stargate_id.clone(), - args.stargate_discovery_dns_name.clone(), + Box::new(KubernetesPodDiscovery::new(KubernetesPodDiscoveryConfig { + self_pod_name: identity.pod_name.clone(), + pod_namespace: identity.namespace.clone(), + advertised_hostname_template: config + .stargate_identity + .advertised_hostname_template + .clone(), + discovery_dns_name: pods.headless_service_dns_name.clone(), resolver, - http_listen_addr.port(), - )), - None, + grpc_port: advertise_addr.port(), + })), + forwarding, )) } -pub(super) fn validate_discovery_args(args: &Args) -> Result<()> { - ensure!( - args.allow_insecure_remote_watch_http - || !args - .remote_stargate_url - .iter() - .any(|url| url.starts_with("http://")), - "http:// remote Watch URLs require --allow-insecure-remote-watch-http" - ); - ensure!( - !(args.disable_dns_discovery && args.enable_dev_peer_forwarding), - "--enable-dev-peer-forwarding cannot be combined with --disable-dns-discovery" - ); - ensure!( - !args.enable_dev_peer_forwarding - || (args.pod_name.is_some() && args.pod_namespace.is_some()), - "--enable-dev-peer-forwarding requires both --pod-name and --pod-namespace" - ); - Ok(()) -} - -pub(super) fn proxy_retry_config_from_args(args: &Args) -> Result { - let header = args.proxy_retry_budget_header.trim(); +pub(super) fn proxy_retry_config_from_config(config: &StargateConfig) -> Result { + let retry = &config.request_proxy.retry; + let header = retry.request_budget_header.trim(); let request_retry_budget_ms_header = (!header.is_empty()) .then(|| { http::HeaderName::from_bytes(header.as_bytes()) @@ -289,10 +246,10 @@ pub(super) fn proxy_retry_config_from_args(args: &Args) -> Result Result, +) -> Result> { + let Some(auth) = auth else { + return Ok(None); + }; + let token_provider = if let Some(oauth2) = &auth.oauth2 { + Some(stargate_auth::AuthTokenProvider::client_credentials( + &oauth2.provider_host, + oauth2.secrets_path.clone(), + WORKER_AUTH_SCOPE, + )) + } else { + auth.bearer_token + .as_ref() + .map(|token| stargate_auth::AuthTokenProvider::JsonFile { + path: token.secrets_path.clone(), + key: token.json_path.clone(), + }) + }; + Ok(Some((auth.endpoint.clone(), token_provider))) +} + +#[cfg(test)] +pub(super) async fn runtime_from_args(args: super::Args) -> Result { + runtime_from_config(super::config_from_legacy_args(args)?).await +} + +#[cfg(test)] +pub(super) fn proxy_transport_config_from_args(args: &super::Args) -> Result { + proxy_transport_config_from_config(&super::config_from_legacy_args(args.clone())?) +} + +#[cfg(test)] +pub(super) fn bind_reverse_tunnel_from_args( + args: &super::Args, +) -> Result> { + bind_reverse_tunnel_from_config(&super::config_from_legacy_args(args.clone())?) +} + +#[cfg(test)] +pub(super) fn runtime_config_from_args( + args: &super::Args, + proxy_transport: ProxyTransportConfig, +) -> Result { + Ok(runtime_config_from_config( + &super::config_from_legacy_args(args.clone())?, + proxy_transport, + )) +} + +#[cfg(test)] +pub(super) fn proxy_retry_config_from_args(args: &super::Args) -> Result { + proxy_retry_config_from_config(&super::config_from_legacy_args(args.clone())?) +} + +#[cfg(test)] +pub(super) fn validate_discovery_args(args: &super::Args) -> Result<()> { + super::config_from_legacy_args(args.clone()).map(|_| ()) +} + +#[cfg(test)] pub(super) fn worker_auth_startup_from_args( endpoint: Option, secrets_path: Option, @@ -320,29 +339,36 @@ pub(super) fn worker_auth_startup_from_args( let Some(endpoint) = endpoint else { return Ok(None); }; - let token_provider = if let Some(host) = oauth2_provider_host { - let path = secrets_path.ok_or_else(|| { - anyhow::anyhow!( - "OAUTH2_PROVIDER_HOST is set but SECRETS_PATH is not; client-credentials worker auth needs the secrets file with the id/secret" - ) - })?; - Some(stargate_auth::AuthTokenProvider::client_credentials( - &host, - path.into(), - WORKER_AUTH_SCOPE, - )) + let secrets_path = secrets_path.map(std::path::PathBuf::from); + let (bearer_token, oauth2) = if let Some(provider_host) = oauth2_provider_host { + ( + None, + Some(stargate::config::OAuth2Config { + provider_host, + secrets_path: secrets_path.context( + "OAUTH2_PROVIDER_HOST is set but SECRETS_PATH is not; client-credentials worker auth needs the secrets file with the id/secret", + )?, + }), + ) } else { - secrets_path.map(|path| stargate_auth::AuthTokenProvider::JsonFile { - path: path.into(), - key: secrets_json_path - .as_deref() - .unwrap_or("authToken") - .split('.') - .map(str::to_owned) - .collect(), - }) + ( + secrets_path.map(|secrets_path| stargate::config::BearerTokenConfig { + secrets_path, + json_path: secrets_json_path + .as_deref() + .unwrap_or("authToken") + .split('.') + .map(str::to_owned) + .collect(), + }), + None, + ) }; - Ok(Some((endpoint, token_provider))) + worker_auth_startup_from_config(Some(&WorkerAuthenticationConfig { + endpoint, + bearer_token, + oauth2, + })) } #[cfg(test)] diff --git a/src/libraries/rust/stargate/crates/stargate/src/runtime.rs b/src/libraries/rust/stargate/crates/stargate/src/runtime.rs index 5ca4f10bf..a8e289d75 100644 --- a/src/libraries/rust/stargate/crates/stargate/src/runtime.rs +++ b/src/libraries/rust/stargate/crates/stargate/src/runtime.rs @@ -62,14 +62,14 @@ pub struct StargateRuntimeConfig { pub metrics_listen_addr: Option, /// Discovery address before hostname rendering; outside Kubernetes this is usually `WatchStargates.stargates[*].advertise_addr`. pub advertise_addr: SocketAddr, - /// Peer-discovery DNS name; in Kubernetes this must be the headless Service publishing warming and ready peers. - pub stargate_discovery_dns_name: String, + /// Optional headless Service used to enumerate local Kubernetes Stargate pods. + pub kubernetes_pod_discovery_dns_name: Option, /// Remote-region recursive watch seeds; pylons register to returned Stargates, not these URLs. pub remote_watch_stargate_urls: Vec, /// Optional pylon TCP load-balancer address; per-pod `advertise_addr` remains the authority/SNI identity. pub grpc_pylon_dial_addr: Option, - /// Poll cadence for DNS-based peer discovery. - pub dns_poll_interval: Duration, + /// Poll cadence for local Kubernetes pod discovery. + pub kubernetes_pod_discovery_poll_interval: Duration, /// Maximum interval between unchanged `WatchStargates` snapshots. pub watch_heartbeat_interval: Duration, /// Minimum heartbeat-aware registration idle timeout; zero disables enforcement. @@ -331,11 +331,14 @@ impl StargateRuntime { let service = StargateService::new(StargateServiceConfig { stargate_id: self.config.stargate_id.clone(), advertise_addr: self.config.advertise_addr, - discovery_dns_name: self.config.stargate_discovery_dns_name.clone(), + kubernetes_pod_discovery_dns_name: self + .config + .kubernetes_pod_discovery_dns_name + .clone(), discovery: self.discovery, remote_watch_stargate_urls: self.config.remote_watch_stargate_urls.clone(), grpc_pylon_dial_addr: self.config.grpc_pylon_dial_addr.clone(), - discovery_poll_interval: self.config.dns_poll_interval, + discovery_poll_interval: self.config.kubernetes_pod_discovery_poll_interval, watch_heartbeat_interval: self.config.watch_heartbeat_interval, tasks: tasks.clone(), registration_update_idle_timeout: self.config.registration_update_idle_timeout, @@ -360,7 +363,10 @@ impl StargateRuntime { http_listen_addr: http_listen_addr.to_string(), metrics_listen_addr: metrics_listen_addr.map(|addr| addr.to_string()), advertise_addr: self.config.advertise_addr.to_string(), - stargate_discovery_dns_name: self.config.stargate_discovery_dns_name.clone(), + kubernetes_pod_discovery_dns_name: self + .config + .kubernetes_pod_discovery_dns_name + .clone(), tunnel_protocol: self.config.proxy_transport.quic.tunnel_protocol.to_string(), backend_connectivity, direct_quic_connections: self.config.proxy_transport.quic.direct_quic_connections, @@ -506,10 +512,10 @@ mod tests { readiness_warmup: DEFAULT_READINESS_WARMUP, metrics_listen_addr: None, advertise_addr: "127.0.0.1:0".parse().unwrap(), - stargate_discovery_dns_name: "localhost".to_string(), + kubernetes_pod_discovery_dns_name: None, remote_watch_stargate_urls: Vec::new(), grpc_pylon_dial_addr: None, - dns_poll_interval: Duration::from_secs(60), + kubernetes_pod_discovery_poll_interval: Duration::from_secs(60), watch_heartbeat_interval: Duration::from_secs(60), registration_update_idle_timeout: crate::control_plane::DEFAULT_REGISTRATION_UPDATE_IDLE_TIMEOUT, diff --git a/src/libraries/rust/stargate/crates/stargate/tests/common/mod.rs b/src/libraries/rust/stargate/crates/stargate/tests/common/mod.rs index 659f26cfd..8df192ec7 100644 --- a/src/libraries/rust/stargate/crates/stargate/tests/common/mod.rs +++ b/src/libraries/rust/stargate/crates/stargate/tests/common/mod.rs @@ -520,10 +520,10 @@ pub fn base_config( readiness_warmup: stargate::runtime::DEFAULT_READINESS_WARMUP, metrics_listen_addr: None, advertise_addr: grpc_addr, - stargate_discovery_dns_name: "localhost".to_string(), + kubernetes_pod_discovery_dns_name: None, remote_watch_stargate_urls: Vec::new(), grpc_pylon_dial_addr: None, - dns_poll_interval: Duration::from_secs(60), + kubernetes_pod_discovery_poll_interval: Duration::from_secs(60), watch_heartbeat_interval: Duration::from_secs(60), registration_update_idle_timeout: stargate::registration::DEFAULT_REGISTRATION_UPDATE_IDLE_TIMEOUT, @@ -743,7 +743,7 @@ pub fn make_stargate_runtime_with_watch_intervals( watch_heartbeat_interval: Duration, ) -> (SocketAddr, SocketAddr, StargateRuntime) { let mut config = base_ephemeral_config(id); - config.dns_poll_interval = discovery_poll_interval; + config.kubernetes_pod_discovery_poll_interval = discovery_poll_interval; config.watch_heartbeat_interval = watch_heartbeat_interval; build_test_runtime(id, config, TestDiscovery::SelfOnly, None).standard() } @@ -823,7 +823,7 @@ pub fn make_stargate_runtime_with_shared_discovery( peers: Arc>>, ) -> (SocketAddr, SocketAddr, StargateRuntime) { let mut config = base_ephemeral_config(id); - config.dns_poll_interval = Duration::from_secs(1); + config.kubernetes_pod_discovery_poll_interval = Duration::from_secs(1); build_test_runtime(id, config, TestDiscovery::Shared(peers), None).standard() } @@ -835,7 +835,7 @@ pub fn make_stargate_runtime_with_shared_discovery_and_remote_watch_urls( remote_watch_stargate_urls: Vec, ) -> (SocketAddr, SocketAddr, StargateRuntime) { let mut config = base_ephemeral_config(id); - config.dns_poll_interval = Duration::from_secs(1); + config.kubernetes_pod_discovery_poll_interval = Duration::from_secs(1); config.remote_watch_stargate_urls = remote_watch_stargate_urls; build_test_runtime(id, config, TestDiscovery::Shared(peers), None).standard() } @@ -848,7 +848,7 @@ pub fn make_stargate_runtime_with_shared_discovery_and_reverse( reverse_socket: Option, ) -> (SocketAddr, SocketAddr, StargateRuntime) { let mut config = base_ephemeral_config(id); - config.dns_poll_interval = Duration::from_secs(1); + config.kubernetes_pod_discovery_poll_interval = Duration::from_secs(1); let reverse_tunnel = reverse_tunnel_config(reverse_addr, reverse_socket); build_test_runtime( id, diff --git a/src/libraries/rust/stargate/crates/stargate/tests/suite/forwarding_integration.rs b/src/libraries/rust/stargate/crates/stargate/tests/suite/forwarding_integration.rs index 096cbf662..ff64d5f86 100644 --- a/src/libraries/rust/stargate/crates/stargate/tests/suite/forwarding_integration.rs +++ b/src/libraries/rust/stargate/crates/stargate/tests/suite/forwarding_integration.rs @@ -88,7 +88,7 @@ async fn two_stargates(reverse_tunnel: bool) -> TwoStargates { "127.0.0.1:0".parse().unwrap(), "127.0.0.1:0".parse().unwrap(), ); - config_a.dns_poll_interval = Duration::from_secs(1); + config_a.kubernetes_pod_discovery_poll_interval = Duration::from_secs(1); let reverse_tunnel_a = reverse_tunnel.then(|| localhost_reverse_tunnel_config("127.0.0.1:0".parse().unwrap())); let listeners_a = BoundStargateListeners::bind(&mut config_a).unwrap(); @@ -100,7 +100,7 @@ async fn two_stargates(reverse_tunnel: bool) -> TwoStargates { "127.0.0.1:0".parse().unwrap(), "127.0.0.1:0".parse().unwrap(), ); - config_b.dns_poll_interval = Duration::from_secs(1); + config_b.kubernetes_pod_discovery_poll_interval = Duration::from_secs(1); let reverse_tunnel_b = reverse_tunnel.then(|| localhost_reverse_tunnel_config("127.0.0.1:0".parse().unwrap())); let listeners_b = BoundStargateListeners::bind(&mut config_b).unwrap(); diff --git a/src/libraries/rust/stargate/crates/stargate/tests/suite/grpc_forwarding.rs b/src/libraries/rust/stargate/crates/stargate/tests/suite/grpc_forwarding.rs index 53a88a2d0..0b5a23b89 100644 --- a/src/libraries/rust/stargate/crates/stargate/tests/suite/grpc_forwarding.rs +++ b/src/libraries/rust/stargate/crates/stargate/tests/suite/grpc_forwarding.rs @@ -241,7 +241,7 @@ async fn start_two_stargates_with_registration_idle_timeout( let any_addr = "127.0.0.1:0".parse().unwrap(); let mut config = base_config(name, any_addr, any_addr); config.model_discovery_listen_addr = any_addr; - config.dns_poll_interval = Duration::from_secs(1); + config.kubernetes_pod_discovery_poll_interval = Duration::from_secs(1); config.registration_update_idle_timeout = registration_update_idle_timeout; let listeners = BoundStargateListeners::bind(&mut config).unwrap(); (config, listeners) diff --git a/src/libraries/rust/stargate/crates/stargate/tests/suite/lifecycle.rs b/src/libraries/rust/stargate/crates/stargate/tests/suite/lifecycle.rs index d685908a2..7a642e064 100644 --- a/src/libraries/rust/stargate/crates/stargate/tests/suite/lifecycle.rs +++ b/src/libraries/rust/stargate/crates/stargate/tests/suite/lifecycle.rs @@ -1178,7 +1178,7 @@ fn make_lifecycle_node( let (http_addr, http_listener) = bind_ephemeral(); let mut config = base_config(id, grpc_addr, http_addr); config.model_discovery_listen_addr = model_discovery_addr; - config.dns_poll_interval = Duration::from_secs(1); + config.kubernetes_pod_discovery_poll_interval = Duration::from_secs(1); config.proxy_transport.quic.tunnel_protocol = tunnel_protocol; if let Some(authenticator) = authenticator { config.authenticator = authenticator; diff --git a/src/libraries/rust/stargate/crates/stargate/tests/suite/quic_forwarding.rs b/src/libraries/rust/stargate/crates/stargate/tests/suite/quic_forwarding.rs index 1656f6d65..ca7c65e53 100644 --- a/src/libraries/rust/stargate/crates/stargate/tests/suite/quic_forwarding.rs +++ b/src/libraries/rust/stargate/crates/stargate/tests/suite/quic_forwarding.rs @@ -119,7 +119,7 @@ async fn start_two_stargates_with_quic_tls( "127.0.0.1:0".parse().unwrap(), "127.0.0.1:0".parse().unwrap(), ); - config_a.dns_poll_interval = Duration::from_secs(1); + config_a.kubernetes_pod_discovery_poll_interval = Duration::from_secs(1); let reverse_tunnel_a = localhost_reverse_tunnel_config("127.0.0.1:0".parse().unwrap()); // Exercise both secure and insecure QUIC relay modes from the same topology helper. config_a.proxy_transport.quic.tls_cert_pem = tls_cert_pem.clone(); @@ -136,7 +136,7 @@ async fn start_two_stargates_with_quic_tls( "127.0.0.1:0".parse().unwrap(), "127.0.0.1:0".parse().unwrap(), ); - config_b.dns_poll_interval = Duration::from_secs(1); + config_b.kubernetes_pod_discovery_poll_interval = Duration::from_secs(1); let reverse_tunnel_b = localhost_reverse_tunnel_config("127.0.0.1:0".parse().unwrap()); // Exercise both secure and insecure QUIC relay modes from the same topology helper. config_b.proxy_transport.quic.tls_cert_pem = tls_cert_pem; @@ -599,7 +599,7 @@ async fn relayed_tunnel_peer_unreachable() { "127.0.0.1:0".parse().unwrap(), "127.0.0.1:0".parse().unwrap(), ); - config_a.dns_poll_interval = Duration::from_secs(1); + config_a.kubernetes_pod_discovery_poll_interval = Duration::from_secs(1); let reverse_tunnel_a = localhost_reverse_tunnel_config("127.0.0.1:0".parse().unwrap()); let listeners_a = BoundStargateListeners::bind(&mut config_a).unwrap(); let grpc_a = config_a.grpc_listen_addr;