From a8c2673ce841234628ea9d15f87ed716824e7b40 Mon Sep 17 00:00:00 2001 From: nhtyy Date: Tue, 3 Dec 2024 16:35:15 -0800 Subject: [PATCH 1/6] chore(docs): migrate to docusaurus --- book/.gitignore | 20 + book/README.md | 41 + book/SUMMARY.md | 77 - book/create-markdown-templates.sh | 45 + .../developers/building-circuit-artifacts.md | 0 book/{ => docs}/developers/common-issues.md | 0 .../developers/rv32im-specification.md | 0 book/{ => docs}/developers/usage-in-ci.md | 0 .../generating-proofs/advanced.mdx} | 17 +- .../generating-proofs/basics.mdx} | 10 +- .../hardware-acceleration.md | 0 .../hardware-acceleration/avx.md | 0 .../hardware-acceleration/cuda.md | 0 .../generating-proofs/proof-types.md | 8 +- .../generating-proofs/prover-network.md | 0 .../prover-network/explorer.png | Bin .../prover-network/key-setup.md | 0 .../generating-proofs/prover-network/key.png | Bin .../generating-proofs/prover-network/usage.md | 4 +- .../prover-network/versions.md | 0 .../recommended-workflow.mdx} | 10 +- book/{ => docs}/generating-proofs/setup.md | 4 +- .../generating-proofs/sp1-sdk-faq.md | 2 +- .../getting-started/hardware-requirements.md | 0 book/{ => docs}/getting-started/install.md | 0 .../getting-started/project-template.md | 0 book/{ => docs}/getting-started/quickstart.md | 2 +- book/{ => docs}/introduction.md | 2 +- .../contract-addresses.md | 0 .../onchain-verification/getting-started.mdx} | 7 +- .../onchain-verification/solidity-sdk.md | 0 book/{ => docs}/sp1.png | Bin book/{ => docs}/theme/head.hbs | 0 .../verification/off-chain-verification.md | 13 +- .../onchain/contract-addresses.md | 0 .../verification/onchain/getting-started.mdx} | 6 +- .../verification/onchain/solidity-sdk.md | 0 book/{ => docs}/what-is-a-zkvm.md | 0 book/{ => docs}/why-use-sp1.md | 0 .../writing-programs/basics.mdx} | 10 +- .../writing-programs/compiling.mdx} | 8 +- .../writing-programs/cycle-tracking.mdx} | 8 +- .../writing-programs/inputs-and-outputs.mdx} | 16 +- .../writing-programs/patched-crates.md | 2 +- .../writing-programs/precompiles.mdx} | 7 +- .../writing-programs/proof-aggregation.md | 4 +- book/{ => docs}/writing-programs/setup.md | 6 +- book/docusaurus.config.ts | 113 + book/package-lock.json | 18242 ++++++++++++++++ book/package.json | 48 + book/sidebars.ts | 108 + book/src/css/custom.css | 30 + book/src/pages/index.tsx | 11 + book/static/.nojekyll | 0 book/static/crates_zkvm_lib_src_lib.rs.mdx | 133 + ...s_cycle-tracking_program_bin_normal.rs.mdx | 34 + ...examples_fibonacci_program_src_main.rs.mdx | 39 + ...les_fibonacci_script_bin_compressed.rs.mdx | 35 + ...amples_fibonacci_script_bin_execute.rs.mdx | 37 + ..._fibonacci_script_bin_groth16_bn254.rs.mdx | 42 + .../examples_fibonacci_script_build.rs.mdx | 5 + .../examples_fibonacci_script_src_main.rs.mdx | 56 + .../examples_groth16_program_src_main.rs.mdx | 30 + .../examples_groth16_script_src_main.rs.mdx | 57 + .../examples_io_program_src_main.rs.mdx | 25 + book/static/img/favicon.ico | Bin 0 -> 4286 bytes book/tsconfig.json | 8 + examples/elf/riscv32im-succinct-zkvm-elf | Bin 145784 -> 104896 bytes 68 files changed, 19232 insertions(+), 150 deletions(-) create mode 100644 book/.gitignore create mode 100644 book/README.md delete mode 100644 book/SUMMARY.md create mode 100755 book/create-markdown-templates.sh rename book/{ => docs}/developers/building-circuit-artifacts.md (100%) rename book/{ => docs}/developers/common-issues.md (100%) rename book/{ => docs}/developers/rv32im-specification.md (100%) rename book/{ => docs}/developers/usage-in-ci.md (100%) rename book/{generating-proofs/advanced.md => docs/generating-proofs/advanced.mdx} (91%) rename book/{generating-proofs/basics.md => docs/generating-proofs/basics.mdx} (86%) rename book/{ => docs}/generating-proofs/hardware-acceleration.md (100%) rename book/{ => docs}/generating-proofs/hardware-acceleration/avx.md (100%) rename book/{ => docs}/generating-proofs/hardware-acceleration/cuda.md (100%) rename book/{ => docs}/generating-proofs/proof-types.md (96%) rename book/{ => docs}/generating-proofs/prover-network.md (100%) rename book/{ => docs}/generating-proofs/prover-network/explorer.png (100%) rename book/{ => docs}/generating-proofs/prover-network/key-setup.md (100%) rename book/{ => docs}/generating-proofs/prover-network/key.png (100%) rename book/{ => docs}/generating-proofs/prover-network/usage.md (98%) rename book/{ => docs}/generating-proofs/prover-network/versions.md (100%) rename book/{generating-proofs/recommended-workflow.md => docs/generating-proofs/recommended-workflow.mdx} (89%) rename book/{ => docs}/generating-proofs/setup.md (95%) rename book/{ => docs}/generating-proofs/sp1-sdk-faq.md (94%) rename book/{ => docs}/getting-started/hardware-requirements.md (100%) rename book/{ => docs}/getting-started/install.md (100%) rename book/{ => docs}/getting-started/project-template.md (100%) rename book/{ => docs}/getting-started/quickstart.md (98%) rename book/{ => docs}/introduction.md (99%) rename book/{ => docs}/onchain-verification/contract-addresses.md (100%) rename book/{onchain-verification/getting-started.md => docs/onchain-verification/getting-started.mdx} (95%) rename book/{ => docs}/onchain-verification/solidity-sdk.md (100%) rename book/{ => docs}/sp1.png (100%) rename book/{ => docs}/theme/head.hbs (100%) rename book/{ => docs}/verification/off-chain-verification.md (88%) rename book/{ => docs}/verification/onchain/contract-addresses.md (100%) rename book/{verification/onchain/getting-started.md => docs/verification/onchain/getting-started.mdx} (95%) rename book/{ => docs}/verification/onchain/solidity-sdk.md (100%) rename book/{ => docs}/what-is-a-zkvm.md (100%) rename book/{ => docs}/why-use-sp1.md (100%) rename book/{writing-programs/basics.md => docs/writing-programs/basics.mdx} (63%) rename book/{writing-programs/compiling.md => docs/writing-programs/compiling.mdx} (98%) rename book/{writing-programs/cycle-tracking.md => docs/writing-programs/cycle-tracking.mdx} (98%) rename book/{writing-programs/inputs-and-outputs.md => docs/writing-programs/inputs-and-outputs.mdx} (91%) rename book/{ => docs}/writing-programs/patched-crates.md (98%) rename book/{writing-programs/precompiles.md => docs/writing-programs/precompiles.mdx} (91%) rename book/{ => docs}/writing-programs/proof-aggregation.md (98%) rename book/{ => docs}/writing-programs/setup.md (95%) create mode 100644 book/docusaurus.config.ts create mode 100644 book/package-lock.json create mode 100644 book/package.json create mode 100644 book/sidebars.ts create mode 100644 book/src/css/custom.css create mode 100644 book/src/pages/index.tsx create mode 100644 book/static/.nojekyll create mode 100644 book/static/crates_zkvm_lib_src_lib.rs.mdx create mode 100644 book/static/examples_cycle-tracking_program_bin_normal.rs.mdx create mode 100644 book/static/examples_fibonacci_program_src_main.rs.mdx create mode 100644 book/static/examples_fibonacci_script_bin_compressed.rs.mdx create mode 100644 book/static/examples_fibonacci_script_bin_execute.rs.mdx create mode 100644 book/static/examples_fibonacci_script_bin_groth16_bn254.rs.mdx create mode 100644 book/static/examples_fibonacci_script_build.rs.mdx create mode 100644 book/static/examples_fibonacci_script_src_main.rs.mdx create mode 100644 book/static/examples_groth16_program_src_main.rs.mdx create mode 100644 book/static/examples_groth16_script_src_main.rs.mdx create mode 100644 book/static/examples_io_program_src_main.rs.mdx create mode 100644 book/static/img/favicon.ico create mode 100644 book/tsconfig.json diff --git a/book/.gitignore b/book/.gitignore new file mode 100644 index 0000000000..44e68351dd --- /dev/null +++ b/book/.gitignore @@ -0,0 +1,20 @@ +# Dependencies +node_modules + +# Production +/build + +# Generated files +.docusaurus +.cache-loader + +# Misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/book/README.md b/book/README.md new file mode 100644 index 0000000000..0c6c2c27be --- /dev/null +++ b/book/README.md @@ -0,0 +1,41 @@ +# Website + +This website is built using [Docusaurus](https://docusaurus.io/), a modern static website generator. + +### Installation + +``` +$ yarn +``` + +### Local Development + +``` +$ yarn start +``` + +This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. + +### Build + +``` +$ yarn build +``` + +This command generates static content into the `build` directory and can be served using any static contents hosting service. + +### Deployment + +Using SSH: + +``` +$ USE_SSH=true yarn deploy +``` + +Not using SSH: + +``` +$ GIT_USER= yarn deploy +``` + +If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/book/SUMMARY.md b/book/SUMMARY.md deleted file mode 100644 index 55ec23f628..0000000000 --- a/book/SUMMARY.md +++ /dev/null @@ -1,77 +0,0 @@ -# Summary - -[Introduction](./introduction.md) - -[Why use SP1?](./why-use-sp1.md) - -[What is a zkVM?](./what-is-a-zkvm.md) - -# Getting Started - -- [Install](./getting-started/install.md) - -- [Quickstart](./getting-started/quickstart.md) - -- [Project Template](./getting-started/project-template.md) - -- [Proof Generation Requirements](./getting-started/hardware-requirements.md) - -# Writing Programs - -- [Setup](./writing-programs/setup.md) - -- [Basics](./writing-programs/basics.md) - -- [Compiling Programs](./writing-programs/compiling.md) - -- [Inputs & Outputs](./writing-programs/inputs-and-outputs.md) - -- [Patched Crates](./writing-programs/patched-crates.md) - -- [Precompiles](./writing-programs/precompiles.md) - -- [Cycle Tracking](./writing-programs/cycle-tracking.md) - -- [Proof Aggregation](./writing-programs/proof-aggregation.md) - -# Generating Proofs - -- [Setup](./generating-proofs/setup.md) - -- [Basics](./generating-proofs/basics.md) - -- [Proof Types](./generating-proofs/proof-types.md) - -- [Recommended Workflow](./generating-proofs/recommended-workflow.md) - -- [Prover Network Beta](./generating-proofs/prover-network.md) - - - [Key Setup](./generating-proofs/prover-network/key-setup.md) - - [Usage](./generating-proofs/prover-network/usage.md) - - [Supported Versions](./generating-proofs/prover-network/versions.md) - -- [Hardware Acceleration](./generating-proofs/hardware-acceleration.md) - - - [AVX](./generating-proofs/hardware-acceleration/avx.md) - - [CUDA](./generating-proofs/hardware-acceleration/cuda.md) - -- [FAQ](./generating-proofs/sp1-sdk-faq.md) - -# Verification - -- [On-chain Verification](./verification/onchain/getting-started.md) - - - [Solidity Verifier](./verification/onchain/solidity-sdk.md) - - [Contract Addresses](./verification/onchain/contract-addresses.md) - -- [Off-chain Verification](./verification/off-chain-verification.md) - -# Developers - -- [Common Issues](./developers/common-issues.md) - -- [Usage in CI](./developers/usage-in-ci.md) - -- [RV32IM Specification](./developers/rv32im-specification.md) - -- [Building Circuit Artifacts](./developers/building-circuit-artifacts.md) diff --git a/book/create-markdown-templates.sh b/book/create-markdown-templates.sh new file mode 100755 index 0000000000..9aaae0de9f --- /dev/null +++ b/book/create-markdown-templates.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +# Define an array of file paths +paths=( + "../examples/fibonacci/script/bin/execute.rs" + "../examples/fibonacci/script/src/main.rs" + "../examples/fibonacci/script/bin/groth16_bn254.rs" + "../examples/fibonacci/script/build.rs" + "../examples/fibonacci/script/src/main.rs" + "../examples/groth16/program/src/main.rs" + "../examples/groth16/script/src/main.rs" + "../examples/io/program/src/main.rs" + "../examples/cycle-tracking/program/bin/normal.rs" + "../crates/zkvm/lib/src/lib.rs" + "../examples/fibonacci/script/bin/compressed.rs" + "../examples/fibonacci/program/src/main.rs" +) + +# Ensure the ./static directory exists +mkdir -p ./static + +# Loop over the paths and process each file +for file in "${paths[@]}"; do + if [[ -f "$file" ]]; then + # Get the full path and strip everything before 'sp1/' + stripped_path=$(readlink -f "$file" | sed -e 's|.*sp1/||') + + # Replace slashes with underscores for the target file name + target_name=$(echo "$stripped_path" | tr '/' '_') + + # Define the target markdown file path + target="./static/${target_name}.mdx" + + # Write the content into the markdown file + { + echo "\`\`\`rust" + cat "$file" + echo "\`\`\`" + } > "$target" + + echo "Processed $file -> $target" + else + echo "File not found: $file" + fi +done diff --git a/book/developers/building-circuit-artifacts.md b/book/docs/developers/building-circuit-artifacts.md similarity index 100% rename from book/developers/building-circuit-artifacts.md rename to book/docs/developers/building-circuit-artifacts.md diff --git a/book/developers/common-issues.md b/book/docs/developers/common-issues.md similarity index 100% rename from book/developers/common-issues.md rename to book/docs/developers/common-issues.md diff --git a/book/developers/rv32im-specification.md b/book/docs/developers/rv32im-specification.md similarity index 100% rename from book/developers/rv32im-specification.md rename to book/docs/developers/rv32im-specification.md diff --git a/book/developers/usage-in-ci.md b/book/docs/developers/usage-in-ci.md similarity index 100% rename from book/developers/usage-in-ci.md rename to book/docs/developers/usage-in-ci.md diff --git a/book/generating-proofs/advanced.md b/book/docs/generating-proofs/advanced.mdx similarity index 91% rename from book/generating-proofs/advanced.md rename to book/docs/generating-proofs/advanced.mdx index 4b1f30c544..cd4848c48d 100644 --- a/book/generating-proofs/advanced.md +++ b/book/docs/generating-proofs/advanced.mdx @@ -1,3 +1,6 @@ +import Compressed from "../../static/examples_fibonacci_script_bin_compressed.rs.mdx"; +import Execute from "../../static/examples_fibonacci_script_bin_execute.rs.mdx"; + # Advanced Usage ## Execution Only @@ -5,9 +8,7 @@ We recommend that during the development of large programs (> 1 million cycles) you do not generate proofs each time. Instead, you should have your script only execute the program with the RISC-V runtime and read `public_values`. Here is an example: -```rust,noplayground -{{#include ../../examples/fibonacci/script/bin/execute.rs}} -``` + If the execution of your program succeeds, then proof generation should succeed as well! (Unless there is a bug in our zkVM implementation.) @@ -15,9 +16,7 @@ If the execution of your program succeeds, then proof generation should succeed With the `ProverClient`, the default `prove` function generates a proof that is succinct, but can have size that scales with the number of cycles of the program. To generate a compressed proof of constant size, you can use the `prove_compressed` function instead. This will use STARK recursion to generate a proof that is constant size (around 7Kb), but will be slower than just calling `prove`, as it will use recursion to combine the core SP1 proof into a single constant-sized proof. -```rust,noplayground -{{#include ../../examples/fibonacci/script/bin/compressed.rs}} -``` + You can run the above script with `RUST_LOG=info cargo run --bin compressed --release` from `examples/fibonacci/script`. @@ -27,7 +26,7 @@ You can use `utils::setup_logger()` to enable logging information respectively. **Logging:** -```rust,noplayground +```rust utils::setup_logger(); ``` @@ -55,7 +54,7 @@ sp1-sdk = { version = "2.0.0", features = ["neon"] } For maximal performance, you should run proof generation with the following command and vary your `shard_size` depending on your program's number of cycles. -```rust,noplayground +```rust SHARD_SIZE=4194304 RUST_LOG=info RUSTFLAGS='-C target-cpu=native' cargo run --release ``` @@ -64,6 +63,6 @@ SHARD_SIZE=4194304 RUST_LOG=info RUSTFLAGS='-C target-cpu=native' cargo run --re To reduce memory usage, set the `SHARD_BATCH_SIZE` environment variable depending on how much RAM your machine has. A higher number will use more memory, but will be faster. -```rust,noplayground +```rust SHARD_BATCH_SIZE=1 SHARD_SIZE=2097152 RUST_LOG=info RUSTFLAGS='-C target-cpu=native' cargo run --release ``` diff --git a/book/generating-proofs/basics.md b/book/docs/generating-proofs/basics.mdx similarity index 86% rename from book/generating-proofs/basics.md rename to book/docs/generating-proofs/basics.mdx index 85273d96ba..d56dae43d8 100644 --- a/book/generating-proofs/basics.md +++ b/book/docs/generating-proofs/basics.mdx @@ -1,4 +1,6 @@ -# Generating Proofs: Basics +import Example from "../../static/examples_fibonacci_script_src_main.rs.mdx"; + +# Basics All the methods you'll need for generating proofs are included in the `sp1_sdk` crate. Most importantly, you'll need to use the `ProverClient` to setup a proving key and verifying key for your program and then use the `execute`, `prove` and `verify` methods to execute your program, and generate and verify proofs. @@ -6,9 +8,7 @@ To make this more concrete, let's walk through a simple example of generating a ## Example: Fibonacci -```rust,noplayground -{{#include ../../examples/fibonacci/script/src/main.rs}} -``` + You can run the above script in the `script` directory with `RUST_LOG=info cargo run --release`. Note that running the above script will generate a proof locally. @@ -16,4 +16,4 @@ You can run the above script in the `script` directory with `RUST_LOG=info cargo WARNING: Local proving often is much slower than the prover network and for certain proof types (e.g. Groth16, PLONK) require a significant amount of RAM and will likely not work on a laptop. -We recommend using the [prover network](./prover-network.md) to generate proofs. Read more about the [recommended workflow](./recommended-workflow.md) for developing with SP1. +We recommend using the [prover network](./prover-network.md) to generate proofs. Read more about the [recommended workflow](./recommended-workflow) for developing with SP1. diff --git a/book/generating-proofs/hardware-acceleration.md b/book/docs/generating-proofs/hardware-acceleration.md similarity index 100% rename from book/generating-proofs/hardware-acceleration.md rename to book/docs/generating-proofs/hardware-acceleration.md diff --git a/book/generating-proofs/hardware-acceleration/avx.md b/book/docs/generating-proofs/hardware-acceleration/avx.md similarity index 100% rename from book/generating-proofs/hardware-acceleration/avx.md rename to book/docs/generating-proofs/hardware-acceleration/avx.md diff --git a/book/generating-proofs/hardware-acceleration/cuda.md b/book/docs/generating-proofs/hardware-acceleration/cuda.md similarity index 100% rename from book/generating-proofs/hardware-acceleration/cuda.md rename to book/docs/generating-proofs/hardware-acceleration/cuda.md diff --git a/book/generating-proofs/proof-types.md b/book/docs/generating-proofs/proof-types.md similarity index 96% rename from book/generating-proofs/proof-types.md rename to book/docs/generating-proofs/proof-types.md index 7ebd300acf..c6d713e754 100644 --- a/book/generating-proofs/proof-types.md +++ b/book/docs/generating-proofs/proof-types.md @@ -11,7 +11,7 @@ For a full list of options, see the following [docs](https://docs.rs/sp1-sdk/1.2 The default prover mode generates a list of STARK proofs that in aggregate have size proportional to the size of the execution. Use this in settings where you don't care about **verification cost / proof size**. -```rust,noplayground +```rust let client = ProverClient::new(); client.prove(&pk, stdin).run().unwrap(); ``` @@ -21,7 +21,7 @@ client.prove(&pk, stdin).run().unwrap(); The compressed prover mode generates STARK proofs that have constant size. Use this in settings where you care about **verification cost / proof size**, but not onchain verification. Compressed proofs are also useful because they can be cheaply recursively verified within SP1 itself (see the [proof aggregation](../writing-programs/proof-aggregation.md) section). -```rust,noplayground +```rust let client = ProverClient::new(); client.prove(&pk, stdin).compressed().run().unwrap(); ``` @@ -32,7 +32,7 @@ The Groth16 prover mode generates a SNARK proof that is ~260 bytes large and can The trusted setup for the Groth16 circuit keys uses the [Aztec Ignition ceremony](https://github.com/AztecProtocol/ignition-verification) + entropy contributions from members of the Succinct team. -```rust,noplayground +```rust let client = ProverClient::new(); client.prove(&pk, stdin).groth16().run().unwrap(); ``` @@ -43,7 +43,7 @@ The PLONK prover mode generates a SNARK proof that is ~868 bytes large and can a PLONK does not require a trusted setup. -```rust,noplayground +```rust let client = ProverClient::new(); client.prove(&pk, stdin).plonk().run().unwrap(); ``` diff --git a/book/generating-proofs/prover-network.md b/book/docs/generating-proofs/prover-network.md similarity index 100% rename from book/generating-proofs/prover-network.md rename to book/docs/generating-proofs/prover-network.md diff --git a/book/generating-proofs/prover-network/explorer.png b/book/docs/generating-proofs/prover-network/explorer.png similarity index 100% rename from book/generating-proofs/prover-network/explorer.png rename to book/docs/generating-proofs/prover-network/explorer.png diff --git a/book/generating-proofs/prover-network/key-setup.md b/book/docs/generating-proofs/prover-network/key-setup.md similarity index 100% rename from book/generating-proofs/prover-network/key-setup.md rename to book/docs/generating-proofs/prover-network/key-setup.md diff --git a/book/generating-proofs/prover-network/key.png b/book/docs/generating-proofs/prover-network/key.png similarity index 100% rename from book/generating-proofs/prover-network/key.png rename to book/docs/generating-proofs/prover-network/key.png diff --git a/book/generating-proofs/prover-network/usage.md b/book/docs/generating-proofs/prover-network/usage.md similarity index 98% rename from book/generating-proofs/prover-network/usage.md rename to book/docs/generating-proofs/prover-network/usage.md index b08497868d..3c87b9b38a 100644 --- a/book/generating-proofs/prover-network/usage.md +++ b/book/docs/generating-proofs/prover-network/usage.md @@ -6,7 +6,7 @@ To use the prover network to generate a proof, you can run your script that uses `sp1_sdk::ProverClient` as you would normally but with additional environment variables set: -```rust,noplayground +```rust // Generate the proof for the given program. let client = ProverClient::new(); let (pk, vk) = client.setup(ELF); @@ -40,7 +40,7 @@ To skip the simulation step and directly submit the program for proof generation By using the `sp1_sdk::NetworkProver` struct directly, you can call async functions directly and have programmatic access to the proof ID and download proofs by ID. -```rust,noplayground +```rust impl NetworkProver { /// Creates a new [NetworkProver] with the private key set in `SP1_PRIVATE_KEY`. pub fn new() -> Self; diff --git a/book/generating-proofs/prover-network/versions.md b/book/docs/generating-proofs/prover-network/versions.md similarity index 100% rename from book/generating-proofs/prover-network/versions.md rename to book/docs/generating-proofs/prover-network/versions.md diff --git a/book/generating-proofs/recommended-workflow.md b/book/docs/generating-proofs/recommended-workflow.mdx similarity index 89% rename from book/generating-proofs/recommended-workflow.md rename to book/docs/generating-proofs/recommended-workflow.mdx index 9f9acfa034..4e9c2ae0b3 100644 --- a/book/generating-proofs/recommended-workflow.md +++ b/book/docs/generating-proofs/recommended-workflow.mdx @@ -1,3 +1,5 @@ +import Example from "../../static/examples_fibonacci_script_bin_execute.rs.mdx"; + # Recommended Workflow for Developing with SP1 We recommend the following workflow for developing with SP1. @@ -6,9 +8,7 @@ We recommend the following workflow for developing with SP1. While iterating on your SP1 program, you should **only execute** the program with the RISC-V runtime. This will allow you to verify the correctness of your program and test the `SP1Stdin` as well as the `SP1PublicValues` that are returned, without having to generate a proof (which can be slow and/or expensive). If the execution of your program succeeds, then proof generation should succeed as well! -```rust,noplayground -{{#include ../../examples/fibonacci/script/bin/execute.rs}} -``` + Note that printing out the total number of executed cycles and the full execution report provides helpful insight into proof generation latency and cost either for local proving or when using the prover network. @@ -44,7 +44,7 @@ In SP1, there is a fixed overhead for proving that is independent of your progra - An average Ethereum block can be between 100-500M cycles (including merkle proof verification for storage and execution of transactions) with our `keccak` and `secp256k1` precompiles. - For a Tendermint light client, the average cycle count can be between 10M and 50M cycles (including our ed25519 precompiles). -- We consider programs with <2M cycles to be "small" and by default, the fixed overhead of proving will dominate the proof latency. If latency is incredibly important for your use-case, we can specialize the prover network for your program if you reach out to us. +- We consider programs with \<2M cycles to be "small" and by default, the fixed overhead of proving will dominate the proof latency. If latency is incredibly important for your use-case, we can specialize the prover network for your program if you reach out to us. Note that if you generate Groth16 or PLONK proofs on the prover network, you will encounter a fixed overhead for the STARK -> SNARK wrapping step. We're actively working on reducing this overhead in future releases. @@ -54,4 +54,4 @@ The prover network is currently in beta and has limited capacity. For high volum ### Generating proofs locally -If you want to generate proofs locally, you can use the `sp1_sdk` crate to generate proofs locally as outlined in the [Basics](./basics.md) section. By default, the `ProverClient` will generate proofs locally using your CPU. Check out the hardware requirements for locally proving [here](../getting-started/hardware-requirements.md#local-proving). +If you want to generate proofs locally, you can use the `sp1_sdk` crate to generate proofs locally as outlined in the [Basics](./basics) section. By default, the `ProverClient` will generate proofs locally using your CPU. Check out the hardware requirements for locally proving [here](../getting-started/hardware-requirements.md#local-proving). diff --git a/book/generating-proofs/setup.md b/book/docs/generating-proofs/setup.md similarity index 95% rename from book/generating-proofs/setup.md rename to book/docs/generating-proofs/setup.md index 88db15fb8e..6e9b5483c7 100644 --- a/book/generating-proofs/setup.md +++ b/book/docs/generating-proofs/setup.md @@ -1,4 +1,4 @@ -# Generating Proofs: Setup +# Setup In this section, we will teach you how to setup a self-contained crate which can generate proofs of programs that have been compiled with the SP1 toolchain inside the SP1 zkVM, using the `sp1-sdk` crate. @@ -24,7 +24,7 @@ cd script Inside this crate, add the `sp1-sdk` crate as a dependency. Your `Cargo.toml` should look like as follows: -```rust,noplayground +```rust [workspace] [package] version = "0.1.0" diff --git a/book/generating-proofs/sp1-sdk-faq.md b/book/docs/generating-proofs/sp1-sdk-faq.md similarity index 94% rename from book/generating-proofs/sp1-sdk-faq.md rename to book/docs/generating-proofs/sp1-sdk-faq.md index 76e62d81e4..ca2a0a0596 100644 --- a/book/generating-proofs/sp1-sdk-faq.md +++ b/book/docs/generating-proofs/sp1-sdk-faq.md @@ -4,7 +4,7 @@ You can use `sp1_sdk::utils::setup_logger()` to enable logging information respectively. You can set the logging level with the `RUST_LOG` environment variable. -```rust,noplayground +```rust sp1_sdk::utils::setup_logger(); ``` diff --git a/book/getting-started/hardware-requirements.md b/book/docs/getting-started/hardware-requirements.md similarity index 100% rename from book/getting-started/hardware-requirements.md rename to book/docs/getting-started/hardware-requirements.md diff --git a/book/getting-started/install.md b/book/docs/getting-started/install.md similarity index 100% rename from book/getting-started/install.md rename to book/docs/getting-started/install.md diff --git a/book/getting-started/project-template.md b/book/docs/getting-started/project-template.md similarity index 100% rename from book/getting-started/project-template.md rename to book/docs/getting-started/project-template.md diff --git a/book/getting-started/quickstart.md b/book/docs/getting-started/quickstart.md similarity index 98% rename from book/getting-started/quickstart.md rename to book/docs/getting-started/quickstart.md index 824ddbf857..0d7f46821e 100644 --- a/book/getting-started/quickstart.md +++ b/book/docs/getting-started/quickstart.md @@ -116,7 +116,7 @@ The program by default is quite small, so proof generation will only take a few ## Recommended Workflow -Please see the [Recommended Workflow](../generating-proofs/recommended-workflow.md) section for more details on how to develop your SP1 program and generate proofs. +Please see the [Recommended Workflow](../generating-proofs/recommended-workflow) section for more details on how to develop your SP1 program and generate proofs. We *strongly recommend* that developers who want to use SP1 for non-trivial programs generate proofs on the beta version of our [Prover Network](../generating-proofs/prover-network.md). The prover network generates SP1 proofs across multiple machines, reducing latency and also runs SP1 on optimized hardware instances that result in faster + cheaper proof generation times. diff --git a/book/introduction.md b/book/docs/introduction.md similarity index 99% rename from book/introduction.md rename to book/docs/introduction.md index 93daa38ab1..f3a645786c 100644 --- a/book/introduction.md +++ b/book/docs/introduction.md @@ -1,4 +1,4 @@ -# SP1 +# Introduction *Documentation for SP1 users and developers*. diff --git a/book/onchain-verification/contract-addresses.md b/book/docs/onchain-verification/contract-addresses.md similarity index 100% rename from book/onchain-verification/contract-addresses.md rename to book/docs/onchain-verification/contract-addresses.md diff --git a/book/onchain-verification/getting-started.md b/book/docs/onchain-verification/getting-started.mdx similarity index 95% rename from book/onchain-verification/getting-started.md rename to book/docs/onchain-verification/getting-started.mdx index 834a23dc18..3cbe73933a 100644 --- a/book/onchain-verification/getting-started.md +++ b/book/docs/onchain-verification/getting-started.mdx @@ -1,3 +1,6 @@ +import Example from "../../static/examples_fibonacci_script_bin_groth16_bn254.rs.mdx"; + + # Onchain Verification: Setup The best way to get started with verifying SP1 proofs on-chain is to refer to the [SP1 Project Template](https://github.com/succinctlabs/sp1-project-template/tree/main). @@ -18,9 +21,7 @@ By default, the proofs generated by SP1 are not verifiable onchain, as they are ### Example -```rust,noplayground -{{#include ../../examples/fibonacci/script/bin/groth16_bn254.rs}} -``` + You can run the above script with `RUST_LOG=info cargo run --bin groth16_bn254 --release` in `examples/fibonacci/script`. diff --git a/book/onchain-verification/solidity-sdk.md b/book/docs/onchain-verification/solidity-sdk.md similarity index 100% rename from book/onchain-verification/solidity-sdk.md rename to book/docs/onchain-verification/solidity-sdk.md diff --git a/book/sp1.png b/book/docs/sp1.png similarity index 100% rename from book/sp1.png rename to book/docs/sp1.png diff --git a/book/theme/head.hbs b/book/docs/theme/head.hbs similarity index 100% rename from book/theme/head.hbs rename to book/docs/theme/head.hbs diff --git a/book/verification/off-chain-verification.md b/book/docs/verification/off-chain-verification.md similarity index 88% rename from book/verification/off-chain-verification.md rename to book/docs/verification/off-chain-verification.md index 9250b6021a..abd9981469 100644 --- a/book/verification/off-chain-verification.md +++ b/book/docs/verification/off-chain-verification.md @@ -1,3 +1,6 @@ +import ProgramMain from "../../static/examples_groth16_program_src_main.rs.mdx"; +import ProgramScript from "../../static/examples_groth16_script_src_main.rs.mdx"; + # Offchain Verification ## Rust `no_std` Verification @@ -26,20 +29,16 @@ and [`PlonkVerifier::verify_proof`](https://docs.rs/sp1-verifier/latest/src/sp1_ keys correspond to the current SP1 version's official Groth16 and Plonk verifying keys, which are used for verifying proofs generated using docker or the prover network. -First, generate your groth16/plonk proof with the SP1 SDK. See [here](./onchain/getting-started.md#generating-sp1-proofs-for-onchain-verification) +First, generate your groth16/plonk proof with the SP1 SDK. See [here](./onchain/getting-started#generating-sp1-proofs-for-onchain-verification) for more information -- `sp1-verifier` and the solidity verifier expect inputs in the same format. Next, verify the proof with `sp1-verifier`. The following snippet is from the [Groth16 example program](https://github.com/succinctlabs/sp1/tree/dev/examples/groth16/), which verifies a Groth16 proof within SP1 using `sp1-verifier`. -```rust,noplayground -{{#include ../../examples/groth16/program/src/main.rs}} -``` + Here, the proof, public inputs, and vkey hash are read from stdin. See the following snippet to see how these values are generated. -```rust,noplayground -{{#include ../../examples/groth16/script/src/main.rs:12:34}} -``` + > Note that the SP1 SDK itself is *not* `no_std` compatible. diff --git a/book/verification/onchain/contract-addresses.md b/book/docs/verification/onchain/contract-addresses.md similarity index 100% rename from book/verification/onchain/contract-addresses.md rename to book/docs/verification/onchain/contract-addresses.md diff --git a/book/verification/onchain/getting-started.md b/book/docs/verification/onchain/getting-started.mdx similarity index 95% rename from book/verification/onchain/getting-started.md rename to book/docs/verification/onchain/getting-started.mdx index 834a23dc18..45e5e95d9f 100644 --- a/book/verification/onchain/getting-started.md +++ b/book/docs/verification/onchain/getting-started.mdx @@ -1,3 +1,5 @@ +import Example from "../../../static/examples_fibonacci_script_bin_groth16_bn254.rs.mdx"; + # Onchain Verification: Setup The best way to get started with verifying SP1 proofs on-chain is to refer to the [SP1 Project Template](https://github.com/succinctlabs/sp1-project-template/tree/main). @@ -18,9 +20,7 @@ By default, the proofs generated by SP1 are not verifiable onchain, as they are ### Example -```rust,noplayground -{{#include ../../examples/fibonacci/script/bin/groth16_bn254.rs}} -``` + You can run the above script with `RUST_LOG=info cargo run --bin groth16_bn254 --release` in `examples/fibonacci/script`. diff --git a/book/verification/onchain/solidity-sdk.md b/book/docs/verification/onchain/solidity-sdk.md similarity index 100% rename from book/verification/onchain/solidity-sdk.md rename to book/docs/verification/onchain/solidity-sdk.md diff --git a/book/what-is-a-zkvm.md b/book/docs/what-is-a-zkvm.md similarity index 100% rename from book/what-is-a-zkvm.md rename to book/docs/what-is-a-zkvm.md diff --git a/book/why-use-sp1.md b/book/docs/why-use-sp1.md similarity index 100% rename from book/why-use-sp1.md rename to book/docs/why-use-sp1.md diff --git a/book/writing-programs/basics.md b/book/docs/writing-programs/basics.mdx similarity index 63% rename from book/writing-programs/basics.md rename to book/docs/writing-programs/basics.mdx index 8d1d4e8272..8279b5759f 100644 --- a/book/writing-programs/basics.md +++ b/book/docs/writing-programs/basics.mdx @@ -1,4 +1,6 @@ -# Writing Programs: Basics +import Example from "../../static/examples_fibonacci_program_src_main.rs.mdx"; + +# Basics The easiest way to understand how to write programs for the SP1 zkVM is to look at some examples. @@ -6,10 +8,8 @@ The easiest way to understand how to write programs for the SP1 zkVM is to look This program is from the `examples` [directory](https://github.com/succinctlabs/sp1/tree/main/examples) in the SP1 repo which contains several example programs of varying complexity. -```rust,noplayground -{{#include ../../examples/fibonacci/program/src/main.rs}} -``` + As you can see, writing programs is as simple as writing normal Rust. -After you've written your program, you must compile it to an ELF that the SP1 zkVM can prove. To read more about compiling programs, refer to the section on [Compiling Programs](./compiling.md). To read more about how inputs and outputs work, refer to the section on [Inputs & Outputs](./inputs-and-outputs.md). \ No newline at end of file +After you've written your program, you must compile it to an ELF that the SP1 zkVM can prove. To read more about compiling programs, refer to the section on [Compiling Programs](./compiling). To read more about how inputs and outputs work, refer to the section on [Inputs & Outputs](./inputs-and-outputs). diff --git a/book/writing-programs/compiling.md b/book/docs/writing-programs/compiling.mdx similarity index 98% rename from book/writing-programs/compiling.md rename to book/docs/writing-programs/compiling.mdx index f1acd49b0d..6586d25539 100644 --- a/book/writing-programs/compiling.md +++ b/book/docs/writing-programs/compiling.mdx @@ -1,3 +1,5 @@ +import Example from "../../static/examples_fibonacci_script_build.rs.mdx"; + # Compiling Programs Once you have written an SP1 program, you must compile it to an ELF file that can be executed in the zkVM. The `cargo prove` CLI tool (downloaded during installation) provides convenient commands for compiling SP1 programs. @@ -53,9 +55,7 @@ f9afb8caaef10de9a8aad484c4dd3bfa54ba7218f3fc245a20e8a03ed40b38c617e175328515968a If you want your program crate to be built automatically whenever you build/run your script crate, you can add a `build.rs` file inside of `script/` (at the same level as `Cargo.toml` of your script crate) that utilizes the `sp1-build` crate: -```rust,noplayground -{{#include ../../examples/fibonacci/script/build.rs}} -``` + The path passed in to `build_program` should point to the directory containing the `Cargo.toml` file for your program. Make sure to also add `sp1-build` as a build dependency in `script/Cargo.toml`: @@ -84,7 +84,7 @@ To configure the build process when using the `sp1-build` crate, you can pass a As an example, you could use the following code to build the Fibonacci example with the `docker` flag set to `true` and a custom output directory for the generated ELF: -```rust,noplayground +```rust use sp1_build::{build_program_with_args, BuildArgs}; fn main() { diff --git a/book/writing-programs/cycle-tracking.md b/book/docs/writing-programs/cycle-tracking.mdx similarity index 98% rename from book/writing-programs/cycle-tracking.md rename to book/docs/writing-programs/cycle-tracking.mdx index c560f28ae5..bb1d739f57 100644 --- a/book/writing-programs/cycle-tracking.md +++ b/book/docs/writing-programs/cycle-tracking.mdx @@ -1,3 +1,5 @@ +import Example from "../../static/examples_cycle-tracking_program_bin_normal.rs.mdx"; + # Cycle Tracking When writing a program, it is useful to know how many RISC-V cycles a portion of the program takes to identify potential performance bottlenecks. SP1 provides a way to track the number of cycles spent in a portion of the program. @@ -6,9 +8,7 @@ When writing a program, it is useful to know how many RISC-V cycles a portion of To track the number of cycles spent in a portion of the program, you can either put `println!("cycle-tracker-start: block name")` + `println!("cycle-tracker-end: block name")` statements (block name must be same between start and end) around the portion of your program you want to profile or use the `#[sp1_derive::cycle_tracker]` macro on a function. An example is shown below: -```rust,noplayground -{{#include ../../examples/cycle-tracking/program/bin/normal.rs}} -``` + Note that to use the macro, you must add the `sp1-derive` crate to your dependencies for your program. @@ -46,7 +46,7 @@ Note that we elegantly handle nested cycle tracking, as you can see above. To include tracked cycle counts in the `ExecutionReport` when using `ProverClient::execute`, use the following annotations: -```rust,noplayground +```rust fn main() { println!("cycle-tracker-report-start: block name"); // ... diff --git a/book/writing-programs/inputs-and-outputs.md b/book/docs/writing-programs/inputs-and-outputs.mdx similarity index 91% rename from book/writing-programs/inputs-and-outputs.md rename to book/docs/writing-programs/inputs-and-outputs.mdx index ce8dd62f6f..00788365e0 100644 --- a/book/writing-programs/inputs-and-outputs.md +++ b/book/docs/writing-programs/inputs-and-outputs.mdx @@ -1,3 +1,5 @@ +import Example from "../../static/examples_io_program_src_main.rs.mdx"; + # Inputs and Outputs In real world applications of zero-knowledge proofs, you almost always want to verify your proof in the context of some inputs and outputs. For example: @@ -12,7 +14,7 @@ In this section, we cover how you pass inputs and outputs to the zkVM and create Data that is read is not public to the verifier by default. Use the `sp1_zkvm::io::read::` method: -```rust,noplayground +```rust let a = sp1_zkvm::io::read::(); let b = sp1_zkvm::io::read::(); let c = sp1_zkvm::io::read::(); @@ -20,7 +22,7 @@ let c = sp1_zkvm::io::read::(); Note that `T` must implement the `serde::Serialize` and `serde::Deserialize` trait. If you want to read bytes directly, you can also use the `sp1_zkvm::io::read_vec` method. -```rust,noplayground +```rust let my_vec = sp1_zkvm::io::read_vec(); ``` @@ -28,7 +30,7 @@ let my_vec = sp1_zkvm::io::read_vec(); Committing to data makes the data public to the verifier. Use the `sp1_zkvm::io::commit::` method: -```rust,noplayground +```rust sp1_zkvm::io::commit::(&a); sp1_zkvm::io::commit::(&b); sp1_zkvm::io::commit::(&c); @@ -36,7 +38,7 @@ sp1_zkvm::io::commit::(&c); Note that `T` must implement the `Serialize` and `Deserialize` trait. If you want to write bytes directly, you can also use `sp1_zkvm::io::commit_slice` method: -```rust,noplayground +```rust let mut my_slice = [0_u8; 32]; sp1_zkvm::io::commit_slice(&my_slice); ``` @@ -45,7 +47,7 @@ sp1_zkvm::io::commit_slice(&my_slice); Typically, you can implement the `Serialize` and `Deserialize` traits using a simple derive macro on a struct. -```rust,noplayground +```rust use serde::{Serialize, Deserialize}; #[derive(Serialize, Deserialize)] @@ -62,6 +64,4 @@ For more complex usecases, refer to the [Serde docs](https://serde.rs/). Here is a basic example of using inputs and outputs with more complex types. -```rust,noplayground -{{#include ../../examples/io/program/src/main.rs}} -``` + diff --git a/book/writing-programs/patched-crates.md b/book/docs/writing-programs/patched-crates.md similarity index 98% rename from book/writing-programs/patched-crates.md rename to book/docs/writing-programs/patched-crates.md index e49c707eab..818190f2ee 100644 --- a/book/writing-programs/patched-crates.md +++ b/book/docs/writing-programs/patched-crates.md @@ -1,7 +1,7 @@ # Patched Crates We maintain forks of commonly used libraries in blockchain infrastructure to significantly accelerate the execution of certain operations. -Under the hood, we use [precompiles](./precompiles.md) to achieve tremendous performance improvements in proof generation time. +Under the hood, we use [precompiles](./precompiles) to achieve tremendous performance improvements in proof generation time. **If you know of a library or library version that you think should be patched, please open an issue or a pull request!** diff --git a/book/writing-programs/precompiles.md b/book/docs/writing-programs/precompiles.mdx similarity index 91% rename from book/writing-programs/precompiles.md rename to book/docs/writing-programs/precompiles.mdx index 004ede9f1f..ded8be759d 100644 --- a/book/writing-programs/precompiles.md +++ b/book/docs/writing-programs/precompiles.mdx @@ -1,3 +1,6 @@ +import Example from "../../static/crates_zkvm_lib_src_lib.rs.mdx"; +import CodeBlock from '@theme/CodeBlock'; + # Precompiles Precompiles are built into the SP1 zkVM and accelerate commonly used operations such as elliptic curve arithmetic and hashing. Under the hood, precompiles are implemented as custom STARK tables dedicated to proving one or few operations. **They typically improve the performance @@ -18,6 +21,4 @@ If you are an advanced user you can interact with the precompiles directly using Here is a list of all available system calls & precompiles. -```rust,noplayground -{{#include ../../crates/zkvm/lib/src/lib.rs}} -``` + diff --git a/book/writing-programs/proof-aggregation.md b/book/docs/writing-programs/proof-aggregation.md similarity index 98% rename from book/writing-programs/proof-aggregation.md rename to book/docs/writing-programs/proof-aggregation.md index 36ee28e1ce..dc13d6e42c 100644 --- a/book/writing-programs/proof-aggregation.md +++ b/book/docs/writing-programs/proof-aggregation.md @@ -17,7 +17,7 @@ Note that by itself, SP1 can already prove arbitrarily large programs by chunkin To verify a proof inside the zkVM, you can use the `sp1_zkvm::lib::verify::verify_sp1_proof` function. -```rust,noplayground +```rust sp1_zkvm::lib::verify::verify_sp1_proof(vkey, public_values_digest); ``` @@ -30,7 +30,7 @@ Note that you must include the `verify` feature in your `Cargo.toml` for `sp1-zk To provide an existing proof as input to the SP1 zkVM, you can use the existing `SP1Stdin` object which is already used for all inputs to the zkVM. -```rust,noplayground +```rust # Generating proving key and verifying key. let (input_pk, input_vk) = client.setup(PROOF_INPUT_ELF); let (aggregation_pk, aggregation_vk) = client.setup(AGGREGATION_ELF); diff --git a/book/writing-programs/setup.md b/book/docs/writing-programs/setup.md similarity index 95% rename from book/writing-programs/setup.md rename to book/docs/writing-programs/setup.md index aa3f4a2cca..2cd677f4a9 100644 --- a/book/writing-programs/setup.md +++ b/book/docs/writing-programs/setup.md @@ -1,4 +1,4 @@ -# Writing Programs: Setup +# Setup In this section, we will teach you how to setup a self-contained crate which can be compiled as a program that can be executed inside the zkVM. @@ -24,7 +24,7 @@ cd program Inside this crate, add the `sp1-zkvm` crate as a dependency. Your `Cargo.toml` should look like the following: -```rust,noplayground +```rust [workspace] [package] version = "0.1.0" @@ -42,7 +42,7 @@ precompiles, patches, and more. Inside the `src/main.rs` file, you must make sure to include these two lines to ensure that your program properly compiles to a valid SP1 program. -```rust,noplayground +```rust #![no_main] sp1_zkvm::entrypoint!(main); ``` diff --git a/book/docusaurus.config.ts b/book/docusaurus.config.ts new file mode 100644 index 0000000000..df730e12ca --- /dev/null +++ b/book/docusaurus.config.ts @@ -0,0 +1,113 @@ +import {themes as prismThemes} from 'prism-react-renderer'; +import type {Config} from '@docusaurus/types'; +import type * as Preset from '@docusaurus/preset-classic'; + +// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...) + +const config: Config = { + title: 'SP1 Docs', + tagline: 'Prove the worlds software.', + favicon: 'img/favicon.ico', + + // Set the production url of your site here + url: 'https://docs.succinct.xyz', + // Set the // pathname under which your site is served + // For GitHub pages deployment, it is often '//' + baseUrl: '/', + + // GitHub pages deployment config. + // If you aren't using GitHub pages, you don't need these. + organizationName: 'succinctlabs', // Usually your GitHub org/user name. + projectName: 'sp1', // Usually your repo name. + + onBrokenLinks: 'throw', + onBrokenMarkdownLinks: 'warn', + + // Even if you don't use internationalization, you can use this field to set + // useful metadata like html lang. For example, if your site is Chinese, you + // may want to replace "en" with "zh-Hans". + i18n: { + defaultLocale: 'en', + locales: ['en'], + }, + + presets: [ + [ + "classic", + ({ + docs: { + routeBasePath: "docs", + sidebarPath: require.resolve("./sidebars.ts"), + }, + blog: false, + pages: {}, + theme: { + customCss: require.resolve("./src/css/custom.css"), + }, + }), + ], + ], + + themeConfig: { + docs: { + sidebar: { + hideable: false, + } + }, + navbar: { + title: 'SP1 Docs', + logo: { + alt: 'Succinct Logo', + src: 'img/favicon.ico', + }, + items: [ + { + href: 'https://github.com/succinctlabs/sp1', + label: 'GitHub', + position: 'right', + }, + ], + }, + footer: { + style: 'dark', + links: [ + { + title: 'Docs', + items: [ + { + label: 'Home', + to: '/docs/summary', + }, + ], + }, + { + title: 'Community', + items: [ + { + label: 'X', + href: 'https://x.com/succinctlabs', + }, + ], + }, + { + title: 'More', + items: [ + { + label: 'Website', + href: 'https://succinct.xyz', + }, + ], + }, + ], + }, + prism: { + theme: prismThemes.github, + darkTheme: prismThemes.dracula, + }, + colorMode: { + defaultMode: 'dark', + } + } satisfies Preset.ThemeConfig, +}; + +export default config; diff --git a/book/package-lock.json b/book/package-lock.json new file mode 100644 index 0000000000..450a7dab4e --- /dev/null +++ b/book/package-lock.json @@ -0,0 +1,18242 @@ +{ + "name": "book-2", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "book-2", + "version": "0.0.0", + "dependencies": { + "@docusaurus/core": "3.6.3", + "@docusaurus/plugin-content-docs": "^3.6.3", + "@docusaurus/preset-classic": "3.6.3", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.0.0", + "prism-react-renderer": "^2.3.0", + "react": "^18.0.0", + "react-dom": "^18.0.0", + "remark": "^15.0.1", + "remark-import-partial": "^0.0.2" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "3.6.3", + "@docusaurus/tsconfig": "3.6.3", + "@docusaurus/types": "3.6.3", + "typescript": "~5.6.2" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", + "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", + "@algolia/autocomplete-shared": "1.17.7" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", + "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", + "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", + "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz", + "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==", + "license": "MIT", + "dependencies": { + "@algolia/cache-common": "4.24.0" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz", + "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==", + "license": "MIT" + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz", + "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==", + "license": "MIT", + "dependencies": { + "@algolia/cache-common": "4.24.0" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.15.0.tgz", + "integrity": "sha512-FaEM40iuiv1mAipYyiptP4EyxkJ8qHfowCpEeusdHUC4C7spATJYArD2rX3AxkVeREkDIgYEOuXcwKUbDCr7Nw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz", + "integrity": "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-account/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-account/node_modules/@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz", + "integrity": "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-analytics/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-analytics/node_modules/@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.15.0.tgz", + "integrity": "sha512-IofrVh213VLsDkPoSKMeM9Dshrv28jhDlBDLRcVJQvlL8pzue7PEB1EZ4UoJFYS3NSn7JOcJ/V+olRQzXlJj1w==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.15.0.tgz", + "integrity": "sha512-bDDEQGfFidDi0UQUCbxXOCdphbVAgbVmxvaV75cypBTQkJ+ABx/Npw7LkFGw1FsoVrttlrrQbwjvUB6mLVKs/w==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz", + "integrity": "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-personalization/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.15.0.tgz", + "integrity": "sha512-wu8GVluiZ5+il8WIRsGKu8VxMK9dAlr225h878GGtpTL6VBvwyJvAyLdZsfFIpY0iN++jiNb31q2C1PlPL+n/A==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.15.0.tgz", + "integrity": "sha512-Z32gEMrRRpEta5UqVQA612sLdoqY3AovvUPClDfMxYrbdDAebmGDVPtSogUba1FZ4pP5dx20D3OV3reogLKsRA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", + "license": "MIT" + }, + "node_modules/@algolia/ingestion": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.15.0.tgz", + "integrity": "sha512-MkqkAxBQxtQ5if/EX2IPqFA7LothghVyvPoRNA/meS2AW2qkHwcxjuiBxv4H6mnAVEPfJlhu9rkdVz9LgCBgJg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/logger-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz", + "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==", + "license": "MIT" + }, + "node_modules/@algolia/logger-console": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz", + "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==", + "license": "MIT", + "dependencies": { + "@algolia/logger-common": "4.24.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.15.0.tgz", + "integrity": "sha512-QPrFnnGLMMdRa8t/4bs7XilPYnoUXDY8PMQJ1sf9ZFwhUysYYhQNX34/enoO0LBjpoOY6rLpha39YQEFbzgKyQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz", + "integrity": "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==", + "license": "MIT", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.24.0", + "@algolia/cache-common": "4.24.0", + "@algolia/cache-in-memory": "4.24.0", + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/logger-console": "4.24.0", + "@algolia/requester-browser-xhr": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/requester-node-http": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/requester-browser-xhr": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", + "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/requester-node-http": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", + "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.15.0.tgz", + "integrity": "sha512-Po/GNib6QKruC3XE+WKP1HwVSfCDaZcXu48kD+gwmtDlqHWKc7Bq9lrS0sNZ456rfCKhXksOmMfUs4wRM/Y96w==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz", + "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==", + "license": "MIT" + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.15.0.tgz", + "integrity": "sha512-rOZ+c0P7ajmccAvpeeNrUmEKoliYFL8aOR5qGW5pFq3oj3Iept7Y5mEtEsOBYsRt6qLnaXn4zUKf+N8nvJpcIw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.15.0.tgz", + "integrity": "sha512-b1jTpbFf9LnQHEJP5ddDJKE2sAlhYd7EVSOWgzo/27n/SfCoHfqD0VWntnWYD83PnOKvfe8auZ2+xCb0TXotrQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz", + "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==", + "license": "MIT", + "dependencies": { + "@algolia/cache-common": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", + "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", + "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", + "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", + "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", + "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", + "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", + "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", + "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-simple-access": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", + "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz", + "integrity": "sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", + "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", + "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", + "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", + "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", + "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", + "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", + "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.25.9", + "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.38.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.9.tgz", + "integrity": "sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.0.tgz", + "integrity": "sha512-YXHu5lN8kJCb1LOb9PgV6pvak43X2h4HvRApcN5SdWeaItQOzfn1hgP6jasD6KWQyJDBxrVmA9o9OivlnNJK/w==", + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@csstools/cascade-layer-name-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.4.tgz", + "integrity": "sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.1.tgz", + "integrity": "sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.0.tgz", + "integrity": "sha512-X69PmFOrjTZfN5ijxtI8hZ9kRADFSLrmmQ6hgDJ272Il049WGKpDY64KhrFm/7rbWve0z81QepawzjkKlqkNGw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.6.tgz", + "integrity": "sha512-S/IjXqTHdpI4EtzGoNCHfqraXF37x12ZZHA1Lk7zoT5pm2lMjFuqhX/89L7dqX4CcMacKK+6ZCs5TmEGb/+wKw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.1", + "@csstools/css-calc": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", + "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.1.tgz", + "integrity": "sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-cascade-layers/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.6.tgz", + "integrity": "sha512-EcvXfC60cTIumzpsxWuvVjb7rsJEHPvqn3jeMEBUaE3JSc4FRuP7mEQ+1eicxWmIrs3FtzMH9gR3sgA5TH+ebQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-mix-function": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.6.tgz", + "integrity": "sha512-jVKdJn4+JkASYGhyPO+Wa5WXSx1+oUgaXb3JsjJn/BlrtFh5zjocCY7pwWi0nuP24V1fY7glQsxEYcYNy0dMFg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-content-alt-text": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.4.tgz", + "integrity": "sha512-YItlZUOuZJCBlRaCf8Aucc1lgN41qYGALMly0qQllrxYJhiyzlI6RxOTMUvtWk+KhS8GphMDsDhKQ7KTPfEMSw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-exponential-functions": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.5.tgz", + "integrity": "sha512-mi8R6dVfA2nDoKM3wcEi64I8vOYEgQVtVKCfmLHXupeLpACfGAided5ddMt5f+CnEodNu4DifuVwb0I6fQDGGQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.0", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz", + "integrity": "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gamut-mapping": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.6.tgz", + "integrity": "sha512-0ke7fmXfc8H+kysZz246yjirAH6JFhyX9GTlyRnM0exHO80XcA9zeJpy5pOp5zo/AZiC/q5Pf+Hw7Pd6/uAoYA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gradients-interpolation-method": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.6.tgz", + "integrity": "sha512-Itrbx6SLUzsZ6Mz3VuOlxhbfuyLTogG5DwEF1V8dAi24iMuvQPIHd7Ti+pNDp7j6WixndJGZaoNR0f9VSzwuTg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.6.tgz", + "integrity": "sha512-927Pqy3a1uBP7U8sTfaNdZVB0mNXzIrJO/GZ8us9219q9n06gOqCdfZ0E6d1P66Fm0fYHvxfDbfcUuwAn5UwhQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.0.tgz", + "integrity": "sha512-9QT5TDGgx7wD3EEMN3BSUG6ckb6Eh5gSPT5kZoVtUuAonfPmLDJyPhqR4ntPpMYhUKAMVKAg3I/AgzqHMSeLhA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-initial": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.0.tgz", + "integrity": "sha512-dv2lNUKR+JV+OOhZm9paWzYBXOCi+rJPqJ2cJuhh9xd8USVrd0cBEPczla81HNOyThMQWeCcdln3gZkQV2kYxA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", + "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-light-dark-function": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.7.tgz", + "integrity": "sha512-ZZ0rwlanYKOHekyIPaU+sVm3BEHCe+Ha0/px+bmHe62n0Uc1lL34vbwrLYn6ote8PHlsqzKeTQdIejQCJ05tfw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-float-and-clear": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz", + "integrity": "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overflow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz", + "integrity": "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overscroll-behavior": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz", + "integrity": "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-resize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz", + "integrity": "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-viewport-units": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.3.tgz", + "integrity": "sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-minmax": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.5.tgz", + "integrity": "sha512-sdh5i5GToZOIAiwhdntRWv77QDtsxP2r2gXW/WbLSCoLr00KTq/yiF1qlQ5XX2+lmiFa8rATKMcbwl3oXDMNew==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.0", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.4.tgz", + "integrity": "sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz", + "integrity": "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", + "integrity": "sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.6.tgz", + "integrity": "sha512-Hptoa0uX+XsNacFBCIQKTUBrFKDiplHan42X73EklG6XmQLG7/aIvxoNhvZ7PvOWMt67Pw3bIlUY2nD6p5vL8A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.0.tgz", + "integrity": "sha512-XQPtROaQjomnvLUSy/bALTR5VCtTVUFwYs1SblvYgLSeTo2a/bMNwUwo2piXw5rTv/FEYiy5yPSXBqg9OKUx7Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-random-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-1.0.1.tgz", + "integrity": "sha512-Ab/tF8/RXktQlFwVhiC70UNfpFQRhtE5fQQoP2pO+KCPGLsLdWFiOuHgSRtBOqEshCVAzR4H6o38nhvRZq8deA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.0", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-relative-color-syntax": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.6.tgz", + "integrity": "sha512-yxP618Xb+ji1I624jILaYM62uEmZcmbdmFoZHoaThw896sq0vU39kqTTF+ZNic9XyPtPMvq0vyvbgmHaszq8xg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-scope-pseudo-class": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz", + "integrity": "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-sign-functions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.0.tgz", + "integrity": "sha512-SLcc20Nujx/kqbSwDmj6oaXgpy3UjFhBy1sfcqPgDkHfOIfUtUVH7OXO+j7BU4v/At5s61N5ZX6shvgPwluhsA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.0", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.5.tgz", + "integrity": "sha512-G6SJ6hZJkhxo6UZojVlLo14MohH4J5J7z8CRBrxxUYy9JuZiIqUo5TBYyDGcE0PLdzpg63a7mHSJz3VD+gMwqw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.0", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.1.tgz", + "integrity": "sha512-xPZIikbx6jyzWvhms27uugIc0I4ykH4keRvoa3rxX5K7lEhkbd54rjj/dv60qOCTisoS+3bmwJTeyV1VNBrXaw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/color-helpers": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.5.tgz", + "integrity": "sha512-/YQThYkt5MLvAmVu7zxjhceCYlKrYddK6LEmK5I4ojlS6BmO9u2yO4+xjXzu2+NPYmHSTtP4NFSamBCMmJ1NJA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.0", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz", + "integrity": "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/utilities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", + "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@docsearch/css": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.0.tgz", + "integrity": "sha512-pieeipSOW4sQ0+bE5UFC51AOZp9NGxg89wAlZ1BAQFaiRAGK1IKUaPQ0UGZeNctJXyqZ1UvBtOQh2HH+U5GtmA==", + "license": "MIT" + }, + "node_modules/@docsearch/react": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.0.tgz", + "integrity": "sha512-WnFK720+iwTVt94CxY3u+FgX6exb3BfN5kE9xUY6uuAH/9W/UFboBZFLlrw/zxFRHoHZCOXRtOylsXF+6LHI+Q==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "1.17.7", + "@algolia/autocomplete-preset-algolia": "1.17.7", + "@docsearch/css": "3.8.0", + "algoliasearch": "^5.12.0" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/client-analytics": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.15.0.tgz", + "integrity": "sha512-lho0gTFsQDIdCwyUKTtMuf9nCLwq9jOGlLGIeQGKDxXF7HbiAysFIu5QW/iQr1LzMgDyM9NH7K98KY+BiIFriQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/client-personalization": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.15.0.tgz", + "integrity": "sha512-LfaZqLUWxdYFq44QrasCDED5bSYOswpQjSiIL7Q5fYlefAAUO95PzBPKCfUhSwhb4rKxigHfDkd81AvEicIEoA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/recommend": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.15.0.tgz", + "integrity": "sha512-5eupMwSqMLDObgSMF0XG958zR6GJP3f7jHDQ3/WlzCM9/YIJiWIUoJFGsko9GYsA5xbLDHE/PhWtq4chcCdaGQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docsearch/react/node_modules/algoliasearch": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.15.0.tgz", + "integrity": "sha512-Yf3Swz1s63hjvBVZ/9f2P1Uu48GjmjCN+Esxb6MAONMGtZB1fRX8/S1AhUTtsuTlcGovbYLxpHgc7wEzstDZBw==", + "license": "MIT", + "dependencies": { + "@algolia/client-abtesting": "5.15.0", + "@algolia/client-analytics": "5.15.0", + "@algolia/client-common": "5.15.0", + "@algolia/client-insights": "5.15.0", + "@algolia/client-personalization": "5.15.0", + "@algolia/client-query-suggestions": "5.15.0", + "@algolia/client-search": "5.15.0", + "@algolia/ingestion": "1.15.0", + "@algolia/monitoring": "1.15.0", + "@algolia/recommend": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docusaurus/babel": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.6.3.tgz", + "integrity": "sha512-7dW9Hat9EHYCVicFXYA4hjxBY38+hPuCURL8oRF9fySRm7vzNWuEOghA1TXcykuXZp0HLG2td4RhDxCvGG7tNw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.25.9", + "@babel/preset-env": "^7.25.9", + "@babel/preset-react": "^7.25.9", + "@babel/preset-typescript": "^7.25.9", + "@babel/runtime": "^7.25.9", + "@babel/runtime-corejs3": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@docusaurus/logger": "3.6.3", + "@docusaurus/utils": "3.6.3", + "babel-plugin-dynamic-import-node": "^2.3.3", + "fs-extra": "^11.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/bundler": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.6.3.tgz", + "integrity": "sha512-47JLuc8D4wA+6VOvmMd5fUC9rFppBQpQOnxDYiVXffm/DeV/wmm3sbpNd5Y+O+G2+nevLTRnvCm/qyancv0Y3A==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.9", + "@docusaurus/babel": "3.6.3", + "@docusaurus/cssnano-preset": "3.6.3", + "@docusaurus/logger": "3.6.3", + "@docusaurus/types": "3.6.3", + "@docusaurus/utils": "3.6.3", + "babel-loader": "^9.2.1", + "clean-css": "^5.3.2", + "copy-webpack-plugin": "^11.0.0", + "css-loader": "^6.8.1", + "css-minimizer-webpack-plugin": "^5.0.1", + "cssnano": "^6.1.2", + "file-loader": "^6.2.0", + "html-minifier-terser": "^7.2.0", + "mini-css-extract-plugin": "^2.9.1", + "null-loader": "^4.0.1", + "postcss": "^8.4.26", + "postcss-loader": "^7.3.3", + "postcss-preset-env": "^10.1.0", + "react-dev-utils": "^12.0.1", + "terser-webpack-plugin": "^5.3.9", + "tslib": "^2.6.0", + "url-loader": "^4.1.1", + "webpack": "^5.95.0", + "webpackbar": "^6.0.1" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "@docusaurus/faster": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/faster": { + "optional": true + } + } + }, + "node_modules/@docusaurus/core": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.6.3.tgz", + "integrity": "sha512-xL7FRY9Jr5DWqB6pEnqgKqcMPJOX5V0pgWXi5lCiih11sUBmcFKM7c3+GyxcVeeWFxyYSDP3grLTWqJoP4P9Vw==", + "license": "MIT", + "dependencies": { + "@docusaurus/babel": "3.6.3", + "@docusaurus/bundler": "3.6.3", + "@docusaurus/logger": "3.6.3", + "@docusaurus/mdx-loader": "3.6.3", + "@docusaurus/utils": "3.6.3", + "@docusaurus/utils-common": "3.6.3", + "@docusaurus/utils-validation": "3.6.3", + "boxen": "^6.2.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cli-table3": "^0.6.3", + "combine-promises": "^1.1.0", + "commander": "^5.1.0", + "core-js": "^3.31.1", + "del": "^6.1.1", + "detect-port": "^1.5.1", + "escape-html": "^1.0.3", + "eta": "^2.2.0", + "eval": "^0.1.8", + "fs-extra": "^11.1.1", + "html-tags": "^3.3.1", + "html-webpack-plugin": "^5.6.0", + "leven": "^3.1.0", + "lodash": "^4.17.21", + "p-map": "^4.0.0", + "prompts": "^2.4.2", + "react-dev-utils": "^12.0.1", + "react-helmet-async": "^1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.3.4", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.3.4", + "rtl-detect": "^1.0.4", + "semver": "^7.5.4", + "serve-handler": "^6.1.6", + "shelljs": "^0.8.5", + "tslib": "^2.6.0", + "update-notifier": "^6.0.2", + "webpack": "^5.95.0", + "webpack-bundle-analyzer": "^4.10.2", + "webpack-dev-server": "^4.15.2", + "webpack-merge": "^6.0.1" + }, + "bin": { + "docusaurus": "bin/docusaurus.mjs" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "@mdx-js/react": "^3.0.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/cssnano-preset": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.6.3.tgz", + "integrity": "sha512-qP7SXrwZ+23GFJdPN4aIHQrZW+oH/7tzwEuc/RNL0+BdZdmIjYQqUxdXsjE4lFxLNZjj0eUrSNYIS6xwfij+5Q==", + "license": "MIT", + "dependencies": { + "cssnano-preset-advanced": "^6.1.2", + "postcss": "^8.4.38", + "postcss-sort-media-queries": "^5.2.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/logger": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.6.3.tgz", + "integrity": "sha512-xSubJixcNyMV9wMV4q0s47CBz3Rlc5jbcCCuij8pfQP8qn/DIpt0ks8W6hQWzHAedg/J/EwxxUOUrnEoKzJo8g==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/mdx-loader": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.6.3.tgz", + "integrity": "sha512-3iJdiDz9540ppBseeI93tWTDtUGVkxzh59nMq4ignylxMuXBLK8dFqVeaEor23v1vx6TrGKZ2FuLaTB+U7C0QQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.6.3", + "@docusaurus/utils": "3.6.3", + "@docusaurus/utils-validation": "3.6.3", + "@mdx-js/mdx": "^3.0.0", + "@slorber/remark-comment": "^1.0.0", + "escape-html": "^1.0.3", + "estree-util-value-to-estree": "^3.0.1", + "file-loader": "^6.2.0", + "fs-extra": "^11.1.1", + "image-size": "^1.0.2", + "mdast-util-mdx": "^3.0.0", + "mdast-util-to-string": "^4.0.0", + "rehype-raw": "^7.0.0", + "remark-directive": "^3.0.0", + "remark-emoji": "^4.0.0", + "remark-frontmatter": "^5.0.0", + "remark-gfm": "^4.0.0", + "stringify-object": "^3.3.0", + "tslib": "^2.6.0", + "unified": "^11.0.3", + "unist-util-visit": "^5.0.0", + "url-loader": "^4.1.1", + "vfile": "^6.0.1", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/module-type-aliases": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.6.3.tgz", + "integrity": "sha512-MjaXX9PN/k5ugNvfRZdWyKWq4FsrhN4LEXaj0pEmMebJuBNlFeGyKQUa9DRhJHpadNaiMLrbo9m3U7Ig5YlsZg==", + "license": "MIT", + "dependencies": { + "@docusaurus/types": "3.6.3", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "*", + "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@docusaurus/plugin-content-blog": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.6.3.tgz", + "integrity": "sha512-k0ogWwwJU3pFRFfvW1kRVHxzf2DutLGaaLjAnHVEU6ju+aRP0Z5ap/13DHyPOfHeE4WKpn/M0TqjdwZAcY3kAw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.6.3", + "@docusaurus/logger": "3.6.3", + "@docusaurus/mdx-loader": "3.6.3", + "@docusaurus/theme-common": "3.6.3", + "@docusaurus/types": "3.6.3", + "@docusaurus/utils": "3.6.3", + "@docusaurus/utils-common": "3.6.3", + "@docusaurus/utils-validation": "3.6.3", + "cheerio": "1.0.0-rc.12", + "feed": "^4.2.2", + "fs-extra": "^11.1.1", + "lodash": "^4.17.21", + "reading-time": "^1.5.0", + "srcset": "^4.0.0", + "tslib": "^2.6.0", + "unist-util-visit": "^5.0.0", + "utility-types": "^3.10.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "@docusaurus/plugin-content-docs": "*", + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.6.3.tgz", + "integrity": "sha512-r2wS8y/fsaDcxkm20W5bbYJFPzdWdEaTWVYjNxlHlcmX086eqQR1Fomlg9BHTJ0dLXPzAlbC8EN4XqMr3QzNCQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.6.3", + "@docusaurus/logger": "3.6.3", + "@docusaurus/mdx-loader": "3.6.3", + "@docusaurus/module-type-aliases": "3.6.3", + "@docusaurus/theme-common": "3.6.3", + "@docusaurus/types": "3.6.3", + "@docusaurus/utils": "3.6.3", + "@docusaurus/utils-common": "3.6.3", + "@docusaurus/utils-validation": "3.6.3", + "@types/react-router-config": "^5.0.7", + "combine-promises": "^1.1.0", + "fs-extra": "^11.1.1", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.6.0", + "utility-types": "^3.10.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-pages": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.6.3.tgz", + "integrity": "sha512-eHrmTgjgLZsuqfsYr5X2xEwyIcck0wseSofWrjTwT9FLOWp+KDmMAuVK+wRo7sFImWXZk3oV/xX/g9aZrhD7OA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.6.3", + "@docusaurus/mdx-loader": "3.6.3", + "@docusaurus/types": "3.6.3", + "@docusaurus/utils": "3.6.3", + "@docusaurus/utils-validation": "3.6.3", + "fs-extra": "^11.1.1", + "tslib": "^2.6.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/plugin-debug": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.6.3.tgz", + "integrity": "sha512-zB9GXfIZNPRfzKnNjU6xGVrqn9bPXuGhpjgsuc/YtcTDjnjhasg38NdYd5LEqXex5G/zIorQgWB3n6x/Ut62vQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.6.3", + "@docusaurus/types": "3.6.3", + "@docusaurus/utils": "3.6.3", + "fs-extra": "^11.1.1", + "react-json-view-lite": "^1.2.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.6.3.tgz", + "integrity": "sha512-rCDNy1QW8Dag7nZq67pcum0bpFLrwvxJhYuVprhFh8BMBDxV0bY+bAkGHbSf68P3Bk9C3hNOAXX1srGLIDvcTA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.6.3", + "@docusaurus/types": "3.6.3", + "@docusaurus/utils-validation": "3.6.3", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.6.3.tgz", + "integrity": "sha512-+OyDvhM6rqVkQOmLVkQWVJAizEEfkPzVWtIHXlWPOCFGK9X4/AWeBSrU0WG4iMg9Z4zD4YDRrU+lvI4s6DSC+w==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.6.3", + "@docusaurus/types": "3.6.3", + "@docusaurus/utils-validation": "3.6.3", + "@types/gtag.js": "^0.0.12", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-tag-manager": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.6.3.tgz", + "integrity": "sha512-1M6UPB13gWUtN2UHX083/beTn85PlRI9ABItTl/JL1FJ5dJTWWFXXsHf9WW/6hrVwthwTeV/AGbGKvLKV+IlCA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.6.3", + "@docusaurus/types": "3.6.3", + "@docusaurus/utils-validation": "3.6.3", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/plugin-sitemap": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.6.3.tgz", + "integrity": "sha512-94qOO4M9Fwv9KfVQJsgbe91k+fPJ4byf1L3Ez8TUa6TAFPo/BrLwQ80zclHkENlL1824TuxkcMKv33u6eydQCg==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.6.3", + "@docusaurus/logger": "3.6.3", + "@docusaurus/types": "3.6.3", + "@docusaurus/utils": "3.6.3", + "@docusaurus/utils-common": "3.6.3", + "@docusaurus/utils-validation": "3.6.3", + "fs-extra": "^11.1.1", + "sitemap": "^7.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/preset-classic": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.6.3.tgz", + "integrity": "sha512-VHSYWROT3flvNNI1SrnMOtW1EsjeHNK9dhU6s9eY5hryZe79lUqnZJyze/ymDe2LXAqzyj6y5oYvyBoZZk6ErA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.6.3", + "@docusaurus/plugin-content-blog": "3.6.3", + "@docusaurus/plugin-content-docs": "3.6.3", + "@docusaurus/plugin-content-pages": "3.6.3", + "@docusaurus/plugin-debug": "3.6.3", + "@docusaurus/plugin-google-analytics": "3.6.3", + "@docusaurus/plugin-google-gtag": "3.6.3", + "@docusaurus/plugin-google-tag-manager": "3.6.3", + "@docusaurus/plugin-sitemap": "3.6.3", + "@docusaurus/theme-classic": "3.6.3", + "@docusaurus/theme-common": "3.6.3", + "@docusaurus/theme-search-algolia": "3.6.3", + "@docusaurus/types": "3.6.3" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/theme-classic": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.6.3.tgz", + "integrity": "sha512-1RRLK1tSArI2c00qugWYO3jRocjOZwGF1mBzPPylDVRwWCS/rnWWR91ChdbbaxIupRJ+hX8ZBYrwr5bbU0oztQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.6.3", + "@docusaurus/logger": "3.6.3", + "@docusaurus/mdx-loader": "3.6.3", + "@docusaurus/module-type-aliases": "3.6.3", + "@docusaurus/plugin-content-blog": "3.6.3", + "@docusaurus/plugin-content-docs": "3.6.3", + "@docusaurus/plugin-content-pages": "3.6.3", + "@docusaurus/theme-common": "3.6.3", + "@docusaurus/theme-translations": "3.6.3", + "@docusaurus/types": "3.6.3", + "@docusaurus/utils": "3.6.3", + "@docusaurus/utils-common": "3.6.3", + "@docusaurus/utils-validation": "3.6.3", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.0.0", + "copy-text-to-clipboard": "^3.2.0", + "infima": "0.2.0-alpha.45", + "lodash": "^4.17.21", + "nprogress": "^0.2.0", + "postcss": "^8.4.26", + "prism-react-renderer": "^2.3.0", + "prismjs": "^1.29.0", + "react-router-dom": "^5.3.4", + "rtlcss": "^4.1.0", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/theme-common": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.6.3.tgz", + "integrity": "sha512-b8ZkhczXHDxWWyvz+YJy4t/PlPbEogTTbgnHoflYnH7rmRtyoodTsu8WVM12la5LmlMJBclBXFl29OH8kPE7gg==", + "license": "MIT", + "dependencies": { + "@docusaurus/mdx-loader": "3.6.3", + "@docusaurus/module-type-aliases": "3.6.3", + "@docusaurus/utils": "3.6.3", + "@docusaurus/utils-common": "3.6.3", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "clsx": "^2.0.0", + "parse-numeric-range": "^1.3.0", + "prism-react-renderer": "^2.3.0", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "@docusaurus/plugin-content-docs": "*", + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.6.3.tgz", + "integrity": "sha512-rt+MGCCpYgPyWCGXtbxlwFbTSobu15jWBTPI2LHsHNa5B0zSmOISX6FWYAPt5X1rNDOqMGM0FATnh7TBHRohVA==", + "license": "MIT", + "dependencies": { + "@docsearch/react": "^3.5.2", + "@docusaurus/core": "3.6.3", + "@docusaurus/logger": "3.6.3", + "@docusaurus/plugin-content-docs": "3.6.3", + "@docusaurus/theme-common": "3.6.3", + "@docusaurus/theme-translations": "3.6.3", + "@docusaurus/utils": "3.6.3", + "@docusaurus/utils-validation": "3.6.3", + "algoliasearch": "^4.18.0", + "algoliasearch-helper": "^3.13.3", + "clsx": "^2.0.0", + "eta": "^2.2.0", + "fs-extra": "^11.1.1", + "lodash": "^4.17.21", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/theme-translations": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.6.3.tgz", + "integrity": "sha512-Gb0regclToVlngSIIwUCtBMQBq48qVUaN1XQNKW4XwlsgUyk0vP01LULdqbem7czSwIeBAFXFoORJ0RPX7ht/w==", + "license": "MIT", + "dependencies": { + "fs-extra": "^11.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/tsconfig": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.6.3.tgz", + "integrity": "sha512-1pT/rTrRpMV15E4tJH95W5PrjboMn5JkKF+Ys8cTjMegetiXjs0gPFOSDA5hdTlberKQLDO50xPjMJHondLuzA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@docusaurus/types": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.6.3.tgz", + "integrity": "sha512-xD9oTGDrouWzefkhe9ogB2fDV96/82cRpNGx2HIvI5L87JHNhQVIWimQ/3JIiiX/TEd5S9s+VO6FFguwKNRVow==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/types/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@docusaurus/utils": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.6.3.tgz", + "integrity": "sha512-0R/FR3bKVl4yl8QwbL4TYFfR+OXBRpVUaTJdENapBGR3YMwfM6/JnhGilWQO8AOwPJGtGoDK7ib8+8UF9f3OZQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.6.3", + "@docusaurus/types": "3.6.3", + "@docusaurus/utils-common": "3.6.3", + "@svgr/webpack": "^8.1.0", + "escape-string-regexp": "^4.0.0", + "file-loader": "^6.2.0", + "fs-extra": "^11.1.1", + "github-slugger": "^1.5.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "jiti": "^1.20.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", + "prompts": "^2.4.2", + "resolve-pathname": "^3.0.0", + "shelljs": "^0.8.5", + "tslib": "^2.6.0", + "url-loader": "^4.1.1", + "utility-types": "^3.10.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/utils-common": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.6.3.tgz", + "integrity": "sha512-v4nKDaANLgT3pMBewHYEMAl/ufY0LkXao1QkFWzI5huWFOmNQ2UFzv2BiKeHX5Ownis0/w6cAyoxPhVdDonlSQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/types": "3.6.3", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/utils-validation": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.6.3.tgz", + "integrity": "sha512-bhEGGiN5BE38h21vjqD70Gxg++j+PfYVddDUE5UFvLDup68QOcpD33CLr+2knPorlxRbEaNfz6HQDUMQ3HuqKw==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.6.3", + "@docusaurus/utils": "3.6.3", + "@docusaurus/utils-common": "3.6.3", + "fs-extra": "^11.2.0", + "joi": "^17.9.2", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" + }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz", + "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/react": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", + "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", + "license": "MIT", + "dependencies": { + "@types/mdx": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "license": "ISC" + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "license": "MIT", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.28", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "license": "MIT" + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@slorber/remark-comment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", + "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.1.0", + "micromark-util-symbol": "^1.0.1" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", + "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.1.3", + "deepmerge": "^4.3.1", + "svgo": "^3.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/webpack": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", + "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@babel/plugin-transform-react-constant-elements": "^7.21.3", + "@babel/preset-env": "^7.20.2", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.21.0", + "@svgr/core": "8.1.0", + "@svgr/plugin-jsx": "8.1.0", + "@svgr/plugin-svgo": "8.1.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz", + "integrity": "sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/gtag.js": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", + "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", + "license": "MIT" + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "license": "MIT" + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", + "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/prismjs": { + "version": "1.26.5", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", + "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.17", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", + "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-config": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", + "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "^5.1.0" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT" + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.13", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz", + "integrity": "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "license": "ISC" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/algoliasearch": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz", + "integrity": "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==", + "license": "MIT", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.24.0", + "@algolia/cache-common": "4.24.0", + "@algolia/cache-in-memory": "4.24.0", + "@algolia/client-account": "4.24.0", + "@algolia/client-analytics": "4.24.0", + "@algolia/client-common": "4.24.0", + "@algolia/client-personalization": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/logger-console": "4.24.0", + "@algolia/recommend": "4.24.0", + "@algolia/requester-browser-xhr": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/requester-node-http": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/algoliasearch-helper": { + "version": "3.22.5", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.22.5.tgz", + "integrity": "sha512-lWvhdnc+aKOKx8jyA3bsdEgHzm/sglC4cYdMG4xSQyRiPLJVJtH/IVYZG3Hp6PkTEhQqhyVYkeP9z2IlcHJsWw==", + "license": "MIT", + "dependencies": { + "@algolia/events": "^4.0.1" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "node_modules/algoliasearch/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/algoliasearch/node_modules/@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/algoliasearch/node_modules/@algolia/requester-browser-xhr": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", + "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/algoliasearch/node_modules/@algolia/requester-node-http": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", + "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", + "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", + "license": "MIT", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "license": "MIT", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", + "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.3", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", + "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/cacheable-request": { + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001686", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001686.tgz", + "integrity": "sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/combine-promises": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", + "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "license": "ISC" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compressible/node_modules/mime-db": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", + "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", + "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.0.2", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/configstore": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", + "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", + "license": "BSD-2-Clause", + "dependencies": { + "dot-prop": "^6.0.1", + "graceful-fs": "^4.2.6", + "unique-string": "^3.0.0", + "write-file-atomic": "^3.0.3", + "xdg-basedir": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/yeoman/configstore?sponsor=1" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/copy-text-to-clipboard": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", + "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-js": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz", + "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", + "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.39.0.tgz", + "integrity": "sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/css-blank-pseudo": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", + "integrity": "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", + "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.1.tgz", + "integrity": "sha512-EOcoyJt+OsuKfCADgLT7gADZI5jMzIe/AeI6MeAYKiFBDmNmM7kk46DtSfMj5AohUJisqVzopBpnQTlvbyaBWg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-has-pseudo/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", + "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "cssnano": "^6.0.1", + "jest-worker": "^29.4.3", + "postcss": "^8.4.24", + "schema-utils": "^4.0.1", + "serialize-javascript": "^6.0.1" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { + "optional": true + } + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz", + "integrity": "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssdb": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.2.tgz", + "integrity": "sha512-Z3kpWyvN68aKyeMxOUGmffQeHjvrzDxbre2B2ikr/WqQ4ZMkhHu2nOD6uwSeq3TpuOYU7ckvmJRAUIt6orkYUg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ], + "license": "MIT-0" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", + "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^6.1.2", + "lilconfig": "^3.1.1" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-preset-advanced": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", + "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", + "license": "MIT", + "dependencies": { + "autoprefixer": "^10.4.19", + "browserslist": "^4.23.0", + "cssnano-preset-default": "^6.1.2", + "postcss-discard-unused": "^6.0.5", + "postcss-merge-idents": "^6.0.3", + "postcss-reduce-idents": "^6.0.3", + "postcss-zindex": "^6.0.2" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-preset-default": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", + "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^4.0.2", + "postcss-calc": "^9.0.1", + "postcss-colormin": "^6.1.0", + "postcss-convert-values": "^6.1.0", + "postcss-discard-comments": "^6.0.2", + "postcss-discard-duplicates": "^6.0.3", + "postcss-discard-empty": "^6.0.3", + "postcss-discard-overridden": "^6.0.2", + "postcss-merge-longhand": "^6.0.5", + "postcss-merge-rules": "^6.1.1", + "postcss-minify-font-values": "^6.1.0", + "postcss-minify-gradients": "^6.0.3", + "postcss-minify-params": "^6.1.0", + "postcss-minify-selectors": "^6.0.4", + "postcss-normalize-charset": "^6.0.2", + "postcss-normalize-display-values": "^6.0.2", + "postcss-normalize-positions": "^6.0.2", + "postcss-normalize-repeat-style": "^6.0.2", + "postcss-normalize-string": "^6.0.2", + "postcss-normalize-timing-functions": "^6.0.2", + "postcss-normalize-unicode": "^6.1.0", + "postcss-normalize-url": "^6.0.2", + "postcss-normalize-whitespace": "^6.0.2", + "postcss-ordered-values": "^6.0.2", + "postcss-reduce-initial": "^6.1.0", + "postcss-reduce-transforms": "^6.0.2", + "postcss-svgo": "^6.0.3", + "postcss-unique-selectors": "^6.0.4" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-utils": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", + "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "license": "MIT", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT" + }, + "node_modules/detect-port": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", + "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", + "license": "MIT", + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "license": "MIT", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dot-prop/node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.68", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.68.tgz", + "integrity": "sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/emojilib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/emoticon": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz", + "integrity": "sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "license": "MIT" + }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-value-to-estree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.2.1.tgz", + "integrity": "sha512-Vt2UOjyPbNQQgT5eJh+K5aATti0OjCIAGc9SgMdOFYbohuifsWclR74l0iZTJwePMgWYdX1hlVS+dedH9XV8kw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", + "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "dependencies": { + "@types/node": "*", + "require-like": ">= 0.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "license": "MIT" + }, + "node_modules/express/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "license": "MIT", + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "license": "MIT", + "dependencies": { + "xml-js": "^1.6.11" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/file-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/file-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "license": "MIT", + "engines": { + "node": ">= 14.17" + } + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "license": "ISC" + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "license": "ISC" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.1.0.tgz", + "integrity": "sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/got/node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.1.0.tgz", + "integrity": "sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-yarn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", + "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.2.tgz", + "integrity": "sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^6.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", + "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.4.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree/node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", + "license": "MIT" + }, + "node_modules/hast-util-to-estree/node_modules/style-to-object": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", + "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz", + "integrity": "sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.0.tgz", + "integrity": "sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", + "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/html-webpack-plugin/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", + "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", + "license": "MIT", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infima": { + "version": "0.2.0-alpha.45", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz", + "integrity": "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "license": "MIT", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", + "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-yarn-global": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", + "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/latest-version": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", + "license": "MIT", + "dependencies": { + "package-json": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/launch-editor": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", + "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-directive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", + "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mdast-util-frontmatter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "escape-string-regexp": "^5.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", + "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz", + "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-directive": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", + "license": "MIT", + "dependencies": { + "fault": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", + "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", + "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz", + "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==", + "license": "MIT", + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz", + "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-space/node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-character/node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", + "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-normalize-identifier/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz", + "integrity": "sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", + "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "license": "MIT", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", + "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-emoji": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", + "integrity": "sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", + "license": "MIT" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/null-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/null-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/null-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/null-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", + "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", + "license": "MIT", + "dependencies": { + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", + "license": "ISC" + }, + "node_modules/parse5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "license": "MIT", + "dependencies": { + "entities": "^4.5.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", + "license": "MIT", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz", + "integrity": "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-calc": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.6.tgz", + "integrity": "sha512-wLXvm8RmLs14Z2nVpB4CWlnvaWPRcOZFltJSlcbYwSJ1EDZKsKDhPKIMecCnuU054KSmlmubkqczmm6qBPCBhA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz", + "integrity": "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz", + "integrity": "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-colormin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", + "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-convert-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", + "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-custom-media": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.5.tgz", + "integrity": "sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-properties": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.4.tgz", + "integrity": "sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.4.tgz", + "integrity": "sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz", + "integrity": "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-comments": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", + "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", + "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-empty": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", + "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", + "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-unused": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", + "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.0.tgz", + "integrity": "sha512-JkIGah3RVbdSEIrcobqj4Gzq0h53GG4uqDPsho88SgY84WnpkTpI0k50MFK/sX7XqVisZ6OqUfFnoUO6m1WWdg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz", + "integrity": "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-focus-within": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz", + "integrity": "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz", + "integrity": "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-image-set-function": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz", + "integrity": "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-lab-function": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.6.tgz", + "integrity": "sha512-HPwvsoK7C949vBZ+eMyvH2cQeMr3UREoHvbtra76/UhDuiViZH6pir+z71UaJQohd7VDSVUdR6TkWYKExEc9aQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", + "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.3.5", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.0.0.tgz", + "integrity": "sha512-HpIdsdieClTjXLOyYdUPAX/XQASNIwdKt5hoZW08ZOAiI+tbV0ta1oclkpVkW5ANU+xJvk3KkA0FejkjGLXUkg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-merge-idents": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", + "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", + "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^6.1.1" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-rules": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", + "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^4.0.2", + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", + "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", + "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-params": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", + "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", + "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.1.0.tgz", + "integrity": "sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nesting": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", + "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-resolve-nested": "^3.0.0", + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", + "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", + "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", + "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", + "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", + "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-string": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", + "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", + "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", + "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", + "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", + "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", + "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-ordered-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", + "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz", + "integrity": "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz", + "integrity": "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-preset-env": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.1.tgz", + "integrity": "sha512-wqqsnBFD6VIwcHHRbhjTOcOi4qRVlB26RwSr0ordPj7OubRRxdWebv/aLjKLRR8zkZrbxZyuus03nOIgC5elMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-cascade-layers": "^5.0.1", + "@csstools/postcss-color-function": "^4.0.6", + "@csstools/postcss-color-mix-function": "^3.0.6", + "@csstools/postcss-content-alt-text": "^2.0.4", + "@csstools/postcss-exponential-functions": "^2.0.5", + "@csstools/postcss-font-format-keywords": "^4.0.0", + "@csstools/postcss-gamut-mapping": "^2.0.6", + "@csstools/postcss-gradients-interpolation-method": "^5.0.6", + "@csstools/postcss-hwb-function": "^4.0.6", + "@csstools/postcss-ic-unit": "^4.0.0", + "@csstools/postcss-initial": "^2.0.0", + "@csstools/postcss-is-pseudo-class": "^5.0.1", + "@csstools/postcss-light-dark-function": "^2.0.7", + "@csstools/postcss-logical-float-and-clear": "^3.0.0", + "@csstools/postcss-logical-overflow": "^2.0.0", + "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", + "@csstools/postcss-logical-resize": "^3.0.0", + "@csstools/postcss-logical-viewport-units": "^3.0.3", + "@csstools/postcss-media-minmax": "^2.0.5", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.4", + "@csstools/postcss-nested-calc": "^4.0.0", + "@csstools/postcss-normalize-display-values": "^4.0.0", + "@csstools/postcss-oklab-function": "^4.0.6", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/postcss-random-function": "^1.0.1", + "@csstools/postcss-relative-color-syntax": "^3.0.6", + "@csstools/postcss-scope-pseudo-class": "^4.0.1", + "@csstools/postcss-sign-functions": "^1.1.0", + "@csstools/postcss-stepped-value-functions": "^4.0.5", + "@csstools/postcss-text-decoration-shorthand": "^4.0.1", + "@csstools/postcss-trigonometric-functions": "^4.0.5", + "@csstools/postcss-unset-value": "^4.0.0", + "autoprefixer": "^10.4.19", + "browserslist": "^4.23.1", + "css-blank-pseudo": "^7.0.1", + "css-has-pseudo": "^7.0.1", + "css-prefers-color-scheme": "^10.0.0", + "cssdb": "^8.2.1", + "postcss-attribute-case-insensitive": "^7.0.1", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^7.0.6", + "postcss-color-hex-alpha": "^10.0.0", + "postcss-color-rebeccapurple": "^10.0.0", + "postcss-custom-media": "^11.0.5", + "postcss-custom-properties": "^14.0.4", + "postcss-custom-selectors": "^8.0.4", + "postcss-dir-pseudo-class": "^9.0.1", + "postcss-double-position-gradients": "^6.0.0", + "postcss-focus-visible": "^10.0.1", + "postcss-focus-within": "^9.0.1", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^6.0.0", + "postcss-image-set-function": "^7.0.0", + "postcss-lab-function": "^7.0.6", + "postcss-logical": "^8.0.0", + "postcss-nesting": "^13.0.1", + "postcss-opacity-percentage": "^3.0.0", + "postcss-overflow-shorthand": "^6.0.0", + "postcss-page-break": "^3.0.4", + "postcss-place": "^10.0.0", + "postcss-pseudo-class-any-link": "^10.0.1", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^8.0.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz", + "integrity": "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-reduce-idents": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", + "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", + "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", + "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz", + "integrity": "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-sort-media-queries": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", + "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", + "license": "MIT", + "dependencies": { + "sort-css-media-queries": "2.2.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.23" + } + }, + "node_modules/postcss-svgo": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", + "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.2.0" + }, + "engines": { + "node": "^14 || ^16 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", + "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/postcss-zindex": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", + "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/prism-react-renderer": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.0.tgz", + "integrity": "sha512-327BsVCD/unU4CNLZTWVHyUHKnsqcvj2qbPlQ8MiBE2eq2rgctjigPA1Gp9HLF83kZ20zNN6jgizHJeEsyFYOw==", + "license": "MIT", + "dependencies": { + "@types/prismjs": "^1.26.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.0.0" + } + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "license": "ISC" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", + "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", + "license": "MIT", + "dependencies": { + "escape-goat": "^4.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dev-utils/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", + "license": "MIT" + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", + "license": "MIT" + }, + "node_modules/react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-json-view-lite": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.5.0.tgz", + "integrity": "sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", + "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", + "license": "MIT", + "dependencies": { + "@types/react": "*" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" + } + }, + "node_modules/react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" + } + }, + "node_modules/react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reading-time": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==", + "license": "MIT" + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.0.tgz", + "integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==", + "license": "MIT", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.3.tgz", + "integrity": "sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA==", + "license": "MIT", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "license": "MIT", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz", + "integrity": "sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-directive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz", + "integrity": "sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "micromark-extension-directive": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-emoji": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", + "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.2", + "emoticon": "^4.0.1", + "mdast-util-find-and-replace": "^3.0.1", + "node-emoji": "^2.1.0", + "unified": "^11.0.4" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/remark-frontmatter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", + "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-frontmatter": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", + "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-import-partial": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/remark-import-partial/-/remark-import-partial-0.0.2.tgz", + "integrity": "sha512-HuIcpGITU/PK+fZvYYamayCH/jlsoB2Uxj1QaGBgTYtcpozvJQth+PKp9NUZpksUldGAmJf59IyMJgczMpbhwg==", + "license": "MIT", + "dependencies": { + "unist-util-visit": "2.0.2" + } + }, + "node_modules/remark-import-partial/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/remark-import-partial/node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-import-partial/node_modules/unist-util-visit": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", + "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-import-partial/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", + "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz", + "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/renderkid/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", + "license": "MIT" + }, + "node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rtl-detect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.1.2.tgz", + "integrity": "sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==", + "license": "BSD-3-Clause" + }, + "node_modules/rtlcss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", + "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0", + "postcss": "^8.4.21", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/search-insights": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "license": "MIT", + "peer": true + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-handler": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", + "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", + "license": "MIT", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "mime-types": "2.1.18", + "minimatch": "3.1.2", + "path-is-inside": "1.0.2", + "path-to-regexp": "3.3.0", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", + "license": "MIT" + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", + "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", + "license": "MIT", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" + }, + "node_modules/skin-tone": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", + "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", + "license": "MIT", + "dependencies": { + "unicode-emoji-modifier-base": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sort-css-media-queries": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", + "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", + "license": "MIT", + "engines": { + "node": ">= 6.3.0" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/srcset": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", + "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-object": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, + "node_modules/stylehacks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", + "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "license": "MIT" + }, + "node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "license": "MIT" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-notifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", + "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", + "license": "BSD-2-Clause", + "dependencies": { + "boxen": "^7.0.0", + "chalk": "^5.0.1", + "configstore": "^6.0.0", + "has-yarn": "^3.0.0", + "import-lazy": "^4.0.0", + "is-ci": "^3.0.1", + "is-installed-globally": "^0.4.0", + "is-npm": "^6.0.0", + "is-yarn-global": "^0.4.0", + "latest-version": "^7.0.0", + "pupa": "^3.1.0", + "semver": "^7.3.7", + "semver-diff": "^4.0.0", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/boxen": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", + "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.1", + "chalk": "^5.2.0", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/camelcase": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/url-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/url-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/url-loader/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "license": "MIT" + }, + "node_modules/utility-types": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", + "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webpack": { + "version": "5.97.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.0.tgz", + "integrity": "sha512-CWT8v7ShSfj7tGs4TLRtaOLmOCPWhoKEvp+eA7FVx8Xrjb3XfT0aXdxDItnRZmE8sHcH+a8ayDrJCOjXKxVFfQ==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/webpack/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpackbar": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", + "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "consola": "^3.2.3", + "figures": "^3.2.0", + "markdown-table": "^2.0.0", + "pretty-time": "^1.1.0", + "std-env": "^3.7.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" + } + }, + "node_modules/webpackbar/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/webpackbar/node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "license": "MIT", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webpackbar/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpackbar/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "license": "MIT", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "license": "MIT", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/book/package.json b/book/package.json new file mode 100644 index 0000000000..3d6d4006b0 --- /dev/null +++ b/book/package.json @@ -0,0 +1,48 @@ +{ + "name": "book-2", + "version": "0.0.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids", + "typecheck": "tsc" + }, + "dependencies": { + "@docusaurus/core": "3.6.3", + "@docusaurus/plugin-content-docs": "^3.6.3", + "@docusaurus/preset-classic": "3.6.3", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.0.0", + "prism-react-renderer": "^2.3.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "3.6.3", + "@docusaurus/tsconfig": "3.6.3", + "@docusaurus/types": "3.6.3", + "typescript": "~5.6.2" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 3 chrome version", + "last 3 firefox version", + "last 5 safari version" + ] + }, + "engines": { + "node": ">=18.0" + } +} diff --git a/book/sidebars.ts b/book/sidebars.ts new file mode 100644 index 0000000000..b2c0ce6812 --- /dev/null +++ b/book/sidebars.ts @@ -0,0 +1,108 @@ +import type {SidebarsConfig} from '@docusaurus/plugin-content-docs'; + +// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...) + +/** + * Creating a sidebar enables you to: + - create an ordered group of docs + - render a sidebar for each doc of that group + - provide next/previous navigation + + The sidebars can be generated from the filesystem, or explicitly defined here. + + Create as many sidebars as you want. + */ +const sidebars: SidebarsConfig = { + docs: [ + "introduction", + { + type: 'category', + label: 'Getting Started', + items: [ + 'getting-started/install', + 'getting-started/quickstart', + 'getting-started/hardware-requirements', + 'getting-started/project-template' + ], + collapsed: false, + }, + { + type: 'category', + label: 'Writing Programs', + items: [ + 'writing-programs/basics', + 'writing-programs/compiling', + 'writing-programs/cycle-tracking', + 'writing-programs/inputs-and-outputs', + 'writing-programs/patched-crates', + 'writing-programs/precompiles', + 'writing-programs/proof-aggregation', + 'writing-programs/setup' + ], + collapsed: true, + }, + { + type: 'category', + label: 'Generating Proofs', + items: [ + "generating-proofs/basics", + "generating-proofs/setup", + "generating-proofs/proof-types", + "generating-proofs/recommended-workflow", + "generating-proofs/sp1-sdk-faq", + { + type: 'category', + label: 'Hardware Acceleration', + link: { type: 'doc', id: 'generating-proofs/hardware-acceleration' }, + items: [ + "generating-proofs/hardware-acceleration", + "generating-proofs/hardware-acceleration/avx", + "generating-proofs/hardware-acceleration/cuda" + ], + }, + { + type: 'category', + label: 'Prover Network', + link: { type: 'doc', id: 'generating-proofs/prover-network' }, + items: [ + "generating-proofs/prover-network/key-setup", + "generating-proofs/prover-network/usage", + "generating-proofs/prover-network/versions" + ], + }, + "generating-proofs/advanced", + ], + collapsed: true, + }, + { + type: 'category', + label: 'Verification', + items: [ + 'verification/off-chain-verification', + { + type: 'category', + label: 'On-Chain Verification', + items: [ + "verification/onchain/getting-started", + "verification/onchain/contract-addresses", + "verification/onchain/solidity-sdk" + ], + }, + ] + }, + { + type: 'category', + label: 'Developers', + items: [ + "developers/common-issues", + "developers/usage-in-ci", + "developers/building-circuit-artifacts", + "developers/rv32im-specification", + ] + }, + 'what-is-a-zkvm', + 'why-use-sp1', + ], +}; + +export default sidebars; diff --git a/book/src/css/custom.css b/book/src/css/custom.css new file mode 100644 index 0000000000..2bc6a4cfde --- /dev/null +++ b/book/src/css/custom.css @@ -0,0 +1,30 @@ +/** + * Any CSS included here will be global. The classic template + * bundles Infima by default. Infima is a CSS framework designed to + * work well for content-centric websites. + */ + +/* You can override the default Infima variables here. */ +:root { + --ifm-color-primary: #2e8555; + --ifm-color-primary-dark: #29784c; + --ifm-color-primary-darker: #277148; + --ifm-color-primary-darkest: #205d3b; + --ifm-color-primary-light: #33925d; + --ifm-color-primary-lighter: #359962; + --ifm-color-primary-lightest: #3cad6e; + --ifm-code-font-size: 95%; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); +} + +/* For readability concerns, you should choose a lighter palette in dark mode. */ +[data-theme='dark'] { + --ifm-color-primary: #25c2a0; + --ifm-color-primary-dark: #21af90; + --ifm-color-primary-darker: #1fa588; + --ifm-color-primary-darkest: #1a8870; + --ifm-color-primary-light: #29d5b0; + --ifm-color-primary-lighter: #32d8b4; + --ifm-color-primary-lightest: #4fddbf; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); +} diff --git a/book/src/pages/index.tsx b/book/src/pages/index.tsx new file mode 100644 index 0000000000..a45a79231e --- /dev/null +++ b/book/src/pages/index.tsx @@ -0,0 +1,11 @@ +import { Redirect } from "@docusaurus/router"; +import useBaseUrl from "@docusaurus/useBaseUrl"; +import React from "react"; + +const Home = () => { + const url = useBaseUrl("/docs/introduction"); + return ; +}; + +export default Home; + diff --git a/book/static/.nojekyll b/book/static/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/book/static/crates_zkvm_lib_src_lib.rs.mdx b/book/static/crates_zkvm_lib_src_lib.rs.mdx new file mode 100644 index 0000000000..e552f31364 --- /dev/null +++ b/book/static/crates_zkvm_lib_src_lib.rs.mdx @@ -0,0 +1,133 @@ +```rust +//! Syscalls for the SP1 zkVM. +//! +//! Documentation for these syscalls can be found in the zkVM entrypoint +//! `sp1_zkvm::syscalls` module. + +pub mod bls12381; +pub mod bn254; +pub mod ed25519; +pub mod io; +pub mod secp256k1; +pub mod unconstrained; +pub mod utils; +#[cfg(feature = "verify")] +pub mod verify; + +extern "C" { + /// Halts the program with the given exit code. + pub fn syscall_halt(exit_code: u8) -> !; + + /// Writes the bytes in the given buffer to the given file descriptor. + pub fn syscall_write(fd: u32, write_buf: *const u8, nbytes: usize); + + /// Reads the bytes from the given file descriptor into the given buffer. + pub fn syscall_read(fd: u32, read_buf: *mut u8, nbytes: usize); + + /// Executes the SHA-256 extend operation on the given word array. + pub fn syscall_sha256_extend(w: *mut [u32; 64]); + + /// Executes the SHA-256 compress operation on the given word array and a given state. + pub fn syscall_sha256_compress(w: *mut [u32; 64], state: *mut [u32; 8]); + + /// Executes an Ed25519 curve addition on the given points. + pub fn syscall_ed_add(p: *mut [u32; 16], q: *const [u32; 16]); + + /// Executes an Ed25519 curve decompression on the given point. + pub fn syscall_ed_decompress(point: &mut [u8; 64]); + + /// Executes an Sepc256k1 curve addition on the given points. + pub fn syscall_secp256k1_add(p: *mut [u32; 16], q: *const [u32; 16]); + + /// Executes an Secp256k1 curve doubling on the given point. + pub fn syscall_secp256k1_double(p: *mut [u32; 16]); + + /// Executes an Secp256k1 curve decompression on the given point. + pub fn syscall_secp256k1_decompress(point: &mut [u8; 64], is_odd: bool); + + /// Executes a Bn254 curve addition on the given points. + pub fn syscall_bn254_add(p: *mut [u32; 16], q: *const [u32; 16]); + + /// Executes a Bn254 curve doubling on the given point. + pub fn syscall_bn254_double(p: *mut [u32; 16]); + + /// Executes a BLS12-381 curve addition on the given points. + pub fn syscall_bls12381_add(p: *mut [u32; 24], q: *const [u32; 24]); + + /// Executes a BLS12-381 curve doubling on the given point. + pub fn syscall_bls12381_double(p: *mut [u32; 24]); + + /// Executes the Keccak-256 permutation on the given state. + pub fn syscall_keccak_permute(state: *mut [u64; 25]); + + /// Executes an uint256 multiplication on the given inputs. + pub fn syscall_uint256_mulmod(x: *mut [u32; 8], y: *const [u32; 8]); + + /// Enters unconstrained mode. + pub fn syscall_enter_unconstrained() -> bool; + + /// Exits unconstrained mode. + pub fn syscall_exit_unconstrained(); + + /// Defers the verification of a valid SP1 zkVM proof. + pub fn syscall_verify_sp1_proof(vk_digest: &[u32; 8], pv_digest: &[u8; 32]); + + /// Returns the length of the next element in the hint stream. + pub fn syscall_hint_len() -> usize; + + /// Reads the next element in the hint stream into the given buffer. + pub fn syscall_hint_read(ptr: *mut u8, len: usize); + + /// Allocates a buffer aligned to the given alignment. + pub fn sys_alloc_aligned(bytes: usize, align: usize) -> *mut u8; + + /// Decompresses a BLS12-381 point. + pub fn syscall_bls12381_decompress(point: &mut [u8; 96], is_odd: bool); + + /// Computes a big integer operation with a modulus. + pub fn sys_bigint( + result: *mut [u32; 8], + op: u32, + x: *const [u32; 8], + y: *const [u32; 8], + modulus: *const [u32; 8], + ); + + /// Executes a BLS12-381 field addition on the given inputs. + pub fn syscall_bls12381_fp_addmod(p: *mut u32, q: *const u32); + + /// Executes a BLS12-381 field subtraction on the given inputs. + pub fn syscall_bls12381_fp_submod(p: *mut u32, q: *const u32); + + /// Executes a BLS12-381 field multiplication on the given inputs. + pub fn syscall_bls12381_fp_mulmod(p: *mut u32, q: *const u32); + + /// Executes a BLS12-381 Fp2 addition on the given inputs. + pub fn syscall_bls12381_fp2_addmod(p: *mut u32, q: *const u32); + + /// Executes a BLS12-381 Fp2 subtraction on the given inputs. + pub fn syscall_bls12381_fp2_submod(p: *mut u32, q: *const u32); + + /// Executes a BLS12-381 Fp2 multiplication on the given inputs. + pub fn syscall_bls12381_fp2_mulmod(p: *mut u32, q: *const u32); + + /// Executes a BN254 field addition on the given inputs. + pub fn syscall_bn254_fp_addmod(p: *mut u32, q: *const u32); + + /// Executes a BN254 field subtraction on the given inputs. + pub fn syscall_bn254_fp_submod(p: *mut u32, q: *const u32); + + /// Executes a BN254 field multiplication on the given inputs. + pub fn syscall_bn254_fp_mulmod(p: *mut u32, q: *const u32); + + /// Executes a BN254 Fp2 addition on the given inputs. + pub fn syscall_bn254_fp2_addmod(p: *mut u32, q: *const u32); + + /// Executes a BN254 Fp2 subtraction on the given inputs. + pub fn syscall_bn254_fp2_submod(p: *mut u32, q: *const u32); + + /// Executes a BN254 Fp2 multiplication on the given inputs. + pub fn syscall_bn254_fp2_mulmod(p: *mut u32, q: *const u32); + +} +``` diff --git a/book/static/examples_cycle-tracking_program_bin_normal.rs.mdx b/book/static/examples_cycle-tracking_program_bin_normal.rs.mdx new file mode 100644 index 0000000000..a9dc61d95d --- /dev/null +++ b/book/static/examples_cycle-tracking_program_bin_normal.rs.mdx @@ -0,0 +1,34 @@ +```rust +#![no_main] +sp1_zkvm::entrypoint!(main); + +#[sp1_derive::cycle_tracker] +pub fn expensive_function(x: usize) -> usize { + let mut y = 1; + for _ in 0..100 { + y *= x; + y %= 7919; + } + y +} + +pub fn main() { + let mut nums = vec![1, 1]; + + // Setup a large vector with Fibonacci-esque numbers. + println!("cycle-tracker-start: setup"); + for _ in 0..100 { + let mut c = nums[nums.len() - 1] + nums[nums.len() - 2]; + c %= 7919; + nums.push(c); + } + println!("cycle-tracker-end: setup"); + + println!("cycle-tracker-start: main-body"); + for i in 0..2 { + let result = expensive_function(nums[nums.len() - i - 1]); + println!("result: {}", result); + } + println!("cycle-tracker-end: main-body"); +} +``` diff --git a/book/static/examples_fibonacci_program_src_main.rs.mdx b/book/static/examples_fibonacci_program_src_main.rs.mdx new file mode 100644 index 0000000000..86d550cddf --- /dev/null +++ b/book/static/examples_fibonacci_program_src_main.rs.mdx @@ -0,0 +1,39 @@ +```rust +//! A simple program that takes a number `n` as input, and writes the `n-1`th and `n`th fibonacci +//! number as an output. + +// These two lines are necessary for the program to properly compile. +// +// Under the hood, we wrap your main function with some extra code so that it behaves properly +// inside the zkVM. +#![no_main] +sp1_zkvm::entrypoint!(main); + +pub fn main() { + // Read an input to the program. + // + // Behind the scenes, this compiles down to a system call which handles reading inputs + // from the prover. + let n = sp1_zkvm::io::read::(); + + // Write n to public input + sp1_zkvm::io::commit(&n); + + // Compute the n'th fibonacci number, using normal Rust code. + let mut a = 0; + let mut b = 1; + for _ in 0..n { + let mut c = a + b; + c %= 7919; // Modulus to prevent overflow. + a = b; + b = c; + } + + // Write the output of the program. + // + // Behind the scenes, this also compiles down to a system call which handles writing + // outputs to the prover. + sp1_zkvm::io::commit(&a); + sp1_zkvm::io::commit(&b); +} +``` diff --git a/book/static/examples_fibonacci_script_bin_compressed.rs.mdx b/book/static/examples_fibonacci_script_bin_compressed.rs.mdx new file mode 100644 index 0000000000..4115db7b74 --- /dev/null +++ b/book/static/examples_fibonacci_script_bin_compressed.rs.mdx @@ -0,0 +1,35 @@ +```rust +use sp1_sdk::{utils, ProverClient, SP1Stdin}; + +/// The ELF we want to execute inside the zkVM. +const ELF: &[u8] = include_bytes!("../../program/elf/riscv32im-succinct-zkvm-elf"); + +fn main() { + // Setup logging. + utils::setup_logger(); + + // Create an input stream and write '500' to it. + let n = 500u32; + let mut stdin = SP1Stdin::new(); + stdin.write(&n); + + // Generate the constant-sized proof for the given program and input. + let client = ProverClient::new(); + let (pk, vk) = client.setup(ELF); + let mut proof = client.prove(&pk, stdin).compressed().run().unwrap(); + + println!("generated proof"); + // Read and verify the output. + let a = proof.public_values.read::(); + let b = proof.public_values.read::(); + println!("a: {}, b: {}", a, b); + + // Verify proof and public values + client.verify(&proof, &vk).expect("verification failed"); + + // Save the proof. + proof.save("compressed-proof-with-pis.bin").expect("saving proof failed"); + + println!("successfully generated and verified proof for the program!") +} +``` diff --git a/book/static/examples_fibonacci_script_bin_execute.rs.mdx b/book/static/examples_fibonacci_script_bin_execute.rs.mdx new file mode 100644 index 0000000000..3e808935d2 --- /dev/null +++ b/book/static/examples_fibonacci_script_bin_execute.rs.mdx @@ -0,0 +1,37 @@ +```rust +use sp1_sdk::{utils, ProverClient, SP1Stdin}; + +/// The ELF we want to execute inside the zkVM. +const ELF: &[u8] = include_bytes!("../../program/elf/riscv32im-succinct-zkvm-elf"); + +fn main() { + // Setup logging. + utils::setup_logger(); + + // Create an input stream and write '500' to it. + let n = 500u32; + + let mut stdin = SP1Stdin::new(); + stdin.write(&n); + + // Only execute the program and get a `SP1PublicValues` object. + let client = ProverClient::new(); + let (mut public_values, execution_report) = client.execute(ELF, stdin).run().unwrap(); + + // Print the total number of cycles executed and the full execution report with a breakdown of + // the RISC-V opcode and syscall counts. + println!( + "Executed program with {} cycles", + execution_report.total_instruction_count() + execution_report.total_syscall_count() + ); + println!("Full execution report:\n{:?}", execution_report); + + // Read and verify the output. + let _ = public_values.read::(); + let a = public_values.read::(); + let b = public_values.read::(); + + println!("a: {}", a); + println!("b: {}", b); +} +``` diff --git a/book/static/examples_fibonacci_script_bin_groth16_bn254.rs.mdx b/book/static/examples_fibonacci_script_bin_groth16_bn254.rs.mdx new file mode 100644 index 0000000000..37d7f3f23c --- /dev/null +++ b/book/static/examples_fibonacci_script_bin_groth16_bn254.rs.mdx @@ -0,0 +1,42 @@ +```rust +use sp1_sdk::{utils, HashableKey, ProverClient, SP1Stdin}; + +/// The ELF we want to execute inside the zkVM. +const ELF: &[u8] = include_bytes!("../../program/elf/riscv32im-succinct-zkvm-elf"); + +fn main() { + // Setup logging. + utils::setup_logger(); + + // Create an input stream and write '500' to it. + let n = 500u32; + + let mut stdin = SP1Stdin::new(); + stdin.write(&n); + + // Set up the pk and vk. + let client = ProverClient::new(); + let (pk, vk) = client.setup(ELF); + println!("vk: {:?}", vk.bytes32()); + + // Generate the Groth16 proof. + let proof = client.prove(&pk, stdin).groth16().run().unwrap(); + println!("generated proof"); + + // Get the public values as bytes. + let public_values = proof.public_values.as_slice(); + println!("public values: 0x{}", hex::encode(public_values)); + + // Get the proof as bytes. + let solidity_proof = proof.bytes(); + println!("proof: 0x{}", hex::encode(solidity_proof)); + + // Verify proof and public values + client.verify(&proof, &vk).expect("verification failed"); + + // Save the proof. + proof.save("fibonacci-groth16.bin").expect("saving proof failed"); + + println!("successfully generated and verified proof for the program!") +} +``` diff --git a/book/static/examples_fibonacci_script_build.rs.mdx b/book/static/examples_fibonacci_script_build.rs.mdx new file mode 100644 index 0000000000..a6f5f1636e --- /dev/null +++ b/book/static/examples_fibonacci_script_build.rs.mdx @@ -0,0 +1,5 @@ +```rust +fn main() { + sp1_build::build_program("../program"); +} +``` diff --git a/book/static/examples_fibonacci_script_src_main.rs.mdx b/book/static/examples_fibonacci_script_src_main.rs.mdx new file mode 100644 index 0000000000..0aa64a9583 --- /dev/null +++ b/book/static/examples_fibonacci_script_src_main.rs.mdx @@ -0,0 +1,56 @@ +```rust +use sp1_sdk::{include_elf, utils, ProverClient, SP1ProofWithPublicValues, SP1Stdin}; + +/// The ELF we want to execute inside the zkVM. +const ELF: &[u8] = include_elf!("fibonacci-program"); + +fn main() { + // Setup logging. + utils::setup_logger(); + + // Create an input stream and write '500' to it. + let n = 1000u32; + + // The input stream that the program will read from using `sp1_zkvm::io::read`. Note that the + // types of the elements in the input stream must match the types being read in the program. + let mut stdin = SP1Stdin::new(); + stdin.write(&n); + + // Create a `ProverClient` method. + let client = ProverClient::new(); + + // Execute the program using the `ProverClient.execute` method, without generating a proof. + let (_, report) = client.execute(ELF, stdin.clone()).run().unwrap(); + println!("executed program with {} cycles", report.total_instruction_count()); + + // Generate the proof for the given program and input. + let (pk, vk) = client.setup(ELF); + let mut proof = client.prove(&pk, stdin).run().unwrap(); + + println!("generated proof"); + + // Read and verify the output. + // + // Note that this output is read from values committed to in the program using + // `sp1_zkvm::io::commit`. + let _ = proof.public_values.read::(); + let a = proof.public_values.read::(); + let b = proof.public_values.read::(); + + println!("a: {}", a); + println!("b: {}", b); + + // Verify proof and public values + client.verify(&proof, &vk).expect("verification failed"); + + // Test a round trip of proof serialization and deserialization. + proof.save("proof-with-pis.bin").expect("saving proof failed"); + let deserialized_proof = + SP1ProofWithPublicValues::load("proof-with-pis.bin").expect("loading proof failed"); + + // Verify the deserialized proof. + client.verify(&deserialized_proof, &vk).expect("verification failed"); + + println!("successfully generated and verified proof for the program!") +} +``` diff --git a/book/static/examples_groth16_program_src_main.rs.mdx b/book/static/examples_groth16_program_src_main.rs.mdx new file mode 100644 index 0000000000..6e195f06bf --- /dev/null +++ b/book/static/examples_groth16_program_src_main.rs.mdx @@ -0,0 +1,30 @@ +```rust +//! A program that verifies a Groth16 proof in SP1. + +#![no_main] +sp1_zkvm::entrypoint!(main); + +use sp1_verifier::Groth16Verifier; + +pub fn main() { + // Read the proof, public values, and vkey hash from the input stream. + let proof = sp1_zkvm::io::read_vec(); + let sp1_public_values = sp1_zkvm::io::read_vec(); + let sp1_vkey_hash: String = sp1_zkvm::io::read(); + + // Verify the groth16 proof. + let groth16_vk = *sp1_verifier::GROTH16_VK_BYTES; + println!("cycle-tracker-start: verify"); + let result = Groth16Verifier::verify(&proof, &sp1_public_values, &sp1_vkey_hash, groth16_vk); + println!("cycle-tracker-end: verify"); + + match result { + Ok(()) => { + println!("Proof is valid"); + } + Err(e) => { + println!("Error verifying proof: {:?}", e); + } + } +} +``` diff --git a/book/static/examples_groth16_script_src_main.rs.mdx b/book/static/examples_groth16_script_src_main.rs.mdx new file mode 100644 index 0000000000..7be12e7e3d --- /dev/null +++ b/book/static/examples_groth16_script_src_main.rs.mdx @@ -0,0 +1,57 @@ +```rust +//! A script that generates a Groth16 proof for the Fibonacci program, and verifies the +//! Groth16 proof in SP1. + +use sp1_sdk::{include_elf, utils, HashableKey, ProverClient, SP1Stdin}; + +/// The ELF for the Groth16 verifier program. +const GROTH16_ELF: &[u8] = include_elf!("groth16-verifier-program"); + +/// The ELF for the Fibonacci program. +const FIBONACCI_ELF: &[u8] = include_elf!("fibonacci-program"); + +/// Generates the proof, public values, and vkey hash for the Fibonacci program in a format that +/// can be read by `sp1-verifier`. +/// +/// Returns the proof bytes, public values, and vkey hash. +fn generate_fibonacci_proof() -> (Vec, Vec, String) { + // Create an input stream and write '20' to it. + let n = 20u32; + + // The input stream that the program will read from using `sp1_zkvm::io::read`. Note that the + // types of the elements in the input stream must match the types being read in the program. + let mut stdin = SP1Stdin::new(); + stdin.write(&n); + + // Create a `ProverClient`. + let client = ProverClient::new(); + + // Generate the groth16 proof for the Fibonacci program. + let (pk, vk) = client.setup(FIBONACCI_ELF); + println!("vk: {:?}", vk.bytes32()); + let proof = client.prove(&pk, stdin).groth16().run().unwrap(); + (proof.bytes(), proof.public_values.to_vec(), vk.bytes32()) +} + +fn main() { + // Setup logging. + utils::setup_logger(); + + // Generate the Fibonacci proof, public values, and vkey hash. + let (fibonacci_proof, fibonacci_public_values, vk) = generate_fibonacci_proof(); + + // Write the proof, public values, and vkey hash to the input stream. + let mut stdin = SP1Stdin::new(); + stdin.write_vec(fibonacci_proof); + stdin.write_vec(fibonacci_public_values); + stdin.write(&vk); + + // Create a `ProverClient`. + let client = ProverClient::new(); + + // Execute the program using the `ProverClient.execute` method, without generating a proof. + let (_, report) = client.execute(GROTH16_ELF, stdin.clone()).run().unwrap(); + println!("executed groth16 program with {} cycles", report.total_instruction_count()); + println!("{}", report); +} +``` diff --git a/book/static/examples_io_program_src_main.rs.mdx b/book/static/examples_io_program_src_main.rs.mdx new file mode 100644 index 0000000000..ec0c239891 --- /dev/null +++ b/book/static/examples_io_program_src_main.rs.mdx @@ -0,0 +1,25 @@ +```rust +#![no_main] +sp1_zkvm::entrypoint!(main); + +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Debug, PartialEq)] +struct MyPointUnaligned { + pub x: usize, + pub y: usize, + pub b: bool, +} + +pub fn main() { + let p1 = sp1_zkvm::io::read::(); + println!("Read point: {:?}", p1); + + let p2 = sp1_zkvm::io::read::(); + println!("Read point: {:?}", p2); + + let p3: MyPointUnaligned = MyPointUnaligned { x: p1.x + p2.x, y: p1.y + p2.y, b: p1.b && p2.b }; + println!("Addition of 2 points: {:?}", p3); + sp1_zkvm::io::commit(&p3); +} +``` diff --git a/book/static/img/favicon.ico b/book/static/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..fe73ed177aa0be8e28a0eeb32c40528b5fddcb30 GIT binary patch literal 4286 zcmdT|%S%*I9KP*)*vl408EquW76n0zFsNP8Cg?@WYL`Xz2UM$sP$LL>&;ubMs#OtD z;9@k*DK%eVT0Ta{QAW)Nkbx1-eRrx-ANU6&x!Sf;$!ZN`d%5?l>f4KUgU4|(TvQ?Wwi8IYLp zpT|ru5G*n}r*Iv7`!2TlxIv-)xWaffpl1E!q49T7Pg_^bL2TfDck!s-s?dE|VY-7H zly@Fk_{0{BFMHB`kg|=`>yaa|Gb3CC>X!F=lBUAiS zyPo;5U7_GHak1CA4XRW?NT=LTVgad65D)){rvHk4~vAE}wewdQ) z(o=Hd^X}Z>iz#HUDK$m*0vca@Y~$;@#Kt^xe(3LV1>%E1f9V4I;|xBMC!q@O_IKm! zXVw?lk9C!BpCadj44=rm-XEW^&n#I2{F%__BgS3ZF~$b>BBHPOLVP6kI2Y%G`It)& jkp99hu6gyZrz4a_o86b5zw+ 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 WMMY+M=LKyI{G*o;$bygay!=1Kiq0tj literal 145784 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 Date: Tue, 3 Dec 2024 16:49:21 -0800 Subject: [PATCH 2/6] chore: freeze 3.4.0 --- .gitignore | 3 +- book/docusaurus.config.ts | 4 + .../developers/building-circuit-artifacts.md | 8 + .../version-3.4.0/developers/common-issues.md | 147 +++++++++++ .../developers/rv32im-specification.md | 8 + .../version-3.4.0/developers/usage-in-ci.md | 27 ++ .../generating-proofs/advanced.mdx | 68 +++++ .../generating-proofs/basics.mdx | 19 ++ .../hardware-acceleration.md | 7 + .../hardware-acceleration/avx.md | 30 +++ .../hardware-acceleration/cuda.md | 26 ++ .../generating-proofs/proof-types.md | 49 ++++ .../generating-proofs/prover-network.md | 9 + .../prover-network/explorer.png | Bin 0 -> 167094 bytes .../prover-network/key-setup.md | 40 +++ .../generating-proofs/prover-network/key.png | Bin 0 -> 10085 bytes .../generating-proofs/prover-network/usage.md | 83 +++++++ .../prover-network/versions.md | 30 +++ .../recommended-workflow.mdx | 57 +++++ .../version-3.4.0/generating-proofs/setup.md | 38 +++ .../generating-proofs/sp1-sdk-faq.md | 15 ++ .../getting-started/hardware-requirements.md | 41 +++ .../version-3.4.0/getting-started/install.md | 115 +++++++++ .../getting-started/project-template.md | 5 + .../getting-started/quickstart.md | 124 ++++++++++ .../version-3.4.0/introduction.md | 33 +++ .../contract-addresses.md | 80 ++++++ .../onchain-verification/getting-started.mdx | 34 +++ .../onchain-verification/solidity-sdk.md | 122 +++++++++ book/versioned_docs/version-3.4.0/sp1.png | Bin 0 -> 66629 bytes .../version-3.4.0/theme/head.hbs | 6 + .../verification/off-chain-verification.md | 48 ++++ .../onchain/contract-addresses.md | 101 ++++++++ .../verification/onchain/getting-started.mdx | 33 +++ .../verification/onchain/solidity-sdk.md | 122 +++++++++ .../version-3.4.0/what-is-a-zkvm.md | 35 +++ .../version-3.4.0/why-use-sp1.md | 46 ++++ .../version-3.4.0/writing-programs/basics.mdx | 15 ++ .../writing-programs/compiling.mdx | 100 ++++++++ .../writing-programs/cycle-tracking.mdx | 124 ++++++++++ .../writing-programs/inputs-and-outputs.mdx | 67 +++++ .../writing-programs/patched-crates.md | 234 ++++++++++++++++++ .../writing-programs/precompiles.mdx | 24 ++ .../writing-programs/proof-aggregation.md | 58 +++++ .../version-3.4.0/writing-programs/setup.md | 50 ++++ .../version-3.4.0-sidebars.json | 98 ++++++++ book/versions.json | 3 + 47 files changed, 2385 insertions(+), 1 deletion(-) create mode 100644 book/versioned_docs/version-3.4.0/developers/building-circuit-artifacts.md create mode 100644 book/versioned_docs/version-3.4.0/developers/common-issues.md create mode 100644 book/versioned_docs/version-3.4.0/developers/rv32im-specification.md create mode 100644 book/versioned_docs/version-3.4.0/developers/usage-in-ci.md create mode 100644 book/versioned_docs/version-3.4.0/generating-proofs/advanced.mdx create mode 100644 book/versioned_docs/version-3.4.0/generating-proofs/basics.mdx create mode 100644 book/versioned_docs/version-3.4.0/generating-proofs/hardware-acceleration.md create mode 100644 book/versioned_docs/version-3.4.0/generating-proofs/hardware-acceleration/avx.md create mode 100644 book/versioned_docs/version-3.4.0/generating-proofs/hardware-acceleration/cuda.md create mode 100644 book/versioned_docs/version-3.4.0/generating-proofs/proof-types.md create mode 100644 book/versioned_docs/version-3.4.0/generating-proofs/prover-network.md create mode 100644 book/versioned_docs/version-3.4.0/generating-proofs/prover-network/explorer.png create mode 100644 book/versioned_docs/version-3.4.0/generating-proofs/prover-network/key-setup.md create mode 100644 book/versioned_docs/version-3.4.0/generating-proofs/prover-network/key.png create mode 100644 book/versioned_docs/version-3.4.0/generating-proofs/prover-network/usage.md create mode 100644 book/versioned_docs/version-3.4.0/generating-proofs/prover-network/versions.md create mode 100644 book/versioned_docs/version-3.4.0/generating-proofs/recommended-workflow.mdx create mode 100644 book/versioned_docs/version-3.4.0/generating-proofs/setup.md create mode 100644 book/versioned_docs/version-3.4.0/generating-proofs/sp1-sdk-faq.md create mode 100644 book/versioned_docs/version-3.4.0/getting-started/hardware-requirements.md create mode 100644 book/versioned_docs/version-3.4.0/getting-started/install.md create mode 100644 book/versioned_docs/version-3.4.0/getting-started/project-template.md create mode 100644 book/versioned_docs/version-3.4.0/getting-started/quickstart.md create mode 100644 book/versioned_docs/version-3.4.0/introduction.md create mode 100644 book/versioned_docs/version-3.4.0/onchain-verification/contract-addresses.md create mode 100644 book/versioned_docs/version-3.4.0/onchain-verification/getting-started.mdx create mode 100644 book/versioned_docs/version-3.4.0/onchain-verification/solidity-sdk.md create mode 100644 book/versioned_docs/version-3.4.0/sp1.png create mode 100644 book/versioned_docs/version-3.4.0/theme/head.hbs create mode 100644 book/versioned_docs/version-3.4.0/verification/off-chain-verification.md create mode 100644 book/versioned_docs/version-3.4.0/verification/onchain/contract-addresses.md create mode 100644 book/versioned_docs/version-3.4.0/verification/onchain/getting-started.mdx create mode 100644 book/versioned_docs/version-3.4.0/verification/onchain/solidity-sdk.md create mode 100644 book/versioned_docs/version-3.4.0/what-is-a-zkvm.md create mode 100644 book/versioned_docs/version-3.4.0/why-use-sp1.md create mode 100644 book/versioned_docs/version-3.4.0/writing-programs/basics.mdx create mode 100644 book/versioned_docs/version-3.4.0/writing-programs/compiling.mdx create mode 100644 book/versioned_docs/version-3.4.0/writing-programs/cycle-tracking.mdx create mode 100644 book/versioned_docs/version-3.4.0/writing-programs/inputs-and-outputs.mdx create mode 100644 book/versioned_docs/version-3.4.0/writing-programs/patched-crates.md create mode 100644 book/versioned_docs/version-3.4.0/writing-programs/precompiles.mdx create mode 100644 book/versioned_docs/version-3.4.0/writing-programs/proof-aggregation.md create mode 100644 book/versioned_docs/version-3.4.0/writing-programs/setup.md create mode 100644 book/versioned_sidebars/version-3.4.0-sidebars.json create mode 100644 book/versions.json diff --git a/.gitignore b/.gitignore index 8252583295..ef9ee95d3b 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ pgo-data.profdata **/proof-with-io.bin **/program.bin **/stdin.bin +**/node_modules # Benchmark benchmark.csv @@ -37,4 +38,4 @@ crates/prover/vk # Example fibonacci groth16 / plonk proofs examples/fibonacci/fibonacci-groth16.bin -examples/fibonacci/fibonacci-plonk.bin \ No newline at end of file +examples/fibonacci/fibonacci-plonk.bin diff --git a/book/docusaurus.config.ts b/book/docusaurus.config.ts index df730e12ca..138a7891df 100644 --- a/book/docusaurus.config.ts +++ b/book/docusaurus.config.ts @@ -66,6 +66,10 @@ const config: Config = { label: 'GitHub', position: 'right', }, + { + type: "docsVersionDropdown", + position: "right", + }, ], }, footer: { diff --git a/book/versioned_docs/version-3.4.0/developers/building-circuit-artifacts.md b/book/versioned_docs/version-3.4.0/developers/building-circuit-artifacts.md new file mode 100644 index 0000000000..9e936d3ff3 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/developers/building-circuit-artifacts.md @@ -0,0 +1,8 @@ +# Building Circuit Artifacts + +To build the production Groth16 and PLONK Bn254 artifacts from scratch, you can use the `Makefile` inside the `prover` directory. + +```shell,noplayground +cd prover +RUST_LOG=info make build-circuits +``` diff --git a/book/versioned_docs/version-3.4.0/developers/common-issues.md b/book/versioned_docs/version-3.4.0/developers/common-issues.md new file mode 100644 index 0000000000..5d0a50e808 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/developers/common-issues.md @@ -0,0 +1,147 @@ +# Common Issues + +## Rust Version Errors + +If you are using a library that has an MSRV specified, you may encounter an error like this when building your program. + +```txt +package `alloy v0.1.1 cannot be built because it requires rustc 1.76 or newer, while the currently active rustc version is 1.75.0-nightly` +``` + +This is due to the fact that your current Succinct Rust toolchain has been built with a lower version than the MSRV of the crates you are using. + +You can check the version of your local Succinct Rust toolchain by running `cargo +succinct --version`. The latest release of the Succinct Rust toolchain is **1.81**. You can update to the latest version by running [`sp1up`](../getting-started/install.md). + +```shell +% sp1up +% cargo +succinct --version +cargo 1.81.0-dev (2dbb1af80 2024-08-20) +``` + +A Succinct Rust toolchain with version **1.81** should work for all crates that have an MSRV of **1.81** or lower. + +If the MSRV of your crate is higher than **1.81**, try the following: + +- If using `cargo prove build` directly, pass the `--ignore-rust-version` flag: + + ```bash + cargo prove build --ignore-rust-version + ``` + +- If using `build_program` in an `build.rs` file with the `sp1-build` crate, set `ignore_rust_version` to true inside the `BuildArgs` struct and use + `build_program_with_args`: + + ```rust + let args = BuildArgs { + ignore_rust_version: true, + ..Default::default() + }; + build_program_with_args("path/to/program", args); + ``` + +## `alloy_sol_types` Errors + +If you are using a library that depends on `alloy_sol_types`, and encounter an error like this: + +```txt +perhaps two different versions of crate `alloy_sol_types` are being used? +``` + +This is likely due to two different versions of `alloy_sol_types` being used. To fix this, you can set `default-features` to `false` for the `sp1-sdk` dependency in your `Cargo.toml`. + +```toml +[dependencies] +sp1-sdk = { version = "2.0.0", default-features = false } +``` + +This will configure out the `network` feature which will remove the dependency on `alloy_sol_types` and configure out the `NetworkProver`. + +## Stack Overflow Errors + Bus Errors + +If you encounter any of the following errors in a script using `sp1-sdk`: + +```shell +# Stack Overflow Error +thread 'main' has overflowed its stack +fatal runtime error: stack overflow + +# Bus Error +zsh: bus error + +# Segmentation Fault +Segmentation fault (core dumped) +``` + +Run your script with the `--release` flag. SP1 currently only supports release builds. This is because +the `sp1-core` library and `sp1-recursion` require being compiled with the `release` profile. + +## C Binding Errors + +If you are building a program that uses C bindings or has dependencies that use C bindings, you may encounter the following errors: + +```txt +cc did not execute successfully +``` + +```txt +Failed to find tool. Is `riscv32-unknown-elf-gcc` installed? +``` + +To resolve this, re-install sp1 with the `--c-toolchain` flag: + +```bash +sp1up --c-toolchain +``` + +This will install the C++ toolchain for RISC-V and set the `CC_riscv32im_succinct_zkvm_elf` environment +variable to the path of the installed `riscv32-unknown-elf-gcc` binary. You can also use your own +C++ toolchain be setting this variable manually: + +```bash +export CC_riscv32im_succinct_zkvm_elf=/path/to/toolchain +``` + +## Compilation Errors with [`sp1-lib::syscall_verify_sp1_proof`](https://docs.rs/sp1-lib/latest/sp1_lib/fn.syscall_verify_sp1_proof.html) + +If you are using the [`sp1-lib::syscall_verify_sp1_proof`](https://docs.rs/sp1-lib/latest/sp1_lib/fn.syscall_verify_sp1_proof.html) function, you may encounter compilation errors when building your program. + +```bash + [sp1] = note: rust-lld: error: undefined symbol: syscall_verify_sp1_proof + [sp1] >>> referenced by sp1_lib.b593533d149f0f6e-cgu.0 + [sp1] >>> sp1_lib-8f5deb4c47d01871.sp1_lib.b593533d149f0f6e-cgu.0.rcgu.o:(sp1_lib::verify::verify_sp1_proof::h5c1bb38f11b3fe71) in ... + [sp1] + [sp1] + [sp1] error: could not compile `package-name` (bin "package-name") due to 1 previous error +``` + +To resolve this, ensure that you're importing both `sp1-lib` and `sp1-zkvm` with the verify feature enabled. + +```toml +[dependencies] +sp1-lib = { version = "", features = ["verify"] } +sp1-zkvm = { version = "", features = ["verify"] } +``` + +## `sp1-sdk` `rc` Version Semver Errors + +When using release candidate (RC) versions of `sp1-sdk` (such as `3.0.0-rc1`), you might face compilation errors if you upgrade to a newer RC version (like `3.0.0-rc4`) and then try to downgrade back to an earlier RC version (such as `3.0.0-rc1`). + +This issue arises because some RC releases introduce breaking changes that aren't reflected in their version numbers according to Semantic Versioning (SemVer) rules. To fix this, you need to explicitly downgrade all related crates in your `Cargo.lock` file to match the desired RC version. + +To start, verify that the `sp1-sdk` version in your `Cargo.lock` file differs from the version specified in your `Cargo.toml` file: + +```shell +% cargo tree -i sp1-sdk +sp1-sdk v3.0.0-rc4 (/Users/sp1/crates/sdk) +├── sp1-cli v3.0.0-rc4 (/Users/sp1/crates/cli) +├── sp1-eval v3.0.0-rc4 (/Users/sp1/crates/eval) +└── sp1-perf v3.0.0-rc4 (/Users/sp1/crates/perf) +``` + +After confirming the version of `sp1-sdk` in your lockfile, you can downgrade to a specific RC version using the following command. Replace `3.0.0-rc1` with the desired version number: + +```shell +% cargo update -p sp1-build -p sp1-sdk -p sp1-recursion-derive -p sp1-recursion-gnark-ffi -p sp1-zkvm --precise 3.0.0-rc1 +``` + +This command will update the `Cargo.lock` file to specify the lower RC version, resolving any version conflicts and allowing you to continue development. diff --git a/book/versioned_docs/version-3.4.0/developers/rv32im-specification.md b/book/versioned_docs/version-3.4.0/developers/rv32im-specification.md new file mode 100644 index 0000000000..84e8aa7584 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/developers/rv32im-specification.md @@ -0,0 +1,8 @@ +# RV32IM Specification + +SP1 implements the RISC-V RV32IM instruction set with some implementation details that make it more suitable for proving. + +- LW/SW memory access must be word aligned. +- LH/LHU/SH memory access must be half-word aligned. +- Memory access is only valid for addresses `0x20, 0x78000000`. Accessing addresses outside of this range will result in undefined behavior. The global heap allocator in `sp1_zkvm` will panic if memory exceeds this range. +- The ECALL instruction is used for system calls and precompiles. Only valid syscall IDs should be called, and only using the specific convention of loading the ID into register T0 and arguments into registers A0 and A1. If the arguments are addresses, they must be word-aligned. Failure to follow this convention can result in undefined behavior. Correct usages can be found in the `sp1_zkvm` and `sp1_lib` crates. diff --git a/book/versioned_docs/version-3.4.0/developers/usage-in-ci.md b/book/versioned_docs/version-3.4.0/developers/usage-in-ci.md new file mode 100644 index 0000000000..33da5e45f9 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/developers/usage-in-ci.md @@ -0,0 +1,27 @@ +# Usage in CI + +You may want to use SP1 in your [Github Actions](https://docs.github.com/en/actions) CI workflow. + +You first need to have Rust installed, and you can use +[actions-rs/toolchain](https://github.com/actions-rs/toolchain) for this: + +```yaml +- name: Install Rust Toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: 1.81.0 + profile: default + override: true + default: true + components: llvm-tools, rustc-dev +``` + +And then you can install the SP1 toolchain: + +```yaml +- name: Install SP1 toolchain + run: | + curl -L https://sp1.succinct.xyz | bash + ~/.sp1/bin/sp1up + ~/.sp1/bin/cargo-prove prove --version +``` diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/advanced.mdx b/book/versioned_docs/version-3.4.0/generating-proofs/advanced.mdx new file mode 100644 index 0000000000..8cdd0b3e72 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/generating-proofs/advanced.mdx @@ -0,0 +1,68 @@ +import Compressed from "../../../static/examples_fibonacci_script_bin_compressed.rs.mdx"; +import Execute from "../../../static/examples_fibonacci_script_bin_execute.rs.mdx"; + +# Advanced Usage + +## Execution Only + +We recommend that during the development of large programs (> 1 million cycles) you do not generate proofs each time. +Instead, you should have your script only execute the program with the RISC-V runtime and read `public_values`. Here is an example: + + + +If the execution of your program succeeds, then proof generation should succeed as well! (Unless there is a bug in our zkVM implementation.) + +## Compressed Proofs + +With the `ProverClient`, the default `prove` function generates a proof that is succinct, but can have size that scales with the number of cycles of the program. To generate a compressed proof of constant size, you can use the `prove_compressed` function instead. This will use STARK recursion to generate a proof that is constant size (around 7Kb), but will be slower than just calling `prove`, as it will use recursion to combine the core SP1 proof into a single constant-sized proof. + + + +You can run the above script with `RUST_LOG=info cargo run --bin compressed --release` from `examples/fibonacci/script`. + +## Logging and Tracing Information + +You can use `utils::setup_logger()` to enable logging information respectively. You should only use one or the other of these functions. + +**Logging:** + +```rust +utils::setup_logger(); +``` + +You must run your command with: + +```bash +RUST_LOG=info cargo run --release +``` + +## CPU Acceleration + +To enable CPU acceleration, you can use the `RUSTFLAGS` environment variable to enable the `target-cpu=native` flag when running your script. This will enable the compiler to generate code that is optimized for your CPU. + +```bash +RUSTFLAGS='-C target-cpu=native' cargo run --release +``` + +Currently there is support for AVX512 and NEON SIMD instructions. For NEON, you must also enable the `sp1-sdk` feature `neon` in your script crate's `Cargo.toml` file. + +```toml +sp1-sdk = { version = "2.0.0", features = ["neon"] } +``` + +## Performance + +For maximal performance, you should run proof generation with the following command and vary your `shard_size` depending on your program's number of cycles. + +```rust +SHARD_SIZE=4194304 RUST_LOG=info RUSTFLAGS='-C target-cpu=native' cargo run --release +``` + +## Memory Usage + +To reduce memory usage, set the `SHARD_BATCH_SIZE` environment variable depending on how much RAM +your machine has. A higher number will use more memory, but will be faster. + +```rust +SHARD_BATCH_SIZE=1 SHARD_SIZE=2097152 RUST_LOG=info RUSTFLAGS='-C target-cpu=native' cargo run --release +``` diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/basics.mdx b/book/versioned_docs/version-3.4.0/generating-proofs/basics.mdx new file mode 100644 index 0000000000..c33c525691 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/generating-proofs/basics.mdx @@ -0,0 +1,19 @@ +import Example from "../../../static/examples_fibonacci_script_src_main.rs.mdx"; + +# Basics + +All the methods you'll need for generating proofs are included in the `sp1_sdk` crate. Most importantly, you'll need to use the `ProverClient` to setup a proving key and verifying key for your program and then use the `execute`, `prove` and `verify` methods to execute your program, and generate and verify proofs. + +To make this more concrete, let's walk through a simple example of generating a proof for a Fibonacci program inside the zkVM. + +## Example: Fibonacci + + + +You can run the above script in the `script` directory with `RUST_LOG=info cargo run --release`. Note that running the above script will generate a proof locally. + +
+WARNING: Local proving often is much slower than the prover network and for certain proof types (e.g. Groth16, PLONK) require a significant amount of RAM and will likely not work on a laptop. +
+ +We recommend using the [prover network](./prover-network.md) to generate proofs. Read more about the [recommended workflow](./recommended-workflow) for developing with SP1. diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/hardware-acceleration.md b/book/versioned_docs/version-3.4.0/generating-proofs/hardware-acceleration.md new file mode 100644 index 0000000000..766c9db4ed --- /dev/null +++ b/book/versioned_docs/version-3.4.0/generating-proofs/hardware-acceleration.md @@ -0,0 +1,7 @@ +# Hardware Acceleration + +SP1 supports hardware acceleration on the following platforms: +- [AVX256/AVX512](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions) on x86 CPUs +- [CUDA](https://en.wikipedia.org/wiki/CUDA) on Nvidia GPUs + +To enable hardware acceleration, please refer to the platform specific instructions available in this section. \ No newline at end of file diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/hardware-acceleration/avx.md b/book/versioned_docs/version-3.4.0/generating-proofs/hardware-acceleration/avx.md new file mode 100644 index 0000000000..e9fe8007bf --- /dev/null +++ b/book/versioned_docs/version-3.4.0/generating-proofs/hardware-acceleration/avx.md @@ -0,0 +1,30 @@ +# AVX + +SP1 supports both AVX256 and AVX512 acceleration on x86 CPUs due to support in [Plonky3](https://github.com/Plonky3/Plonky3). +Whenever possible, we recommend using AVX512 acceleration as it provides better performance. + +## Checking for AVX + +To check if your CPU supports AVX, you can run the following command: + +`grep avx /proc/cpuinfo` + +Look for the flags `avx2` and `avx512`. + +## Enabling AVX256 + +To enable AVX256 acceleration, you can set the `RUSTFLAGS` environment variable to include the following flags: + +```bash +RUSTFLAGS="-C target-cpu=native" cargo run --release +``` + +## Enabling AVX512 + +To enable AVX512 acceleration, you can set the `RUSTFLAGS` environment variable to include the following flags: + +```bash +RUSTFLAGS="-C target-cpu=native -C target-feature=+avx512f" cargo run --release +``` + +Note that the `+avx512f` flag is required to enable AVX512 acceleration. \ No newline at end of file diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/hardware-acceleration/cuda.md b/book/versioned_docs/version-3.4.0/generating-proofs/hardware-acceleration/cuda.md new file mode 100644 index 0000000000..e27d0ce9ac --- /dev/null +++ b/book/versioned_docs/version-3.4.0/generating-proofs/hardware-acceleration/cuda.md @@ -0,0 +1,26 @@ +# CUDA + +
+WARNING: CUDA proving is still an experimental feature and may be buggy. +
+ + +SP1 supports CUDA acceleration, which can provide dramatically better latency and cost performance +compared to using the CPU prover, even with AVX acceleration. + +## Software Requirements + +Please make sure you have the following installed before using the CUDA prover: + +- [CUDA 12](https://developer.nvidia.com/cuda-12-0-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=deb_local) +- [CUDA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) + +## Hardware Requirements + +- **CPU**: We recommend having at least 8 CPU cores with 32GB of RAM available to fully utilize the GPU. +- **GPU**: 24GB or more for core/compressed proofs, 40GB or more for shrink/wrap proofs + +## Usage + +To use the CUDA prover, you can compile the `sp1-sdk` crate with the `cuda` feature enabled. You +can use the normal methods on the `ProverClient` to generate proofs. \ No newline at end of file diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/proof-types.md b/book/versioned_docs/version-3.4.0/generating-proofs/proof-types.md new file mode 100644 index 0000000000..c6d713e754 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/generating-proofs/proof-types.md @@ -0,0 +1,49 @@ +# Proof Types + +There are a few different types of proofs that can be generated by the SP1 zkVM. Each proof type has its own tradeoffs in terms of proof generation time, verification cost, and proof size. + +The `ProverClient` follows a "builder" pattern that allows you to configure the proof type and other options after creating a `ProverClient` and calling `prove` on it. + +For a full list of options, see the following [docs](https://docs.rs/sp1-sdk/1.2.0/sp1_sdk/action/struct.Prove.html). + +## Core (Default) + +The default prover mode generates a list of STARK proofs that in aggregate have size proportional to +the size of the execution. Use this in settings where you don't care about **verification cost / proof size**. + +```rust +let client = ProverClient::new(); +client.prove(&pk, stdin).run().unwrap(); +``` + +## Compressed + +The compressed prover mode generates STARK proofs that have constant size. Use this in settings where you +care about **verification cost / proof size**, but not onchain verification. Compressed proofs are also useful because they can be cheaply recursively verified within SP1 itself (see the [proof aggregation](../writing-programs/proof-aggregation.md) section). + +```rust +let client = ProverClient::new(); +client.prove(&pk, stdin).compressed().run().unwrap(); +``` + +## Groth16 (Recommended) + +The Groth16 prover mode generates a SNARK proof that is ~260 bytes large and can be verified onchain for around ~270k gas. + +The trusted setup for the Groth16 circuit keys uses the [Aztec Ignition ceremony](https://github.com/AztecProtocol/ignition-verification) + entropy contributions from members of the Succinct team. + +```rust +let client = ProverClient::new(); +client.prove(&pk, stdin).groth16().run().unwrap(); +``` + +## PLONK + +The PLONK prover mode generates a SNARK proof that is ~868 bytes large and can also be verified onchain for around ~300k gas. Plonk proofs take about ~1m30s longer to generate over a compressed proof. + +PLONK does not require a trusted setup. + +```rust +let client = ProverClient::new(); +client.prove(&pk, stdin).plonk().run().unwrap(); +``` diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/prover-network.md b/book/versioned_docs/version-3.4.0/generating-proofs/prover-network.md new file mode 100644 index 0000000000..f5b61d2204 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/generating-proofs/prover-network.md @@ -0,0 +1,9 @@ +# Prover Network Beta + +> **See [Supported Versions](./prover-network/versions.md) for the currently supported versions of SP1 on the Prover Network.** + +Succinct [has been building](https://blog.succinct.xyz/succinct-network/) the Succinct Prover Network, a distributed network of provers that can generate proofs of any size quickly and reliably. It's currently in private beta, but you can get access by following the steps below. + +To get started, **[FILL OUT THIS FORM](https://forms.gle/rTUvhstS8PFfv9B3A)** to gain access to the Succinct +Network. Completing this form requires you to complete the [key +setup](./prover-network/key-setup.md) steps below. diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/explorer.png b/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/explorer.png new file mode 100644 index 0000000000000000000000000000000000000000..9241510cd8c277134e60ce1a11c46a34f9c0cf37 GIT binary patch literal 167094 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
-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 z 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 z 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 Aa{vGU literal 0 HcmV?d00001 diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/key-setup.md b/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/key-setup.md new file mode 100644 index 0000000000..222fba840f --- /dev/null +++ b/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/key-setup.md @@ -0,0 +1,40 @@ +# Prover Network: Key Setup + +The prover network uses Secp256k1 keypairs for authentication, similar to Ethereum wallets. You may generate a new keypair explicitly for use with the prover network, or use an existing keypair. + +> **You do not need to hold any funds in this account, it is used solely for access control.** + +### Generate a Public Key + +Prover network keypair credentials can be generated using the +[cast](https://book.getfoundry.sh/cast/) CLI tool. + +First install [Foundry](https://book.getfoundry.sh/getting-started/installation#using-foundryup): + +```sh +curl -L https://foundry.paradigm.xyz | bash +``` + +Upon running this command, you will be prompted to source your shell profile and run `foundryup`. Afterwards you should have access to the `cast` command. + +Use `cast` to generate a new keypair: + +```sh +cast wallet new +``` + +which will give you an output similar to this: + +![Screenshot from running 'cast wallet new' to generate an SP1_PRIVATE_KEY.](../prover-network/key.png) + +The "Address" what you should submit in the [form](https://forms.gle/rTUvhstS8PFfv9B3A), in the example above this is `0x552f0FC6D736ed965CE07a3D71aA639De15B627b`. The "Private key" should be kept safe and +secure. When interacting with the network, you will set your `SP1_PRIVATE_KEY` environment variable +to this value. + +### Retrieve an Existing Key + +If you already have an existing key you would like to use, you can also use `cast` retrieve your address: + +```sh +cast wallet address --private-key $PRIVATE_KEY +``` diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/key.png b/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/key.png new file mode 100644 index 0000000000000000000000000000000000000000..ccbb4b8974830a141d0e20687d2b52f42af3bbf7 GIT binary patch literal 10085 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 **See [Supported Versions](./versions.md) for the currently supported versions of SP1 on the Prover Network.** + +## Sending a proof request + +To use the prover network to generate a proof, you can run your script that uses `sp1_sdk::ProverClient` as you would normally but with additional environment variables set: + +```rust +// Generate the proof for the given program. +let client = ProverClient::new(); +let (pk, vk) = client.setup(ELF); +let mut proof = client.prove(&pk, stdin).run().unwrap(); +``` + +```sh +SP1_PROVER=network SP1_PRIVATE_KEY=... RUST_LOG=info cargo run --release +``` + +- `SP1_PROVER` should be set to `network` when using the prover network. + +- `SP1_PRIVATE_KEY` should be set to your [private key](../prover-network.md#key-setup). You will need + to be using a [whitelisted](../prover-network.md#get-access) key to use the network. + +When you call any of the prove functions in ProverClient now, it will first simulate your program, then wait for it to be proven through the network and finally return the proof. + +## View the status of your proof + +You can view your proof and other running proofs on the [explorer](https://explorer.succinct.xyz/). The page for your proof will show details such as the stage of your proof and the cycles used. It also shows the program hash which is the keccak256 of the program bytes. + +![Screenshot from explorer.succinct.xyz showing the details of a proof including status, stage, type, program, requester, prover, CPU cycles used, time requested, and time claimed.](./explorer.png) + +## Advanced Usage + +### Skip simulation + +To skip the simulation step and directly submit the program for proof generation, you can set the `SKIP_SIMULATION` environment variable to `true`. This will save some time if you are sure that your program is correct. If your program panics, the proof will fail and ProverClient will panic. + +### Use NetworkProver directly + +By using the `sp1_sdk::NetworkProver` struct directly, you can call async functions directly and have programmatic access to the proof ID and download proofs by ID. + +```rust +impl NetworkProver { + /// Creates a new [NetworkProver] with the private key set in `SP1_PRIVATE_KEY`. + pub fn new() -> Self; + + /// Creates a new [NetworkProver] with the given private key. + pub fn new_from_key(private_key: &str); + + /// Requests a proof from the prover network, returning the proof ID. + pub async fn request_proof( + &self, + elf: &[u8], + stdin: SP1Stdin, + mode: ProofMode, + ) -> Result; + + /// Waits for a proof to be generated and returns the proof. If a timeout is supplied, the + /// function will return an error if the proof is not generated within the timeout. + pub async fn wait_proof( + &self, + proof_id: &str, + timeout: Option, + ) -> Result; + + /// Get the status and the proof if available of a given proof request. The proof is returned + /// only if the status is Fulfilled. + pub async fn get_proof_status( + &self, + proof_id: &str, + ) -> Result<(GetProofStatusResponse, Option)>; + + /// Requests a proof from the prover network and waits for it to be generated. + pub async fn prove( + &self, + elf: &[u8], + stdin: SP1Stdin, + mode: ProofMode, + timeout: Option, + ) -> Result; +} +``` diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/versions.md b/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/versions.md new file mode 100644 index 0000000000..31503adb80 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/versions.md @@ -0,0 +1,30 @@ +# Supported Versions + +The prover network currently only supports specific versions of SP1: + +| Version | Description | +| ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| v2.X.X | Audited, production ready version. | +| v3.X.X | Pre-release version with enhanced performance, currently being audited. **Recommended for benchmarking or testing, not recommended for production use.** | + +`X` denotes that any minor and patch version is supported (e.g. `v2.1.0`, `v2.1.1`). + +If you submit a proof request to the prover network and you are not using a supported version, you will receive an error message. + +## Changing versions + +You must switch to a supported version before submitting a proof. To do so, replace the `sp1-zkvm` version in your program's `Cargo.toml`: + +```toml +[dependencies] +sp1-zkvm = "2.0.0" +``` + +replace the `sp1-sdk` version in your script's `Cargo.toml`: + +```toml +[dependencies] +sp1-sdk = "2.0.0" +``` + +Re-build your program and script, and then try again. diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/recommended-workflow.mdx b/book/versioned_docs/version-3.4.0/generating-proofs/recommended-workflow.mdx new file mode 100644 index 0000000000..d884e60d68 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/generating-proofs/recommended-workflow.mdx @@ -0,0 +1,57 @@ +import Example from "../../../static/examples_fibonacci_script_bin_execute.rs.mdx"; + +# Recommended Workflow for Developing with SP1 + +We recommend the following workflow for developing with SP1. + +## Step 1: Iterate on your program with execution only + +While iterating on your SP1 program, you should **only execute** the program with the RISC-V runtime. This will allow you to verify the correctness of your program and test the `SP1Stdin` as well as the `SP1PublicValues` that are returned, without having to generate a proof (which can be slow and/or expensive). If the execution of your program succeeds, then proof generation should succeed as well! + + + +Note that printing out the total number of executed cycles and the full execution report provides helpful insight into proof generation latency and cost either for local proving or when using the prover network. + +**Crate Setup:** We recommend that your program crate that defines the `main` function (around which you wrap the `sp1_zkvm::entrypoint!` macro) should be kept minimal. Most of your business logic should be in a separate crate (in the same repo/workspace) that can be tested independently and that is not tied to the SP1 zkVM. This will allow you to unit test your program logic without having to worry about the `zkvm` compilation target. This will also allow you to efficient reuse types between your program crate and your crate that generates proofs. + +## Step 2: Generate proofs + +After you have iterated on your program and finalized that it works correctly, you can generate proofs for your program for final end to end testing or production use. + +### Generating proofs on the prover network (recommended) + +Using Succinct's prover prover network will generally be faster and cheaper than local proving, as it parallelizes proof generation amongst multiple machines and also uses SP1's GPU prover that is not yet available for local proving. Follow the [setup instructions](./prover-network.md) to get started with the prover network. Using the prover network only requires adding 1 environment variable from a regular SP1 proof generation script with the `ProverClient`. + +There are a few things to keep in mind when using the prover network. + +### Prover Network FAQ + +#### Benchmarking latency on the prover network + +The prover network currently parallelizes proof generation across multiple machines. This means the latency of proof generation does not scale linearly with the number of cycles of your program, but rather with the number of cycles of your program divided by the number of currently available machines on the prover network. + +Our prover network currently has limited capacity because it is still in beta. If you have an extremely latency sensitive use-case and you want to figure out the **minimal latency possible** for your program, you should [reach out to us](https://partner.succinct.xyz/) and we can onboard you to our reserved capacity cluster that has a dedicated instances that can significantly reduce latency. + +#### Costs on the prover network + +The cost of proof generation on the prover network scales approximately linearly with the number of cycles of your program (along with the number of `syscalls` that your program makes). For larger workloads with regular proof frequency (like rollups and light clients), we can offer discounted pricing. To figure out how much your program will cost to prove, you can get [in touch with us](https://partner.succinct.xyz/) to discuss pricing options. + +Note that **latency is not the same as cost**, because we parallelize proof generation across multiple machines, so two proofs with the same latency can be using a different number of machines, impacting the cost. + +#### Benchmarking on small vs. large programs + +In SP1, there is a fixed overhead for proving that is independent of your program's cycle count. This means that benchmarking on _small programs_ is not representative of the performance of larger programs. To get an idea of the scale of programs for real-world workloads, you can refer to our [benchmarking blog post](https://blog.succinct.xyz/sp1-production-benchmarks) and also some numbers below: + +- An average Ethereum block can be between 100-500M cycles (including merkle proof verification for storage and execution of transactions) with our `keccak` and `secp256k1` precompiles. +- For a Tendermint light client, the average cycle count can be between 10M and 50M cycles (including our ed25519 precompiles). +- We consider programs with \<2M cycles to be "small" and by default, the fixed overhead of proving will dominate the proof latency. If latency is incredibly important for your use-case, we can specialize the prover network for your program if you reach out to us. + +Note that if you generate Groth16 or PLONK proofs on the prover network, you will encounter a fixed overhead for the STARK -> SNARK wrapping step. We're actively working on reducing this overhead in future releases. + +#### On-Demand vs. Reserved Capacity + +The prover network is currently in beta and has limited capacity. For high volume use-cases, we can offer discounted pricing and a reserved capacity cluster that has a dedicated instances that can significantly reduce latency and have higher throughput and guaranteed SLAs. + +### Generating proofs locally + +If you want to generate proofs locally, you can use the `sp1_sdk` crate to generate proofs locally as outlined in the [Basics](./basics) section. By default, the `ProverClient` will generate proofs locally using your CPU. Check out the hardware requirements for locally proving [here](../getting-started/hardware-requirements.md#local-proving). diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/setup.md b/book/versioned_docs/version-3.4.0/generating-proofs/setup.md new file mode 100644 index 0000000000..6e9b5483c7 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/generating-proofs/setup.md @@ -0,0 +1,38 @@ +# Setup + +In this section, we will teach you how to setup a self-contained crate which can generate proofs of programs that have been compiled with the SP1 toolchain inside the SP1 zkVM, using the `sp1-sdk` crate. + +## CLI (Recommended) + +The recommended way to setup your first program to prove inside the zkVM is using the method described in [Quickstart](../getting-started/quickstart.md) which will create a script folder. + +```bash +cargo prove new +cd script +``` + +## Manual + +You can also manually setup a project. First create a new cargo project: + +```bash +cargo new script +cd script +``` + +#### Cargo Manifest + +Inside this crate, add the `sp1-sdk` crate as a dependency. Your `Cargo.toml` should look like as follows: + +```rust +[workspace] +[package] +version = "0.1.0" +name = "script" +edition = "2021" + +[dependencies] +sp1-sdk = "2.0.0" +``` + +The `sp1-sdk` crate includes the necessary utilities to generate, save, and verify proofs. diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/sp1-sdk-faq.md b/book/versioned_docs/version-3.4.0/generating-proofs/sp1-sdk-faq.md new file mode 100644 index 0000000000..ca2a0a0596 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/generating-proofs/sp1-sdk-faq.md @@ -0,0 +1,15 @@ +# FAQ + +## Logging and Tracing Information + +You can use `sp1_sdk::utils::setup_logger()` to enable logging information respectively. You can set the logging level with the `RUST_LOG` environment variable. + +```rust +sp1_sdk::utils::setup_logger(); +``` + +Example of setting the logging level to `info` (other options are `debug`, `trace`, and `warn`): + +```bash +RUST_LOG=info cargo run --release +``` \ No newline at end of file diff --git a/book/versioned_docs/version-3.4.0/getting-started/hardware-requirements.md b/book/versioned_docs/version-3.4.0/getting-started/hardware-requirements.md new file mode 100644 index 0000000000..828ea96080 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/getting-started/hardware-requirements.md @@ -0,0 +1,41 @@ +# Proof Generation Requirements + +

+We recommend that developers who want to use SP1 for non-trivial programs generate proofs on our prover network. The prover network generates SP1 proofs across multiple machines, reducing latency and also runs SP1 on optimized hardware instances that result in faster + cheaper proof generation times. + +We recommend that for any production benchmarking, you use the prover network to estimate latency and costs of proof generation. + +
+ +## Local Proving + +If you want to generate SP1 proofs locally, this section has an overview of the hardware requirements required. These requires depend on which [types of proofs](../generating-proofs/proof-types.md) you want to generate and can also change over time as the design of the zKVM evolves. + +**The most important requirement is CPU for performance/latency and RAM to prevent running out of memory.** + +| | Mock / Network | Core / Compress | Groth16 and PLONK (EVM) | +| -------------- | ---------------------------- | ---------------------------------- | ----------------------- | +| CPU | 1+, single-core perf matters | 16+, more is better | 16+, more is better | +| Memory | 8GB+, more is better | 16GB+, more if you have more cores | 16GB+, more is better | +| Disk | 10GB+ | 10GB+ | 10GB+ | +| EVM Compatible | ✅ | ❌ | ✅ | + +### CPU + +The execution & trace generation of the zkVM is mostly CPU bound, having a high single-core +performance is recommended to accelerate these steps. The rest of the prover is mostly bound by hashing/field operations +which can be parallelized with multiple cores. + +### Memory + +Our prover requires keeping large matrices (i.e., traces) in memory to generate the proofs. Certain steps of the prover +have a minimum memory requirement, meaning that if you have less than this amount of memory, the process will OOM. + +This effect is most noticeable when using the Groth16 or PLONK provers. + +### Disk + +Disk is required to install the SP1 zkVM toolchain and to install the circuit artifacts, if you +plan to locally build the Groth16 or PLONK provers. + +Furthermore, disk is used to checkpoint the state of the program execution, which is required to generate the proofs. diff --git a/book/versioned_docs/version-3.4.0/getting-started/install.md b/book/versioned_docs/version-3.4.0/getting-started/install.md new file mode 100644 index 0000000000..e58b9a624e --- /dev/null +++ b/book/versioned_docs/version-3.4.0/getting-started/install.md @@ -0,0 +1,115 @@ +# Installation + +SP1 currently runs on Linux and macOS. You can either use prebuilt binaries through sp1up or +build the Succinct [Rust toolchain](https://rust-lang.github.io/rustup/concepts/toolchains.html) and CLI from source. + +## Requirements + +- [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) +- [Rust (Nightly)](https://www.rust-lang.org/tools/install) +- [Docker](https://docs.docker.com/get-docker/) + +## Option 1: Prebuilt Binaries (Recommended) + +`sp1up` is the SP1 toolchain installer. Open your terminal and run the following command and follow the instructions: + +```bash +curl -L https://sp1.succinct.xyz | bash +``` + +Then simply follow the instructions on-screen, which will make the `sp1up` command available in your CLI. + +After following the instructions, you can run `sp1up` to install the toolchain and the `cargo prove` CLI: + +```bash +sp1up +``` + +This will install two things: + +1. The `succinct` Rust toolchain which has support for the `riscv32im-succinct-zkvm-elf` compilation target. +2. `cargo prove` CLI tool that provides convenient commands for compiling SP1 programs and other helper functionality. + +You can verify the installation of the CLI by running `cargo prove --version`: + +```bash +cargo prove --version +``` + +You can check the version of the Succinct Rust toolchain by running: + +```bash +RUSTUP_TOOLCHAIN=succinct cargo --version +``` +or equivalently: + +```bash +cargo +succinct --version +``` + +If this works, go to the [next section](./quickstart.md) to compile and prove a simple zkVM program. + +### Troubleshooting + +#### Rate-limiting + +If you experience [rate-limiting](https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api?apiVersion=2022-11-28#rate-limiting) when using the `sp1up` command, you can resolve this by using the `--token` flag and providing your GitHub token. To create a Github token, follow the instructions [here](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic). + + + +#### Unsupported OS Architectures + +Currently our prebuilt binaries are built on Ubuntu 20.04 (22.04 on ARM) and macOS. If your OS uses an older GLIBC version, it's possible these may not work and you will need to [build the toolchain from source](#option-2-building-from-source). + +#### Conflicting `cargo-prove` installations + +If you have installed `cargo-prove` from source, it may conflict with `sp1up`'s `cargo-prove` installation or vice versa. You can remove the `cargo-prove` that was installed from source with the following command: + +```bash +rm ~/.cargo/bin/cargo-prove +``` + +Or, you can remove the `cargo-prove` that was installed through `sp1up`: + +```bash +rm ~/.sp1/bin/cargo-prove +``` + + +## Option 2: Building from Source + +
+Warning: This option will take a long time to build and is only recommended for advanced users. +
+ +Make sure you have installed the [dependencies](https://github.com/rust-lang/rust/blob/master/INSTALL.md#dependencies) needed to build the rust toolchain from source. + +Clone the `sp1` repository and navigate to the root directory. + +```bash +git clone git@github.com:succinctlabs/sp1.git +cd sp1 +cd crates +cd cli +cargo install --locked --path . +cd ~ +cargo prove build-toolchain +``` + +Building the toolchain can take a while, ranging from 30 mins to an hour depending on your machine. If you're on a machine that we have prebuilt binaries for (ARM Mac or x86 or ARM Linux), you can use the following to download a prebuilt version. + +```bash +cargo prove install-toolchain +``` + +To verify the installation of the toolchain, run and make sure you see `succinct`: + +```bash +rustup toolchain list +``` + +You can delete your existing installation of the toolchain with: + +```bash +rustup toolchain remove succinct +``` diff --git a/book/versioned_docs/version-3.4.0/getting-started/project-template.md b/book/versioned_docs/version-3.4.0/getting-started/project-template.md new file mode 100644 index 0000000000..b6cbd8d733 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/getting-started/project-template.md @@ -0,0 +1,5 @@ +# Project Template + +Another option for getting started with SP1 is to use the [SP1 Project Template](https://github.com/succinctlabs/sp1-project-template/tree/main). + +You can use this as a Github template to create a new repository that has a SP1 program, a script to generate proofs, and also a contracts folder that contains a Solidity contract that can verify SP1 proofs on any EVM chain. diff --git a/book/versioned_docs/version-3.4.0/getting-started/quickstart.md b/book/versioned_docs/version-3.4.0/getting-started/quickstart.md new file mode 100644 index 0000000000..0d7f46821e --- /dev/null +++ b/book/versioned_docs/version-3.4.0/getting-started/quickstart.md @@ -0,0 +1,124 @@ +# Quickstart + +In this section, we will show you how to create a simple Fibonacci program using the SP1 zkVM. + +## Create an SP1 Project + +### Option 1: Cargo Prove New CLI (Recommended) + +You can use the `cargo prove` CLI to create a new project using the `cargo prove new <--bare|--evm> ` command. The `--bare` option sets up a basic SP1 project for standalone zkVM programs, while `--evm` adds additional components including Solidity contracts for on-chain proof verification. + +This command will create a new folder in your current directory which includes solidity smart contracts for onchain integration. + +```bash +cargo prove new --evm fibonacci +cd fibonacci +``` + +### Option 2: Project Template (Solidity Contracts for Onchain Verification) + +If you want to use SP1 to generate proofs that will eventually be verified on an EVM chain, you should use the [SP1 project template](https://github.com/succinctlabs/sp1-project-template/tree/main). This Github template is scaffolded with a SP1 program, a script to generate proofs, and also a contracts folder that contains a Solidity contract that can verify SP1 proofs on any EVM chain. + +Either fork the project template repository or clone it: + +```bash +git clone https://github.com/succinctlabs/sp1-project-template.git +``` + +### Project Overview + +Your new project will have the following structure (ignoring the `contracts` folder, if you are using the project template): + +``` +. +├── program +│   ├── Cargo.lock +│   ├── Cargo.toml +│   ├── elf +│   │   └── riscv32im-succinct-zkvm-elf +│   └── src +│   └── main.rs +├── rust-toolchain +└── script + ├── Cargo.lock + ├── Cargo.toml + ├── build.rs + └── src + └── bin + ├── prove.rs + └── vkey.rs + +6 directories, 4 files +``` + +There are 2 directories (each a crate) in the project: +- `program`: the source code that will be proven inside the zkVM. +- `script`: code that contains proof generation and verification code. + +**We recommend you install the [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) extension.** +Note that if you use `cargo prove new` inside a monorepo, you will need to add the manifest file to `rust-analyzer.linkedProjects` to get full IDE support. + +## Build + +Before we can run the program inside the zkVM, it must be compiled to a RISC-V executable using the `succinct` Rust toolchain. This is called an [ELF (Executable and Linkable Format)](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format). To compile the program, you can run the following command: + +``` +cd program && cargo prove build +``` + +which will output the compiled ELF to the file `program/elf/riscv32im-succinct-zkvm-elf`. + +Note: the `build.rs` file in the `script` directory will use run the above command automatically to build the ELF, meaning you don't have to manually run `cargo prove build` every time you make a change to the program! + +## Execute + +To test your program, you can first execute your program without generating a proof. In general this is helpful for iterating on your program and verifying that it is correct. + +```bash +cd ../script +RUST_LOG=info cargo run --release -- --execute +``` + +## Prove + +When you are ready to generate a proof, you should run the script with the `--prove` flag that will generate a proof. + +```bash +cd ../script +RUST_LOG=info cargo run --release -- --prove +``` + +The output should show something like this: +``` +n: 20 +2024-07-23T17:07:07.874856Z INFO prove_core:collect_checkpoints: clk = 0 pc = 0x2017e8 +2024-07-23T17:07:07.876264Z INFO prove_core:collect_checkpoints: close time.busy=2.00ms time.idle=1.50µs +2024-07-23T17:07:07.913304Z INFO prove_core:shard: close time.busy=32.2ms time.idle=791ns +2024-07-23T17:07:10.724280Z INFO prove_core:commit: close time.busy=2.81s time.idle=1.25µs +2024-07-23T17:07:10.725923Z INFO prove_core:prove_checkpoint: clk = 0 pc = 0x2017e8 num=0 +2024-07-23T17:07:10.729130Z INFO prove_core:prove_checkpoint: close time.busy=3.68ms time.idle=1.17µs num=0 +2024-07-23T17:07:14.648146Z INFO prove_core: execution report (totals): total_cycles=9329, total_syscall_cycles=20 +2024-07-23T17:07:14.648180Z INFO prove_core: execution report (opcode counts): +2024-07-23T17:07:14.648197Z INFO prove_core: 1948 add +... +2024-07-23T17:07:14.648277Z INFO prove_core: execution report (syscall counts): +2024-07-23T17:07:14.648408Z INFO prove_core: 8 commit +... +2024-07-23T17:07:14.648858Z INFO prove_core: summary: cycles=9329, e2e=9.193968459, khz=1014.69, proofSize=1419780 +2024-07-23T17:07:14.653193Z INFO prove_core: close time.busy=9.20s time.idle=12.2µs +Successfully generated proof! +fib(n): 10946 +``` + +The program by default is quite small, so proof generation will only take a few seconds locally. After it generates, the proof will be verified for correctness. + +**Note:** When benchmarking proof generation times locally, it is important to note that there is a fixed overhead for proving, which means that the proof generation time for programs with a small number of cycles is not representative of the performance of larger programs (which often have better performance characteristics as the overhead is amortized across many cycles). + +## Recommended Workflow + +Please see the [Recommended Workflow](../generating-proofs/recommended-workflow) section for more details on how to develop your SP1 program and generate proofs. + +We *strongly recommend* that developers who want to use SP1 for non-trivial programs generate proofs on the beta version of our [Prover Network](../generating-proofs/prover-network.md). The prover network generates SP1 proofs across multiple machines, reducing latency and also runs SP1 on optimized hardware instances that result in faster + cheaper proof generation times. + +We recommend that for any production benchmarking, you use the prover network to estimate latency and costs of proof generation. We also would love to chat with your team directly to help you get started with the prover network--please fill out this [form](https://partner.succinct.xyz/). + diff --git a/book/versioned_docs/version-3.4.0/introduction.md b/book/versioned_docs/version-3.4.0/introduction.md new file mode 100644 index 0000000000..f3a645786c --- /dev/null +++ b/book/versioned_docs/version-3.4.0/introduction.md @@ -0,0 +1,33 @@ +# Introduction + +*Documentation for SP1 users and developers*. + +[![Telegram Chat][tg-badge]][tg-url] + +![](./sp1.png) + + +SP1 is a performant, open-source zero-knowledge virtual machine (zkVM) that verifies the execution of arbitrary Rust (or any LLVM-compiled language) programs. + +[tg-badge]: https://img.shields.io/endpoint?color=neon&logo=telegram&label=chat&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Fsuccinct%5Fsp1 +[tg-url]: https://t.me/+AzG4ws-kD24yMGYx + +SP1 has undergone multiple audits from leading ZK security firms and is currently used in production by many top blockchain teams. + +## The future of ZK is writing normal code + +Zero-knowledge proofs (ZKPs) are one of the most critical technologies to blockchain scaling, interoperability and privacy. But, historically building ZKP systems was extremely complicated--requiring large teams with specialized cryptography expertise and taking years to go to production. + +SP1 provides a performant, general-purpose zkVM that enables **any developer** to use ZKPs by writing normal code (in Rust), and get cheap and fast proofs. SP1 will enable ZKPs to become mainstream, introducing a new era of verifiability for all of blockchain infrastructure and beyond. + + +## SP1 enables a diversity of use-cases + +ZKPs enable a diversity of use-cases in blockchain and beyond, including: + +* Rollups: Use SP1 to generate a ZKP for the state transition function of your rollup and connect to Ethereum, Bitcoin or other chains with full validity proofs or ZK fraud proofs. +* Interoperability: Use SP1 for fast-finality, cross rollup interoperability +* Bridges: Use SP1 to generate a ZKP for verifying consensus of L1s, including Tendermint, Ethereum’s Light Client protocol and more, for bridging between chains. +* Oracles: Use SP1 for large scale computations with onchain state, including consensus data and storage data. +* Aggregation: Use SP1 to aggregate and verify other ZKPs for reduced onchain verification costs. +* Privacy: Use SP1 for onchain privacy, including private transactions and private state. diff --git a/book/versioned_docs/version-3.4.0/onchain-verification/contract-addresses.md b/book/versioned_docs/version-3.4.0/onchain-verification/contract-addresses.md new file mode 100644 index 0000000000..3acb971edf --- /dev/null +++ b/book/versioned_docs/version-3.4.0/onchain-verification/contract-addresses.md @@ -0,0 +1,80 @@ +# Contract Addresses + +To verify SP1 proofs on-chain, we recommend using our deployed canonical verifier gateways. The +[SP1VerifierGateway](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1VerifierGateway.sol) +will automatically route your SP1 proof to the correct verifier based on the SP1 version used. + +## Canonical Verifier Gateways + +| Chain ID | Chain | Gateway | +| -------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | Mainnet | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 11155111 | Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 17000 | Holesky | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://holesky.etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 42161 | Arbitrum One | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 421614 | Arbitrum Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 8453 | Base | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 84532 | Base Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 10 | Optimism | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://optimistic.etherscan.io/address/0x3b6041173b80e77f038f3f2c0f9744f04837185e) | +| 11155420 | Optimism Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia-optimism.etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 534351 | Scroll Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.scrollscan.com/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 534352 | Scroll | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://scrollscan.com/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | + +The most up-to-date reference on each chain can be found in the +[deployments](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/deployments) +directory in the +SP1 contracts repository, where each chain has a dedicated JSON file with each verifier's address. + +## Versioning Policy + +Whenever a verifier for a new SP1 version is deployed, the gateway contract will be updated to +support it with +[addRoute()](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1VerifierGateway.sol#L65). +If a verifier for an SP1 version has an issue, the route will be frozen with +[freezeRoute()](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1VerifierGateway.sol#L71). + +On mainnets, only official versioned releases are deployed and added to the gateway. Testnets have +`rc` versions of the verifier deployed supported in addition to the official versions. + +## Deploying to other Chains + +In the case that you need to use a chain that is not listed above, you can deploy your own +verifier contract by following the instructions in the +[SP1 Contracts Repo](https://github.com/succinctlabs/sp1-contracts/blob/main/README.md#deployments). + +Since both the `SP1VerifierGateway` and each `SP1Verifier` implement the [ISP1Verifier +interface](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1Verifier.sol), you can choose to either: + +* Deploy the `SP1VerifierGateway` and add `SP1Verifier` contracts to it. Then point to the + `SP1VerifierGateway` address in your contracts. +* Deploy just the `SP1Verifier` contract that you want to use. Then point to the `SP1Verifier` + address in + your contracts. + +If you want support for a canonical verifier on your chain, contact us [here](https://t.me/+AzG4ws-kD24yMGYx). We often deploy canonical verifiers on new chains if there's enough demand. + +## ISP1Verifier Interface + +All verifiers implement the [ISP1Verifier](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1Verifier.sol) interface. + +```c++ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +/// @title SP1 Verifier Interface +/// @author Succinct Labs +/// @notice This contract is the interface for the SP1 Verifier. +interface ISP1Verifier { + /// @notice Verifies a proof with given public values and vkey. + /// @dev It is expected that the first 4 bytes of proofBytes must match the first 4 bytes of + /// target verifier's VERIFIER_HASH. + /// @param programVKey The verification key for the RISC-V program. + /// @param publicValues The public values encoded as bytes. + /// @param proofBytes The proof of the program execution the SP1 zkVM encoded as bytes. + function verifyProof( + bytes32 programVKey, + bytes calldata publicValues, + bytes calldata proofBytes + ) external view; +} +``` diff --git a/book/versioned_docs/version-3.4.0/onchain-verification/getting-started.mdx b/book/versioned_docs/version-3.4.0/onchain-verification/getting-started.mdx new file mode 100644 index 0000000000..6409876a00 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/onchain-verification/getting-started.mdx @@ -0,0 +1,34 @@ +import Example from "../../../static/examples_fibonacci_script_bin_groth16_bn254.rs.mdx"; + + +# Onchain Verification: Setup + +The best way to get started with verifying SP1 proofs on-chain is to refer to the [SP1 Project Template](https://github.com/succinctlabs/sp1-project-template/tree/main). + +- The template [program](https://github.com/succinctlabs/sp1-project-template/blob/main/program/src/main.rs) shows how to write outputs that can be decoded in Solidity. +- The template [script](https://github.com/succinctlabs/sp1-project-template/blob/main/script/src/bin/prove.rs) shows how to generate the proof using the SDK and save it to a file. +- The template [contract](https://github.com/succinctlabs/sp1-project-template/blob/main/contracts/src/Fibonacci.sol) shows how to verify the proof onchain using Solidity. + +Refer to the section on [Contract Addresses](./contract-addresses.md#contract-addresses) for the addresses of the deployed verifiers. + +## Generating SP1 Proofs for Onchain Verification + +By default, the proofs generated by SP1 are not verifiable onchain, as they are non-constant size and STARK verification on Ethereum is very expensive. To generate a proof that can be verified onchain, we use performant STARK recursion to combine SP1 shard proofs into a single STARK proof and then wrap that in a SNARK proof. Our `ProverClient` has a prover option for this called `plonk`. Behind the scenes, this function will first generate a normal SP1 proof, then recursively combine all of them into a single proof using the STARK recursion protocol. Finally, the proof is wrapped in a SNARK proof using PLONK. + +> WARNING: The Groth16 and PLONK provers are only guaranteed to work on official releases of SP1. To +> use Groth16 or PLONK proving & verification locally, ensure that you have Docker installed and have +> at least 128GB of RAM. + +### Example + + + +You can run the above script with `RUST_LOG=info cargo run --bin groth16_bn254 --release` in `examples/fibonacci/script`. + +#### Using Groth16 and PLONK without Docker (Advanced) + +If you would like to run the Groth16 or PLONK prover directly without Docker, you must have Go 1.22 installed and enable the `native-gnark` feature in `sp1-sdk`. This path is not recommended and may require additional native dependencies. + +```toml +sp1-sdk = { version = "2.0.0", features = ["native-gnark"] } +``` diff --git a/book/versioned_docs/version-3.4.0/onchain-verification/solidity-sdk.md b/book/versioned_docs/version-3.4.0/onchain-verification/solidity-sdk.md new file mode 100644 index 0000000000..822ab620b9 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/onchain-verification/solidity-sdk.md @@ -0,0 +1,122 @@ +# Solidity Verifier + +We maintain a suite of [contracts](https://github.com/succinctlabs/sp1-contracts/tree/main) used for verifying SP1 proofs onchain. We highly recommend using [Foundry](https://book.getfoundry.sh/). + +## Installation + +To install the latest release version: + +```bash +forge install succinctlabs/sp1-contracts +``` + +To install a specific version: + +```bash +forge install succinctlabs/sp1-contracts@ +``` + +Finally, add `@sp1-contracts/=lib/sp1-contracts/contracts/src/` in `remappings.txt.` + +### Usage + +Once installed, you can use the contracts in the library by importing them: + +```c++ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import {ISP1Verifier} from "@sp1-contracts/ISP1Verifier.sol"; + +/// @title Fibonacci. +/// @author Succinct Labs +/// @notice This contract implements a simple example of verifying the proof of a computing a +/// fibonacci number. +contract Fibonacci { + /// @notice The address of the SP1 verifier contract. + /// @dev This can either be a specific SP1Verifier for a specific version, or the + /// SP1VerifierGateway which can be used to verify proofs for any version of SP1. + /// For the list of supported verifiers on each chain, see: + /// https://docs.succinct.xyz/onchain-verification/contract-addresses + address public verifier; + + /// @notice The verification key for the fibonacci program. + bytes32 public fibonacciProgramVKey; + + constructor(address _verifier, bytes32 _fibonacciProgramVKey) { + verifier = _verifier; + fibonacciProgramVKey = _fibonacciProgramVKey; + } + + /// @notice The entrypoint for verifying the proof of a fibonacci number. + /// @param _proofBytes The encoded proof. + /// @param _publicValues The encoded public values. + function verifyFibonacciProof(bytes calldata _publicValues, bytes calldata _proofBytes) + public + view + returns (uint32, uint32, uint32) + { + ISP1Verifier(verifier).verifyProof(fibonacciProgramVKey, _publicValues, _proofBytes); + (uint32 n, uint32 a, uint32 b) = abi.decode(_publicValues, (uint32, uint32, uint32)); + return (n, a, b); + } +} + +``` + +### Finding your program vkey + +The program vkey (`fibonacciProgramVKey` in the example above) is passed into the `ISP1Verifier` along with the public values and proof bytes. You +can find your program vkey by going through the following steps: + +1. Find what version of SP1 crates you are using. +2. Use the version from step to run this command: `sp1up --version ` +3. Use the vkey command to get the program vkey: `cargo prove vkey -elf ` + +Alternatively, you can set up a simple script to do this using the `sp1-sdk` crate: + +```rust +fn main() { + // Setup the logger. + sp1_sdk::utils::setup_logger(); + + // Setup the prover client. + let client = ProverClient::new(); + + // Setup the program. + let (_, vk) = client.setup(FIBONACCI_ELF); + + // Print the verification key. + println!("Program Verification Key: {}", vk.bytes32()); +} +``` + +### Testing + +To test the contract, we recommend setting up [Foundry +Tests](https://book.getfoundry.sh/forge/tests). We have an example of such a test in the [SP1 +Project +Template](https://github.com/succinctlabs/sp1-project-template/blob/dev/contracts/test/Fibonacci.t.sol). + +### Solidity Versions + +The officially deployed contracts are built using Solidity 0.8.20 and exist on the +[sp1-contracts main](https://github.com/succinctlabs/sp1-contracts/tree/main) branch. + +If you need to use different versions that are compatible with your contracts, there are also other +branches you can install that contain different versions. For +example for branch [main-0.8.15](https://github.com/succinctlabs/sp1-contracts/tree/main-0.8.15) +contains the contracts with: + +```c++ +pragma solidity ^0.8.15; +``` + +and you can install it with: + +```sh +forge install succinctlabs/sp1-contracts@main-0.8.15 +``` + +If there is different versions that you need but there aren't branches for them yet, please ask in +the [SP1 Telegram](https://t.me/+AzG4ws-kD24yMGYx). diff --git a/book/versioned_docs/version-3.4.0/sp1.png b/book/versioned_docs/version-3.4.0/sp1.png new file mode 100644 index 0000000000000000000000000000000000000000..78576befe311ab327f31e2fd3054f8dddcd081dd GIT binary patch literal 66629 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 Twg!hb@;){(x_Gt->KySO+>0Oy literal 0 HcmV?d00001 diff --git a/book/versioned_docs/version-3.4.0/theme/head.hbs b/book/versioned_docs/version-3.4.0/theme/head.hbs new file mode 100644 index 0000000000..2e2be7a19f --- /dev/null +++ b/book/versioned_docs/version-3.4.0/theme/head.hbs @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/book/versioned_docs/version-3.4.0/verification/off-chain-verification.md b/book/versioned_docs/version-3.4.0/verification/off-chain-verification.md new file mode 100644 index 0000000000..dff3ee960a --- /dev/null +++ b/book/versioned_docs/version-3.4.0/verification/off-chain-verification.md @@ -0,0 +1,48 @@ +import ProgramMain from "../../../static/examples_groth16_program_src_main.rs.mdx"; +import ProgramScript from "../../../static/examples_groth16_script_src_main.rs.mdx"; + +# Offchain Verification + +## Rust `no_std` Verification + +You can verify SP1 Groth16 and Plonk proofs in `no_std` environments with [`sp1-verifier`](https://docs.rs/sp1-verifier/latest/sp1_verifier/). + +`sp1-verifier` is also patched to verify Groth16 and Plonk proofs within the SP1 ZKVM, using +[bn254](https://blog.succinct.xyz/succinctshipsprecompiles/) precompiles. For an example of this, see +the [Groth16 Example](https://github.com/succinctlabs/sp1/tree/main/examples/groth16/). + +### Installation + +Import the following dependency in your `Cargo.toml`: + +```toml +sp1-verifier = {version = "3.0.0", default-features = false} +``` + +### Usage + +`sp1-verifier`'s interface is very similar to the solidity verifier's. It exposes two public functions: +[`Groth16Verifier::verify_proof`](https://docs.rs/sp1-verifier/latest/src/sp1_verifier/groth16.rs.html) +and [`PlonkVerifier::verify_proof`](https://docs.rs/sp1-verifier/latest/src/sp1_verifier/plonk.rs.html). + +`sp1-verifier` also exposes the Groth16 and Plonk verifying keys as constants, `GROTH16_VK_BYTES` and `PLONK_VK_BYTES`. These +keys correspond to the current SP1 version's official Groth16 and Plonk verifying keys, which are used for verifying proofs generated +using docker or the prover network. + +First, generate your groth16/plonk proof with the SP1 SDK. See [here](./onchain/getting-started#generating-sp1-proofs-for-onchain-verification) +for more information -- `sp1-verifier` and the solidity verifier expect inputs in the same format. + +Next, verify the proof with `sp1-verifier`. The following snippet is from the [Groth16 example program](https://github.com/succinctlabs/sp1/tree/dev/examples/groth16/), which verifies a Groth16 proof within SP1 using `sp1-verifier`. + + + +Here, the proof, public inputs, and vkey hash are read from stdin. See the following snippet to see how these values are generated. + + + +> Note that the SP1 SDK itself is *not* `no_std` compatible. + +## Wasm Verification + +The [`example-sp1-wasm-verifier`](https://github.com/succinctlabs/example-sp1-wasm-verifier) demonstrates how to +verify SP1 proofs in wasm. For a more detailed explanation of the process, please see the [README](https://github.com/succinctlabs/example-sp1-wasm-verifier/blob/main/README.md). diff --git a/book/versioned_docs/version-3.4.0/verification/onchain/contract-addresses.md b/book/versioned_docs/version-3.4.0/verification/onchain/contract-addresses.md new file mode 100644 index 0000000000..0a23f6ab2e --- /dev/null +++ b/book/versioned_docs/version-3.4.0/verification/onchain/contract-addresses.md @@ -0,0 +1,101 @@ +# Contract Addresses + +To verify SP1 proofs on-chain, we recommend using our deployed canonical verifier gateways. The +[SP1VerifierGateway](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1VerifierGateway.sol) +will automatically route your SP1 proof to the correct verifier based on the SP1 version used. + +## Canonical Verifier Gateways + +There are different verifier gateway for each proof system: Groth16 and PLONK. This means that you +must use the correct verifier gateway depending on if you are verifying a Groth16 or PLONK proof. + +### Groth16 + +| Chain ID | Chain | Gateway | +| -------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | Mainnet | [0x397A5f7f3dBd538f23DE225B51f532c34448dA9B](https://etherscan.io/address/0x397A5f7f3dBd538f23DE225B51f532c34448dA9B) | +| 11155111 | Sepolia | [0x397A5f7f3dBd538f23DE225B51f532c34448dA9B](https://sepolia.etherscan.io/address/0x397A5f7f3dBd538f23DE225B51f532c34448dA9B) | +| 17000 | Holesky | [0x397A5f7f3dBd538f23DE225B51f532c34448dA9B](https://holesky.etherscan.io/address/0x397A5f7f3dBd538f23DE225B51f532c34448dA9B) | +| 42161 | Arbitrum One | [0x397A5f7f3dBd538f23DE225B51f532c34448dA9B](https://arbiscan.io/address/0x397A5f7f3dBd538f23DE225B51f532c34448dA9B) | +| 421614 | Arbitrum Sepolia | [0x397A5f7f3dBd538f23DE225B51f532c34448dA9B](https://sepolia.arbiscan.io/address/0x397A5f7f3dBd538f23DE225B51f532c34448dA9B) | +| 8453 | Base | [0x397A5f7f3dBd538f23DE225B51f532c34448dA9B](https://basescan.org/address/0x397A5f7f3dBd538f23DE225B51f532c34448dA9B) | +| 84532 | Base Sepolia | [0x397A5f7f3dBd538f23DE225B51f532c34448dA9B](https://sepolia.basescan.org/address/0x397A5f7f3dBd538f23DE225B51f532c34448dA9B) | +| 10 | Optimism | [0x397A5f7f3dBd538f23DE225B51f532c34448dA9B](https://optimistic.etherscan.io/address/0x397A5f7f3dBd538f23DE225B51f532c34448dA9B) | +| 11155420 | Optimism Sepolia | [0x397A5f7f3dBd538f23DE225B51f532c34448dA9B](https://sepolia-optimism.etherscan.io/address/0x397A5f7f3dBd538f23DE225B51f532c34448dA9B) | +| 534351 | Scroll Sepolia | [0x397A5f7f3dBd538f23DE225B51f532c34448dA9B](https://sepolia.scrollscan.com/address/0x397A5f7f3dBd538f23DE225B51f532c34448dA9B) | +| 534352 | Scroll | [0x397A5f7f3dBd538f23DE225B51f532c34448dA9B](https://scrollscan.com/address/0x397A5f7f3dBd538f23DE225B51f532c34448dA9B) | + +### PLONK + +| Chain ID | Chain | Gateway | +| -------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | Mainnet | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 11155111 | Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 17000 | Holesky | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://holesky.etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 42161 | Arbitrum One | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 421614 | Arbitrum Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 8453 | Base | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 84532 | Base Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 10 | Optimism | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://optimistic.etherscan.io/address/0x3b6041173b80e77f038f3f2c0f9744f04837185e) | +| 11155420 | Optimism Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia-optimism.etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 534351 | Scroll Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.scrollscan.com/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | +| 534352 | Scroll | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://scrollscan.com/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | + +The most up-to-date reference on each chain can be found in the +[deployments](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/deployments) +directory in the +SP1 contracts repository, where each chain has a dedicated JSON file with each verifier's address. + +## Versioning Policy + +Whenever a verifier for a new SP1 version is deployed, the gateway contract will be updated to +support it with +[addRoute()](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1VerifierGateway.sol#L65). +If a verifier for an SP1 version has an issue, the route will be frozen with +[freezeRoute()](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1VerifierGateway.sol#L71). + +On mainnets, only official versioned releases are deployed and added to the gateway. Testnets have +`rc` versions of the verifier deployed supported in addition to the official versions. + +## Deploying to other Chains + +In the case that you need to use a chain that is not listed above, you can deploy your own +verifier contract by following the instructions in the +[SP1 Contracts Repo](https://github.com/succinctlabs/sp1-contracts/blob/main/README.md#deployments). + +Since both the `SP1VerifierGateway` and each `SP1Verifier` implement the [ISP1Verifier +interface](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1Verifier.sol), you can choose to either: + +* Deploy the `SP1VerifierGateway` and add `SP1Verifier` contracts to it. Then point to the + `SP1VerifierGateway` address in your contracts. +* Deploy just the `SP1Verifier` contract that you want to use. Then point to the `SP1Verifier` + address in + your contracts. + +If you want support for a canonical verifier on your chain, contact us [here](https://t.me/+AzG4ws-kD24yMGYx). We often deploy canonical verifiers on new chains if there's enough demand. + +## ISP1Verifier Interface + +All verifiers implement the [ISP1Verifier](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1Verifier.sol) interface. + +```c++ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +/// @title SP1 Verifier Interface +/// @author Succinct Labs +/// @notice This contract is the interface for the SP1 Verifier. +interface ISP1Verifier { + /// @notice Verifies a proof with given public values and vkey. + /// @dev It is expected that the first 4 bytes of proofBytes must match the first 4 bytes of + /// target verifier's VERIFIER_HASH. + /// @param programVKey The verification key for the RISC-V program. + /// @param publicValues The public values encoded as bytes. + /// @param proofBytes The proof of the program execution the SP1 zkVM encoded as bytes. + function verifyProof( + bytes32 programVKey, + bytes calldata publicValues, + bytes calldata proofBytes + ) external view; +} +``` diff --git a/book/versioned_docs/version-3.4.0/verification/onchain/getting-started.mdx b/book/versioned_docs/version-3.4.0/verification/onchain/getting-started.mdx new file mode 100644 index 0000000000..279d91a8bc --- /dev/null +++ b/book/versioned_docs/version-3.4.0/verification/onchain/getting-started.mdx @@ -0,0 +1,33 @@ +import Example from "../../../../static/examples_fibonacci_script_bin_groth16_bn254.rs.mdx"; + +# Onchain Verification: Setup + +The best way to get started with verifying SP1 proofs on-chain is to refer to the [SP1 Project Template](https://github.com/succinctlabs/sp1-project-template/tree/main). + +- The template [program](https://github.com/succinctlabs/sp1-project-template/blob/main/program/src/main.rs) shows how to write outputs that can be decoded in Solidity. +- The template [script](https://github.com/succinctlabs/sp1-project-template/blob/main/script/src/bin/prove.rs) shows how to generate the proof using the SDK and save it to a file. +- The template [contract](https://github.com/succinctlabs/sp1-project-template/blob/main/contracts/src/Fibonacci.sol) shows how to verify the proof onchain using Solidity. + +Refer to the section on [Contract Addresses](./contract-addresses.md#contract-addresses) for the addresses of the deployed verifiers. + +## Generating SP1 Proofs for Onchain Verification + +By default, the proofs generated by SP1 are not verifiable onchain, as they are non-constant size and STARK verification on Ethereum is very expensive. To generate a proof that can be verified onchain, we use performant STARK recursion to combine SP1 shard proofs into a single STARK proof and then wrap that in a SNARK proof. Our `ProverClient` has a prover option for this called `plonk`. Behind the scenes, this function will first generate a normal SP1 proof, then recursively combine all of them into a single proof using the STARK recursion protocol. Finally, the proof is wrapped in a SNARK proof using PLONK. + +> WARNING: The Groth16 and PLONK provers are only guaranteed to work on official releases of SP1. To +> use Groth16 or PLONK proving & verification locally, ensure that you have Docker installed and have +> at least 128GB of RAM. + +### Example + + + +You can run the above script with `RUST_LOG=info cargo run --bin groth16_bn254 --release` in `examples/fibonacci/script`. + +#### Using Groth16 and PLONK without Docker (Advanced) + +If you would like to run the Groth16 or PLONK prover directly without Docker, you must have Go 1.22 installed and enable the `native-gnark` feature in `sp1-sdk`. This path is not recommended and may require additional native dependencies. + +```toml +sp1-sdk = { version = "2.0.0", features = ["native-gnark"] } +``` diff --git a/book/versioned_docs/version-3.4.0/verification/onchain/solidity-sdk.md b/book/versioned_docs/version-3.4.0/verification/onchain/solidity-sdk.md new file mode 100644 index 0000000000..822ab620b9 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/verification/onchain/solidity-sdk.md @@ -0,0 +1,122 @@ +# Solidity Verifier + +We maintain a suite of [contracts](https://github.com/succinctlabs/sp1-contracts/tree/main) used for verifying SP1 proofs onchain. We highly recommend using [Foundry](https://book.getfoundry.sh/). + +## Installation + +To install the latest release version: + +```bash +forge install succinctlabs/sp1-contracts +``` + +To install a specific version: + +```bash +forge install succinctlabs/sp1-contracts@ +``` + +Finally, add `@sp1-contracts/=lib/sp1-contracts/contracts/src/` in `remappings.txt.` + +### Usage + +Once installed, you can use the contracts in the library by importing them: + +```c++ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import {ISP1Verifier} from "@sp1-contracts/ISP1Verifier.sol"; + +/// @title Fibonacci. +/// @author Succinct Labs +/// @notice This contract implements a simple example of verifying the proof of a computing a +/// fibonacci number. +contract Fibonacci { + /// @notice The address of the SP1 verifier contract. + /// @dev This can either be a specific SP1Verifier for a specific version, or the + /// SP1VerifierGateway which can be used to verify proofs for any version of SP1. + /// For the list of supported verifiers on each chain, see: + /// https://docs.succinct.xyz/onchain-verification/contract-addresses + address public verifier; + + /// @notice The verification key for the fibonacci program. + bytes32 public fibonacciProgramVKey; + + constructor(address _verifier, bytes32 _fibonacciProgramVKey) { + verifier = _verifier; + fibonacciProgramVKey = _fibonacciProgramVKey; + } + + /// @notice The entrypoint for verifying the proof of a fibonacci number. + /// @param _proofBytes The encoded proof. + /// @param _publicValues The encoded public values. + function verifyFibonacciProof(bytes calldata _publicValues, bytes calldata _proofBytes) + public + view + returns (uint32, uint32, uint32) + { + ISP1Verifier(verifier).verifyProof(fibonacciProgramVKey, _publicValues, _proofBytes); + (uint32 n, uint32 a, uint32 b) = abi.decode(_publicValues, (uint32, uint32, uint32)); + return (n, a, b); + } +} + +``` + +### Finding your program vkey + +The program vkey (`fibonacciProgramVKey` in the example above) is passed into the `ISP1Verifier` along with the public values and proof bytes. You +can find your program vkey by going through the following steps: + +1. Find what version of SP1 crates you are using. +2. Use the version from step to run this command: `sp1up --version ` +3. Use the vkey command to get the program vkey: `cargo prove vkey -elf ` + +Alternatively, you can set up a simple script to do this using the `sp1-sdk` crate: + +```rust +fn main() { + // Setup the logger. + sp1_sdk::utils::setup_logger(); + + // Setup the prover client. + let client = ProverClient::new(); + + // Setup the program. + let (_, vk) = client.setup(FIBONACCI_ELF); + + // Print the verification key. + println!("Program Verification Key: {}", vk.bytes32()); +} +``` + +### Testing + +To test the contract, we recommend setting up [Foundry +Tests](https://book.getfoundry.sh/forge/tests). We have an example of such a test in the [SP1 +Project +Template](https://github.com/succinctlabs/sp1-project-template/blob/dev/contracts/test/Fibonacci.t.sol). + +### Solidity Versions + +The officially deployed contracts are built using Solidity 0.8.20 and exist on the +[sp1-contracts main](https://github.com/succinctlabs/sp1-contracts/tree/main) branch. + +If you need to use different versions that are compatible with your contracts, there are also other +branches you can install that contain different versions. For +example for branch [main-0.8.15](https://github.com/succinctlabs/sp1-contracts/tree/main-0.8.15) +contains the contracts with: + +```c++ +pragma solidity ^0.8.15; +``` + +and you can install it with: + +```sh +forge install succinctlabs/sp1-contracts@main-0.8.15 +``` + +If there is different versions that you need but there aren't branches for them yet, please ask in +the [SP1 Telegram](https://t.me/+AzG4ws-kD24yMGYx). diff --git a/book/versioned_docs/version-3.4.0/what-is-a-zkvm.md b/book/versioned_docs/version-3.4.0/what-is-a-zkvm.md new file mode 100644 index 0000000000..4f91fa3213 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/what-is-a-zkvm.md @@ -0,0 +1,35 @@ +# What is a zkVM? + +A zero-knowledge virtual machine (zkVM) is zero-knowledge proof system that allows developers to prove the execution of arbitrary Rust (or other LLVM-compiled language) programs. + +Conceptually, you can think of the SP1 zkVM as proving the evaluation of a function `f(x) = y` by following the steps below: + +- Define `f` using normal Rust code and compile it to an ELF (covered in the [writing programs](./writing-programs/setup.md) section). +- Setup a proving key (`pk`) and verifying key (`vk`) for the program given the ELF. +- Generate a proof `π` using the SP1 zkVM that `f(x) = y` with `prove(pk, x)`. +- Verify the proof `π` using `verify(vk, x, y, π)`. + +As a practical example, `f` could be a simple Fibonacci [program](https://github.com/succinctlabs/sp1/blob/main/examples/fibonacci/program/src/main.rs). The process of generating a proof and verifying it can be seen [here](https://github.com/succinctlabs/sp1/blob/main/examples/fibonacci/script/src/main.rs). + +For blockchain applications, the verification usually happens inside of a [smart contract](https://github.com/succinctlabs/sp1-project-template/blob/main/contracts/src/Fibonacci.sol). + +## How does SP1 Work? + +At a high level, SP1 works with the following steps: + +* Write a program in Rust that defines the logic of your computation for which you want to generate a ZKP. +* Compile the program to the RISC-V ISA (a standard Rust compilation target) using the `cargo prove` CLI tool (installation instructions [here](./getting-started/install.md)) and generate a RISC-V ELF file. +* SP1 will prove the correct execution of arbitrary RISC-V programs by generating a STARK proof of execution. +* Developers can leverage the `sp1-sdk` crate to generate proofs with their ELF and input data. Under the hood the `sp1-sdk` will either generate proofs locally or use a beta version of Succinct's prover network to generate proofs. + +SP1 leverages performant STARK recursion that allows us to prove the execution of arbitrarily long programs and also has a STARK -> SNARK "wrapping system" that allows us to generate small SNARK proofs that can be efficiently verified on EVM chains. + +## Proof System + +For more technical details, check out the SP1 technical note that explains our proof system in detail. In short, we use: + +* STARKs + FRI over the Baby Bear field +* We use performant STARK recursion that allows us to prove the execution of arbitrarily long programs +* We have a system of performant precompiles that accelerate hash functions and cryptographic signature verification that allow us to get substantial performance gains on blockchain workloads + + diff --git a/book/versioned_docs/version-3.4.0/why-use-sp1.md b/book/versioned_docs/version-3.4.0/why-use-sp1.md new file mode 100644 index 0000000000..44db0ab6bc --- /dev/null +++ b/book/versioned_docs/version-3.4.0/why-use-sp1.md @@ -0,0 +1,46 @@ +# Why use SP1? + +## Use-Cases + +Zero-knowledge proofs (ZKPs) are a powerful primitive that enable **verifiable computation**. With ZKPs, anyone can verify a cryptographic proof that a program has executed correctly, without needing to trust the prover, re-execute the program or even know the inputs to the program. + +Historically, building ZKP systems has been extremely complicated, requiring large teams with specialized cryptography expertise and taking years to go to production. SP1 is a performant, general-purpose zkVM that solves this problem and creates a future where all blockchain infrastructure, including rollups, bridges, coprocessors, and more, utilize ZKPs **via maintainable software written in Rust**. + +SP1 is especially powerful in blockchain contexts which rely on verifiable computation. Example applications include: +- [Rollups](https://ethereum.org/en/developers/docs/scaling/zk-rollups/): SP1 can be used in combination with existing node infrastructure like [Reth](https://github.com/paradigmxyz/reth) to build rollups with ZKP validity proofs or ZK fraud proofs. +- [Coprocessors](https://crypto.mirror.xyz/BFqUfBNVZrqYau3Vz9WJ-BACw5FT3W30iUX3mPlKxtA): SP1 can be used to outsource onchain computation to offchain provers to enable use cases such as large-scale computation over historical state and onchain machine learning, dramatically reducing gas costs. +- [Light Clients](https://ethereum.org/en/developers/docs/nodes-and-clients/light-clients/): SP1 can be used to build light clients that can verify the state of other chains, facilitating interoperability between different blockchains without relying on any trusted third parties. + +SP1 has already been integrated in many of these applications, including but not limited to: + +- [SP1 Tendermint](https://github.com/succinctlabs/sp1-tendermint-example): An example of a ZK Tendermint light client on Ethereum powered by SP1. +- [SP1 Reth](https://github.com/succinctlabs/rsp): A performant, type-1 zkEVM written in Rust & SP1 using Reth. +- [SP1 Contract Call](https://github.com/succinctlabs/sp1-contract-call): A lightweight library to generate ZKPs of Ethereum smart contract execution +- and many more! + +SP1 is used by protocols in production today: + +- [SP1 Blobstream](https://github.com/succinctlabs/sp1-blobstream): A bridge that verifies [Celestia](https://celestia.org/) “data roots” (a commitment to all data blobs posted in a range of Celestia blocks) on Ethereum and other EVM chains. +- [SP1 Vector](https://github.com/succinctlabs/sp1-vector): A bridge that relays [Avail's](https://www.availproject.org/) merkle root to Ethereum and also functions as a token bridge from Avail to Ethereum. + + +## 100x developer productivity + +SP1 enables teams to use ZKPs in production with minimal overhead and fast timelines. + +**Maintainable:** With SP1, you can reuse existing Rust crates, like `revm`, `reth`, `tendermint-rs`, `serde` and more, to write your ZKP logic in maintainable, Rust code. + +**Go to market faster:** By reusing existing crates and expressing ZKP logic in regular code, SP1 significantly reduces audit surface area and complexity, enabling teams to go to market with ZKPs faster. + +## Blazing Fast Performance + +SP1 is the fastest zkVM and has blazing fast performance on a variety of realistic blockchain workloads, including light clients and rollups. With SP1, ZKP proving costs are an order of magnitude less than alternative zkVMs or even circuits, making it cost-effective and fast for practical use. + +Read more about our benchmarking results [here](https://blog.succinct.xyz/sp1-benchmarks-8-6-24). + +## Open Source + +SP1 is 100% open-source (MIT / Apache 2.0) with no code obfuscation and built to be contributor friendly, with all development done in the open. Unlike existing zkVMs whose constraint logic is closed-source and impossible to audit or modify, SP1 is modularly architected and designed to be customizable from day one. This customizability (unique to SP1) allows for users to add “precompiles” to the core zkVM logic that yield substantial performance gains, making SP1’s performance not only SOTA vs. existing zkVMs, but also competitive with circuits in a variety of use-cases. + + + diff --git a/book/versioned_docs/version-3.4.0/writing-programs/basics.mdx b/book/versioned_docs/version-3.4.0/writing-programs/basics.mdx new file mode 100644 index 0000000000..7eb28e7004 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/writing-programs/basics.mdx @@ -0,0 +1,15 @@ +import Example from "../../../static/examples_fibonacci_program_src_main.rs.mdx"; + +# Basics + +The easiest way to understand how to write programs for the SP1 zkVM is to look at some examples. + +## Example: Fibonacci + +This program is from the `examples` [directory](https://github.com/succinctlabs/sp1/tree/main/examples) in the SP1 repo which contains several example programs of varying complexity. + + + +As you can see, writing programs is as simple as writing normal Rust. + +After you've written your program, you must compile it to an ELF that the SP1 zkVM can prove. To read more about compiling programs, refer to the section on [Compiling Programs](./compiling). To read more about how inputs and outputs work, refer to the section on [Inputs & Outputs](./inputs-and-outputs). diff --git a/book/versioned_docs/version-3.4.0/writing-programs/compiling.mdx b/book/versioned_docs/version-3.4.0/writing-programs/compiling.mdx new file mode 100644 index 0000000000..fef91eed8e --- /dev/null +++ b/book/versioned_docs/version-3.4.0/writing-programs/compiling.mdx @@ -0,0 +1,100 @@ +import Example from "../../../static/examples_fibonacci_script_build.rs.mdx"; + +# Compiling Programs + +Once you have written an SP1 program, you must compile it to an ELF file that can be executed in the zkVM. The `cargo prove` CLI tool (downloaded during installation) provides convenient commands for compiling SP1 programs. + +## Development Builds + +> WARNING: This may not generate a reproducible ELF which is necessary for verifying that your binary corresponds to given source code. +> +> Use the [reproducible build system](#reproducible-builds-with-docker-production) for production builds. + +To build a program while developing, simply run the following command in the crate that contains your SP1 program: + +```bash +cargo prove build +``` + +This will compile the ELF that can be executed in the zkVM and put it in the file `elf/riscv32im-succinct-zkvm-elf`. The output from the command will look something like this: + +```bash +[sp1] Compiling version_check v0.9.4 +[sp1] Compiling proc-macro2 v1.0.86 +[sp1] Compiling unicode-ident v1.0.12 +[sp1] Compiling cfg-if v1.0.0 +... +[sp1] Compiling sp1-lib v1.0.1 +[sp1] Compiling sp1-zkvm v1.0.1 +[sp1] Compiling fibonacci-program v0.1.0 (/Users/username/Documents/fibonacci/program) +[sp1] Finished `release` profile [optimized] target(s) in 8.33s +``` + +Under the hood, this CLI command calls `cargo build` with the `riscv32im-succinct-zkvm-elf` target and other required environment variables and flags. The logic for this command is defined in the [sp1-build](https://github.com/succinctlabs/sp1/tree/main/build) crate. + +### Advanced Build Options + +You can pass additional arguments to the `cargo prove build` command to customize the build process, like configuring what features are enabled, customizing the output directory and more. To see all available options, run `cargo prove build --help`. Many of these options mirror the options available in the `cargo build` command. + +## Production Builds + +For production builds of programs, you can build your program inside a Docker container which will generate a **reproducible ELF** on all platforms. To do so, just use the `--docker` flag and optionally the `--tag` flag with the release version you want to use (defaults to `latest`). For example: + +```bash +cargo prove build --docker --tag v1.0.1 +``` + +To verify that your build is reproducible, you can compute the SHA-512 hash of the ELF on different platforms and systems with: + +```bash +$ shasum -a 512 elf/riscv32im-succinct-zkvm-elf +f9afb8caaef10de9a8aad484c4dd3bfa54ba7218f3fc245a20e8a03ed40b38c617e175328515968aecbd3c38c47b2ca034a99e6dbc928512894f20105b03a203 +``` + +## Build Script + +If you want your program crate to be built automatically whenever you build/run your script crate, you can add a `build.rs` file inside of `script/` (at the same level as `Cargo.toml` of your script crate) that utilizes the `sp1-build` crate: + + + +The path passed in to `build_program` should point to the directory containing the `Cargo.toml` file for your program. Make sure to also add `sp1-build` as a build dependency in `script/Cargo.toml`: + +```toml +[build-dependencies] +sp1-build = "2.0.0" +``` + +You will see output like the following from the build script if the program has changed, indicating that the program was rebuilt: + +``` +[fibonacci-script 0.1.0] cargo:rerun-if-changed=../program/src +[fibonacci-script 0.1.0] cargo:rerun-if-changed=../program/Cargo.toml +[fibonacci-script 0.1.0] cargo:rerun-if-changed=../program/Cargo.lock +[fibonacci-script 0.1.0] cargo:warning=fibonacci-program built at 2024-03-02 22:01:26 +[fibonacci-script 0.1.0] [sp1] Compiling fibonacci-program v0.1.0 (/Users/umaroy/Documents/fibonacci/program) +[fibonacci-script 0.1.0] [sp1] Finished release [optimized] target(s) in 0.15s +warning: fibonacci-script@0.1.0: fibonacci-program built at 2024-03-02 22:01:26 +``` + +The above output was generated by running `RUST_LOG=info cargo run --release -vv` for the `script` folder of the Fibonacci example. + +### Advanced Build Options + +To configure the build process when using the `sp1-build` crate, you can pass a [`BuildArgs`](https://docs.rs/sp1-build/1.2.0/sp1_build/struct.BuildArgs.html) struct to to the [`build_program_with_args`](https://docs.rs/sp1-build/1.2.0/sp1_build/fn.build_program_with_args.html) function. The build arguments are the same as the ones available from the `cargo prove build` command. + +As an example, you could use the following code to build the Fibonacci example with the `docker` flag set to `true` and a custom output directory for the generated ELF: + +```rust +use sp1_build::{build_program_with_args, BuildArgs}; + +fn main() { + let args = BuildArgs { + docker: true, + output_directory: "./fibonacci-program".to_string(), + ..Default::default() + }; + build_program_with_args("../program", &args); +} +``` + +**Note:** If you want reproducible builds with the `build.rs` approach, you should use the `docker` flag and the `build_program_with_args` function, as shown in the example above. diff --git a/book/versioned_docs/version-3.4.0/writing-programs/cycle-tracking.mdx b/book/versioned_docs/version-3.4.0/writing-programs/cycle-tracking.mdx new file mode 100644 index 0000000000..ea45fb26bd --- /dev/null +++ b/book/versioned_docs/version-3.4.0/writing-programs/cycle-tracking.mdx @@ -0,0 +1,124 @@ +import Example from "../../../static/examples_cycle-tracking_program_bin_normal.rs.mdx"; + +# Cycle Tracking + +When writing a program, it is useful to know how many RISC-V cycles a portion of the program takes to identify potential performance bottlenecks. SP1 provides a way to track the number of cycles spent in a portion of the program. + +## Tracking Cycles with Annotations + +To track the number of cycles spent in a portion of the program, you can either put `println!("cycle-tracker-start: block name")` + `println!("cycle-tracker-end: block name")` statements (block name must be same between start and end) around the portion of your program you want to profile or use the `#[sp1_derive::cycle_tracker]` macro on a function. An example is shown below: + + + +Note that to use the macro, you must add the `sp1-derive` crate to your dependencies for your program. + +```toml +[dependencies] +sp1-derive = "2.0.0" +``` + +In the script for proof generation, setup the logger with `utils::setup_logger()` and run the script with `RUST_LOG=info cargo run --release`. You should see the following output: + +``` +$ RUST_LOG=info cargo run --release + Finished release [optimized] target(s) in 0.21s + Running `target/release/cycle-tracking-script` +2024-03-13T02:03:40.567500Z INFO execute: loading memory image +2024-03-13T02:03:40.567751Z INFO execute: starting execution +2024-03-13T02:03:40.567760Z INFO execute: clk = 0 pc = 0x2013b8 +2024-03-13T02:03:40.567822Z INFO execute: ┌╴setup +2024-03-13T02:03:40.568095Z INFO execute: └╴4,398 cycles +2024-03-13T02:03:40.568122Z INFO execute: ┌╴main-body +2024-03-13T02:03:40.568149Z INFO execute: │ ┌╴expensive_function +2024-03-13T02:03:40.568250Z INFO execute: │ └╴1,368 cycles +stdout: result: 5561 +2024-03-13T02:03:40.568373Z INFO execute: │ ┌╴expensive_function +2024-03-13T02:03:40.568470Z INFO execute: │ └╴1,368 cycles +stdout: result: 2940 +2024-03-13T02:03:40.568556Z INFO execute: └╴5,766 cycles +2024-03-13T02:03:40.568566Z INFO execute: finished execution clk = 11127 pc = 0x0 +2024-03-13T02:03:40.569251Z INFO execute: close time.busy=1.78ms time.idle=21.1µs +``` + +Note that we elegantly handle nested cycle tracking, as you can see above. + +### Get Tracked Cycle Counts + +To include tracked cycle counts in the `ExecutionReport` when using `ProverClient::execute`, use the following annotations: + +```rust +fn main() { + println!("cycle-tracker-report-start: block name"); + // ... + println!("cycle-tracker-report-end: block name"); +} +``` + +This will log the cycle count for `block name` and include it in the `ExecutionReport` in the `cycle_tracker` map. + +## Tracking Cycles with Tracing + +The `cycle-tracker` annotation is a convenient way to track cycles for specific sections of code. However, sometimes it can also be useful to track what functions are taking the most cycles across the entire program, without having to annotate every function individually. + +First, we need to generate a trace file of the program counter at each cycle while the program is executing. This can be done by simply setting the `TRACE_FILE` environment variable with the path of the file you want to write the trace to. For example, you can run the following command in the `script` directory for any example program: + +```bash +TRACE_FILE=trace.log RUST_LOG=info cargo run --release +``` + +When the `TRACE_FILE` environment variable is set, as SP1's RISC-V runtime is executing, it will write a log of the program counter to the file specified by `TRACE_FILE`. + +Next, we can use the `cargo prove` CLI with the `trace` command to analyze the trace file and generate a table of instruction counts. This can be done with the following command: + +```bash +cargo prove trace --elf --trace +``` + +The `trace` command will generate a table of instruction counts, sorted by the number of cycles spent in each function. The output will look something like this: + +``` + [00:00:00] [########################################] 17053/17053 (0s) + +Total instructions in trace: 17053 + + + Instruction counts considering call graph ++----------------------------------------+-------------------+ +| Function Name | Instruction Count | +| __start | 17045 | +| main | 12492 | +| sp1_zkvm::syscalls::halt::syscall_halt | 4445 | +| sha2::sha256::compress256 | 4072 | +| sp1_lib::io::commit | 258 | +| sp1_lib::io::SyscallWriter::write | 255 | +| syscall_write | 195 | +| memcpy | 176 | +| memset | 109 | +| sp1_lib::io::read_vec | 71 | +| __rust_alloc | 29 | +| sp1_zkvm::heap::SimpleAlloc::alloc | 22 | +| syscall_hint_len | 3 | +| syscall_hint_read | 2 | ++----------------------------------------+-------------------+ + + + Instruction counts ignoring call graph ++----------------------------------------+-------------------+ +| Function Name | Instruction Count | +| main | 12075 | +| sha2::sha256::compress256 | 4073 | +| sp1_zkvm::syscalls::halt::syscall_halt | 219 | +| memcpy | 180 | +| syscall_write | 123 | +| memset | 111 | +| sp1_lib::io::commit | 88 | +| sp1_lib::io::SyscallWriter::write | 60 | +| __start | 45 | +| sp1_lib::io::read_vec | 35 | +| sp1_zkvm::heap::SimpleAlloc::alloc | 23 | +| anonymous | 7 | +| __rust_alloc | 7 | +| syscall_hint_len | 4 | +| syscall_hint_read | 3 | ++----------------------------------------+-------------------+ +``` diff --git a/book/versioned_docs/version-3.4.0/writing-programs/inputs-and-outputs.mdx b/book/versioned_docs/version-3.4.0/writing-programs/inputs-and-outputs.mdx new file mode 100644 index 0000000000..62c0e62bb5 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/writing-programs/inputs-and-outputs.mdx @@ -0,0 +1,67 @@ +import Example from "../../../static/examples_io_program_src_main.rs.mdx"; + +# Inputs and Outputs + +In real world applications of zero-knowledge proofs, you almost always want to verify your proof in the context of some inputs and outputs. For example: + +- **Rollups**: Given a list of transactions, prove the new state of the blockchain. +- **Coprocessors**: Given a block header, prove the historical state of some storage slot inside a smart contract. +- **Attested Images**: Given a signed image, prove that you made a restricted set of image transformations. + +In this section, we cover how you pass inputs and outputs to the zkVM and create new types that support serialization. + +## Reading Data + +Data that is read is not public to the verifier by default. Use the `sp1_zkvm::io::read::` method: + +```rust +let a = sp1_zkvm::io::read::(); +let b = sp1_zkvm::io::read::(); +let c = sp1_zkvm::io::read::(); +``` + +Note that `T` must implement the `serde::Serialize` and `serde::Deserialize` trait. If you want to read bytes directly, you can also use the `sp1_zkvm::io::read_vec` method. + +```rust +let my_vec = sp1_zkvm::io::read_vec(); +``` + +## Committing Data + +Committing to data makes the data public to the verifier. Use the `sp1_zkvm::io::commit::` method: + +```rust +sp1_zkvm::io::commit::(&a); +sp1_zkvm::io::commit::(&b); +sp1_zkvm::io::commit::(&c); +``` + +Note that `T` must implement the `Serialize` and `Deserialize` trait. If you want to write bytes directly, you can also use `sp1_zkvm::io::commit_slice` method: + +```rust +let mut my_slice = [0_u8; 32]; +sp1_zkvm::io::commit_slice(&my_slice); +``` + +## Creating Serializable Types + +Typically, you can implement the `Serialize` and `Deserialize` traits using a simple derive macro on a struct. + +```rust +use serde::{Serialize, Deserialize}; + +#[derive(Serialize, Deserialize)] +struct MyStruct { + a: u32, + b: u64, + c: String +} +``` + +For more complex usecases, refer to the [Serde docs](https://serde.rs/). + +## Example + +Here is a basic example of using inputs and outputs with more complex types. + + diff --git a/book/versioned_docs/version-3.4.0/writing-programs/patched-crates.md b/book/versioned_docs/version-3.4.0/writing-programs/patched-crates.md new file mode 100644 index 0000000000..818190f2ee --- /dev/null +++ b/book/versioned_docs/version-3.4.0/writing-programs/patched-crates.md @@ -0,0 +1,234 @@ +# Patched Crates + +We maintain forks of commonly used libraries in blockchain infrastructure to significantly accelerate the execution of certain operations. +Under the hood, we use [precompiles](./precompiles) to achieve tremendous performance improvements in proof generation time. + +**If you know of a library or library version that you think should be patched, please open an issue or a pull request!** + +## Supported Libraries + +| Crate Name | Repository | Notes | Versions | +|---------------------|---------------------------------------------------------------------------------------|------------------|-----------------------| +| sha2 | [sp1-patches/RustCrypto-hashes](https://github.com/sp1-patches/RustCrypto-hashes) | sha256 | 0.9.8, 0.10.6, 0.10.8 | +| sha3 | [sp1-patches/RustCrypto-hashes](https://github.com/sp1-patches/RustCrypto-hashes) | keccak256 | 0.9.8, 0.10.6, 0.10.8 | +| bigint | [sp1-patches/RustCrypto-bigint](https://github.com/sp1-patches/RustCrypto-bigint) | bigint | 0.5.5 | +| tiny-keccak | [sp1-patches/tiny-keccak](https://github.com/sp1-patches/tiny-keccak) | keccak256 | 2.0.2 | +| curve25519-dalek | [sp1-patches/curve25519-dalek](https://github.com/sp1-patches/curve25519-dalek) | ed25519 verify | 4.1.3, 3.2.0 | +| curve25519-dalek-ng | [sp1-patches/curve25519-dalek-ng](https://github.com/sp1-patches/curve25519-dalek-ng) | ed25519 verify | 4.1.1 | +| ed25519-consensus | [sp1-patches/ed25519-consensus](http://github.com/sp1-patches/ed25519-consensus) | ed25519 verify | 2.1.0 | +| ed25519-dalek | [sp1-patches/ed25519-dalek](http://github.com/sp1-patches/ed25519-dalek) | ed25519 verify | 1.0.1 | +| ecdsa-core | [sp1-patches/signatures](http://github.com/sp1-patches/signatures) | secp256k1 verify | 0.16.8, 0.16.9 | +| secp256k1 | [sp1-patches/rust-secp256k1](http://github.com/sp1-patches/rust-secp256k1) | secp256k1 verify | 0.29.0, 0.29.1 | +| substrate-bn | [sp1-patches/bn](https://github.com/sp1-patches/bn) | BN254 | 0.6.0 | +| bls12_381 | [sp1-patches/bls12_381](https://github.com/sp1-patches/bls12_381) | BLS12-381 | 0.8.0 | + +## Using Patched Crates + +To use the patched libraries, you can use corresponding patch entries in your program's `Cargo.toml` such as: + +```toml +[patch.crates-io] +sha2-v0-9-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", tag = "sha2-v0.9.8-patch-v1" } +sha2-v0-10-6 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", tag = "sha2-v0.10.6-patch-v1" } +sha2-v0-10-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", tag = "sha2-v0.10.8-patch-v1" } +sha3-v0-9-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha3", tag = "sha3-v0.9.8-patch-v1" } +sha3-v0-10-6 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha3", tag = "sha3-v0.10.6-patch-v1" } +sha3-v0-10-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha3", tag = "sha3-v0.10.8-patch-v1" } +crypto-bigint = { git = "https://github.com/sp1-patches/RustCrypto-bigint", tag = "crypto_bigint-v0.5.5-patch-v1" } +tiny-keccak = { git = "https://github.com/sp1-patches/tiny-keccak", tag = "tiny_keccak-v2.0.2-patch-v1" } +substrate-bn = { git = "https://github.com/sp1-patches/bn", tag = "substrate_bn-v0.6.0-patch-v1" } +bls12_381 = { git = "https://github.com/sp1-patches/bls12_381", tag = "bls12_381-v0.8.0-patch-v1" } + +# For sp1 versions >= 3.4.0 +curve25519-dalek = { git = "https://github.com/sp1-patches/curve25519-dalek", tag = "patch-v4.1.3-v3.4.0" } +# For sp1 versions < 3.4.0 +curve25519-dalek = { git = "https://github.com/sp1-patches/curve25519-dalek", tag = "curve25519_dalek-v4.1.3-patch-v1" } +curve25519-dalek-ng = { git = "https://github.com/sp1-patches/curve25519-dalek-ng", tag = "curve25519_dalek_ng-v4.1.1-patch-v1" } +ed25519-consensus = { git = "https://github.com/sp1-patches/ed25519-consensus", tag = "ed25519_consensus-v2.1.0-patch-v1" } +# For sp1 versions >= 3.3.0 +ecdsa-core = { git = "https://github.com/sp1-patches/signatures", package = "ecdsa", tag = "ecdsa-v0.16.9-patch-v3.3.0" } +secp256k1 = { git = "https://github.com/sp1-patches/rust-secp256k1", tag = "secp256k1-v0.29.0-patch-v3.3.0" } +# For sp1 versions < 3.3.0 +ecdsa-core = { git = "https://github.com/sp1-patches/signatures", package = "ecdsa", tag = "ecdsa-v0.16.9-patch-v1" } +secp256k1 = { git = "https://github.com/sp1-patches/rust-secp256k1", tag = "secp256k1-v0.29.0-patch-v1" } +``` + +If you are patching a crate from Github instead of from crates.io, you need to specify the +repository in the patch section. For example: + +```toml +[patch."https://github.com/RustCrypto/hashes"] +sha3 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha3", tag = "sha3-v0.10.8-patch-v1" } +``` + +An example of using patched crates is available in our [Tendermint Example](https://github.com/succinctlabs/sp1/blob/main/examples/tendermint/program/Cargo.toml#L22-L25). + +## Ed25519 Acceleration + +To accelerate Ed25519 operations, you'll need to patch crates depending on if you're using the `ed25519-consensus` or `ed25519-dalek` library in your program or dependencies. + +Generally, `ed25519-consensus` has better performance than `ed25519-dalek` by a factor of 2. + +### Patches + +Apply the following patches based on what crates are in your dependencies. + +- `ed25519-consensus` + + ```toml + ed25519-consensus = { git = "https://github.com/sp1-patches/ed25519-consensus", tag = "ed25519_consensus-v2.1.0-patch-v1" } + ``` + + Note: The curve operations for Ed25519 occur mainly inside of `curve25519-dalek-ng`, but the crate also exposes + a `u32_backend` feature flag which accelerates signature recovery by 10% over the default `u64_backend`, which is why + `ed25519-consensus` is patched rather than `ed25519-dalek`. + +- `ed25519-dalek` + + If using `ed25519-dalek` version `2.1`, you can patch it with the following: + + ```toml + curve25519-dalek = { git = "https://github.com/sp1-patches/curve25519-dalek", tag = "curve25519_dalek-v4.1.3-patch-v1" } + ``` + + If using `ed25519-dalek` version `1.0.1`, you can patch it with the following: + + ```toml + ed25519-dalek = { git = "https://github.com/sp1-patches/ed25519-dalek", tag = "ed25519_dalek-v1.0.1-patch-v1" } + ``` + + Note: We need to patch the underlying Ed25519 curve operations in the `curve25519-dalek` crate. `ed25519-dalek` + version `2.1` uses `curve25519-dalek` version `4.1.3`, while `1.0.1` uses `3.2.0`. For version `2.1`, we patch + `curve25519-dalek` directly, while for version `1.0.1`, we patch `ed25519-dalek`. + +- `curve25519-dalek` + + ```toml + curve25519-dalek = { git = "https://github.com/sp1-patches/curve25519-dalek", tag = "curve25519_dalek-v4.1.3-patch-v1" } + ``` + +- `curve25519-dalek-ng` + + ```toml + curve25519-dalek-ng = { git = "https://github.com/sp1-patches/curve25519-dalek-ng", tag = "curve25519_dalek_ng-v4.1.1-patch-v1" } + ``` + +## Secp256k1 Acceleration + +To accelerate Secp256k1 operations, you'll need to patch `k256` or `secp256k1` depending on your usage. + +Generally, if a crate you're using (ex. `revm`) has support for using `k256` instead of `secp256k1`, you should use `k256`. + +### Patches + +Apply the following patches based on what crates are in your dependencies. + +- `k256` + + ```toml + ecdsa-core = { git = "https://github.com/sp1-patches/signatures", package = "ecdsa", tag = "ecdsa-v0.16.9-patch-v1" } + ``` + + Note: The curve operations for `k256` are inside of the `ecdsa-core` crate, so you don't need to patch `k256` itself, and just patching `ecdsa-core` is enough. + +- `secp256k1` + + ```toml + secp256k1 = { git = "https://github.com/sp1-patches/rust-secp256k1", tag = "secp256k1-v0.29.0-patch-v1" } + ``` + +## BN254 Acceleration + +To accelerate BN254 (Also known as BN128 and Alt-BN128), you will need to patch the `substrate-bn` crate. + +### Patches + +Apply the patch by adding the following to your list of dependencies: + +```rust +substrate-bn = { git = "https://github.com/sp1-patches/bn", tag = "substrate_bn-v0.6.0-patch-v1" } +``` + +### Performance Benchmarks for Patched `substrate-bn` in `revm` + +| Operation | Standard `substrate-bn` Cycles | Patched `substrate-bn` Cycles | Times Faster | +| --------- | ------------------------------ | ----------------------------- | ------------ | +| run-add | 170,298 | 111,615 | 1.52 | +| run-mul | 1,860,836 | 243,830 | 7.64 | +| run-pair | 255,627,625 | 11,528,503 | 22.15 | + +Note: The operations `run-add`, `run-mul`, and `run-pair` are from the `revm` crate, specifically from the file `crates/precompile/src/bn128.rs` on GitHub. In the patched version of the `substrate-bn` crate, these functions utilize SP1's BN254 Fp precompiles. + +To accelerate [revm](https://github.com/bluealloy/revm) in SP1 using the BN254 patched crate, replace the `substrate-bn` crate with the patched crate by adding the following to `crates/precompile/Cargo.toml`: + +```toml +bn = { git = "https://github.com/sp1-patches/bn", package = "substrate-bn", tag = "substrate_bn-v0.6.0-patch-v1" } +``` + +## BLS12-381 Acceleration + +To accelerate BLS12-381 operations, you'll need to patch the `bls12_381` crate. Apply the following patch by adding the following to your list of dependencies: + +```toml +bls12_381 = { git = "https://github.com/sp1-patches/bls12_381", tag = "bls12_381-v0.8.0-patch-v1" } +``` + +This patch significantly improves the performance of BLS12-381 operations, making it essential for applications that rely heavily on these cryptographic primitives. + +### Performance Benchmarks for Patched `bls12_381` in [`kzg-rs`](https://github.com/succinctlabs/kzg-rs) + +| Test | Unpatched Cycles | Patched Cycles | Improvement (x faster) | +| -------------------------------------- | ---------------- | -------------- | ---------------------- | +| Verify blob KZG proof | 265,322,934 | 27,166,173 | 9.77x | +| Verify blob KZG proof batch (10 blobs) | 1,228,277,089 | 196,571,578 | 6.25x | +| Evaluate polynomial in evaluation form | 90,717,711 | 59,370,556 | 1.53x | +| Compute challenge | 63,400,511 | 57,341,532 | 1.11x | +| Verify KZG proof | 212,708,597 | 9,390,640 | 22.65x | + +## Troubleshooting + +### Verifying Patch Usage: Cargo + +You can check if the patch was applied by using cargo's tree command to print the dependencies of the crate you patched. + +```bash +cargo tree -p sha2@0.9.8 +``` + +Next to the package name, it should have a link to the Github repository that you patched with. + +Ex. + +```text +sha2 v0.9.8 (https://github.com/sp1-patches/RustCrypto-hashes?branch=patch-sha2-v0.9.8#afdbfb09) +├── ... +``` + +### Verifying Patch Usage: SP1 + +To check if a precompile is used by your program, you can view SP1's ExecutionReport, which is returned when executing a program with `execute`. In `ExecutionReport` you can view the `syscall_counts` map to view if a specific syscall was used. + +For example, if you wanted to check `sha256` was used, you would look for `SHA_EXTEND` and `SHA_COMPRESS` in `syscall_counts`. + +An example of this is available in our [Patch Testing Example](https://github.com/succinctlabs/sp1/blob/dd032eb23949828d244d1ad1f1569aa78155837c/examples/patch-testing/script/src/main.rs). + +### Cargo Version Issues + +If you encounter issues with version commits on your patches, you should try updating the patched crate manually. + +```bash +cargo update -p +``` + +If you encounter issues relating to cargo / git, you can try setting `CARGO_NET_GIT_FETCH_WITH_CLI`: + +```bash +CARGO_NET_GIT_FETCH_WITH_CLI=true cargo update -p +``` + +You can permanently set this value in `~/.cargo/config`: + +```toml +[net] +git-fetch-with-cli = true +``` diff --git a/book/versioned_docs/version-3.4.0/writing-programs/precompiles.mdx b/book/versioned_docs/version-3.4.0/writing-programs/precompiles.mdx new file mode 100644 index 0000000000..a8883d478a --- /dev/null +++ b/book/versioned_docs/version-3.4.0/writing-programs/precompiles.mdx @@ -0,0 +1,24 @@ +import Example from "../../../static/crates_zkvm_lib_src_lib.rs.mdx"; +import CodeBlock from '@theme/CodeBlock'; + +# Precompiles + +Precompiles are built into the SP1 zkVM and accelerate commonly used operations such as elliptic curve arithmetic and hashing. Under the hood, precompiles are implemented as custom STARK tables dedicated to proving one or few operations. **They typically improve the performance +of executing expensive operations in SP1 by a few orders of magnitude.** + +Inside the zkVM, precompiles are exposed as system calls executed through the `ecall` RISC-V instruction. +Each precompile has a unique system call number and implements an interface for the computation. + +SP1 also has been designed specifically to make it easy for external contributors to create and extend the zkVM with their own precompiles. +To learn more about this, you can look at implementations of existing precompiles in the [precompiles](https://github.com/succinctlabs/sp1/tree/main/crates/core/executor/src/events/precompiles) folder. More documentation on this will be coming soon. + +**To use precompiles, we typically recommend you interact with them through [patches](./patched-crates.md), which are crates modified +to use these precompiles under the hood, without requiring you to call system calls directly.** + +## Specification + +If you are an advanced user you can interact with the precompiles directly using external system calls. + +Here is a list of all available system calls & precompiles. + + diff --git a/book/versioned_docs/version-3.4.0/writing-programs/proof-aggregation.md b/book/versioned_docs/version-3.4.0/writing-programs/proof-aggregation.md new file mode 100644 index 0000000000..dc13d6e42c --- /dev/null +++ b/book/versioned_docs/version-3.4.0/writing-programs/proof-aggregation.md @@ -0,0 +1,58 @@ +# Proof Aggregation + +SP1 supports proof aggregation and recursion, which allows you to verify an SP1 proof within SP1. Use cases include: + +- Reducing on-chain verification costs by aggregating multiple SP1 proofs into a single SP1 proof. +- Proving logic that is split into multiple proofs, such as proving a statement about a rollup's state transition function by proving each block individually and aggregating these proofs to produce a final proof of a range of blocks. + +**For an example of how to use proof aggregation and recursion in SP1, refer to the [aggregation example](https://github.com/succinctlabs/sp1/blob/main/examples/aggregation/script/src/main.rs).** + +Note that to verify an SP1 proof inside SP1, you must generate a "compressed" SP1 proof (see [Proof Types](../generating-proofs/proof-types.md) for more details). + +### When to use aggregation + +Note that by itself, SP1 can already prove arbitrarily large programs by chunking the program's execution into multiple "shards" (contiguous batches of cycles) and generating proofs for each shard in parallel, and then recursively aggregating the proofs. Thus, aggregation is generally **not necessary** for most use-cases, as SP1's proving for large programs is already parallelized. However, aggregation can be useful for aggregating computations that require more than the zkVM's limited (~2GB) memory or for aggregating multiple SP1 proofs from different parties into a single proof to save on onchain verification costs. + +## Verifying Proofs inside the zkVM + +To verify a proof inside the zkVM, you can use the `sp1_zkvm::lib::verify::verify_sp1_proof` function. + +```rust +sp1_zkvm::lib::verify::verify_sp1_proof(vkey, public_values_digest); +``` + +**You do not need to pass in the proof as input into the syscall, as the proof will automatically be read for the proof input stream by the prover.** + +Note that you must include the `verify` feature in your `Cargo.toml` for `sp1-zkvm` to be able to use the `verify_proof` function (like [this](https://github.com/succinctlabs/sp1/blob/main/examples/aggregation/program/Cargo.toml#L11)). + +## Generating Proofs with Aggregation + +To provide an existing proof as input to the SP1 zkVM, you can use the existing `SP1Stdin` object +which is already used for all inputs to the zkVM. + +```rust +# Generating proving key and verifying key. +let (input_pk, input_vk) = client.setup(PROOF_INPUT_ELF); +let (aggregation_pk, aggregation_vk) = client.setup(AGGREGATION_ELF); + +// Generate a proof that will be recursively verified / aggregated. Note that we use the "compressed" +// proof type, which is necessary for aggregation. +let mut stdin = SP1Stdin::new(); +let input_proof = client + .prove(&input_pk, stdin) + .compressed() + .run() + .expect("proving failed"); + +// Create a new stdin object to write the proof and the corresponding verifying key to. +let mut stdin = SP1Stdin::new(); +stdin.write_proof(input_proof, input_vk); + +// Generate a proof that will recursively verify / aggregate the input proof. +let aggregation_proof = client + .prove(&aggregation_pk, stdin) + .compressed() + .run() + .expect("proving failed"); + +``` diff --git a/book/versioned_docs/version-3.4.0/writing-programs/setup.md b/book/versioned_docs/version-3.4.0/writing-programs/setup.md new file mode 100644 index 0000000000..2cd677f4a9 --- /dev/null +++ b/book/versioned_docs/version-3.4.0/writing-programs/setup.md @@ -0,0 +1,50 @@ +# Setup + +In this section, we will teach you how to setup a self-contained crate which can be compiled as a program that can be executed inside the zkVM. + +## Create Project with CLI (Recommended) + +The recommended way to setup your first program to prove inside the zkVM is using the method described in [Quickstart](../getting-started/quickstart.md) which will create a program folder. + +```bash +cargo prove new +cd program +``` + +## Manual Project Setup + +You can also manually setup a project. First create a new Rust project using `cargo`: + +```bash +cargo new program +cd program +``` + +### Cargo Manifest + +Inside this crate, add the `sp1-zkvm` crate as a dependency. Your `Cargo.toml` should look like the following: + +```rust +[workspace] +[package] +version = "0.1.0" +name = "program" +edition = "2021" + +[dependencies] +sp1-zkvm = "2.0.0" +``` + +The `sp1-zkvm` crate includes necessary utilities for your program, including handling inputs and outputs, +precompiles, patches, and more. + +### main.rs + +Inside the `src/main.rs` file, you must make sure to include these two lines to ensure that your program properly compiles to a valid SP1 program. + +```rust +#![no_main] +sp1_zkvm::entrypoint!(main); +``` + +These two lines of code wrap your main function with some additional logic to ensure that your program compiles correctly with the RISC-V target. diff --git a/book/versioned_sidebars/version-3.4.0-sidebars.json b/book/versioned_sidebars/version-3.4.0-sidebars.json new file mode 100644 index 0000000000..0e9b005f29 --- /dev/null +++ b/book/versioned_sidebars/version-3.4.0-sidebars.json @@ -0,0 +1,98 @@ +{ + "docs": [ + "introduction", + { + "type": "category", + "label": "Getting Started", + "items": [ + "getting-started/install", + "getting-started/quickstart", + "getting-started/hardware-requirements", + "getting-started/project-template" + ], + "collapsed": false + }, + { + "type": "category", + "label": "Writing Programs", + "items": [ + "writing-programs/basics", + "writing-programs/compiling", + "writing-programs/cycle-tracking", + "writing-programs/inputs-and-outputs", + "writing-programs/patched-crates", + "writing-programs/precompiles", + "writing-programs/proof-aggregation", + "writing-programs/setup" + ], + "collapsed": true + }, + { + "type": "category", + "label": "Generating Proofs", + "items": [ + "generating-proofs/basics", + "generating-proofs/setup", + "generating-proofs/proof-types", + "generating-proofs/recommended-workflow", + "generating-proofs/sp1-sdk-faq", + { + "type": "category", + "label": "Hardware Acceleration", + "link": { + "type": "doc", + "id": "generating-proofs/hardware-acceleration" + }, + "items": [ + "generating-proofs/hardware-acceleration", + "generating-proofs/hardware-acceleration/avx", + "generating-proofs/hardware-acceleration/cuda" + ] + }, + { + "type": "category", + "label": "Prover Network", + "link": { + "type": "doc", + "id": "generating-proofs/prover-network" + }, + "items": [ + "generating-proofs/prover-network/key-setup", + "generating-proofs/prover-network/usage", + "generating-proofs/prover-network/versions" + ] + }, + "generating-proofs/advanced" + ], + "collapsed": true + }, + { + "type": "category", + "label": "Verification", + "items": [ + "verification/off-chain-verification", + { + "type": "category", + "label": "On-Chain Verification", + "items": [ + "verification/onchain/getting-started", + "verification/onchain/contract-addresses", + "verification/onchain/solidity-sdk" + ] + } + ] + }, + { + "type": "category", + "label": "Developers", + "items": [ + "developers/common-issues", + "developers/usage-in-ci", + "developers/building-circuit-artifacts", + "developers/rv32im-specification" + ] + }, + "what-is-a-zkvm", + "why-use-sp1" + ] +} diff --git a/book/versions.json b/book/versions.json new file mode 100644 index 0000000000..af427f44cc --- /dev/null +++ b/book/versions.json @@ -0,0 +1,3 @@ +[ + "3.4.0" +] From c372bee280682599578c32b2ec6715043a710081 Mon Sep 17 00:00:00 2001 From: nhtyy Date: Tue, 3 Dec 2024 17:00:46 -0800 Subject: [PATCH 3/6] feat: adjust workflow to deploy docusuarus --- .github/workflows/book.yml | 115 ++++------------- .github/workflows/test-book.yml | 30 +++++ .../generating-proofs/prover-network/usage.md | 4 +- .../contract-addresses.md | 80 ------------ .../onchain-verification/getting-started.mdx | 34 ----- .../docs/onchain-verification/solidity-sdk.md | 122 ------------------ .../verification/off-chain-verification.md | 2 +- .../verification/onchain/getting-started.mdx | 2 +- book/docusaurus.config.ts | 8 +- ...markdown-templates.sh => gen-code-refs.sh} | 0 .../generating-proofs/prover-network/usage.md | 4 +- .../contract-addresses.md | 80 ------------ .../onchain-verification/getting-started.mdx | 34 ----- .../onchain-verification/solidity-sdk.md | 122 ------------------ .../verification/off-chain-verification.md | 2 +- .../verification/onchain/getting-started.mdx | 2 +- 16 files changed, 65 insertions(+), 576 deletions(-) create mode 100644 .github/workflows/test-book.yml delete mode 100644 book/docs/onchain-verification/contract-addresses.md delete mode 100644 book/docs/onchain-verification/getting-started.mdx delete mode 100644 book/docs/onchain-verification/solidity-sdk.md rename book/{create-markdown-templates.sh => gen-code-refs.sh} (100%) delete mode 100644 book/versioned_docs/version-3.4.0/onchain-verification/contract-addresses.md delete mode 100644 book/versioned_docs/version-3.4.0/onchain-verification/getting-started.mdx delete mode 100644 book/versioned_docs/version-3.4.0/onchain-verification/solidity-sdk.md diff --git a/.github/workflows/book.yml b/.github/workflows/book.yml index 82449ca963..8d2529e8d8 100644 --- a/.github/workflows/book.yml +++ b/.github/workflows/book.yml @@ -12,114 +12,43 @@ on: - "book/**" merge_group: -jobs: - # test: - # runs-on: ubuntu-latest - # name: test - # timeout-minutes: 60 - - # steps: - # - uses: actions/checkout@v4 - - # - name: Install mdbook - # run: | - # mkdir mdbook - # curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.4.14/mdbook-v0.4.14-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=./mdbook - # echo $(pwd)/mdbook >> $GITHUB_PATH - - # - name: Install mdbook-template - # run: | - # mkdir mdbook-template - # curl -sSL https://github.com/sgoudham/mdbook-template/releases/latest/download/mdbook-template-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=./mdbook-template - # echo $(pwd)/mdbook-template >> $GITHUB_PATH - - # - name: Run tests - # run: mdbook test - - lint: - runs-on: ubuntu-latest - name: lint - timeout-minutes: 60 - - steps: - - uses: actions/checkout@v4 - - - name: Install mdbook-linkcheck - run: | - mkdir mdbook-linkcheck - curl -sSL -o mdbook-linkcheck.zip https://github.com/Michael-F-Bryan/mdbook-linkcheck/releases/latest/download/mdbook-linkcheck.x86_64-unknown-linux-gnu.zip - unzip mdbook-linkcheck.zip -d ./mdbook-linkcheck - chmod +x $(pwd)/mdbook-linkcheck/mdbook-linkcheck - echo $(pwd)/mdbook-linkcheck >> $GITHUB_PATH - - - name: Run linkcheck - run: mdbook-linkcheck --standalone +defaults: + run: + working-directory: book +jobs: build: + name: Build Docusaurus runs-on: ubuntu-latest - timeout-minutes: 60 steps: - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@nightly - - name: Install mdbook - run: | - mkdir mdbook - curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.4.14/mdbook-v0.4.14-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=./mdbook - echo $(pwd)/mdbook >> $GITHUB_PATH - - - name: Install mdbook-template - run: | - mkdir mdbook-template - curl -sSL https://github.com/sgoudham/mdbook-template/releases/latest/download/mdbook-template-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=./mdbook-template - echo $(pwd)/mdbook-template >> $GITHUB_PATH - - - uses: Swatinem/rust-cache@v2 with: - cache-on-failure: true - - - name: Build book - run: mdbook build + fetch-depth: 0 + - uses: actions/setup-node@v4 + with: + node-version: 18 + cache: npm + cache-dependency-path: book/package-lock.json - # - name: Build docs - # run: cargo docs - # env: - # # Keep in sync with ./ci.yml:jobs.docs - # RUSTDOCFLAGS: - # --cfg docsrs --show-type-layout --generate-link-to-definition --enable-index-page - # -Zunstable-options + - name: Install dependencies + run: npm ci - # - name: Move docs to book folder - # run: | - # mv target/doc target/book/docs + - name: Create New Code Refrences + run: chmod +x gen-code-refs.sh && ./gen-code-refs.sh - - name: Archive artifact - shell: sh - run: | - chmod -c -R +rX "target/book" | - while read line; do - echo "::warning title=Invalid file permissions automatically fixed::$line" - done - tar \ - --dereference --hard-dereference \ - --directory "target/book" \ - -cvf "$RUNNER_TEMP/artifact.tar" \ - --exclude=.git \ - --exclude=.github \ - . + - name: Build website + run: npm run build - - name: Upload artifact - uses: actions/upload-artifact@v4 + - name: Upload Build Artifact + uses: actions/upload-pages-artifact@v3 with: - name: github-pages - path: ${{ runner.temp }}/artifact.tar - retention-days: 1 - if-no-files-found: error + path: book/build deploy: # Only deploy if a push to main if: github.ref_name == 'main' && github.event_name == 'push' runs-on: ubuntu-latest - needs: [lint, build] + needs: [build] # Grant GITHUB_TOKEN the permissions required to make a Pages deployment permissions: @@ -135,4 +64,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 \ No newline at end of file + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/test-book.yml b/.github/workflows/test-book.yml new file mode 100644 index 0000000000..c80530a72f --- /dev/null +++ b/.github/workflows/test-book.yml @@ -0,0 +1,30 @@ +name: Test deployment + +on: + pull_request: + branches: [main, dev] + +defaults: + run: + working-directory: book + +jobs: + test-deploy: + name: Test doc build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-node@v4 + with: + node-version: 18 + cache: npm + cache-dependency-path: book/package-lock.json + + - name: Install dependencies + run: npm ci + + - name: Test build website + run: npm run build diff --git a/book/docs/generating-proofs/prover-network/usage.md b/book/docs/generating-proofs/prover-network/usage.md index 3c87b9b38a..6a0db6fa1f 100644 --- a/book/docs/generating-proofs/prover-network/usage.md +++ b/book/docs/generating-proofs/prover-network/usage.md @@ -19,8 +19,8 @@ SP1_PROVER=network SP1_PRIVATE_KEY=... RUST_LOG=info cargo run --release - `SP1_PROVER` should be set to `network` when using the prover network. -- `SP1_PRIVATE_KEY` should be set to your [private key](../prover-network.md#key-setup). You will need - to be using a [whitelisted](../prover-network.md#get-access) key to use the network. +- `SP1_PRIVATE_KEY` should be set to your [private key](../prover-network#key-setup). You will need + to be using a [whitelisted](../prover-network#get-access) key to use the network. When you call any of the prove functions in ProverClient now, it will first simulate your program, then wait for it to be proven through the network and finally return the proof. diff --git a/book/docs/onchain-verification/contract-addresses.md b/book/docs/onchain-verification/contract-addresses.md deleted file mode 100644 index 3acb971edf..0000000000 --- a/book/docs/onchain-verification/contract-addresses.md +++ /dev/null @@ -1,80 +0,0 @@ -# Contract Addresses - -To verify SP1 proofs on-chain, we recommend using our deployed canonical verifier gateways. The -[SP1VerifierGateway](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1VerifierGateway.sol) -will automatically route your SP1 proof to the correct verifier based on the SP1 version used. - -## Canonical Verifier Gateways - -| Chain ID | Chain | Gateway | -| -------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| 1 | Mainnet | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 11155111 | Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 17000 | Holesky | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://holesky.etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 42161 | Arbitrum One | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 421614 | Arbitrum Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 8453 | Base | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 84532 | Base Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 10 | Optimism | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://optimistic.etherscan.io/address/0x3b6041173b80e77f038f3f2c0f9744f04837185e) | -| 11155420 | Optimism Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia-optimism.etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 534351 | Scroll Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.scrollscan.com/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 534352 | Scroll | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://scrollscan.com/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | - -The most up-to-date reference on each chain can be found in the -[deployments](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/deployments) -directory in the -SP1 contracts repository, where each chain has a dedicated JSON file with each verifier's address. - -## Versioning Policy - -Whenever a verifier for a new SP1 version is deployed, the gateway contract will be updated to -support it with -[addRoute()](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1VerifierGateway.sol#L65). -If a verifier for an SP1 version has an issue, the route will be frozen with -[freezeRoute()](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1VerifierGateway.sol#L71). - -On mainnets, only official versioned releases are deployed and added to the gateway. Testnets have -`rc` versions of the verifier deployed supported in addition to the official versions. - -## Deploying to other Chains - -In the case that you need to use a chain that is not listed above, you can deploy your own -verifier contract by following the instructions in the -[SP1 Contracts Repo](https://github.com/succinctlabs/sp1-contracts/blob/main/README.md#deployments). - -Since both the `SP1VerifierGateway` and each `SP1Verifier` implement the [ISP1Verifier -interface](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1Verifier.sol), you can choose to either: - -* Deploy the `SP1VerifierGateway` and add `SP1Verifier` contracts to it. Then point to the - `SP1VerifierGateway` address in your contracts. -* Deploy just the `SP1Verifier` contract that you want to use. Then point to the `SP1Verifier` - address in - your contracts. - -If you want support for a canonical verifier on your chain, contact us [here](https://t.me/+AzG4ws-kD24yMGYx). We often deploy canonical verifiers on new chains if there's enough demand. - -## ISP1Verifier Interface - -All verifiers implement the [ISP1Verifier](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1Verifier.sol) interface. - -```c++ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.20; - -/// @title SP1 Verifier Interface -/// @author Succinct Labs -/// @notice This contract is the interface for the SP1 Verifier. -interface ISP1Verifier { - /// @notice Verifies a proof with given public values and vkey. - /// @dev It is expected that the first 4 bytes of proofBytes must match the first 4 bytes of - /// target verifier's VERIFIER_HASH. - /// @param programVKey The verification key for the RISC-V program. - /// @param publicValues The public values encoded as bytes. - /// @param proofBytes The proof of the program execution the SP1 zkVM encoded as bytes. - function verifyProof( - bytes32 programVKey, - bytes calldata publicValues, - bytes calldata proofBytes - ) external view; -} -``` diff --git a/book/docs/onchain-verification/getting-started.mdx b/book/docs/onchain-verification/getting-started.mdx deleted file mode 100644 index 3cbe73933a..0000000000 --- a/book/docs/onchain-verification/getting-started.mdx +++ /dev/null @@ -1,34 +0,0 @@ -import Example from "../../static/examples_fibonacci_script_bin_groth16_bn254.rs.mdx"; - - -# Onchain Verification: Setup - -The best way to get started with verifying SP1 proofs on-chain is to refer to the [SP1 Project Template](https://github.com/succinctlabs/sp1-project-template/tree/main). - -- The template [program](https://github.com/succinctlabs/sp1-project-template/blob/main/program/src/main.rs) shows how to write outputs that can be decoded in Solidity. -- The template [script](https://github.com/succinctlabs/sp1-project-template/blob/main/script/src/bin/prove.rs) shows how to generate the proof using the SDK and save it to a file. -- The template [contract](https://github.com/succinctlabs/sp1-project-template/blob/main/contracts/src/Fibonacci.sol) shows how to verify the proof onchain using Solidity. - -Refer to the section on [Contract Addresses](./contract-addresses.md#contract-addresses) for the addresses of the deployed verifiers. - -## Generating SP1 Proofs for Onchain Verification - -By default, the proofs generated by SP1 are not verifiable onchain, as they are non-constant size and STARK verification on Ethereum is very expensive. To generate a proof that can be verified onchain, we use performant STARK recursion to combine SP1 shard proofs into a single STARK proof and then wrap that in a SNARK proof. Our `ProverClient` has a prover option for this called `plonk`. Behind the scenes, this function will first generate a normal SP1 proof, then recursively combine all of them into a single proof using the STARK recursion protocol. Finally, the proof is wrapped in a SNARK proof using PLONK. - -> WARNING: The Groth16 and PLONK provers are only guaranteed to work on official releases of SP1. To -> use Groth16 or PLONK proving & verification locally, ensure that you have Docker installed and have -> at least 128GB of RAM. - -### Example - - - -You can run the above script with `RUST_LOG=info cargo run --bin groth16_bn254 --release` in `examples/fibonacci/script`. - -#### Using Groth16 and PLONK without Docker (Advanced) - -If you would like to run the Groth16 or PLONK prover directly without Docker, you must have Go 1.22 installed and enable the `native-gnark` feature in `sp1-sdk`. This path is not recommended and may require additional native dependencies. - -```toml -sp1-sdk = { version = "2.0.0", features = ["native-gnark"] } -``` diff --git a/book/docs/onchain-verification/solidity-sdk.md b/book/docs/onchain-verification/solidity-sdk.md deleted file mode 100644 index 822ab620b9..0000000000 --- a/book/docs/onchain-verification/solidity-sdk.md +++ /dev/null @@ -1,122 +0,0 @@ -# Solidity Verifier - -We maintain a suite of [contracts](https://github.com/succinctlabs/sp1-contracts/tree/main) used for verifying SP1 proofs onchain. We highly recommend using [Foundry](https://book.getfoundry.sh/). - -## Installation - -To install the latest release version: - -```bash -forge install succinctlabs/sp1-contracts -``` - -To install a specific version: - -```bash -forge install succinctlabs/sp1-contracts@ -``` - -Finally, add `@sp1-contracts/=lib/sp1-contracts/contracts/src/` in `remappings.txt.` - -### Usage - -Once installed, you can use the contracts in the library by importing them: - -```c++ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.20; - -import {ISP1Verifier} from "@sp1-contracts/ISP1Verifier.sol"; - -/// @title Fibonacci. -/// @author Succinct Labs -/// @notice This contract implements a simple example of verifying the proof of a computing a -/// fibonacci number. -contract Fibonacci { - /// @notice The address of the SP1 verifier contract. - /// @dev This can either be a specific SP1Verifier for a specific version, or the - /// SP1VerifierGateway which can be used to verify proofs for any version of SP1. - /// For the list of supported verifiers on each chain, see: - /// https://docs.succinct.xyz/onchain-verification/contract-addresses - address public verifier; - - /// @notice The verification key for the fibonacci program. - bytes32 public fibonacciProgramVKey; - - constructor(address _verifier, bytes32 _fibonacciProgramVKey) { - verifier = _verifier; - fibonacciProgramVKey = _fibonacciProgramVKey; - } - - /// @notice The entrypoint for verifying the proof of a fibonacci number. - /// @param _proofBytes The encoded proof. - /// @param _publicValues The encoded public values. - function verifyFibonacciProof(bytes calldata _publicValues, bytes calldata _proofBytes) - public - view - returns (uint32, uint32, uint32) - { - ISP1Verifier(verifier).verifyProof(fibonacciProgramVKey, _publicValues, _proofBytes); - (uint32 n, uint32 a, uint32 b) = abi.decode(_publicValues, (uint32, uint32, uint32)); - return (n, a, b); - } -} - -``` - -### Finding your program vkey - -The program vkey (`fibonacciProgramVKey` in the example above) is passed into the `ISP1Verifier` along with the public values and proof bytes. You -can find your program vkey by going through the following steps: - -1. Find what version of SP1 crates you are using. -2. Use the version from step to run this command: `sp1up --version ` -3. Use the vkey command to get the program vkey: `cargo prove vkey -elf ` - -Alternatively, you can set up a simple script to do this using the `sp1-sdk` crate: - -```rust -fn main() { - // Setup the logger. - sp1_sdk::utils::setup_logger(); - - // Setup the prover client. - let client = ProverClient::new(); - - // Setup the program. - let (_, vk) = client.setup(FIBONACCI_ELF); - - // Print the verification key. - println!("Program Verification Key: {}", vk.bytes32()); -} -``` - -### Testing - -To test the contract, we recommend setting up [Foundry -Tests](https://book.getfoundry.sh/forge/tests). We have an example of such a test in the [SP1 -Project -Template](https://github.com/succinctlabs/sp1-project-template/blob/dev/contracts/test/Fibonacci.t.sol). - -### Solidity Versions - -The officially deployed contracts are built using Solidity 0.8.20 and exist on the -[sp1-contracts main](https://github.com/succinctlabs/sp1-contracts/tree/main) branch. - -If you need to use different versions that are compatible with your contracts, there are also other -branches you can install that contain different versions. For -example for branch [main-0.8.15](https://github.com/succinctlabs/sp1-contracts/tree/main-0.8.15) -contains the contracts with: - -```c++ -pragma solidity ^0.8.15; -``` - -and you can install it with: - -```sh -forge install succinctlabs/sp1-contracts@main-0.8.15 -``` - -If there is different versions that you need but there aren't branches for them yet, please ask in -the [SP1 Telegram](https://t.me/+AzG4ws-kD24yMGYx). diff --git a/book/docs/verification/off-chain-verification.md b/book/docs/verification/off-chain-verification.md index abd9981469..c862720962 100644 --- a/book/docs/verification/off-chain-verification.md +++ b/book/docs/verification/off-chain-verification.md @@ -38,7 +38,7 @@ Next, verify the proof with `sp1-verifier`. The following snippet is from the [G Here, the proof, public inputs, and vkey hash are read from stdin. See the following snippet to see how these values are generated. - + > Note that the SP1 SDK itself is *not* `no_std` compatible. diff --git a/book/docs/verification/onchain/getting-started.mdx b/book/docs/verification/onchain/getting-started.mdx index 45e5e95d9f..e102de657c 100644 --- a/book/docs/verification/onchain/getting-started.mdx +++ b/book/docs/verification/onchain/getting-started.mdx @@ -8,7 +8,7 @@ The best way to get started with verifying SP1 proofs on-chain is to refer to th - The template [script](https://github.com/succinctlabs/sp1-project-template/blob/main/script/src/bin/prove.rs) shows how to generate the proof using the SDK and save it to a file. - The template [contract](https://github.com/succinctlabs/sp1-project-template/blob/main/contracts/src/Fibonacci.sol) shows how to verify the proof onchain using Solidity. -Refer to the section on [Contract Addresses](./contract-addresses.md#contract-addresses) for the addresses of the deployed verifiers. +Refer to the section on [Contract Addresses](./contract-addresses#contract-addresses) for the addresses of the deployed verifiers. ## Generating SP1 Proofs for Onchain Verification diff --git a/book/docusaurus.config.ts b/book/docusaurus.config.ts index 138a7891df..75522b54ed 100644 --- a/book/docusaurus.config.ts +++ b/book/docusaurus.config.ts @@ -19,9 +19,11 @@ const config: Config = { // If you aren't using GitHub pages, you don't need these. organizationName: 'succinctlabs', // Usually your GitHub org/user name. projectName: 'sp1', // Usually your repo name. + deploymentBranch: 'main', + trailingSlash: false, - onBrokenLinks: 'throw', - onBrokenMarkdownLinks: 'warn', + onBrokenLinks: 'warn', + onBrokenMarkdownLinks: 'throw', // Even if you don't use internationalization, you can use this field to set // useful metadata like html lang. For example, if your site is Chinese, you @@ -80,7 +82,7 @@ const config: Config = { items: [ { label: 'Home', - to: '/docs/summary', + to: '/', }, ], }, diff --git a/book/create-markdown-templates.sh b/book/gen-code-refs.sh similarity index 100% rename from book/create-markdown-templates.sh rename to book/gen-code-refs.sh diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/usage.md b/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/usage.md index 3c87b9b38a..6a0db6fa1f 100644 --- a/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/usage.md +++ b/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/usage.md @@ -19,8 +19,8 @@ SP1_PROVER=network SP1_PRIVATE_KEY=... RUST_LOG=info cargo run --release - `SP1_PROVER` should be set to `network` when using the prover network. -- `SP1_PRIVATE_KEY` should be set to your [private key](../prover-network.md#key-setup). You will need - to be using a [whitelisted](../prover-network.md#get-access) key to use the network. +- `SP1_PRIVATE_KEY` should be set to your [private key](../prover-network#key-setup). You will need + to be using a [whitelisted](../prover-network#get-access) key to use the network. When you call any of the prove functions in ProverClient now, it will first simulate your program, then wait for it to be proven through the network and finally return the proof. diff --git a/book/versioned_docs/version-3.4.0/onchain-verification/contract-addresses.md b/book/versioned_docs/version-3.4.0/onchain-verification/contract-addresses.md deleted file mode 100644 index 3acb971edf..0000000000 --- a/book/versioned_docs/version-3.4.0/onchain-verification/contract-addresses.md +++ /dev/null @@ -1,80 +0,0 @@ -# Contract Addresses - -To verify SP1 proofs on-chain, we recommend using our deployed canonical verifier gateways. The -[SP1VerifierGateway](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1VerifierGateway.sol) -will automatically route your SP1 proof to the correct verifier based on the SP1 version used. - -## Canonical Verifier Gateways - -| Chain ID | Chain | Gateway | -| -------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| 1 | Mainnet | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 11155111 | Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 17000 | Holesky | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://holesky.etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 42161 | Arbitrum One | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 421614 | Arbitrum Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 8453 | Base | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 84532 | Base Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 10 | Optimism | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://optimistic.etherscan.io/address/0x3b6041173b80e77f038f3f2c0f9744f04837185e) | -| 11155420 | Optimism Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia-optimism.etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 534351 | Scroll Sepolia | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://sepolia.scrollscan.com/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | -| 534352 | Scroll | [0x3B6041173B80E77f038f3F2C0f9744f04837185e](https://scrollscan.com/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e) | - -The most up-to-date reference on each chain can be found in the -[deployments](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/deployments) -directory in the -SP1 contracts repository, where each chain has a dedicated JSON file with each verifier's address. - -## Versioning Policy - -Whenever a verifier for a new SP1 version is deployed, the gateway contract will be updated to -support it with -[addRoute()](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1VerifierGateway.sol#L65). -If a verifier for an SP1 version has an issue, the route will be frozen with -[freezeRoute()](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1VerifierGateway.sol#L71). - -On mainnets, only official versioned releases are deployed and added to the gateway. Testnets have -`rc` versions of the verifier deployed supported in addition to the official versions. - -## Deploying to other Chains - -In the case that you need to use a chain that is not listed above, you can deploy your own -verifier contract by following the instructions in the -[SP1 Contracts Repo](https://github.com/succinctlabs/sp1-contracts/blob/main/README.md#deployments). - -Since both the `SP1VerifierGateway` and each `SP1Verifier` implement the [ISP1Verifier -interface](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1Verifier.sol), you can choose to either: - -* Deploy the `SP1VerifierGateway` and add `SP1Verifier` contracts to it. Then point to the - `SP1VerifierGateway` address in your contracts. -* Deploy just the `SP1Verifier` contract that you want to use. Then point to the `SP1Verifier` - address in - your contracts. - -If you want support for a canonical verifier on your chain, contact us [here](https://t.me/+AzG4ws-kD24yMGYx). We often deploy canonical verifiers on new chains if there's enough demand. - -## ISP1Verifier Interface - -All verifiers implement the [ISP1Verifier](https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/ISP1Verifier.sol) interface. - -```c++ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.20; - -/// @title SP1 Verifier Interface -/// @author Succinct Labs -/// @notice This contract is the interface for the SP1 Verifier. -interface ISP1Verifier { - /// @notice Verifies a proof with given public values and vkey. - /// @dev It is expected that the first 4 bytes of proofBytes must match the first 4 bytes of - /// target verifier's VERIFIER_HASH. - /// @param programVKey The verification key for the RISC-V program. - /// @param publicValues The public values encoded as bytes. - /// @param proofBytes The proof of the program execution the SP1 zkVM encoded as bytes. - function verifyProof( - bytes32 programVKey, - bytes calldata publicValues, - bytes calldata proofBytes - ) external view; -} -``` diff --git a/book/versioned_docs/version-3.4.0/onchain-verification/getting-started.mdx b/book/versioned_docs/version-3.4.0/onchain-verification/getting-started.mdx deleted file mode 100644 index 6409876a00..0000000000 --- a/book/versioned_docs/version-3.4.0/onchain-verification/getting-started.mdx +++ /dev/null @@ -1,34 +0,0 @@ -import Example from "../../../static/examples_fibonacci_script_bin_groth16_bn254.rs.mdx"; - - -# Onchain Verification: Setup - -The best way to get started with verifying SP1 proofs on-chain is to refer to the [SP1 Project Template](https://github.com/succinctlabs/sp1-project-template/tree/main). - -- The template [program](https://github.com/succinctlabs/sp1-project-template/blob/main/program/src/main.rs) shows how to write outputs that can be decoded in Solidity. -- The template [script](https://github.com/succinctlabs/sp1-project-template/blob/main/script/src/bin/prove.rs) shows how to generate the proof using the SDK and save it to a file. -- The template [contract](https://github.com/succinctlabs/sp1-project-template/blob/main/contracts/src/Fibonacci.sol) shows how to verify the proof onchain using Solidity. - -Refer to the section on [Contract Addresses](./contract-addresses.md#contract-addresses) for the addresses of the deployed verifiers. - -## Generating SP1 Proofs for Onchain Verification - -By default, the proofs generated by SP1 are not verifiable onchain, as they are non-constant size and STARK verification on Ethereum is very expensive. To generate a proof that can be verified onchain, we use performant STARK recursion to combine SP1 shard proofs into a single STARK proof and then wrap that in a SNARK proof. Our `ProverClient` has a prover option for this called `plonk`. Behind the scenes, this function will first generate a normal SP1 proof, then recursively combine all of them into a single proof using the STARK recursion protocol. Finally, the proof is wrapped in a SNARK proof using PLONK. - -> WARNING: The Groth16 and PLONK provers are only guaranteed to work on official releases of SP1. To -> use Groth16 or PLONK proving & verification locally, ensure that you have Docker installed and have -> at least 128GB of RAM. - -### Example - - - -You can run the above script with `RUST_LOG=info cargo run --bin groth16_bn254 --release` in `examples/fibonacci/script`. - -#### Using Groth16 and PLONK without Docker (Advanced) - -If you would like to run the Groth16 or PLONK prover directly without Docker, you must have Go 1.22 installed and enable the `native-gnark` feature in `sp1-sdk`. This path is not recommended and may require additional native dependencies. - -```toml -sp1-sdk = { version = "2.0.0", features = ["native-gnark"] } -``` diff --git a/book/versioned_docs/version-3.4.0/onchain-verification/solidity-sdk.md b/book/versioned_docs/version-3.4.0/onchain-verification/solidity-sdk.md deleted file mode 100644 index 822ab620b9..0000000000 --- a/book/versioned_docs/version-3.4.0/onchain-verification/solidity-sdk.md +++ /dev/null @@ -1,122 +0,0 @@ -# Solidity Verifier - -We maintain a suite of [contracts](https://github.com/succinctlabs/sp1-contracts/tree/main) used for verifying SP1 proofs onchain. We highly recommend using [Foundry](https://book.getfoundry.sh/). - -## Installation - -To install the latest release version: - -```bash -forge install succinctlabs/sp1-contracts -``` - -To install a specific version: - -```bash -forge install succinctlabs/sp1-contracts@ -``` - -Finally, add `@sp1-contracts/=lib/sp1-contracts/contracts/src/` in `remappings.txt.` - -### Usage - -Once installed, you can use the contracts in the library by importing them: - -```c++ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.20; - -import {ISP1Verifier} from "@sp1-contracts/ISP1Verifier.sol"; - -/// @title Fibonacci. -/// @author Succinct Labs -/// @notice This contract implements a simple example of verifying the proof of a computing a -/// fibonacci number. -contract Fibonacci { - /// @notice The address of the SP1 verifier contract. - /// @dev This can either be a specific SP1Verifier for a specific version, or the - /// SP1VerifierGateway which can be used to verify proofs for any version of SP1. - /// For the list of supported verifiers on each chain, see: - /// https://docs.succinct.xyz/onchain-verification/contract-addresses - address public verifier; - - /// @notice The verification key for the fibonacci program. - bytes32 public fibonacciProgramVKey; - - constructor(address _verifier, bytes32 _fibonacciProgramVKey) { - verifier = _verifier; - fibonacciProgramVKey = _fibonacciProgramVKey; - } - - /// @notice The entrypoint for verifying the proof of a fibonacci number. - /// @param _proofBytes The encoded proof. - /// @param _publicValues The encoded public values. - function verifyFibonacciProof(bytes calldata _publicValues, bytes calldata _proofBytes) - public - view - returns (uint32, uint32, uint32) - { - ISP1Verifier(verifier).verifyProof(fibonacciProgramVKey, _publicValues, _proofBytes); - (uint32 n, uint32 a, uint32 b) = abi.decode(_publicValues, (uint32, uint32, uint32)); - return (n, a, b); - } -} - -``` - -### Finding your program vkey - -The program vkey (`fibonacciProgramVKey` in the example above) is passed into the `ISP1Verifier` along with the public values and proof bytes. You -can find your program vkey by going through the following steps: - -1. Find what version of SP1 crates you are using. -2. Use the version from step to run this command: `sp1up --version ` -3. Use the vkey command to get the program vkey: `cargo prove vkey -elf ` - -Alternatively, you can set up a simple script to do this using the `sp1-sdk` crate: - -```rust -fn main() { - // Setup the logger. - sp1_sdk::utils::setup_logger(); - - // Setup the prover client. - let client = ProverClient::new(); - - // Setup the program. - let (_, vk) = client.setup(FIBONACCI_ELF); - - // Print the verification key. - println!("Program Verification Key: {}", vk.bytes32()); -} -``` - -### Testing - -To test the contract, we recommend setting up [Foundry -Tests](https://book.getfoundry.sh/forge/tests). We have an example of such a test in the [SP1 -Project -Template](https://github.com/succinctlabs/sp1-project-template/blob/dev/contracts/test/Fibonacci.t.sol). - -### Solidity Versions - -The officially deployed contracts are built using Solidity 0.8.20 and exist on the -[sp1-contracts main](https://github.com/succinctlabs/sp1-contracts/tree/main) branch. - -If you need to use different versions that are compatible with your contracts, there are also other -branches you can install that contain different versions. For -example for branch [main-0.8.15](https://github.com/succinctlabs/sp1-contracts/tree/main-0.8.15) -contains the contracts with: - -```c++ -pragma solidity ^0.8.15; -``` - -and you can install it with: - -```sh -forge install succinctlabs/sp1-contracts@main-0.8.15 -``` - -If there is different versions that you need but there aren't branches for them yet, please ask in -the [SP1 Telegram](https://t.me/+AzG4ws-kD24yMGYx). diff --git a/book/versioned_docs/version-3.4.0/verification/off-chain-verification.md b/book/versioned_docs/version-3.4.0/verification/off-chain-verification.md index dff3ee960a..6d218c49bb 100644 --- a/book/versioned_docs/version-3.4.0/verification/off-chain-verification.md +++ b/book/versioned_docs/version-3.4.0/verification/off-chain-verification.md @@ -38,7 +38,7 @@ Next, verify the proof with `sp1-verifier`. The following snippet is from the [G Here, the proof, public inputs, and vkey hash are read from stdin. See the following snippet to see how these values are generated. - + > Note that the SP1 SDK itself is *not* `no_std` compatible. diff --git a/book/versioned_docs/version-3.4.0/verification/onchain/getting-started.mdx b/book/versioned_docs/version-3.4.0/verification/onchain/getting-started.mdx index 279d91a8bc..ad4087c9d1 100644 --- a/book/versioned_docs/version-3.4.0/verification/onchain/getting-started.mdx +++ b/book/versioned_docs/version-3.4.0/verification/onchain/getting-started.mdx @@ -8,7 +8,7 @@ The best way to get started with verifying SP1 proofs on-chain is to refer to th - The template [script](https://github.com/succinctlabs/sp1-project-template/blob/main/script/src/bin/prove.rs) shows how to generate the proof using the SDK and save it to a file. - The template [contract](https://github.com/succinctlabs/sp1-project-template/blob/main/contracts/src/Fibonacci.sol) shows how to verify the proof onchain using Solidity. -Refer to the section on [Contract Addresses](./contract-addresses.md#contract-addresses) for the addresses of the deployed verifiers. +Refer to the section on [Contract Addresses](./contract-addresses#contract-addresses) for the addresses of the deployed verifiers. ## Generating SP1 Proofs for Onchain Verification From 3913da484253337dfbb023f9785400f92c9bbbfa Mon Sep 17 00:00:00 2001 From: nhtyy Date: Tue, 3 Dec 2024 18:21:02 -0800 Subject: [PATCH 4/6] chore: add maintenace notes --- book/README.md | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/book/README.md b/book/README.md index 0c6c2c27be..fa7d79fce5 100644 --- a/book/README.md +++ b/book/README.md @@ -24,18 +24,11 @@ $ yarn build This command generates static content into the `build` directory and can be served using any static contents hosting service. -### Deployment - -Using SSH: - -``` -$ USE_SSH=true yarn deploy -``` - -Not using SSH: - -``` -$ GIT_USER= yarn deploy -``` - -If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. +### Maintenance Notes + +- Always run `npm build` locally first to ensure that the website builds correctly. +- When adding new pages, ensure that the sidebar is updated in `sidebars.ts`. +- Check you links, if you're pointing at an .mdx file, you need to omit the extension in the link. +- Code snippets from the repo are made through the [gen script](./gen-code-refs.sh). + - When adding new code snippets, ensure that the gen script is updated to include the new file. +- Check out the [Docusaurus documentation](https://docusaurus.io/docs/versioning) versioning information. From b81b74744653c95e30ecefd18f2a286bb95cf4cb Mon Sep 17 00:00:00 2001 From: nhtyy Date: Tue, 3 Dec 2024 18:56:44 -0800 Subject: [PATCH 5/6] chore: fix all deadlinks, path adjust script for versioning --- book/README.md | 1 + book/adjust-version-path.sh | 18 ++++++++++++++++++ .../generating-proofs/prover-network/usage.md | 4 ++-- .../verification/onchain/getting-started.mdx | 2 +- book/docs/writing-programs/compiling.mdx | 2 +- .../generating-proofs/prover-network/usage.md | 4 ++-- .../verification/onchain/getting-started.mdx | 2 +- .../writing-programs/compiling.mdx | 2 +- 8 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 book/adjust-version-path.sh diff --git a/book/README.md b/book/README.md index fa7d79fce5..6597cdf569 100644 --- a/book/README.md +++ b/book/README.md @@ -32,3 +32,4 @@ This command generates static content into the `build` directory and can be serv - Code snippets from the repo are made through the [gen script](./gen-code-refs.sh). - When adding new code snippets, ensure that the gen script is updated to include the new file. - Check out the [Docusaurus documentation](https://docusaurus.io/docs/versioning) versioning information. + - You can use the [adjustment](./adjust-version-path.sh) script to adjust the import path in the markdown files after changing the version. diff --git a/book/adjust-version-path.sh b/book/adjust-version-path.sh new file mode 100644 index 0000000000..0eceaff823 --- /dev/null +++ b/book/adjust-version-path.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -e +shopt -s globstar + +pushd "versioned_docs/version-$1" + +if [[ $OSTYPE == "darwin"* ]]; then + # Mac OS X + sed -i '' 's|\.\.\/\.\.\/static|..\/..\/..\/static|g' **/*.md + sed -i '' 's|\.\.\/\.\.\/static|..\/..\/..\/static|g' **/*.mdx +else + # Other OSes + sed -i 's|\.\.\/\.\.\/static|..\/..\/..\/static|g' **/*.md + sed -i 's|\.\.\/\.\.\/static|..\/..\/..\/static|g' **/*.mdx +fi + +popd diff --git a/book/docs/generating-proofs/prover-network/usage.md b/book/docs/generating-proofs/prover-network/usage.md index 6a0db6fa1f..12ef4ac4e6 100644 --- a/book/docs/generating-proofs/prover-network/usage.md +++ b/book/docs/generating-proofs/prover-network/usage.md @@ -19,8 +19,8 @@ SP1_PROVER=network SP1_PRIVATE_KEY=... RUST_LOG=info cargo run --release - `SP1_PROVER` should be set to `network` when using the prover network. -- `SP1_PRIVATE_KEY` should be set to your [private key](../prover-network#key-setup). You will need - to be using a [whitelisted](../prover-network#get-access) key to use the network. +- `SP1_PRIVATE_KEY` should be set to your [private key](./key-setup.md). You will need + to be using a [whitelisted](../prover-network) key to use the network. When you call any of the prove functions in ProverClient now, it will first simulate your program, then wait for it to be proven through the network and finally return the proof. diff --git a/book/docs/verification/onchain/getting-started.mdx b/book/docs/verification/onchain/getting-started.mdx index e102de657c..8b42128bf5 100644 --- a/book/docs/verification/onchain/getting-started.mdx +++ b/book/docs/verification/onchain/getting-started.mdx @@ -8,7 +8,7 @@ The best way to get started with verifying SP1 proofs on-chain is to refer to th - The template [script](https://github.com/succinctlabs/sp1-project-template/blob/main/script/src/bin/prove.rs) shows how to generate the proof using the SDK and save it to a file. - The template [contract](https://github.com/succinctlabs/sp1-project-template/blob/main/contracts/src/Fibonacci.sol) shows how to verify the proof onchain using Solidity. -Refer to the section on [Contract Addresses](./contract-addresses#contract-addresses) for the addresses of the deployed verifiers. +Refer to the section on [Contract Addresses](./contract-addresses) for the addresses of the deployed verifiers. ## Generating SP1 Proofs for Onchain Verification diff --git a/book/docs/writing-programs/compiling.mdx b/book/docs/writing-programs/compiling.mdx index 6586d25539..4fcc8d8bfb 100644 --- a/book/docs/writing-programs/compiling.mdx +++ b/book/docs/writing-programs/compiling.mdx @@ -8,7 +8,7 @@ Once you have written an SP1 program, you must compile it to an ELF file that ca > WARNING: This may not generate a reproducible ELF which is necessary for verifying that your binary corresponds to given source code. > -> Use the [reproducible build system](#reproducible-builds-with-docker-production) for production builds. +> Use the [reproducible build system](#production-builds) for production builds. To build a program while developing, simply run the following command in the crate that contains your SP1 program: diff --git a/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/usage.md b/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/usage.md index 6a0db6fa1f..12ef4ac4e6 100644 --- a/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/usage.md +++ b/book/versioned_docs/version-3.4.0/generating-proofs/prover-network/usage.md @@ -19,8 +19,8 @@ SP1_PROVER=network SP1_PRIVATE_KEY=... RUST_LOG=info cargo run --release - `SP1_PROVER` should be set to `network` when using the prover network. -- `SP1_PRIVATE_KEY` should be set to your [private key](../prover-network#key-setup). You will need - to be using a [whitelisted](../prover-network#get-access) key to use the network. +- `SP1_PRIVATE_KEY` should be set to your [private key](./key-setup.md). You will need + to be using a [whitelisted](../prover-network) key to use the network. When you call any of the prove functions in ProverClient now, it will first simulate your program, then wait for it to be proven through the network and finally return the proof. diff --git a/book/versioned_docs/version-3.4.0/verification/onchain/getting-started.mdx b/book/versioned_docs/version-3.4.0/verification/onchain/getting-started.mdx index ad4087c9d1..7556372f03 100644 --- a/book/versioned_docs/version-3.4.0/verification/onchain/getting-started.mdx +++ b/book/versioned_docs/version-3.4.0/verification/onchain/getting-started.mdx @@ -8,7 +8,7 @@ The best way to get started with verifying SP1 proofs on-chain is to refer to th - The template [script](https://github.com/succinctlabs/sp1-project-template/blob/main/script/src/bin/prove.rs) shows how to generate the proof using the SDK and save it to a file. - The template [contract](https://github.com/succinctlabs/sp1-project-template/blob/main/contracts/src/Fibonacci.sol) shows how to verify the proof onchain using Solidity. -Refer to the section on [Contract Addresses](./contract-addresses#contract-addresses) for the addresses of the deployed verifiers. +Refer to the section on [Contract Addresses](./contract-addresses) for the addresses of the deployed verifiers. ## Generating SP1 Proofs for Onchain Verification diff --git a/book/versioned_docs/version-3.4.0/writing-programs/compiling.mdx b/book/versioned_docs/version-3.4.0/writing-programs/compiling.mdx index fef91eed8e..b5b66cb7f7 100644 --- a/book/versioned_docs/version-3.4.0/writing-programs/compiling.mdx +++ b/book/versioned_docs/version-3.4.0/writing-programs/compiling.mdx @@ -8,7 +8,7 @@ Once you have written an SP1 program, you must compile it to an ELF file that ca > WARNING: This may not generate a reproducible ELF which is necessary for verifying that your binary corresponds to given source code. > -> Use the [reproducible build system](#reproducible-builds-with-docker-production) for production builds. +> Use the [reproducible build system](#production-builds) for production builds. To build a program while developing, simply run the following command in the crate that contains your SP1 program: From 79be47c109e1f79f1c100016323182db454a7f70 Mon Sep 17 00:00:00 2001 From: nhtyy Date: Wed, 4 Dec 2024 12:16:16 -0800 Subject: [PATCH 6/6] chore: remove old book.toml --- book.toml | 30 ------------------------------ 1 file changed, 30 deletions(-) delete mode 100644 book.toml diff --git a/book.toml b/book.toml deleted file mode 100644 index aec81dc099..0000000000 --- a/book.toml +++ /dev/null @@ -1,30 +0,0 @@ -[book] -authors = ["SP1 Contributors"] -language = "en" -multilingual = false -src = "book" -title = "SP1 Book" -description = "A book on all things SP1" - -[output.html] -theme = "book/theme" -git-repository-url = "https://github.com/succinctlabs/sp1" -default-theme = "ayu" -no-section-label = true - -[output.html.fold] -enable = true -level = 1 - -[output.html.playground] -runnable = false - -[build] -build-dir = "target/book" - -[preprocessor.template] -before = ["links"] - -[preprocessor.index] - -[preprocessor.links]