From c7df5731e92e034f3655bdb4ccc4cb81652b1537 Mon Sep 17 00:00:00 2001 From: joe Date: Fri, 29 Nov 2024 15:45:44 +0000 Subject: [PATCH 01/10] example of recursive prover --- examples/recursive/Cargo.toml | 12 +++ examples/recursive/lib/Cargo.toml | 10 ++ examples/recursive/lib/src/lib.rs | 34 +++++++ examples/recursive/lib/src/utils.rs | 57 ++++++++++++ examples/recursive/program/Cargo.toml | 9 ++ examples/recursive/program/src/main.rs | 35 +++++++ examples/recursive/rust-toolchain | 3 + examples/recursive/script/Cargo.toml | 22 +++++ examples/recursive/script/build.rs | 5 + .../script/src/bin/recursive_prover.rs | 91 +++++++++++++++++++ 10 files changed, 278 insertions(+) create mode 100644 examples/recursive/Cargo.toml create mode 100644 examples/recursive/lib/Cargo.toml create mode 100644 examples/recursive/lib/src/lib.rs create mode 100644 examples/recursive/lib/src/utils.rs create mode 100644 examples/recursive/program/Cargo.toml create mode 100644 examples/recursive/program/src/main.rs create mode 100644 examples/recursive/rust-toolchain create mode 100644 examples/recursive/script/Cargo.toml create mode 100644 examples/recursive/script/build.rs create mode 100644 examples/recursive/script/src/bin/recursive_prover.rs diff --git a/examples/recursive/Cargo.toml b/examples/recursive/Cargo.toml new file mode 100644 index 0000000000..4373614e63 --- /dev/null +++ b/examples/recursive/Cargo.toml @@ -0,0 +1,12 @@ +[workspace] +members = [ + "lib", + "program", +] +resolver = "2" + +[workspace.dependencies] +alloy-sol-types = "0.7.7" +sha2 = "0.10.8" +sp1-zkvm = { version = "3.3.0", features = ["verify"] } +serde = { version = "1.0.209", features = ["derive"] } diff --git a/examples/recursive/lib/Cargo.toml b/examples/recursive/lib/Cargo.toml new file mode 100644 index 0000000000..cd606c99bb --- /dev/null +++ b/examples/recursive/lib/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "recursive-lib" +version = "0.1.0" +edition = "2021" + +[dependencies] +alloy-sol-types = { workspace = true } +sha2 = { workspace = true } +sp1-zkvm = { workspace = true } +serde = { workspace = true } diff --git a/examples/recursive/lib/src/lib.rs b/examples/recursive/lib/src/lib.rs new file mode 100644 index 0000000000..ff9fd2ae8c --- /dev/null +++ b/examples/recursive/lib/src/lib.rs @@ -0,0 +1,34 @@ +pub mod utils; + +use serde::{Deserialize, Serialize}; +use crate::utils::sha256_hash; + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct CircuitInput { + pub public_input_merkle_root: [u8; 32], + pub public_value: u32, + pub witness: Vec, +} + +/// A toy example of cubic computation +pub fn cubic(n: u32) -> u32 { + n.wrapping_mul(n).wrapping_mul(n) +} + +/// Verify last prover's proof +pub fn verify_proof(vkey_hash: &[u32; 8], public_input_merkle_root: &[u8; 32]) { + sp1_zkvm::lib::verify::verify_sp1_proof(vkey_hash, &sha256_hash(public_input_merkle_root)); +} + +/// Construct a merkle tree for all public inputs avoiding commit these public inputs directly +pub fn merkle_tree_public_input( + public_input: Vec, + public_value: u32, +) -> [u8; 32] { + let public_input_hashes = public_input + .iter() + .chain([public_value].iter()) + .map(|pi| sha256_hash(&pi.to_le_bytes())) + .collect::>(); + utils::get_merkle_root(public_input_hashes) +} diff --git a/examples/recursive/lib/src/utils.rs b/examples/recursive/lib/src/utils.rs new file mode 100644 index 0000000000..55abf53bc1 --- /dev/null +++ b/examples/recursive/lib/src/utils.rs @@ -0,0 +1,57 @@ +use sha2::{Digest, Sha256}; + +pub trait AsLittleEndianBytes { + fn to_little_endian(self) -> Self; +} + +impl AsLittleEndianBytes for [u8; N] { + fn to_little_endian(mut self) -> Self { + self.reverse(); + self + } +} + +pub fn sha256_hash(bytes: &[u8]) -> [u8; 32] { + Sha256::digest(bytes).into() +} + +pub fn hash_pairs(hash_1: [u8; 32], hash_2: [u8; 32]) -> [u8; 32] { + // [0] & [1] Combine hashes into one 64 byte array, reversing byte order + let combined_hashes: [u8; 64] = hash_1 + .into_iter() + .rev() + .chain(hash_2.into_iter().rev()) + .collect::>() + .try_into() + .unwrap(); + + // [2] Double sha256 combined hashes + let new_hash_be = sha256_hash(&sha256_hash(&combined_hashes)); + + // [3] Convert new hash to little-endian + new_hash_be.to_little_endian() +} + +pub fn get_merkle_root(leaves: Vec<[u8; 32]>) -> [u8; 32] { + let mut current_level = leaves; + while current_level.len() > 1 { + let mut next_level = Vec::new(); + let mut i = 0; + + while i < current_level.len() { + let left = current_level[i]; + let right = if i + 1 < current_level.len() { + current_level[i + 1] + } else { + left + }; + + let parent_hash = hash_pairs(left, right); + next_level.push(parent_hash); + + i += 2; + } + current_level = next_level; + } + current_level[0] +} diff --git a/examples/recursive/program/Cargo.toml b/examples/recursive/program/Cargo.toml new file mode 100644 index 0000000000..279d510070 --- /dev/null +++ b/examples/recursive/program/Cargo.toml @@ -0,0 +1,9 @@ +[package] +version = "0.1.0" +name = "recursive-program" +edition = "2021" + +[dependencies] +alloy-sol-types = { workspace = true } +sp1-zkvm = "3.0.0-rc4" +recursive-lib = { path = "../lib" } diff --git a/examples/recursive/program/src/main.rs b/examples/recursive/program/src/main.rs new file mode 100644 index 0000000000..9923930854 --- /dev/null +++ b/examples/recursive/program/src/main.rs @@ -0,0 +1,35 @@ +//! A simple program that takes a sequence of numbers as input, cubic all of them, and then sum up. + +// 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); + +use recursive_lib::{cubic, verify_proof, merkle_tree_public_input, CircuitInput}; + +pub fn main() { + // Read prover's sequence number + let seq = sp1_zkvm::io::read::(); + // Read hash of vkey for verifying last prover's proof + let vkey_u32_hash = sp1_zkvm::io::read::<[u32; 8]>(); + // Read circuit input + let circuit_input = sp1_zkvm::io::read::(); + + // Do cubic computation + let result = cubic(circuit_input.public_value); + // Verify proof output by last prover + if seq != 0 { + verify_proof(&vkey_u32_hash, &circuit_input.public_input_merkle_root); + } + // Construct a merkle root of all public inputs + let merkle_root = merkle_tree_public_input( + circuit_input.witness, + circuit_input.public_value, + ); + + // Commit this merkle root and cubic result + sp1_zkvm::io::commit(&merkle_root); + sp1_zkvm::io::commit(&result); +} diff --git a/examples/recursive/rust-toolchain b/examples/recursive/rust-toolchain new file mode 100644 index 0000000000..d9143e67a5 --- /dev/null +++ b/examples/recursive/rust-toolchain @@ -0,0 +1,3 @@ +[toolchain] +channel = "1.81.0" +components = ["llvm-tools", "rustc-dev"] \ No newline at end of file diff --git a/examples/recursive/script/Cargo.toml b/examples/recursive/script/Cargo.toml new file mode 100644 index 0000000000..4d8a9d10c9 --- /dev/null +++ b/examples/recursive/script/Cargo.toml @@ -0,0 +1,22 @@ +[package] +version = "0.1.0" +name = "recursive-script" +edition = "2021" +default-run = "recursive_prover" + +[[bin]] +name = "recursive_prover" +path = "src/bin/recursive_prover.rs" + +[dependencies] +sp1-sdk = "3.0.0" +serde_json = { version = "1.0", default-features = false, features = ["alloc"] } +serde = { version = "1.0.200", default-features = false, features = ["derive"] } +clap = { version = "4.0", features = ["derive", "env"] } +tracing = "0.1.40" +hex = "0.4.3" +alloy-sol-types = { workspace = true } +recursive-lib = { path = "../lib" } + +[build-dependencies] +sp1-helper = "3.0.0" diff --git a/examples/recursive/script/build.rs b/examples/recursive/script/build.rs new file mode 100644 index 0000000000..bc5f025978 --- /dev/null +++ b/examples/recursive/script/build.rs @@ -0,0 +1,5 @@ +use sp1_helper::build_program_with_args; + +fn main() { + build_program_with_args("../program", Default::default()) +} diff --git a/examples/recursive/script/src/bin/recursive_prover.rs b/examples/recursive/script/src/bin/recursive_prover.rs new file mode 100644 index 0000000000..97d03b7eac --- /dev/null +++ b/examples/recursive/script/src/bin/recursive_prover.rs @@ -0,0 +1,91 @@ +//! An end-to-end example of using the SP1 SDK to generate a proof of a program that can be executed +//! or have a core proof generated. +//! +//! You can run this script using the following command: +//! ```shell +//! RUST_LOG=info cargo run --release -- --execute +//! ``` +//! or +//! ```shell +//! RUST_LOG=info cargo run --release -- --prove +//! ``` + +use alloy_sol_types::SolType; +use clap::Parser; +use fibonacci_lib::PublicValuesStruct; +use sp1_sdk::{include_elf, ProverClient, SP1Stdin}; + +/// The ELF (executable and linkable format) file for the Succinct RISC-V zkVM. +pub const FIBONACCI_ELF: &[u8] = include_elf!("fibonacci-program"); + +/// The arguments for the command. +#[derive(Parser, Debug)] +#[clap(author, version, about, long_about = None)] +struct Args { + #[clap(long)] + execute: bool, + + #[clap(long)] + prove: bool, + + #[clap(long, default_value = "20")] + n: u32, +} + +fn main() { + // Setup the logger. + sp1_sdk::utils::setup_logger(); + + // Parse the command line arguments. + let args = Args::parse(); + + if args.execute == args.prove { + eprintln!("Error: You must specify either --execute or --prove"); + std::process::exit(1); + } + + // Setup the prover client. + let client = ProverClient::new(); + + // Setup the inputs. + let mut stdin = SP1Stdin::new(); + stdin.write(&args.n); + + println!("n: {}", args.n); + + if args.execute { + // Execute the program + let (output, report) = client.execute(FIBONACCI_ELF, stdin).run().unwrap(); + println!("Program executed successfully."); + + // Read the output. + let decoded = PublicValuesStruct::abi_decode(output.as_slice(), true).unwrap(); + let PublicValuesStruct { n, a, b } = decoded; + println!("n: {}", n); + println!("a: {}", a); + println!("b: {}", b); + + let (expected_a, expected_b) = fibonacci_lib::fibonacci(n); + assert_eq!(a, expected_a); + assert_eq!(b, expected_b); + println!("Values are correct!"); + + // Record the number of cycles executed. + println!("Number of cycles: {}", report.total_instruction_count()); + } else { + // Setup the program for proving. + let (pk, vk) = client.setup(FIBONACCI_ELF); + + // Generate the proof + let proof = client + .prove(&pk, stdin) + .run() + .expect("failed to generate proof"); + + println!("Successfully generated proof!"); + + // Verify the proof. + client.verify(&proof, &vk).expect("failed to verify proof"); + println!("Successfully verified proof!"); + } +} From a9eb454b6e8004f38e54055e3ecec284057da65e Mon Sep 17 00:00:00 2001 From: joe Date: Sat, 30 Nov 2024 11:07:26 +0000 Subject: [PATCH 02/10] fix committed public values --- examples/recursive/lib/src/.lib.rs.swp | Bin 0 -> 12288 bytes examples/recursive/lib/src/lib.rs | 25 +++- examples/recursive/program/src/main.rs | 6 +- .../script/src/bin/recursive_prover.rs | 108 +++++++++++------- 4 files changed, 87 insertions(+), 52 deletions(-) create mode 100644 examples/recursive/lib/src/.lib.rs.swp diff --git a/examples/recursive/lib/src/.lib.rs.swp b/examples/recursive/lib/src/.lib.rs.swp new file mode 100644 index 0000000000000000000000000000000000000000..0be37fcf73274b82585a4c1bb8f5fb930b51c169 GIT binary patch literal 12288 zcmeI2O>Z1E7{^@>r~wKHZXD19mC_k$*=-WFDzha51tArQQ`JZ)ibmcUZ`NeqH1=$| zP1EuX%8d^Jd;zYY9-u;d#G^f~kyv=4FU0`v;>_w$VX z0{smA1l@zKLGM8XJq`VOhOzt5J?Jj{xo=`}#Sw4>905nb5pVWGW0aqNci6t()>STtW zYVGuJ7dE`HJ57TC*It8QDoQz?wa?JB7RcM!o9>F41>U3O1^kw}-=xV_`r^74Ssaeb zJPj4HEs&&APPrDLO~H|T)fs-AYZpp)B{d_Ogr$`x>y9)5a1iWCJqaUT@JQ;Jw{{V> z4emO=qcH`vyoIa`>C$$u;nl3r&eF9;b;e=TjmKu&$1*S}+q48J;R-9M%rW3OWj^HN z7Wsm2f3M_4fuw~zj@#W)Q#x!(t7M_YpF2I$!$B%=k_dSM@ zD$N!%ORoVj_pRq`nig;@9vtmj?97Z=g2t_TkamD{0<%k@IX{j}?d(>JbvhN^RXlhi zZ-^efi_@Z08C5$y+DP(D_}h$CI7y-sTQ~@slf82a3~e*KV>ItC^mEw%!I0Vcq, } -/// A toy example of cubic computation -pub fn cubic(n: u32) -> u32 { - n.wrapping_mul(n).wrapping_mul(n) +impl CircuitInput { + pub fn new(public_input_merkle_root: [u8; 32], public_value: u32, private_value: u32, witness: Vec) -> Self { + Self { + public_input_merkle_root, + public_value, + private_value, + witness, + } + } +} + +/// A toy example of accumulation of cubic +pub fn acc_cubic(public_value: u32, private_value: u32) -> u32 { + private_value.wrapping_add(public_value.wrapping_mul(public_value).wrapping_mul(public_value)) } /// Verify last prover's proof -pub fn verify_proof(vkey_hash: &[u32; 8], public_input_merkle_root: &[u8; 32]) { - sp1_zkvm::lib::verify::verify_sp1_proof(vkey_hash, &sha256_hash(public_input_merkle_root)); +pub fn verify_proof(vkey_hash: &[u32; 8], public_input_merkle_root: &[u8; 32], private_value: u32) { + let mut bytes = Vec::with_capacity(36); + bytes.extend_from_slice(public_input_merkle_root); + bytes.extend_from_slice(&private_value.to_le_bytes()); + sp1_zkvm::lib::verify::verify_sp1_proof(vkey_hash, &sha256_hash(&bytes)); } /// Construct a merkle tree for all public inputs avoiding commit these public inputs directly diff --git a/examples/recursive/program/src/main.rs b/examples/recursive/program/src/main.rs index 9923930854..db5260a2f1 100644 --- a/examples/recursive/program/src/main.rs +++ b/examples/recursive/program/src/main.rs @@ -7,7 +7,7 @@ #![no_main] sp1_zkvm::entrypoint!(main); -use recursive_lib::{cubic, verify_proof, merkle_tree_public_input, CircuitInput}; +use recursive_lib::{acc_cubic, verify_proof, merkle_tree_public_input, CircuitInput}; pub fn main() { // Read prover's sequence number @@ -18,10 +18,10 @@ pub fn main() { let circuit_input = sp1_zkvm::io::read::(); // Do cubic computation - let result = cubic(circuit_input.public_value); + let result = acc_cubic(circuit_input.public_value, circuit_input.private_value); // Verify proof output by last prover if seq != 0 { - verify_proof(&vkey_u32_hash, &circuit_input.public_input_merkle_root); + verify_proof(&vkey_u32_hash, &circuit_input.public_input_merkle_root, circuit_input.private_value); } // Construct a merkle root of all public inputs let merkle_root = merkle_tree_public_input( diff --git a/examples/recursive/script/src/bin/recursive_prover.rs b/examples/recursive/script/src/bin/recursive_prover.rs index 97d03b7eac..1fea054f70 100644 --- a/examples/recursive/script/src/bin/recursive_prover.rs +++ b/examples/recursive/script/src/bin/recursive_prover.rs @@ -10,13 +10,14 @@ //! RUST_LOG=info cargo run --release -- --prove //! ``` -use alloy_sol_types::SolType; use clap::Parser; -use fibonacci_lib::PublicValuesStruct; use sp1_sdk::{include_elf, ProverClient, SP1Stdin}; +use recursive_lib::CircuitInput; +use sp1_sdk::SP1Proof; +use sp1_sdk::HashableKey; /// The ELF (executable and linkable format) file for the Succinct RISC-V zkVM. -pub const FIBONACCI_ELF: &[u8] = include_elf!("fibonacci-program"); +pub const RECURSIVE_ELF: &[u8] = include_elf!("recursive-program"); /// The arguments for the command. #[derive(Parser, Debug)] @@ -43,49 +44,68 @@ fn main() { eprintln!("Error: You must specify either --execute or --prove"); std::process::exit(1); } - - // Setup the prover client. - let client = ProverClient::new(); - - // Setup the inputs. - let mut stdin = SP1Stdin::new(); - stdin.write(&args.n); - - println!("n: {}", args.n); + assert_eq!(args.n > 0, true, "n must be greater than 0"); + let test_public_values = (0..args.n).map(|i| 100 + i).collect::>(); if args.execute { - // Execute the program - let (output, report) = client.execute(FIBONACCI_ELF, stdin).run().unwrap(); - println!("Program executed successfully."); - - // Read the output. - let decoded = PublicValuesStruct::abi_decode(output.as_slice(), true).unwrap(); - let PublicValuesStruct { n, a, b } = decoded; - println!("n: {}", n); - println!("a: {}", a); - println!("b: {}", b); - - let (expected_a, expected_b) = fibonacci_lib::fibonacci(n); - assert_eq!(a, expected_a); - assert_eq!(b, expected_b); - println!("Values are correct!"); - - // Record the number of cycles executed. - println!("Number of cycles: {}", report.total_instruction_count()); - } else { - // Setup the program for proving. - let (pk, vk) = client.setup(FIBONACCI_ELF); - - // Generate the proof - let proof = client - .prove(&pk, stdin) + let client = ProverClient::new(); + let (recursive_prover_pk, recursive_prover_vk) = client.setup(RECURSIVE_ELF); + + // For the very first prover + // initialized public and private values for the very first prover + let mut vkey_hash = [0u32; 8]; + let mut public_input_merkle_root = [0u8; 32]; + let mut public_value = test_public_values[0]; + let mut private_value = 0u32; + let mut witness: Vec = vec![]; + let mut circuit_input = CircuitInput::new(public_input_merkle_root, public_value, private_value, witness); + + // just fill in STDIN + let mut stdin = SP1Stdin::new(); + // write sequence number + stdin.write(&(0 as u32)); + // write vkey u32 hash + stdin.write(&vkey_hash); + // write circuit input + stdin.write(&circuit_input); + // generate proof for the very first prover + let mut last_prover_proof = client + .prove(&recursive_prover_pk, stdin) + .compressed() .run() - .expect("failed to generate proof"); - - println!("Successfully generated proof!"); - - // Verify the proof. - client.verify(&proof, &vk).expect("failed to verify proof"); - println!("Successfully verified proof!"); + .expect("proving failed"); + println!("## Generating proof for the very first prover succeeds!"); + + // For the rest of the provers + for seq in 1..args.n { + // public and private values for the rest of provers + vkey_hash = recursive_prover_vk.hash_u32(); + public_input_merkle_root = last_prover_proof.public_values.read::<[u8; 32]>(); + private_value = last_prover_proof.public_values.read::(); + public_value = test_public_values[seq as usize]; + witness = test_public_values[..seq as usize].to_vec(); + circuit_input = CircuitInput::new(public_input_merkle_root, public_value, private_value, witness); + + // just fill in STDIN + stdin = SP1Stdin::new(); + stdin.write(&(seq as u32)); + stdin.write(&vkey_hash); + stdin.write(&circuit_input); + let SP1Proof::Compressed(proof) = last_prover_proof.proof else { + panic!() + }; + // write proof and vkey as private value + stdin.write_proof(*proof, recursive_prover_vk.vk.clone()); + last_prover_proof = client + .prove(&recursive_prover_pk, stdin) + .compressed() + .run() + .expect("proving failed"); + println!("## Generating proof for one of the rest provers succeeds!"); + } + + + } else { + unimplemented!(); } } From 653e8c51d65852294c2ccc3917a02603be045afb Mon Sep 17 00:00:00 2001 From: Ratan Kaliani Date: Fri, 20 Dec 2024 13:16:40 -0800 Subject: [PATCH 03/10] feat(sdk): `get_proof_status`, `request`, `cycle_limit` (#1883) --- crates/sdk/src/cpu/builder.rs | 6 ++- crates/sdk/src/network/prove.rs | 65 ++++++++++++++++++++++++++++-- crates/sdk/src/network/prover.rs | 69 +++++++++++++++++++++++++++++--- 3 files changed, 129 insertions(+), 11 deletions(-) diff --git a/crates/sdk/src/cpu/builder.rs b/crates/sdk/src/cpu/builder.rs index 3bd17ebc2f..6cdcf3b380 100644 --- a/crates/sdk/src/cpu/builder.rs +++ b/crates/sdk/src/cpu/builder.rs @@ -26,6 +26,10 @@ impl CpuProverBuilder { /// ``` #[must_use] pub fn build(self) -> CpuProver { - if self.mock { CpuProver::mock() } else { CpuProver::new() } + if self.mock { + CpuProver::mock() + } else { + CpuProver::new() + } } } diff --git a/crates/sdk/src/network/prove.rs b/crates/sdk/src/network/prove.rs index 2d33ea628a..293c69f204 100644 --- a/crates/sdk/src/network/prove.rs +++ b/crates/sdk/src/network/prove.rs @@ -23,6 +23,7 @@ pub struct NetworkProveBuilder<'a> { pub(crate) timeout: Option, pub(crate) strategy: FulfillmentStrategy, pub(crate) skip_simulation: bool, + pub(crate) cycle_limit: Option, } impl<'a> NetworkProveBuilder<'a> { @@ -231,6 +232,62 @@ impl<'a> NetworkProveBuilder<'a> { self } + /// Sets the cycle limit for the proof request. + /// + /// # Details + /// The cycle limit determines the maximum number of cycles that the program should take to + /// execute. By default, the cycle limit is determined by simulating the program locally. + /// However, you can manually set it if you know the exact cycle count needed and want to skip + /// the simulation step locally. + /// + /// The cycle limit ensures that a prover on the network will stop generating a proof once the + /// cycle limit is reached, which prevents DoS attacks. + /// + /// # Example + /// ```rust,no_run + /// use sp1_sdk::{ProverClient, SP1Stdin, Prover}; + /// + /// let elf = &[1, 2, 3]; + /// let stdin = SP1Stdin::new(); + /// + /// let client = ProverClient::builder().network().build(); + /// let (pk, vk) = client.setup(elf); + /// let proof = client.prove(&pk, &stdin) + /// .cycle_limit(1_000_000) // Set 1M cycle limit. + /// .skip_simulation(true) // Skip simulation since the limit is set manually. + /// .run() + /// .unwrap(); + /// ``` + #[must_use] + pub fn cycle_limit(mut self, cycle_limit: u64) -> Self { + self.cycle_limit = Some(cycle_limit); + self + } + + /// Request a proof from the prover network. + /// + /// # Details + /// This method will request a proof from the prover network. If the prover fails to request + /// a proof, the method will return an error. It will not wait for the proof to be generated. + /// + /// # Example + /// ```rust,no_run + /// use sp1_sdk::{ProverClient, SP1Stdin, Prover}; + /// + /// let elf = &[1, 2, 3]; + /// let stdin = SP1Stdin::new(); + /// + /// let client = ProverClient::builder().network().build(); + /// let (pk, vk) = client.setup(elf); + /// let request_id = client.prove(&pk, &stdin) + /// .request() + /// .unwrap(); + /// ``` + pub async fn request(self) -> Result> { + let Self { prover, mode, pk, stdin, timeout, strategy, skip_simulation, cycle_limit } = self; + prover.request_proof_impl(pk, &stdin, mode, strategy, timeout, skip_simulation, cycle_limit).await + } + /// Run the prover with the built arguments. /// /// # Details @@ -251,7 +308,7 @@ impl<'a> NetworkProveBuilder<'a> { /// .unwrap(); /// ``` pub fn run(self) -> Result { - let Self { prover, mode, pk, stdin, timeout, strategy, mut skip_simulation } = self; + let Self { prover, mode, pk, stdin, timeout, strategy, mut skip_simulation, cycle_limit } = self; // Check for deprecated environment variable if let Ok(val) = std::env::var("SKIP_SIMULATION") { @@ -263,7 +320,7 @@ impl<'a> NetworkProveBuilder<'a> { sp1_dump(&pk.elf, &stdin); - block_on(prover.prove_impl(pk, &stdin, mode, strategy, timeout, skip_simulation)) + block_on(prover.prove_impl(pk, &stdin, mode, strategy, timeout, skip_simulation, cycle_limit)) } /// Run the prover with the built arguments asynchronously. @@ -284,7 +341,7 @@ impl<'a> NetworkProveBuilder<'a> { /// .run_async(); /// ``` pub async fn run_async(self) -> Result { - let Self { prover, mode, pk, stdin, timeout, strategy, mut skip_simulation } = self; + let Self { prover, mode, pk, stdin, timeout, strategy, mut skip_simulation, cycle_limit } = self; // Check for deprecated environment variable if let Ok(val) = std::env::var("SKIP_SIMULATION") { @@ -296,6 +353,6 @@ impl<'a> NetworkProveBuilder<'a> { sp1_dump(&pk.elf, &stdin); - prover.prove_impl(pk, &stdin, mode, strategy, timeout, skip_simulation).await + prover.prove_impl(pk, &stdin, mode, strategy, timeout, skip_simulation, cycle_limit).await } } diff --git a/crates/sdk/src/network/prover.rs b/crates/sdk/src/network/prover.rs index 4927acca35..f6a718686a 100644 --- a/crates/sdk/src/network/prover.rs +++ b/crates/sdk/src/network/prover.rs @@ -5,6 +5,7 @@ use std::time::{Duration, Instant}; +use super::proto::network::GetProofRequestStatusResponse; use super::prove::NetworkProveBuilder; use super::DEFAULT_CYCLE_LIMIT; use crate::cpu::execute::CpuExecuteBuilder; @@ -108,6 +109,7 @@ impl NetworkProver { timeout: None, strategy: FulfillmentStrategy::Hosted, skip_simulation: false, + cycle_limit: None, } } @@ -134,6 +136,26 @@ impl NetworkProver { self.client.register_program(vk, elf).await } + /// Gets the status of a proof request. + /// + /// # Details + /// * `request_id`: The request ID to get the status of. + /// + /// # Example + /// ```rust,no_run + /// use sp1_sdk::{ProverClient} + /// + /// let request_id = vec![1u8; 32]; + /// let client = ProverClient::builder().network().build(); + /// let (status, maybe_proof) = client.get_proof_status(&request_id).await?; + /// ``` + pub async fn get_proof_status( + &self, + request_id: &[u8], + ) -> Result<(GetProofRequestStatusResponse, Option)> { + self.client.get_proof_request_status(request_id).await + } + /// Requests a proof from the prover network, returning the request ID. pub(crate) async fn request_proof( &self, @@ -210,7 +232,11 @@ impl NetworkProver { } let remaining_timeout = timeout.map(|t| { let elapsed = start_time.elapsed(); - if elapsed < t { t - elapsed } else { Duration::from_secs(0) } + if elapsed < t { + t - elapsed + } else { + Duration::from_secs(0) + } }); // Get status with retries. @@ -247,6 +273,22 @@ impl NetworkProver { } } + /// Requests a proof from the prover network. + pub(crate) async fn request_proof_impl( + &self, + pk: &SP1ProvingKey, + stdin: &SP1Stdin, + mode: SP1ProofMode, + strategy: FulfillmentStrategy, + timeout: Option, + skip_simulation: bool, + cycle_limit: Option, + ) -> Result> { + let vk_hash = self.register_program(&pk.vk, &pk.elf).await?; + let cycle_limit = self.get_cycle_limit(cycle_limit, &pk.elf, stdin, skip_simulation)?; + self.request_proof(&vk_hash, stdin, mode.into(), strategy, cycle_limit, timeout).await + } + /// Requests a proof from the prover network and waits for it to be generated. pub(crate) async fn prove_impl( &self, @@ -256,16 +298,31 @@ impl NetworkProver { strategy: FulfillmentStrategy, timeout: Option, skip_simulation: bool, + cycle_limit: Option, ) -> Result { - let vk_hash = self.register_program(&pk.vk, &pk.elf).await?; - let cycle_limit = self.get_cycle_limit(&pk.elf, stdin, skip_simulation)?; let request_id = self - .request_proof(&vk_hash, stdin, mode.into(), strategy, cycle_limit, timeout) + .request_proof_impl(pk, stdin, mode, strategy, timeout, skip_simulation, cycle_limit) .await?; self.wait_proof(&request_id, timeout).await } - fn get_cycle_limit(&self, elf: &[u8], stdin: &SP1Stdin, skip_simulation: bool) -> Result { + /// The cycle limit is determined according to the following priority: + /// + /// 1. If a cycle limit was explicitly set by the requester, use the specified value. + /// 2. If simulation is enabled, calculate the limit by simulating the + /// execution of the program. This is the default behavior. + /// 3. Otherwise, use the default cycle limit ([`DEFAULT_CYCLE_LIMIT`]). + fn get_cycle_limit( + &self, + cycle_limit: Option, + elf: &[u8], + stdin: &SP1Stdin, + skip_simulation: bool, + ) -> Result { + if let Some(cycle_limit) = cycle_limit { + return Ok(cycle_limit); + } + if skip_simulation { Ok(DEFAULT_CYCLE_LIMIT) } else { @@ -291,7 +348,7 @@ impl Prover for NetworkProver { stdin: &SP1Stdin, mode: SP1ProofMode, ) -> Result { - block_on(self.prove_impl(pk, stdin, mode, FulfillmentStrategy::Hosted, None, false)) + block_on(self.prove_impl(pk, stdin, mode, FulfillmentStrategy::Hosted, None, false, None)) } } From a1e362340be2856caa138b48e4527522a8192621 Mon Sep 17 00:00:00 2001 From: Matt Stam Date: Fri, 20 Dec 2024 14:03:28 -0800 Subject: [PATCH 04/10] feat(sdk): latest network proto + error handling + fix examples (#1884) --- book/docs/generating-proofs/proof-types.md | 6 +- .../generating-proofs/prover-network/usage.md | 2 +- book/docs/writing-programs/cycle-tracking.mdx | 20 +- ...les_fibonacci_script_bin_compressed.rs.mdx | 2 +- ...amples_fibonacci_script_bin_execute.rs.mdx | 2 +- ..._fibonacci_script_bin_groth16_bn254.rs.mdx | 2 +- .../examples_fibonacci_script_src_main.rs.mdx | 4 +- .../examples_groth16_script_src_main.rs.mdx | 4 +- .../generating-proofs/proof-types.md | 8 +- .../generating-proofs/prover-network/usage.md | 2 +- crates/perf/src/main.rs | 4 +- crates/sdk/src/network/client.rs | 60 +++++- crates/sdk/src/network/error.rs | 39 ++++ crates/sdk/src/network/mod.rs | 13 +- crates/sdk/src/network/proto/artifact.rs | 62 +++++- crates/sdk/src/network/proto/mod.rs | 2 + crates/sdk/src/network/proto/network.rs | 204 ++++++++++++++---- crates/sdk/src/network/prove.rs | 25 ++- crates/sdk/src/network/prover.rs | 43 ++-- crates/sdk/src/network/sign_message.rs | 97 --------- crates/sdk/src/network/utils.rs | 56 +---- examples/aggregation/script/src/main.rs | 8 +- examples/bls12381/script/src/main.rs | 2 +- examples/bn254/script/src/main.rs | 2 +- examples/chess/script/src/main.rs | 2 +- examples/cycle-tracking/script/src/main.rs | 5 +- examples/fibonacci/script/Cargo.toml | 4 + examples/fibonacci/script/bin/compressed.rs | 2 +- examples/fibonacci/script/bin/execute.rs | 2 +- .../fibonacci/script/bin/groth16_bn254.rs | 2 +- examples/fibonacci/script/bin/network.rs | 77 +++++++ examples/fibonacci/script/bin/plonk_bn254.rs | 2 +- examples/fibonacci/script/src/main.rs | 4 +- examples/groth16/script/src/main.rs | 4 +- examples/io/script/src/main.rs | 2 +- examples/is-prime/script/src/main.rs | 2 +- examples/json/script/src/main.rs | 2 +- examples/patch-testing/script/src/main.rs | 2 +- examples/regex/script/src/main.rs | 2 +- examples/rsa/script/src/main.rs | 2 +- examples/rsp/script/src/main.rs | 5 +- examples/ssz-withdrawals/script/src/main.rs | 2 +- examples/tendermint/script/src/main.rs | 4 +- 43 files changed, 510 insertions(+), 286 deletions(-) create mode 100644 crates/sdk/src/network/error.rs delete mode 100644 crates/sdk/src/network/sign_message.rs create mode 100644 examples/fibonacci/script/bin/network.rs diff --git a/book/docs/generating-proofs/proof-types.md b/book/docs/generating-proofs/proof-types.md index 581a751d3c..dfdae364d5 100644 --- a/book/docs/generating-proofs/proof-types.md +++ b/book/docs/generating-proofs/proof-types.md @@ -13,7 +13,7 @@ the size of the execution. Use this in settings where you don't care about **ver ```rust,noplayground let client = ProverClient::from_env(); -client.prove(&pk, stdin).run().unwrap(); +client.prove(&pk, &stdin).run().unwrap(); ``` ## Compressed @@ -23,7 +23,7 @@ care about **verification cost / proof size**, but not onchain verification. Com ```rust,noplayground let client = ProverClient::from_env(); -client.prove(&pk, stdin).compressed().run().unwrap(); +client.prove(&pk, &stdin).compressed().run().unwrap(); ``` ## Groth16 (Recommended) @@ -45,5 +45,5 @@ PLONK does not require a trusted setup and reuses contributions from the Aztec I ```rust,noplayground let client = ProverClient::from_env(); -client.prove(&pk, stdin).plonk().run().unwrap(); +client.prove(&pk, &stdin).plonk().run().unwrap(); ``` diff --git a/book/docs/generating-proofs/prover-network/usage.md b/book/docs/generating-proofs/prover-network/usage.md index 388c61efdb..77eef1f082 100644 --- a/book/docs/generating-proofs/prover-network/usage.md +++ b/book/docs/generating-proofs/prover-network/usage.md @@ -10,7 +10,7 @@ To use the prover network to generate a proof, you can run your script that uses // Generate the proof for the given program. let client = ProverClient::from_env(); let (pk, vk) = client.setup(ELF); -let mut proof = client.prove(&pk, stdin).run().unwrap(); +let mut proof = client.prove(&pk, &stdin).run().unwrap(); ``` ```sh diff --git a/book/docs/writing-programs/cycle-tracking.mdx b/book/docs/writing-programs/cycle-tracking.mdx index d46da0709f..f38f50d74d 100644 --- a/book/docs/writing-programs/cycle-tracking.mdx +++ b/book/docs/writing-programs/cycle-tracking.mdx @@ -8,7 +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: - + Note that to use the macro, you must add the `sp1-derive` crate to your dependencies for your program. @@ -56,11 +56,12 @@ fn main() { This will log the cycle count for `block name` and include it in the `ExecutionReport` in the `cycle_tracker` map. -### Profiling a ZKVM program +### Profiling a ZKVM program Profiling a zkVM program produces a useful visualization ([example profile](https://share.firefox.dev/3Om1pzz)) which makes it easy to examine program performance and see exactly where VM cycles are being spent without needing to modify the program at all. To profile a program, you need to: + 1. Enable the profiling feature for `sp1-sdk` in `script/Cargo.toml` 2. Set the env variable `TRACE_FILE=trace.json` and then call `ProverClient::execute()` in your script. @@ -68,13 +69,15 @@ If you're executing a larger program (>100M cycles), you should set `TRACE_SAMPL Many examples can be found in the repo, such as this ['fibonacci'](https://github.com/succinctlabs/sp1/blob/dev/examples/fibonacci/script/src/main.rs#L22) script. -Once you have your script it should look like the following: -```rs +Once you have your script it should look like the following: + +```rs // Execute the program using the `ProverClient.execute` method, without generating a proof. - let (_, report) = client.execute(ELF, stdin.clone()).run().unwrap(); + let (_, report) = client.execute(ELF, &stdin).run().unwrap(); ``` As well you must enable the profiling feature on the SDK: + ```toml sp1-sdk = { version = "3.0.0", features = ["profiling"] } ``` @@ -83,11 +86,13 @@ The `TRACE_FILE` env var tells the executor where to save the profile, and the ` A larger sample rate will give you a smaller profile, it is the number of instructions in between each sample. The full command to profile should look something like this + ```sh TRACE_FILE=output.json TRACE_SAMPLE_RATE=100 cargo run ... ``` To view these profiles, we recommend [Samply](https://github.com/mstange/samply). + ```sh cargo install --locked samply samply load output.json @@ -97,7 +102,8 @@ Samply uses the Firefox profiler to create a nice visualization of your programs ![An example screenshot of the Firefox Profiler](@site/static/profiling.png) #### Interpreting the Profile -- The "time" measurement in the profiler is actually the number of cycles spent, -in general the less cycles for a given callframe the better. + +- The "time" measurement in the profiler is actually the number of cycles spent, + in general the less cycles for a given callframe the better. - The CPU usage of the program will always be constant, as its running in the VM which is single threaded. diff --git a/book/static/examples_fibonacci_script_bin_compressed.rs.mdx b/book/static/examples_fibonacci_script_bin_compressed.rs.mdx index 5c9409f8da..1b17c75f3b 100644 --- a/book/static/examples_fibonacci_script_bin_compressed.rs.mdx +++ b/book/static/examples_fibonacci_script_bin_compressed.rs.mdx @@ -16,7 +16,7 @@ fn main() { // 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(); + let mut proof = client.prove(&pk, &stdin).compressed().run().unwrap(); println!("generated proof"); // Read and verify the output. diff --git a/book/static/examples_fibonacci_script_bin_execute.rs.mdx b/book/static/examples_fibonacci_script_bin_execute.rs.mdx index 46d2bb8757..84175f3017 100644 --- a/book/static/examples_fibonacci_script_bin_execute.rs.mdx +++ b/book/static/examples_fibonacci_script_bin_execute.rs.mdx @@ -16,7 +16,7 @@ fn main() { // 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(); + 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. diff --git a/book/static/examples_fibonacci_script_bin_groth16_bn254.rs.mdx b/book/static/examples_fibonacci_script_bin_groth16_bn254.rs.mdx index 6b2d6a7f06..a2ef52fc74 100644 --- a/book/static/examples_fibonacci_script_bin_groth16_bn254.rs.mdx +++ b/book/static/examples_fibonacci_script_bin_groth16_bn254.rs.mdx @@ -20,7 +20,7 @@ fn main() { println!("vk: {:?}", vk.bytes32()); // Generate the Groth16 proof. - let proof = client.prove(&pk, stdin).groth16().run().unwrap(); + let proof = client.prove(&pk, &stdin).groth16().run().unwrap(); println!("generated proof"); // Get the public values as bytes. diff --git a/book/static/examples_fibonacci_script_src_main.rs.mdx b/book/static/examples_fibonacci_script_src_main.rs.mdx index 0aa64a9583..c779c5f945 100644 --- a/book/static/examples_fibonacci_script_src_main.rs.mdx +++ b/book/static/examples_fibonacci_script_src_main.rs.mdx @@ -20,12 +20,12 @@ fn main() { 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(); + let (_, report) = client.execute(ELF, &stdin).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(); + let mut proof = client.prove(&pk, &stdin).run().unwrap(); println!("generated proof"); diff --git a/book/static/examples_groth16_script_src_main.rs.mdx b/book/static/examples_groth16_script_src_main.rs.mdx index 7be12e7e3d..771a908611 100644 --- a/book/static/examples_groth16_script_src_main.rs.mdx +++ b/book/static/examples_groth16_script_src_main.rs.mdx @@ -29,7 +29,7 @@ fn generate_fibonacci_proof() -> (Vec, Vec, String) { // 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(); + let proof = client.prove(&pk, &stdin).groth16().run().unwrap(); (proof.bytes(), proof.public_values.to_vec(), vk.bytes32()) } @@ -50,7 +50,7 @@ fn main() { 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(); + let (_, report) = client.execute(GROTH16_ELF, &stdin).run().unwrap(); println!("executed groth16 program with {} cycles", report.total_instruction_count()); println!("{}", report); } 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 index c6d713e754..ece6318edc 100644 --- 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 @@ -13,7 +13,7 @@ the size of the execution. Use this in settings where you don't care about **ver ```rust let client = ProverClient::new(); -client.prove(&pk, stdin).run().unwrap(); +client.prove(&pk, &stdin).run().unwrap(); ``` ## Compressed @@ -23,7 +23,7 @@ care about **verification cost / proof size**, but not onchain verification. Com ```rust let client = ProverClient::new(); -client.prove(&pk, stdin).compressed().run().unwrap(); +client.prove(&pk, &stdin).compressed().run().unwrap(); ``` ## Groth16 (Recommended) @@ -34,7 +34,7 @@ The trusted setup for the Groth16 circuit keys uses the [Aztec Ignition ceremony ```rust let client = ProverClient::new(); -client.prove(&pk, stdin).groth16().run().unwrap(); +client.prove(&pk, &stdin).groth16().run().unwrap(); ``` ## PLONK @@ -45,5 +45,5 @@ PLONK does not require a trusted setup. ```rust let client = ProverClient::new(); -client.prove(&pk, stdin).plonk().run().unwrap(); +client.prove(&pk, &stdin).plonk().run().unwrap(); ``` 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 12ef4ac4e6..f17324113e 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 @@ -10,7 +10,7 @@ To use the prover network to generate a proof, you can run your script that uses // 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(); +let mut proof = client.prove(&pk, &stdin).run().unwrap(); ``` ```sh diff --git a/crates/perf/src/main.rs b/crates/perf/src/main.rs index 04ca613173..7449d67c75 100644 --- a/crates/perf/src/main.rs +++ b/crates/perf/src/main.rs @@ -177,13 +177,13 @@ fn main() { let (_, _) = time_operation(|| prover.execute(&elf, &stdin)); let (proof, _) = time_operation(|| { - prover.prove(&pk, stdin.clone()).groth16().skip_simulation(true).run().unwrap() + prover.prove(&pk, &stdin).groth16().skip_simulation(true).run().unwrap() }); let (_, _) = time_operation(|| prover.verify(&proof, &vk)); let (proof, _) = time_operation(|| { - prover.prove(&pk, stdin).plonk().skip_simulation(true).run().unwrap() + prover.prove(&pk, &stdin).plonk().skip_simulation(true).run().unwrap() }); let (_, _) = time_operation(|| prover.verify(&proof, &vk)); diff --git a/crates/sdk/src/network/client.rs b/crates/sdk/src/network/client.rs index 880352c5c6..6758ffa3d2 100644 --- a/crates/sdk/src/network/client.rs +++ b/crates/sdk/src/network/client.rs @@ -20,14 +20,14 @@ use tonic::{ use super::utils::Signable; use crate::network::proto::artifact::{ - artifact_store_client::ArtifactStoreClient, CreateArtifactRequest, + artifact_store_client::ArtifactStoreClient, ArtifactType, CreateArtifactRequest, }; use crate::network::proto::network::{ prover_network_client::ProverNetworkClient, CreateProgramRequest, CreateProgramRequestBody, - CreateProgramResponse, FulfillmentStatus, FulfillmentStrategy, GetNonceRequest, - GetProgramRequest, GetProgramResponse, GetProofRequestStatusRequest, - GetProofRequestStatusResponse, MessageFormat, ProofMode, RequestProofRequest, - RequestProofRequestBody, RequestProofResponse, + CreateProgramResponse, FulfillmentStatus, FulfillmentStrategy, GetFilteredProofRequestsRequest, + GetFilteredProofRequestsResponse, GetNonceRequest, GetProgramRequest, GetProgramResponse, + GetProofRequestStatusRequest, GetProofRequestStatusResponse, MessageFormat, ProofMode, + RequestProofRequest, RequestProofRequestBody, RequestProofResponse, }; /// A client for interacting with the network. @@ -105,7 +105,8 @@ impl NetworkClient { ) -> Result { // Create the program artifact. let mut store = self.artifact_store_client().await?; - let program_uri = self.create_artifact_with_content(&mut store, &elf).await?; + let program_uri = + self.create_artifact_with_content(&mut store, ArtifactType::Program, &elf).await?; // Serialize the verifying key. let vk_encoded = bincode::serialize(&vk)?; @@ -130,6 +131,44 @@ impl NetworkClient { .into_inner()) } + /// Get all the proof requests that meet the filter criteria. + #[allow(clippy::too_many_arguments)] + pub async fn get_filtered_proof_requests( + &self, + version: Option, + fulfillment_status: Option, + execution_status: Option, + minimum_deadline: Option, + vk_hash: Option>, + requester: Option>, + fulfiller: Option>, + from: Option, + to: Option, + limit: Option, + page: Option, + mode: Option, + ) -> Result { + let mut rpc = self.prover_network_client().await?; + let res = rpc + .get_filtered_proof_requests(GetFilteredProofRequestsRequest { + version, + fulfillment_status, + execution_status, + minimum_deadline, + vk_hash, + requester, + fulfiller, + from, + to, + limit, + page, + mode, + }) + .await? + .into_inner(); + Ok(res) + } + /// Get the status of a given proof. /// /// # Details @@ -190,7 +229,8 @@ impl NetworkClient { // Create the stdin artifact. let mut store = self.artifact_store_client().await?; - let stdin_uri = self.create_artifact_with_content(&mut store, &stdin).await?; + let stdin_uri = + self.create_artifact_with_content(&mut store, ArtifactType::Stdin, &stdin).await?; // Send the request. let mut rpc = self.prover_network_client().await?; @@ -248,10 +288,14 @@ impl NetworkClient { pub(crate) async fn create_artifact_with_content( &self, store: &mut ArtifactStoreClient, + artifact_type: ArtifactType, item: &T, ) -> Result { let signature = self.signer.sign_message_sync("create_artifact".as_bytes())?; - let request = CreateArtifactRequest { signature: signature.as_bytes().to_vec() }; + let request = CreateArtifactRequest { + artifact_type: artifact_type.into(), + signature: signature.as_bytes().to_vec(), + }; let response = store.create_artifact(request).await?.into_inner(); let presigned_url = response.artifact_presigned_url; diff --git a/crates/sdk/src/network/error.rs b/crates/sdk/src/network/error.rs new file mode 100644 index 0000000000..3cde6d6047 --- /dev/null +++ b/crates/sdk/src/network/error.rs @@ -0,0 +1,39 @@ +use thiserror::Error; +use tonic::Status; + +/// An error that can occur when interacting with the prover network. +#[derive(Error, Debug)] +pub enum Error { + /// The program execution failed. + #[error("Program simulation failed")] + SimulationFailed, + + /// The proof request is unexecutable. + #[error("Proof request 0x{} is unexecutable", hex::encode(.request_id))] + RequestUnexecutable { + /// The ID of the request that cannot be executed. + request_id: Vec, + }, + + /// The proof request is unfulfillable. + #[error("Proof request 0x{} is unfulfillable", hex::encode(.request_id))] + RequestUnfulfillable { + /// The ID of the request that cannot be fulfilled. + request_id: Vec, + }, + + /// The proof request timed out. + #[error("Proof request 0x{} timed out", hex::encode(.request_id))] + RequestTimedOut { + /// The ID of the request that timed out. + request_id: Vec, + }, + + /// An error occurred while interacting with the RPC server. + #[error("RPC error")] + RpcError(#[from] Status), + + /// An unknown error occurred. + #[error("Other error: {0}")] + Other(#[from] anyhow::Error), +} diff --git a/crates/sdk/src/network/mod.rs b/crates/sdk/src/network/mod.rs index 6cc201f327..6ebb2790dd 100644 --- a/crates/sdk/src/network/mod.rs +++ b/crates/sdk/src/network/mod.rs @@ -4,19 +4,28 @@ pub mod client; pub mod prover; -mod sign_message; #[rustfmt::skip] #[allow(missing_docs)] #[allow(clippy::default_trait_access)] #[allow(clippy::too_many_lines)] pub mod proto; pub mod builder; +mod error; pub mod prove; pub mod utils; +pub use error::*; + pub use crate::network::client::NetworkClient; pub use crate::network::proto::network::FulfillmentStrategy; -pub(crate) const DEFAULT_PROVER_NETWORK_RPC: &str = "https://rpc.production.succinct.tools/"; +/// The default RPC URL for the prover network. +pub(crate) const DEFAULT_NETWORK_RPC_URL: &str = "https://rpc.production.succinct.tools/"; + +/// The default timeout for the prover network (4 hours). pub(crate) const DEFAULT_TIMEOUT_SECS: u64 = 14400; + +/// The default cycle limit for the prover network (100M cycles). +/// +/// This will only be used if both simulation is skipped and the cycle limit is not explicitly set. pub(crate) const DEFAULT_CYCLE_LIMIT: u64 = 100_000_000; diff --git a/crates/sdk/src/network/proto/artifact.rs b/crates/sdk/src/network/proto/artifact.rs index e1ff3ad034..bda90769e9 100644 --- a/crates/sdk/src/network/proto/artifact.rs +++ b/crates/sdk/src/network/proto/artifact.rs @@ -4,6 +4,9 @@ pub struct CreateArtifactRequest { /// The signature of the user on a pre-defined message. Used for authentication. #[prost(bytes = "vec", tag = "1")] pub signature: ::prost::alloc::vec::Vec, + /// The type of artifact to create. + #[prost(enumeration = "ArtifactType", tag = "2")] + pub artifact_type: i32, } #[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)] pub struct CreateArtifactResponse { @@ -14,11 +17,58 @@ pub struct CreateArtifactResponse { #[prost(string, tag = "2")] pub artifact_presigned_url: ::prost::alloc::string::String, } +#[derive( + serde::Serialize, + serde::Deserialize, + Clone, + Copy, + Debug, + PartialEq, + Eq, + Hash, + PartialOrd, + Ord, + ::prost::Enumeration, +)] +#[repr(i32)] +pub enum ArtifactType { + UnspecifiedArtifactType = 0, + /// A program artifact. + Program = 1, + /// A stdin artifact. + Stdin = 2, + /// A proof artifact. + Proof = 3, +} +impl ArtifactType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + Self::UnspecifiedArtifactType => "UNSPECIFIED_ARTIFACT_TYPE", + Self::Program => "PROGRAM", + Self::Stdin => "STDIN", + Self::Proof => "PROOF", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "UNSPECIFIED_ARTIFACT_TYPE" => Some(Self::UnspecifiedArtifactType), + "PROGRAM" => Some(Self::Program), + "STDIN" => Some(Self::Stdin), + "PROOF" => Some(Self::Proof), + _ => None, + } + } +} /// Generated client implementations. pub mod artifact_store_client { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] use tonic::codegen::http::Uri; - use tonic::codegen::{Body, Bytes, CompressionEncoding, GrpcMethod, InterceptedService, StdError, http}; + use tonic::codegen::*; #[derive(Debug, Clone)] pub struct ArtifactStoreClient { inner: tonic::client::Grpc, @@ -57,11 +107,11 @@ pub mod artifact_store_client { F: tonic::service::Interceptor, T::ResponseBody: Default, T: tonic::codegen::Service< - http::Request, - Response = http::Response< - >::ResponseBody, - >, + http::Request, + Response = http::Response< + >::ResponseBody, >, + >, >>::Error: Into + std::marker::Send + std::marker::Sync, { @@ -123,7 +173,7 @@ pub mod artifact_store_client { /// Generated server implementations. pub mod artifact_store_server { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] - use tonic::codegen::{Arc, Body, BoxFuture, CompressionEncoding, Context, EnabledCompressionEncodings, InterceptedService, Poll, StdError, async_trait, empty_body, http}; + use tonic::codegen::*; /// Generated trait containing gRPC methods that should be implemented for use with ArtifactStoreServer. #[async_trait] pub trait ArtifactStore: std::marker::Send + std::marker::Sync + 'static { diff --git a/crates/sdk/src/network/proto/mod.rs b/crates/sdk/src/network/proto/mod.rs index 48eb63675a..95ba33205e 100644 --- a/crates/sdk/src/network/proto/mod.rs +++ b/crates/sdk/src/network/proto/mod.rs @@ -1,2 +1,4 @@ +#![allow(clippy::doc_markdown, clippy::must_use_candidate, clippy::wildcard_imports)] + pub mod artifact; pub mod network; diff --git a/crates/sdk/src/network/proto/network.rs b/crates/sdk/src/network/proto/network.rs index 52691b93ab..6c411f84ab 100644 --- a/crates/sdk/src/network/proto/network.rs +++ b/crates/sdk/src/network/proto/network.rs @@ -254,20 +254,28 @@ pub struct ProofRequest { /// The unix timestamp of when the request was updated. #[prost(uint64, tag = "19")] pub updated_at: u64, - /// The unix timestamp of when the request was fulfilled. + /// The unix timestamp of when the request was fulfilled. Only included if + /// the request has a fulfillment status of FULFILLED. #[prost(uint64, optional, tag = "20")] pub fulfilled_at: ::core::option::Option, /// The transaction hash of the request. #[prost(bytes = "vec", tag = "21")] pub tx_hash: ::prost::alloc::vec::Vec, - /// The cycle count for the request. + /// The cycle used during the execution of the request. Only included if the + /// request has an execution status of EXECUTED. #[prost(uint64, optional, tag = "22")] pub cycles: ::core::option::Option, - /// The amount deducted from the fulfiller's balance. - #[prost(string, optional, tag = "23")] - pub deduction_amount: ::core::option::Option<::prost::alloc::string::String>, - /// The amount refunded to the fulfiller's balance. + /// The public values hash from the execution of the request. Only included if + /// the request has an execution status of EXECUTED. + #[prost(bytes = "vec", optional, tag = "23")] + pub public_values_hash: ::core::option::Option<::prost::alloc::vec::Vec>, + /// The amount deducted from the fulfiller's balance. Only included if the + /// request has a fulfillment status of ASSIGNED. #[prost(string, optional, tag = "24")] + pub deduction_amount: ::core::option::Option<::prost::alloc::string::String>, + /// The amount refunded to the fulfiller's balance. Only included if the + /// request has a fulfillment status of EXECUTED. + #[prost(string, optional, tag = "25")] pub refund_amount: ::core::option::Option<::prost::alloc::string::String>, } #[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)] @@ -287,14 +295,22 @@ pub struct GetProofRequestStatusResponse { /// The transaction hash of the request. #[prost(bytes = "vec", tag = "3")] pub request_tx_hash: ::prost::alloc::vec::Vec, + /// The deadline of the request. A request should be ignored if it is past + /// its deadline. + #[prost(uint64, tag = "4")] + pub deadline: u64, /// The optional transaction hash of the proof fulfill. Only included if the /// request has a fulfillment status of FULFILLED. - #[prost(bytes = "vec", optional, tag = "4")] + #[prost(bytes = "vec", optional, tag = "5")] pub fulfill_tx_hash: ::core::option::Option<::prost::alloc::vec::Vec>, /// The optional proof URI, where you can download the result of the request. /// Only included if the request has a fulfillment status of FULFILLED. - #[prost(string, optional, tag = "5")] + #[prost(string, optional, tag = "6")] pub proof_uri: ::core::option::Option<::prost::alloc::string::String>, + /// The optional public values hash from the execution of the request. Only + /// included if the request has an execution status of EXECUTED. + #[prost(bytes = "vec", optional, tag = "7")] + pub public_values_hash: ::core::option::Option<::prost::alloc::vec::Vec>, } #[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)] pub struct GetProofRequestDetailsRequest { @@ -557,6 +573,38 @@ pub struct RemoveDelegationResponse { #[derive(serde::Serialize, serde::Deserialize, Clone, Copy, PartialEq, ::prost::Message)] pub struct RemoveDelegationResponseBody {} #[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)] +pub struct TerminateDelegationRequest { + /// The message format of the body. + #[prost(enumeration = "MessageFormat", tag = "1")] + pub format: i32, + /// The signature of the sender. + #[prost(bytes = "vec", tag = "2")] + pub signature: ::prost::alloc::vec::Vec, + /// The body of the request. + #[prost(message, optional, tag = "3")] + pub body: ::core::option::Option, +} +#[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)] +pub struct TerminateDelegationRequestBody { + /// The account nonce of the sender. + #[prost(uint64, tag = "1")] + pub nonce: u64, + /// The address of the owner whose delegation to terminate. + #[prost(bytes = "vec", tag = "2")] + pub owner: ::prost::alloc::vec::Vec, +} +#[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)] +pub struct TerminateDelegationResponse { + /// The transaction hash. + #[prost(bytes = "vec", tag = "1")] + pub tx_hash: ::prost::alloc::vec::Vec, + /// The body of the response. + #[prost(message, optional, tag = "2")] + pub body: ::core::option::Option, +} +#[derive(serde::Serialize, serde::Deserialize, Clone, Copy, PartialEq, ::prost::Message)] +pub struct TerminateDelegationResponseBody {} +#[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)] pub struct AcceptDelegationRequest { /// The message format of the body. #[prost(enumeration = "MessageFormat", tag = "1")] @@ -949,14 +997,17 @@ pub struct Reservation { #[prost(uint64, tag = "5")] pub created_at: u64, } -#[derive(serde::Serialize, serde::Deserialize, Clone, Copy, PartialEq, ::prost::Message)] +#[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)] pub struct GetFilteredReservationsRequest { + /// Requester address to filter for. + #[prost(bytes = "vec", optional, tag = "1")] + pub requester: ::core::option::Option<::prost::alloc::vec::Vec>, /// The optional maximum number of reservations to return (default is 10, /// maximum is 100). - #[prost(uint32, optional, tag = "1")] + #[prost(uint32, optional, tag = "2")] pub limit: ::core::option::Option, /// The optional page number to return (default is 1). - #[prost(uint32, optional, tag = "2")] + #[prost(uint32, optional, tag = "3")] pub page: ::core::option::Option, } #[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)] @@ -1120,19 +1171,19 @@ pub enum MessageFormat { Json = 2, } impl MessageFormat { - /// String value of the enum field names used in the `ProtoBuf` definition. + /// String value of the enum field names used in the ProtoBuf definition. /// /// The values are not transformed in any way and thus are considered stable - /// (if the `ProtoBuf` definition does not change) and safe for programmatic use. - #[must_use] pub fn as_str_name(&self) -> &'static str { + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { match self { Self::UnspecifiedMessageFormat => "UNSPECIFIED_MESSAGE_FORMAT", Self::Binary => "BINARY", Self::Json => "JSON", } } - /// Creates an enum from field names used in the `ProtoBuf` definition. - #[must_use] pub fn from_str_name(value: &str) -> ::core::option::Option { + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { match value { "UNSPECIFIED_MESSAGE_FORMAT" => Some(Self::UnspecifiedMessageFormat), "BINARY" => Some(Self::Binary), @@ -1167,11 +1218,11 @@ pub enum ProofMode { Groth16 = 4, } impl ProofMode { - /// String value of the enum field names used in the `ProtoBuf` definition. + /// String value of the enum field names used in the ProtoBuf definition. /// /// The values are not transformed in any way and thus are considered stable - /// (if the `ProtoBuf` definition does not change) and safe for programmatic use. - #[must_use] pub fn as_str_name(&self) -> &'static str { + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { match self { Self::UnspecifiedProofMode => "UNSPECIFIED_PROOF_MODE", Self::Core => "CORE", @@ -1180,8 +1231,8 @@ impl ProofMode { Self::Groth16 => "GROTH16", } } - /// Creates an enum from field names used in the `ProtoBuf` definition. - #[must_use] pub fn from_str_name(value: &str) -> ::core::option::Option { + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { match value { "UNSPECIFIED_PROOF_MODE" => Some(Self::UnspecifiedProofMode), "CORE" => Some(Self::Core), @@ -1219,11 +1270,11 @@ pub enum FulfillmentStrategy { Auction = 3, } impl FulfillmentStrategy { - /// String value of the enum field names used in the `ProtoBuf` definition. + /// String value of the enum field names used in the ProtoBuf definition. /// /// The values are not transformed in any way and thus are considered stable - /// (if the `ProtoBuf` definition does not change) and safe for programmatic use. - #[must_use] pub fn as_str_name(&self) -> &'static str { + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { match self { Self::UnspecifiedFulfillmentStrategy => "UNSPECIFIED_FULFILLMENT_STRATEGY", Self::Hosted => "HOSTED", @@ -1231,8 +1282,8 @@ impl FulfillmentStrategy { Self::Auction => "AUCTION", } } - /// Creates an enum from field names used in the `ProtoBuf` definition. - #[must_use] pub fn from_str_name(value: &str) -> ::core::option::Option { + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { match value { "UNSPECIFIED_FULFILLMENT_STRATEGY" => Some(Self::UnspecifiedFulfillmentStrategy), "HOSTED" => Some(Self::Hosted), @@ -1269,11 +1320,11 @@ pub enum FulfillmentStatus { Unfulfillable = 4, } impl FulfillmentStatus { - /// String value of the enum field names used in the `ProtoBuf` definition. + /// String value of the enum field names used in the ProtoBuf definition. /// /// The values are not transformed in any way and thus are considered stable - /// (if the `ProtoBuf` definition does not change) and safe for programmatic use. - #[must_use] pub fn as_str_name(&self) -> &'static str { + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { match self { Self::UnspecifiedFulfillmentStatus => "UNSPECIFIED_FULFILLMENT_STATUS", Self::Requested => "REQUESTED", @@ -1282,8 +1333,8 @@ impl FulfillmentStatus { Self::Unfulfillable => "UNFULFILLABLE", } } - /// Creates an enum from field names used in the `ProtoBuf` definition. - #[must_use] pub fn from_str_name(value: &str) -> ::core::option::Option { + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { match value { "UNSPECIFIED_FULFILLMENT_STATUS" => Some(Self::UnspecifiedFulfillmentStatus), "REQUESTED" => Some(Self::Requested), @@ -1319,11 +1370,11 @@ pub enum ExecutionStatus { Unexecutable = 3, } impl ExecutionStatus { - /// String value of the enum field names used in the `ProtoBuf` definition. + /// String value of the enum field names used in the ProtoBuf definition. /// /// The values are not transformed in any way and thus are considered stable - /// (if the `ProtoBuf` definition does not change) and safe for programmatic use. - #[must_use] pub fn as_str_name(&self) -> &'static str { + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { match self { Self::UnspecifiedExecutionStatus => "UNSPECIFIED_EXECUTION_STATUS", Self::Unexecuted => "UNEXECUTED", @@ -1331,8 +1382,8 @@ impl ExecutionStatus { Self::Unexecutable => "UNEXECUTABLE", } } - /// Creates an enum from field names used in the `ProtoBuf` definition. - #[must_use] pub fn from_str_name(value: &str) -> ::core::option::Option { + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { match value { "UNSPECIFIED_EXECUTION_STATUS" => Some(Self::UnspecifiedExecutionStatus), "UNEXECUTED" => Some(Self::Unexecuted), @@ -1373,11 +1424,11 @@ pub enum BalanceOperation { Bid = 6, } impl BalanceOperation { - /// String value of the enum field names used in the `ProtoBuf` definition. + /// String value of the enum field names used in the ProtoBuf definition. /// /// The values are not transformed in any way and thus are considered stable - /// (if the `ProtoBuf` definition does not change) and safe for programmatic use. - #[must_use] pub fn as_str_name(&self) -> &'static str { + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { match self { Self::UnspecifiedBalanceChangeOperation => "UNSPECIFIED_BALANCE_CHANGE_OPERATION", Self::Deposit => "DEPOSIT", @@ -1388,8 +1439,8 @@ impl BalanceOperation { Self::Bid => "BID", } } - /// Creates an enum from field names used in the `ProtoBuf` definition. - #[must_use] pub fn from_str_name(value: &str) -> ::core::option::Option { + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { match value { "UNSPECIFIED_BALANCE_CHANGE_OPERATION" => Some(Self::UnspecifiedBalanceChangeOperation), "DEPOSIT" => Some(Self::Deposit), @@ -1406,7 +1457,7 @@ impl BalanceOperation { pub mod prover_network_client { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] use tonic::codegen::http::Uri; - use tonic::codegen::{Body, Bytes, CompressionEncoding, GrpcMethod, InterceptedService, StdError, http}; + use tonic::codegen::*; #[derive(Debug, Clone)] pub struct ProverNetworkClient { inner: tonic::client::Grpc, @@ -1806,6 +1857,26 @@ pub mod prover_network_client { .insert(GrpcMethod::new("network.ProverNetwork", "RemoveDelegation")); self.inner.unary(req, path, codec).await } + /// Terminate a delegation. Only callable by the delegate of a delegation. + pub async fn terminate_delegation( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result, tonic::Status> + { + self.inner.ready().await.map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = + http::uri::PathAndQuery::from_static("/network.ProverNetwork/TerminateDelegation"); + let mut req = request.into_request(); + req.extensions_mut() + .insert(GrpcMethod::new("network.ProverNetwork", "TerminateDelegation")); + self.inner.unary(req, path, codec).await + } /// Accept a delegation. Only callable by the delegate of a delegation. pub async fn accept_delegation( &mut self, @@ -2181,7 +2252,7 @@ pub mod prover_network_client { /// Generated server implementations. pub mod prover_network_server { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] - use tonic::codegen::{Arc, Body, BoxFuture, CompressionEncoding, Context, EnabledCompressionEncodings, InterceptedService, Poll, StdError, async_trait, empty_body, http}; + use tonic::codegen::*; /// Generated trait containing gRPC methods that should be implemented for use with ProverNetworkServer. #[async_trait] pub trait ProverNetwork: std::marker::Send + std::marker::Sync + 'static { @@ -2277,6 +2348,11 @@ pub mod prover_network_server { &self, request: tonic::Request, ) -> std::result::Result, tonic::Status>; + /// Terminate a delegation. Only callable by the delegate of a delegation. + async fn terminate_delegation( + &self, + request: tonic::Request, + ) -> std::result::Result, tonic::Status>; /// Accept a delegation. Only callable by the delegate of a delegation. async fn accept_delegation( &self, @@ -3123,6 +3199,48 @@ pub mod prover_network_server { }; Box::pin(fut) } + "/network.ProverNetwork/TerminateDelegation" => { + #[allow(non_camel_case_types)] + struct TerminateDelegationSvc(pub Arc); + impl + tonic::server::UnaryService + for TerminateDelegationSvc + { + type Response = super::TerminateDelegationResponse; + type Future = BoxFuture, tonic::Status>; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::terminate_delegation(&inner, request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let method = TerminateDelegationSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } "/network.ProverNetwork/AcceptDelegation" => { #[allow(non_camel_case_types)] struct AcceptDelegationSvc(pub Arc); diff --git a/crates/sdk/src/network/prove.rs b/crates/sdk/src/network/prove.rs index 293c69f204..92057640df 100644 --- a/crates/sdk/src/network/prove.rs +++ b/crates/sdk/src/network/prove.rs @@ -241,7 +241,7 @@ impl<'a> NetworkProveBuilder<'a> { /// the simulation step locally. /// /// The cycle limit ensures that a prover on the network will stop generating a proof once the - /// cycle limit is reached, which prevents DoS attacks. + /// cycle limit is reached, which prevents `DoS` attacks. /// /// # Example /// ```rust,no_run @@ -284,8 +284,11 @@ impl<'a> NetworkProveBuilder<'a> { /// .unwrap(); /// ``` pub async fn request(self) -> Result> { - let Self { prover, mode, pk, stdin, timeout, strategy, skip_simulation, cycle_limit } = self; - prover.request_proof_impl(pk, &stdin, mode, strategy, timeout, skip_simulation, cycle_limit).await + let Self { prover, mode, pk, stdin, timeout, strategy, skip_simulation, cycle_limit } = + self; + prover + .request_proof_impl(pk, &stdin, mode, strategy, timeout, skip_simulation, cycle_limit) + .await } /// Run the prover with the built arguments. @@ -308,7 +311,8 @@ impl<'a> NetworkProveBuilder<'a> { /// .unwrap(); /// ``` pub fn run(self) -> Result { - let Self { prover, mode, pk, stdin, timeout, strategy, mut skip_simulation, cycle_limit } = self; + let Self { prover, mode, pk, stdin, timeout, strategy, mut skip_simulation, cycle_limit } = + self; // Check for deprecated environment variable if let Ok(val) = std::env::var("SKIP_SIMULATION") { @@ -320,7 +324,15 @@ impl<'a> NetworkProveBuilder<'a> { sp1_dump(&pk.elf, &stdin); - block_on(prover.prove_impl(pk, &stdin, mode, strategy, timeout, skip_simulation, cycle_limit)) + block_on(prover.prove_impl( + pk, + &stdin, + mode, + strategy, + timeout, + skip_simulation, + cycle_limit, + )) } /// Run the prover with the built arguments asynchronously. @@ -341,7 +353,8 @@ impl<'a> NetworkProveBuilder<'a> { /// .run_async(); /// ``` pub async fn run_async(self) -> Result { - let Self { prover, mode, pk, stdin, timeout, strategy, mut skip_simulation, cycle_limit } = self; + let Self { prover, mode, pk, stdin, timeout, strategy, mut skip_simulation, cycle_limit } = + self; // Check for deprecated environment variable if let Ok(val) = std::env::var("SKIP_SIMULATION") { diff --git a/crates/sdk/src/network/prover.rs b/crates/sdk/src/network/prover.rs index f6a718686a..ca1f71f98b 100644 --- a/crates/sdk/src/network/prover.rs +++ b/crates/sdk/src/network/prover.rs @@ -5,12 +5,12 @@ use std::time::{Duration, Instant}; -use super::proto::network::GetProofRequestStatusResponse; use super::prove::NetworkProveBuilder; use super::DEFAULT_CYCLE_LIMIT; use crate::cpu::execute::CpuExecuteBuilder; use crate::cpu::CpuProver; -use crate::network::{DEFAULT_PROVER_NETWORK_RPC, DEFAULT_TIMEOUT_SECS}; +use crate::network::proto::network::GetProofRequestStatusResponse; +use crate::network::{Error, DEFAULT_NETWORK_RPC_URL, DEFAULT_TIMEOUT_SECS}; use crate::{ network::client::NetworkClient, network::proto::network::{ExecutionStatus, FulfillmentStatus, FulfillmentStrategy, ProofMode}, @@ -203,7 +203,7 @@ impl NetworkProver { let request_id_hex = "0x".to_string() + &hex::encode(request_id.clone()); log::info!("Created request {} in transaction {}", request_id_hex, tx_hash_hex); - if self.client.rpc_url == DEFAULT_PROVER_NETWORK_RPC { + if self.client.rpc_url == DEFAULT_NETWORK_RPC_URL { log::info!( "View request status at: https://network.succinct.xyz/request/{}", request_id_hex @@ -215,7 +215,7 @@ impl NetworkProver { /// 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(crate) async fn wait_proof( + pub async fn wait_proof( &self, request_id: &[u8], timeout: Option, @@ -227,7 +227,7 @@ impl NetworkProver { // Calculate the remaining timeout. if let Some(timeout) = timeout { if start_time.elapsed() > timeout { - return Err(anyhow::anyhow!("proof request timed out.")); + return Err(Error::RequestTimedOut { request_id: request_id.to_vec() }.into()); } } let remaining_timeout = timeout.map(|t| { @@ -239,17 +239,24 @@ impl NetworkProver { } }); - // Get status with retries. + // Get the status with retries. let (status, maybe_proof) = with_retry( - || async { self.client.get_proof_request_status::

(request_id).await }, + || async { self.client.get_proof_request_status(request_id).await }, remaining_timeout, "getting proof request status", ) .await?; + // Check the deadline. + if status.deadline < Instant::now().elapsed().as_secs() { + return Err(Error::RequestTimedOut { request_id: request_id.to_vec() }.into()); + } + // Check the execution status. - if status.execution_status == ExecutionStatus::Unexecutable as i32 { - return Err(anyhow::anyhow!("proof request is unexecutable")); + if let Ok(ExecutionStatus::Unexecutable) = + ExecutionStatus::try_from(status.execution_status) + { + return Err(Error::RequestUnexecutable { request_id: request_id.to_vec() }.into()); } // Check the fulfillment status. @@ -259,12 +266,14 @@ impl NetworkProver { } Ok(FulfillmentStatus::Assigned) => { if !is_assigned { - log::info!("proof request assigned, proving..."); + log::info!("Proof request assigned, proving..."); is_assigned = true; } } Ok(FulfillmentStatus::Unfulfillable) => { - return Err(anyhow::anyhow!("proof request is unfulfillable")); + return Err( + Error::RequestUnfulfillable { request_id: request_id.to_vec() }.into() + ); } _ => {} } @@ -273,7 +282,7 @@ impl NetworkProver { } } - /// Requests a proof from the prover network. + #[allow(clippy::too_many_arguments)] pub(crate) async fn request_proof_impl( &self, pk: &SP1ProvingKey, @@ -289,7 +298,7 @@ impl NetworkProver { self.request_proof(&vk_hash, stdin, mode.into(), strategy, cycle_limit, timeout).await } - /// Requests a proof from the prover network and waits for it to be generated. + #[allow(clippy::too_many_arguments)] pub(crate) async fn prove_impl( &self, pk: &SP1ProvingKey, @@ -326,9 +335,11 @@ impl NetworkProver { if skip_simulation { Ok(DEFAULT_CYCLE_LIMIT) } else { - let (_, report) = self.prover.inner().execute(elf, stdin, SP1Context::default())?; - let cycles = report.total_instruction_count(); - Ok(cycles) + self.prover + .inner() + .execute(elf, stdin, SP1Context::default()) + .map(|(_, report)| report.total_instruction_count()) + .map_err(|_| Error::SimulationFailed.into()) } } } diff --git a/crates/sdk/src/network/sign_message.rs b/crates/sdk/src/network/sign_message.rs deleted file mode 100644 index 9d12891525..0000000000 --- a/crates/sdk/src/network/sign_message.rs +++ /dev/null @@ -1,97 +0,0 @@ -use alloy_primitives::{Address, Signature}; -use prost::Message; -use thiserror::Error; - -use crate::network::proto::network::{FulfillProofRequest, MessageFormat, RequestProofRequest}; -use crate::network::utils::{format_json_message, JsonFormatError}; - -#[allow(dead_code)] -pub trait SignedMessage { - fn signature(&self) -> Vec; - fn nonce(&self) -> Result; - fn message(&self) -> Result, MessageError>; - fn recover_sender(&self) -> Result<(Address, Vec), RecoverSenderError>; -} - -#[derive(Error, Debug)] -#[allow(dead_code)] -pub enum MessageError { - #[error("Empty message")] - EmptyMessage, - #[error("JSON error: {0}")] - JsonError(String), - #[error("Binary error: {0}")] - BinaryError(String), -} - -#[derive(Error, Debug)] -pub enum RecoverSenderError { - #[error("Failed to deserialize signature: {0}")] - SignatureDeserializationError(String), - #[error("Empty message")] - EmptyMessage, - #[error("Failed to recover address: {0}")] - AddressRecoveryError(String), -} - -macro_rules! impl_signed_message { - ($type:ty) => { - impl SignedMessage for $type { - fn signature(&self) -> Vec { - self.signature.clone() - } - - fn nonce(&self) -> Result { - match &self.body { - Some(body) => Ok(body.nonce as u64), - None => Err(MessageError::EmptyMessage), - } - } - - fn message(&self) -> Result, MessageError> { - let format = MessageFormat::try_from(self.format).unwrap_or(MessageFormat::Binary); - - match &self.body { - Some(body) => match format { - MessageFormat::Json => format_json_message(body).map_err(|e| match e { - JsonFormatError::SerializationError(msg) => { - MessageError::JsonError(msg) - } - }), - MessageFormat::Binary => { - let proto_bytes = body.encode_to_vec(); - Ok(proto_bytes) - } - MessageFormat::UnspecifiedMessageFormat => { - let proto_bytes = body.encode_to_vec(); - Ok(proto_bytes) - } - }, - None => Err(MessageError::EmptyMessage), - } - } - - fn recover_sender(&self) -> Result<(Address, Vec), RecoverSenderError> { - let message = self.message().map_err(|_| RecoverSenderError::EmptyMessage)?; - let sender = recover_sender_raw(self.signature.clone(), message.clone())?; - Ok((sender, message)) - } - } - }; -} - -impl_signed_message!(RequestProofRequest); -impl_signed_message!(FulfillProofRequest); - -#[allow(clippy::needless_pass_by_value)] -pub fn recover_sender_raw( - signature: Vec, - message: Vec, -) -> Result { - let signature = Signature::try_from(signature.as_slice()) - .map_err(|e| RecoverSenderError::SignatureDeserializationError(e.to_string()))?; - - signature - .recover_address_from_msg(message) - .map_err(|e| RecoverSenderError::AddressRecoveryError(e.to_string())) -} diff --git a/crates/sdk/src/network/utils.rs b/crates/sdk/src/network/utils.rs index e1b7d749b5..22ded7c94b 100644 --- a/crates/sdk/src/network/utils.rs +++ b/crates/sdk/src/network/utils.rs @@ -1,11 +1,11 @@ +#![allow(deprecated)] + //! # Network Utils //! //! This module provides utility functions for the network module. use alloy_signer::{Signature, SignerSync}; use prost::Message; -use serde::Serialize; -use thiserror::Error; pub(crate) trait Signable: Message { fn sign(&self, signer: &S) -> Signature; @@ -16,55 +16,3 @@ impl Signable for T { signer.sign_message_sync(&self.encode_to_vec()).unwrap() } } - -#[derive(Error, Debug)] -pub(crate) enum JsonFormatError { - #[error("Serialization error: {0}")] - SerializationError(String), -} - -pub(crate) fn format_json_message(body: &T) -> Result, JsonFormatError> -where - T: Message + Serialize, -{ - match serde_json::to_string(body) { - Ok(json_str) => { - if json_str.starts_with('"') && json_str.ends_with('"') { - let inner = &json_str[1..json_str.len() - 1]; - let unescaped = inner.replace("\\\"", "\""); - Ok(unescaped.into_bytes()) - } else { - Ok(json_str.into_bytes()) - } - } - Err(e) => Err(JsonFormatError::SerializationError(e.to_string())), - } -} - -#[cfg(test)] -mod tests { - use super::*; - use prost::Message as ProstMessage; - use serde::{Deserialize, Serialize}; - - // Test message for JSON formatting. - #[derive(Clone, ProstMessage, Serialize, Deserialize)] - struct TestMessage { - #[prost(string, tag = 1)] - value: String, - } - - #[test] - fn test_format_json_message_simple() { - let msg = TestMessage { value: "hello".to_string() }; - let result = format_json_message(&msg).unwrap(); - assert_eq!(result, b"{\"value\":\"hello\"}"); - } - - #[test] - fn test_format_json_message_with_quotes() { - let msg = TestMessage { value: "hello \"world\"".to_string() }; - let result = format_json_message(&msg).unwrap(); - assert_eq!(result, b"{\"value\":\"hello \\\"world\\\"\"}"); - } -} diff --git a/examples/aggregation/script/src/main.rs b/examples/aggregation/script/src/main.rs index 2b1227d6c4..554e2c6de8 100644 --- a/examples/aggregation/script/src/main.rs +++ b/examples/aggregation/script/src/main.rs @@ -34,17 +34,17 @@ fn main() { let proof_1 = tracing::info_span!("generate fibonacci proof n=10").in_scope(|| { let mut stdin = SP1Stdin::new(); stdin.write(&10); - client.prove(&fibonacci_pk, stdin).compressed().run().expect("proving failed") + client.prove(&fibonacci_pk, &stdin).compressed().run().expect("proving failed") }); let proof_2 = tracing::info_span!("generate fibonacci proof n=20").in_scope(|| { let mut stdin = SP1Stdin::new(); stdin.write(&20); - client.prove(&fibonacci_pk, stdin).compressed().run().expect("proving failed") + client.prove(&fibonacci_pk, &stdin).compressed().run().expect("proving failed") }); let proof_3 = tracing::info_span!("generate fibonacci proof n=30").in_scope(|| { let mut stdin = SP1Stdin::new(); stdin.write(&30); - client.prove(&fibonacci_pk, stdin).compressed().run().expect("proving failed") + client.prove(&fibonacci_pk, &stdin).compressed().run().expect("proving failed") }); // Setup the inputs to the aggregation program. @@ -76,6 +76,6 @@ fn main() { } // Generate the plonk bn254 proof. - client.prove(&aggregation_pk, stdin).plonk().run().expect("proving failed"); + client.prove(&aggregation_pk, &stdin).plonk().run().expect("proving failed"); }); } diff --git a/examples/bls12381/script/src/main.rs b/examples/bls12381/script/src/main.rs index 7e6c02fd40..096c805db1 100644 --- a/examples/bls12381/script/src/main.rs +++ b/examples/bls12381/script/src/main.rs @@ -7,7 +7,7 @@ fn main() { let stdin = SP1Stdin::new(); let client = ProverClient::from_env(); - let (_public_values, report) = client.execute(ELF, stdin).run().expect("failed to prove"); + let (_public_values, report) = client.execute(ELF, &stdin).run().expect("failed to prove"); println!("executed: {}", report); } diff --git a/examples/bn254/script/src/main.rs b/examples/bn254/script/src/main.rs index cd9c6e5057..7aa091e1f1 100644 --- a/examples/bn254/script/src/main.rs +++ b/examples/bn254/script/src/main.rs @@ -7,7 +7,7 @@ fn main() { let stdin = SP1Stdin::new(); let client = ProverClient::from_env(); - let (_public_values, report) = client.execute(ELF, stdin).run().expect("failed to prove"); + let (_public_values, report) = client.execute(ELF, &stdin).run().expect("failed to prove"); println!("executed: {}", report); } diff --git a/examples/chess/script/src/main.rs b/examples/chess/script/src/main.rs index 3a1df33e50..a08496647a 100644 --- a/examples/chess/script/src/main.rs +++ b/examples/chess/script/src/main.rs @@ -15,7 +15,7 @@ fn main() { let client = ProverClient::from_env(); let (pk, vk) = client.setup(ELF); - let mut proof = client.prove(&pk, stdin).run().unwrap(); + let mut proof = client.prove(&pk, &stdin).run().unwrap(); // Read output. let is_valid_move = proof.public_values.read::(); diff --git a/examples/cycle-tracking/script/src/main.rs b/examples/cycle-tracking/script/src/main.rs index 03a76a80f2..ee845c6ced 100644 --- a/examples/cycle-tracking/script/src/main.rs +++ b/examples/cycle-tracking/script/src/main.rs @@ -10,10 +10,11 @@ fn main() { // Execute the normal program. let client = ProverClient::from_env(); - let (_, _) = client.execute(NORMAL_ELF, SP1Stdin::new()).run().expect("proving failed"); + let stdin = SP1Stdin::new(); + let (_, _) = client.execute(NORMAL_ELF, &stdin).run().expect("proving failed"); // Execute the report program. - let (_, report) = client.execute(REPORT_ELF, SP1Stdin::new()).run().expect("proving failed"); + let (_, report) = client.execute(REPORT_ELF, &stdin).run().expect("proving failed"); // Get the "setup" cycle count from the report program. let setup_cycles = report.cycle_tracker.get("setup").unwrap(); diff --git a/examples/fibonacci/script/Cargo.toml b/examples/fibonacci/script/Cargo.toml index 308d3eeede..a7ffb4d7a1 100644 --- a/examples/fibonacci/script/Cargo.toml +++ b/examples/fibonacci/script/Cargo.toml @@ -28,6 +28,10 @@ path = "bin/compressed.rs" name = "execute" path = "bin/execute.rs" +[[bin]] +name = "network" +path = "bin/network.rs" + [[bin]] name = "fibonacci-script" path = "src/main.rs" diff --git a/examples/fibonacci/script/bin/compressed.rs b/examples/fibonacci/script/bin/compressed.rs index 632f9cd15f..c14b23736c 100644 --- a/examples/fibonacci/script/bin/compressed.rs +++ b/examples/fibonacci/script/bin/compressed.rs @@ -15,7 +15,7 @@ fn main() { // Generate the constant-sized proof for the given program and input. let client = ProverClient::from_env(); let (pk, vk) = client.setup(ELF); - let mut proof = client.prove(&pk, stdin).compressed().run().unwrap(); + let mut proof = client.prove(&pk, &stdin).compressed().run().unwrap(); println!("generated proof"); // Read and verify the output. diff --git a/examples/fibonacci/script/bin/execute.rs b/examples/fibonacci/script/bin/execute.rs index 7b92525a71..7ded48ad37 100644 --- a/examples/fibonacci/script/bin/execute.rs +++ b/examples/fibonacci/script/bin/execute.rs @@ -15,7 +15,7 @@ fn main() { // Only execute the program and get a `SP1PublicValues` object. let client = ProverClient::from_env(); - let (mut public_values, execution_report) = client.execute(ELF, stdin).run().unwrap(); + 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. diff --git a/examples/fibonacci/script/bin/groth16_bn254.rs b/examples/fibonacci/script/bin/groth16_bn254.rs index 98e9fa96af..55f421b9c9 100644 --- a/examples/fibonacci/script/bin/groth16_bn254.rs +++ b/examples/fibonacci/script/bin/groth16_bn254.rs @@ -19,7 +19,7 @@ fn main() { println!("vk: {:?}", vk.bytes32()); // Generate the Groth16 proof. - let proof = client.prove(&pk, stdin).groth16().run().unwrap(); + let proof = client.prove(&pk, &stdin).groth16().run().unwrap(); println!("generated proof"); // Get the public values as bytes. diff --git a/examples/fibonacci/script/bin/network.rs b/examples/fibonacci/script/bin/network.rs new file mode 100644 index 0000000000..153a60949a --- /dev/null +++ b/examples/fibonacci/script/bin/network.rs @@ -0,0 +1,77 @@ +use sp1_sdk::network::Error; +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::from_env(); + + // Generate the proof for the given program and input. + let (pk, vk) = client.setup(ELF); + let proof_result = client.prove(&pk, &stdin).compressed().run(); + + // Handle possible prover network errors. + let mut proof = match proof_result { + Ok(proof) => proof, + Err(e) => { + if let Some(network_error) = e.downcast_ref::() { + match network_error { + Error::RequestUnexecutable { request_id: _ } => { + eprintln!("Program is unexecutable: {}", e); + std::process::exit(1); + } + Error::RequestUnfulfillable { request_id: _ } => { + eprintln!("Proof request cannot be fulfilled: {}", e); + std::process::exit(1); + } + _ => { + eprintln!("Unexpected error: {}", e); + std::process::exit(1); + } + } + } else { + eprintln!("Unexpected error: {}", e); + std::process::exit(1); + } + } + }; + + 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/examples/fibonacci/script/bin/plonk_bn254.rs b/examples/fibonacci/script/bin/plonk_bn254.rs index 48f9c51a37..5f7b3be903 100644 --- a/examples/fibonacci/script/bin/plonk_bn254.rs +++ b/examples/fibonacci/script/bin/plonk_bn254.rs @@ -19,7 +19,7 @@ fn main() { println!("vk: {:?}", vk.bytes32()); // Generate the Plonk proof. - let proof = client.prove(&pk, stdin).plonk().run().unwrap(); + let proof = client.prove(&pk, &stdin).plonk().run().unwrap(); println!("generated proof"); // Get the public values as bytes. diff --git a/examples/fibonacci/script/src/main.rs b/examples/fibonacci/script/src/main.rs index 442fce04c5..eb3a16f4da 100644 --- a/examples/fibonacci/script/src/main.rs +++ b/examples/fibonacci/script/src/main.rs @@ -19,12 +19,12 @@ fn main() { let client = ProverClient::from_env(); // Execute the program using the `ProverClient.execute` method, without generating a proof. - let (_, report) = client.execute(ELF, stdin.clone()).run().unwrap(); + let (_, report) = client.execute(ELF, &stdin).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(); + let mut proof = client.prove(&pk, &stdin).run().unwrap(); println!("generated proof"); diff --git a/examples/groth16/script/src/main.rs b/examples/groth16/script/src/main.rs index 2fecb5493a..498a2e65ca 100644 --- a/examples/groth16/script/src/main.rs +++ b/examples/groth16/script/src/main.rs @@ -28,7 +28,7 @@ fn generate_fibonacci_proof() -> (Vec, Vec, String) { // 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(); + let proof = client.prove(&pk, &stdin).groth16().run().unwrap(); (proof.bytes(), proof.public_values.to_vec(), vk.bytes32()) } @@ -49,7 +49,7 @@ fn main() { let client = ProverClient::from_env(); // Execute the program using the `ProverClient.execute` method, without generating a proof. - let (_, report) = client.execute(GROTH16_ELF, stdin.clone()).run().unwrap(); + let (_, report) = client.execute(GROTH16_ELF, &stdin).run().unwrap(); println!("executed groth16 program with {} cycles", report.total_instruction_count()); println!("{}", report); } diff --git a/examples/io/script/src/main.rs b/examples/io/script/src/main.rs index 008c69e09d..fa8812c389 100644 --- a/examples/io/script/src/main.rs +++ b/examples/io/script/src/main.rs @@ -25,7 +25,7 @@ fn main() { // Generate the proof for the given program. let client = ProverClient::from_env(); let (pk, vk) = client.setup(ELF); - let mut proof = client.prove(&pk, stdin).run().unwrap(); + let mut proof = client.prove(&pk, &stdin).run().unwrap(); // Read the output. let r = proof.public_values.read::(); diff --git a/examples/is-prime/script/src/main.rs b/examples/is-prime/script/src/main.rs index c965775743..1d866645e9 100644 --- a/examples/is-prime/script/src/main.rs +++ b/examples/is-prime/script/src/main.rs @@ -16,7 +16,7 @@ fn main() { // Generate and verify the proof let client = ProverClient::from_env(); let (pk, vk) = client.setup(ELF); - let mut proof = client.prove(&pk, stdin).run().unwrap(); + let mut proof = client.prove(&pk, &stdin).run().unwrap(); let is_prime = proof.public_values.read::(); println!("Is 29 prime? {}", is_prime); diff --git a/examples/json/script/src/main.rs b/examples/json/script/src/main.rs index 4c3eaa03a4..6c98a6e48d 100644 --- a/examples/json/script/src/main.rs +++ b/examples/json/script/src/main.rs @@ -36,7 +36,7 @@ fn main() { let client = ProverClient::from_env(); let (pk, vk) = client.setup(JSON_ELF); - let mut proof = client.prove(&pk, stdin).run().expect("proving failed"); + let mut proof = client.prove(&pk, &stdin).run().expect("proving failed"); // Read output. let val = proof.public_values.read::(); diff --git a/examples/patch-testing/script/src/main.rs b/examples/patch-testing/script/src/main.rs index 5e85f2b825..7195bfee41 100644 --- a/examples/patch-testing/script/src/main.rs +++ b/examples/patch-testing/script/src/main.rs @@ -9,7 +9,7 @@ pub fn main() { let stdin = SP1Stdin::new(); let client = ProverClient::from_env(); - let (_, report) = client.execute(PATCH_TEST_ELF, stdin).run().expect("executing failed"); + let (_, report) = client.execute(PATCH_TEST_ELF, &stdin).run().expect("executing failed"); // Confirm there was at least 1 SHA_COMPUTE syscall. assert_ne!(report.syscall_counts[sp1_core_executor::syscalls::SyscallCode::SHA_COMPRESS], 0); diff --git a/examples/regex/script/src/main.rs b/examples/regex/script/src/main.rs index 63c8c6fe66..e5ddb0c07f 100644 --- a/examples/regex/script/src/main.rs +++ b/examples/regex/script/src/main.rs @@ -20,7 +20,7 @@ fn main() { // Generate the proof for the given program and input. let client = ProverClient::from_env(); let (pk, vk) = client.setup(REGEX_IO_ELF); - let mut proof = client.prove(&pk, stdin).run().expect("proving failed"); + let mut proof = client.prove(&pk, &stdin).run().expect("proving failed"); // Read the output. let res = proof.public_values.read::(); diff --git a/examples/rsa/script/src/main.rs b/examples/rsa/script/src/main.rs index 991a458d7d..1b7cae8484 100644 --- a/examples/rsa/script/src/main.rs +++ b/examples/rsa/script/src/main.rs @@ -54,7 +54,7 @@ fn main() { // Generate the proof for the given program and input. let client = ProverClient::from_env(); let (pk, vk) = client.setup(RSA_ELF); - let proof = client.prove(&pk, stdin).run().expect("proving failed"); + let proof = client.prove(&pk, &stdin).run().expect("proving failed"); // Verify proof. client.verify(&proof, &vk).expect("verification failed"); diff --git a/examples/rsp/script/src/main.rs b/examples/rsp/script/src/main.rs index 08ded491e0..f1dabacebf 100644 --- a/examples/rsp/script/src/main.rs +++ b/examples/rsp/script/src/main.rs @@ -42,8 +42,7 @@ fn main() { stdin.write_vec(buffer); // Only execute the program. - let (mut public_values, execution_report) = - client.execute(&pk.elf, stdin.clone()).run().unwrap(); + let (mut public_values, execution_report) = client.execute(&pk.elf, &stdin).run().unwrap(); println!( "Finished executing the block in {} cycles", execution_report.total_instruction_count() @@ -57,7 +56,7 @@ fn main() { // It is strongly recommended you use the network prover given the size of these programs. if args.prove { println!("Starting proof generation."); - let proof = client.prove(&pk, stdin).run().expect("Proving should work."); + let proof = client.prove(&pk, &stdin).run().expect("Proving should work."); println!("Proof generation finished."); client.verify(&proof, &vk).expect("proof verification should succeed"); diff --git a/examples/ssz-withdrawals/script/src/main.rs b/examples/ssz-withdrawals/script/src/main.rs index 9a6450bc7d..0da0683968 100644 --- a/examples/ssz-withdrawals/script/src/main.rs +++ b/examples/ssz-withdrawals/script/src/main.rs @@ -10,7 +10,7 @@ fn main() { let stdin = SP1Stdin::new(); let client = ProverClient::from_env(); let (pk, vk) = client.setup(ELF); - let proof = client.prove(&pk, stdin).run().expect("proving failed"); + let proof = client.prove(&pk, &stdin).run().expect("proving failed"); // Verify proof. client.verify(&proof, &vk).expect("verification failed"); diff --git a/examples/tendermint/script/src/main.rs b/examples/tendermint/script/src/main.rs index 298b8ee75f..43ac8cbef4 100644 --- a/examples/tendermint/script/src/main.rs +++ b/examples/tendermint/script/src/main.rs @@ -44,9 +44,9 @@ pub fn main() { let client = ProverClient::from_env(); let (pk, vk) = client.setup(TENDERMINT_ELF); - client.execute(TENDERMINT_ELF, stdin.clone()).run().expect("proving failed"); + client.execute(TENDERMINT_ELF, &stdin).run().expect("proving failed"); - let proof = client.prove(&pk, stdin).run().expect("proving failed"); + let proof = client.prove(&pk, &stdin).run().expect("proving failed"); // Verify proof. client.verify(&proof, &vk).expect("verification failed"); From 57b107c7db7ef2a31bb32a0054020fdb018623af Mon Sep 17 00:00:00 2001 From: Ratan Kaliani Date: Fri, 20 Dec 2024 17:17:23 -0800 Subject: [PATCH 05/10] feat: use `B256` + `request_async` + bump `alloy` + fix CI (#1886) --- .github/workflows/pr.yml | 4 +- Cargo.lock | 216 +++++--- crates/sdk/Cargo.toml | 5 +- crates/sdk/src/network/client.rs | 24 +- crates/sdk/src/network/mod.rs | 2 + crates/sdk/src/network/prove.rs | 55 +- crates/sdk/src/network/prover.rs | 45 +- examples/Cargo.lock | 622 ++++++++++++----------- examples/elf/riscv32im-succinct-zkvm-elf | Bin 145784 -> 1242656 bytes examples/tendermint/script/Cargo.toml | 2 +- 10 files changed, 567 insertions(+), 408 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 0b63d294a4..0046f13190 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -151,7 +151,7 @@ jobs: check: name: Cargo Check - runs-on: [runs-on, runner=16cpu-linux-x64, disk=medium, "run-id=${{ github.run_id }}"] + runs-on: [runs-on, runner=16cpu-linux-x64, disk=large, "run-id=${{ github.run_id }}"] env: CARGO_NET_GIT_FETCH_WITH_CLI: "true" steps: @@ -248,7 +248,7 @@ jobs: - name: Run cargo prove new run: | - cargo prove new fibonacci --version dev --evm + cargo prove new fibonacci --evm --version dev - name: Build program and run script run: | diff --git a/Cargo.lock b/Cargo.lock index 103eb41a64..034824d0bf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -111,20 +111,35 @@ checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" [[package]] name = "alloy-consensus" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41ed961a48297c732a5d97ee321aa8bb5009ecadbcb077d8bec90cb54e651629" +checksum = "e88e1edea70787c33e11197d3f32ae380f3db19e6e061e539a5bcf8184a6b326" dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", "alloy-serde", + "alloy-trie", "auto_impl", "c-kzg", "derive_more", "serde", ] +[[package]] +name = "alloy-consensus-any" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57b1bb53f40c0273cd1975573cd457b39213e68584e36d1401d25fd0398a1d65" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "serde", +] + [[package]] name = "alloy-eip2930" version = "0.1.0" @@ -138,9 +153,9 @@ dependencies = [ [[package]] name = "alloy-eip7702" -version = "0.3.2" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ffc577390ce50234e02d841214b3dc0bea6aaaae8e04bbf3cb82e9a45da9eb" +checksum = "4c986539255fb839d1533c128e190e557e52ff652c9ef62939e233a81dd93f7e" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -150,9 +165,9 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b69e06cf9c37be824b9d26d6d101114fdde6af0c87de2828b414c05c4b3daa71" +checksum = "5f9fadfe089e9ccc0650473f2d4ef0a28bc015bbca5631d9f0f09e49b557fdb3" dependencies = [ "alloy-eip2930", "alloy-eip7702", @@ -168,9 +183,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.8.12" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84c506bf264110fa7e90d9924f742f40ef53c6572ea56a0b0bd714a567ed389" +checksum = "c357da577dfb56998d01f574d81ad7a1958d248740a7981b205d69d65a7da404" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -180,29 +195,31 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af5979e0d5a7bf9c7eb79749121e8256e59021af611322aee56e77e20776b4b3" +checksum = "e29040b9d5fe2fb70415531882685b64f8efd08dfbd6cc907120650504821105" dependencies = [ "alloy-primitives", "alloy-sol-types", "serde", "serde_json", - "thiserror", + "thiserror 2.0.8", "tracing", ] [[package]] name = "alloy-network" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "204237129086ce5dc17a58025e93739b01b45313841f98fa339eb1d780511e57" +checksum = "510cc00b318db0dfccfdd2d032411cfae64fc144aef9679409e014145d3dacc4" dependencies = [ "alloy-consensus", + "alloy-consensus-any", "alloy-eips", "alloy-json-rpc", "alloy-network-primitives", "alloy-primitives", + "alloy-rpc-types-any", "alloy-rpc-types-eth", "alloy-serde", "alloy-signer", @@ -210,14 +227,16 @@ dependencies = [ "async-trait", "auto_impl", "futures-utils-wasm", - "thiserror", + "serde", + "serde_json", + "thiserror 2.0.8", ] [[package]] name = "alloy-network-primitives" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514f70ee2a953db21631cd817b13a1571474ec77ddc03d47616d5e8203489fde" +checksum = "9081c099e798b8a2bba2145eb82a9a146f01fc7a35e9ab6e7b43305051f97550" dependencies = [ "alloy-consensus", "alloy-eips", @@ -228,9 +247,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.12" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fce5dbd6a4f118eecc4719eaa9c7ffc31c315e6c5ccde3642db927802312425" +checksum = "6259a506ab13e1d658796c31e6e39d2e2ee89243bcc505ddc613b35732e0a430" dependencies = [ "alloy-rlp", "bytes 1.8.0", @@ -276,13 +295,25 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "alloy-rpc-types-any" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed98e1af55a7d856bfa385f30f63d8d56be2513593655c904a8f4a7ec963aa3e" +dependencies = [ + "alloy-consensus-any", + "alloy-rpc-types-eth", + "alloy-serde", +] + [[package]] name = "alloy-rpc-types-eth" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b034779a4850b4b03f5be5ea674a1cf7d746b2da762b34d1860ab45e48ca27" +checksum = "8737d7a6e37ca7bba9c23e9495c6534caec6760eb24abc9d5ffbaaba147818e1" dependencies = [ "alloy-consensus", + "alloy-consensus-any", "alloy-eips", "alloy-network-primitives", "alloy-primitives", @@ -297,9 +328,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028e72eaa9703e4882344983cfe7636ce06d8cce104a78ea62fd19b46659efc4" +checksum = "5851bf8d5ad33014bd0c45153c603303e730acc8a209450a7ae6b4a12c2789e2" dependencies = [ "alloy-primitives", "serde", @@ -308,23 +339,23 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592c185d7100258c041afac51877660c7bf6213447999787197db4842f0e938e" +checksum = "7e10ca565da6500cca015ba35ee424d59798f2e1b85bc0dd8f81dafd401f029a" dependencies = [ "alloy-primitives", "async-trait", "auto_impl", "elliptic-curve", "k256", - "thiserror", + "thiserror 2.0.8", ] [[package]] name = "alloy-signer-local" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6614f02fc1d5b079b2a4a5320018317b506fd0a6d67c1fd5542a71201724986c" +checksum = "47fababf5a745133490cde927d48e50267f97d3d1209b9fc9f1d1d666964d172" dependencies = [ "alloy-consensus", "alloy-network", @@ -333,14 +364,14 @@ dependencies = [ "async-trait", "k256", "rand 0.8.5", - "thiserror", + "thiserror 2.0.8", ] [[package]] name = "alloy-sol-macro" -version = "0.8.12" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9343289b4a7461ed8bab8618504c995c049c082b70c7332efd7b32125633dc05" +checksum = "d9d64f851d95619233f74b310f12bcf16e0cbc27ee3762b6115c14a84809280a" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -352,9 +383,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "0.8.12" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4222d70bec485ceccc5d8fd4f2909edd65b5d5e43d4aca0b5dcee65d519ae98f" +checksum = "6bf7ed1574b699f48bf17caab4e6e54c6d12bc3c006ab33d58b1e227c1c3559f" dependencies = [ "alloy-sol-macro-input", "const-hex", @@ -370,9 +401,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "0.8.12" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e17f2677369571b976e51ea1430eb41c3690d344fef567b840bfc0b01b6f83a" +checksum = "8c02997ccef5f34f9c099277d4145f183b422938ed5322dc57a089fe9b9ad9ee" dependencies = [ "const-hex", "dunce", @@ -385,9 +416,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "0.8.12" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa64d80ae58ffaafdff9d5d84f58d03775f66c84433916dc9a64ed16af5755da" +checksum = "ce13ff37285b0870d0a0746992a4ae48efaf34b766ae4c2640fa15e5305f8e73" dependencies = [ "serde", "winnow 0.6.20", @@ -395,9 +426,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.12" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6520d427d4a8eb7aa803d852d7a52ceb0c519e784c292f64bb339e636918cf27" +checksum = "1174cafd6c6d810711b4e00383037bdb458efc4fe3dbafafa16567e0320c54d8" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -406,6 +437,22 @@ dependencies = [ "serde", ] +[[package]] +name = "alloy-trie" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a5fd8fea044cc9a8c8a50bb6f28e31f0385d820f116c5b98f6f4e55d6e5590b" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "arrayvec", + "derive_more", + "nybbles", + "serde", + "smallvec", + "tracing", +] + [[package]] name = "android-tzdata" version = "0.1.1" @@ -629,6 +676,9 @@ name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +dependencies = [ + "serde", +] [[package]] name = "async-attributes" @@ -1192,7 +1242,7 @@ dependencies = [ "semver 1.0.23", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1362,9 +1412,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" +checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" dependencies = [ "cfg-if", "cpufeatures", @@ -3575,6 +3625,17 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" +[[package]] +name = "nybbles" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95f06be0417d97f81fe4e5c86d7d01b392655a9cac9c19a848aa033e18937b23" +dependencies = [ + "const-hex", + "serde", + "smallvec", +] + [[package]] name = "object" version = "0.36.5" @@ -4022,7 +4083,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" dependencies = [ "memchr", - "thiserror", + "thiserror 1.0.69", "ucd-trie", ] @@ -4368,7 +4429,7 @@ dependencies = [ "rustc-hash 2.0.0", "rustls 0.23.16", "socket2", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", ] @@ -4385,7 +4446,7 @@ dependencies = [ "rustc-hash 2.0.0", "rustls 0.23.16", "slab", - "thiserror", + "thiserror 1.0.69", "tinyvec", "tracing", ] @@ -4546,7 +4607,7 @@ checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.15", "libredox", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -4654,7 +4715,7 @@ dependencies = [ "http 1.1.0", "reqwest", "serde", - "thiserror", + "thiserror 1.0.69", "tower-service", ] @@ -5138,7 +5199,7 @@ checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" dependencies = [ "percent-encoding", "serde", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -5355,6 +5416,9 @@ name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] [[package]] name = "smawk" @@ -5454,7 +5518,7 @@ dependencies = [ "strum", "strum_macros", "test-artifacts", - "thiserror", + "thiserror 1.0.69", "tiny-keccak", "tracing", "typenum", @@ -5502,7 +5566,7 @@ dependencies = [ "strum_macros", "tempfile", "test-artifacts", - "thiserror", + "thiserror 1.0.69", "tiny-keccak", "tracing", "tracing-forest", @@ -5665,7 +5729,7 @@ dependencies = [ "sp1-recursion-gnark-ffi", "sp1-stark", "test-artifacts", - "thiserror", + "thiserror 1.0.69", "tracing", "tracing-appender", "tracing-subscriber", @@ -5762,7 +5826,7 @@ dependencies = [ "sp1-primitives", "sp1-stark", "static_assertions", - "thiserror", + "thiserror 1.0.69", "tracing", "vec_map", "zkhash", @@ -5848,8 +5912,9 @@ dependencies = [ "strum_macros", "tempfile", "test-artifacts", - "thiserror", + "thiserror 1.0.69", "tokio", + "tokio-test", "tonic", "tracing", "twirp-rs", @@ -6124,9 +6189,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.12" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f76fe0a3e1476bdaa0775b9aec5b869ed9520c2b2fedfe9c6df3618f8ea6290b" +checksum = "219389c1ebe89f8333df8bdfb871f6631c552ff399c23cac02480b6088aad8f0" dependencies = [ "paste", "proc-macro2", @@ -6256,7 +6321,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f5383f3e0071702bf93ab5ee99b52d26936be9dedd9413067cbdcddcb6141a" +dependencies = [ + "thiserror-impl 2.0.8", ] [[package]] @@ -6270,6 +6344,17 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "thiserror-impl" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f357fcec90b3caef6623a099691be676d033b40a058ac95d2a6ade6fa0c943" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "thiserror-impl-no-std" version = "2.0.2" @@ -6485,6 +6570,19 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-test" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" +dependencies = [ + "async-stream", + "bytes 1.8.0", + "futures-core", + "tokio", + "tokio-stream", +] + [[package]] name = "tokio-util" version = "0.7.12" @@ -6626,7 +6724,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" dependencies = [ "crossbeam-channel", - "thiserror", + "thiserror 1.0.69", "time 0.3.36", "tracing-subscriber", ] @@ -6660,7 +6758,7 @@ checksum = "ee40835db14ddd1e3ba414292272eddde9dad04d3d4b65509656414d1c42592f" dependencies = [ "ansi_term", "smallvec", - "thiserror", + "thiserror 1.0.69", "tracing", "tracing-subscriber", ] @@ -6724,7 +6822,7 @@ dependencies = [ "log", "rand 0.8.5", "sha1 0.10.6", - "thiserror", + "thiserror 1.0.69", "url", "utf-8", ] @@ -6754,7 +6852,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tower 0.5.1", "url", diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml index 36a186db97..e1156d7ce8 100644 --- a/crates/sdk/Cargo.toml +++ b/crates/sdk/Cargo.toml @@ -49,13 +49,14 @@ sp1-primitives = { workspace = true } itertools = { workspace = true } tonic = { version = "0.12", features = ["tls", "tls-roots"], optional = true } alloy-sol-types = { version = "0.8", optional = true } -alloy-signer = { version = "0.5", optional = true } -alloy-signer-local = { version = "0.5", optional = true } +alloy-signer = { version = "0.8", optional = true } +alloy-signer-local = { version = "0.8", optional = true } alloy-primitives = { version = "0.8", optional = true } backoff = { version = "0.4", features = ["tokio"], optional = true } [dev-dependencies] test-artifacts = { workspace = true } +tokio-test = { version = "0.4"} [features] default = ["cuda", "network"] diff --git a/crates/sdk/src/network/client.rs b/crates/sdk/src/network/client.rs index 6758ffa3d2..ae0b405c63 100644 --- a/crates/sdk/src/network/client.rs +++ b/crates/sdk/src/network/client.rs @@ -6,6 +6,7 @@ use std::result::Result::Ok as StdOk; use std::str::FromStr; use std::time::{Duration, SystemTime, UNIX_EPOCH}; +use alloy_primitives::B256; use alloy_signer::SignerSync; use alloy_signer_local::PrivateKeySigner; use anyhow::{Context, Ok, Result}; @@ -61,24 +62,23 @@ impl NetworkClient { /// /// # Details /// The verifying key hash is used to identify a program. - pub fn get_vk_hash(vk: &SP1VerifyingKey) -> Result> { - let vk_hash_str = vk.bytes32(); - let vk_hash = hex::decode(vk_hash_str.strip_prefix("0x").unwrap_or(&vk_hash_str))?; - Ok(vk_hash) + pub fn get_vk_hash(vk: &SP1VerifyingKey) -> Result { + let vk_hash_str = B256::from_str(&vk.bytes32())?; + Ok(vk_hash_str) } /// Registers a program with the network if it is not already registered. - pub async fn register_program(&self, vk: &SP1VerifyingKey, elf: &[u8]) -> Result> { + pub async fn register_program(&self, vk: &SP1VerifyingKey, elf: &[u8]) -> Result { let vk_hash = Self::get_vk_hash(vk)?; // Try to get the existing program. - if (self.get_program(&vk_hash).await?).is_some() { + if (self.get_program(vk_hash).await?).is_some() { // The program already exists. Ok(vk_hash) } else { // The program doesn't exist, create it. - self.create_program(&vk_hash, vk, elf).await?; - log::info!("Registered program 0x{}", hex::encode(vk_hash.clone())); + self.create_program(vk_hash, vk, elf).await?; + log::info!("Registered program {:?}", vk_hash); Ok(vk_hash) } } @@ -87,7 +87,7 @@ impl NetworkClient { /// /// # Details /// Returns `None` if the program does not exist. - pub async fn get_program(&self, vk_hash: &[u8]) -> Result> { + pub async fn get_program(&self, vk_hash: B256) -> Result> { let mut rpc = self.prover_network_client().await?; match rpc.get_program(GetProgramRequest { vk_hash: vk_hash.to_vec() }).await { StdOk(response) => Ok(Some(response.into_inner())), @@ -99,7 +99,7 @@ impl NetworkClient { /// Creates a new program on the network. pub async fn create_program( &self, - vk_hash: &[u8], + vk_hash: B256, vk: &SP1VerifyingKey, elf: &[u8], ) -> Result { @@ -175,7 +175,7 @@ impl NetworkClient { /// If the status is Fulfilled, the proof is also returned. pub async fn get_proof_request_status( &self, - request_id: &[u8], + request_id: B256, ) -> Result<(GetProofRequestStatusResponse, Option

)> { let mut rpc = self.prover_network_client().await?; let res = rpc @@ -214,7 +214,7 @@ impl NetworkClient { #[allow(clippy::too_many_arguments)] pub async fn request_proof( &self, - vk_hash: &[u8], + vk_hash: B256, stdin: &SP1Stdin, mode: ProofMode, version: &str, diff --git a/crates/sdk/src/network/mod.rs b/crates/sdk/src/network/mod.rs index 6ebb2790dd..bcec52ab1c 100644 --- a/crates/sdk/src/network/mod.rs +++ b/crates/sdk/src/network/mod.rs @@ -18,6 +18,8 @@ pub use error::*; pub use crate::network::client::NetworkClient; pub use crate::network::proto::network::FulfillmentStrategy; +// Re-export for verification key hash + request ID. +pub use alloy_primitives::B256; /// The default RPC URL for the prover network. pub(crate) const DEFAULT_NETWORK_RPC_URL: &str = "https://rpc.production.succinct.tools/"; diff --git a/crates/sdk/src/network/prove.rs b/crates/sdk/src/network/prove.rs index 92057640df..f7f9a0b676 100644 --- a/crates/sdk/src/network/prove.rs +++ b/crates/sdk/src/network/prove.rs @@ -4,6 +4,7 @@ use std::time::Duration; +use alloy_primitives::B256; use anyhow::Result; use sp1_core_machine::io::SP1Stdin; use sp1_prover::SP1ProvingKey; @@ -241,7 +242,7 @@ impl<'a> NetworkProveBuilder<'a> { /// the simulation step locally. /// /// The cycle limit ensures that a prover on the network will stop generating a proof once the - /// cycle limit is reached, which prevents `DoS` attacks. + /// cycle limit is reached, which prevents denial of service attacks. /// /// # Example /// ```rust,no_run @@ -283,7 +284,34 @@ impl<'a> NetworkProveBuilder<'a> { /// .request() /// .unwrap(); /// ``` - pub async fn request(self) -> Result> { + pub fn request(self) -> Result { + block_on(self.request_async()) + } + + /// Request a proof from the prover network asynchronously. + /// + /// # Details + /// This method will request a proof from the prover network asynchronously. If the prover fails + /// to request a proof, the method will return an error. It will not wait for the proof to be + /// generated. + /// + /// # Example + /// ```rust,no_run + /// use sp1_sdk::{ProverClient, SP1Stdin, Prover}; + /// + /// tokio_test::block_on(async { + /// let elf = &[1, 2, 3]; + /// let stdin = SP1Stdin::new(); + /// + /// let client = ProverClient::builder().network().build(); + /// let (pk, vk) = client.setup(elf); + /// let request_id = client.prove(&pk, &stdin) + /// .request_async() + /// .await + /// .unwrap(); + /// }) + /// ``` + pub async fn request_async(self) -> Result { let Self { prover, mode, pk, stdin, timeout, strategy, skip_simulation, cycle_limit } = self; prover @@ -311,28 +339,7 @@ impl<'a> NetworkProveBuilder<'a> { /// .unwrap(); /// ``` pub fn run(self) -> Result { - let Self { prover, mode, pk, stdin, timeout, strategy, mut skip_simulation, cycle_limit } = - self; - - // Check for deprecated environment variable - if let Ok(val) = std::env::var("SKIP_SIMULATION") { - eprintln!( - "Warning: SKIP_SIMULATION environment variable is deprecated. Please use .skip_simulation() instead." - ); - skip_simulation = matches!(val.to_lowercase().as_str(), "true" | "1"); - } - - sp1_dump(&pk.elf, &stdin); - - block_on(prover.prove_impl( - pk, - &stdin, - mode, - strategy, - timeout, - skip_simulation, - cycle_limit, - )) + block_on(self.run_async()) } /// Run the prover with the built arguments asynchronously. diff --git a/crates/sdk/src/network/prover.rs b/crates/sdk/src/network/prover.rs index ca1f71f98b..2c97ef45b8 100644 --- a/crates/sdk/src/network/prover.rs +++ b/crates/sdk/src/network/prover.rs @@ -16,6 +16,7 @@ use crate::{ network::proto::network::{ExecutionStatus, FulfillmentStatus, FulfillmentStrategy, ProofMode}, Prover, SP1ProofMode, SP1ProofWithPublicValues, SP1ProvingKey, SP1VerifyingKey, }; +use alloy_primitives::B256; use anyhow::Result; use backoff::{future::retry, Error as BackoffError, ExponentialBackoff}; use serde::de::DeserializeOwned; @@ -132,7 +133,7 @@ impl NetworkProver { /// /// let vk_hash = client.register_program(&vk, elf); /// ``` - pub async fn register_program(&self, vk: &SP1VerifyingKey, elf: &[u8]) -> Result> { + pub async fn register_program(&self, vk: &SP1VerifyingKey, elf: &[u8]) -> Result { self.client.register_program(vk, elf).await } @@ -143,29 +144,38 @@ impl NetworkProver { /// /// # Example /// ```rust,no_run - /// use sp1_sdk::{ProverClient} - /// - /// let request_id = vec![1u8; 32]; - /// let client = ProverClient::builder().network().build(); - /// let (status, maybe_proof) = client.get_proof_status(&request_id).await?; + /// use sp1_sdk::{ProverClient, network::B256}; + /// + /// tokio_test::block_on(async { + /// let request_id = B256::from_slice(&vec![1u8; 32]); + /// let client = ProverClient::builder().network().build(); + /// let (status, maybe_proof) = client.get_proof_status(request_id).await.unwrap(); + /// }) /// ``` pub async fn get_proof_status( &self, - request_id: &[u8], + request_id: B256, ) -> Result<(GetProofRequestStatusResponse, Option)> { self.client.get_proof_request_status(request_id).await } /// Requests a proof from the prover network, returning the request ID. + /// + /// # Details + /// * `vk_hash`: The hash of the verifying key to use for the proof. + /// * `stdin`: The input to use for the proof. + /// * `mode`: The proof mode to use for the proof. + /// * `strategy`: The fulfillment strategy to use for the proof. + /// * `cycle_limit`: The cycle limit to use for the proof. pub(crate) async fn request_proof( &self, - vk_hash: &[u8], + vk_hash: B256, stdin: &SP1Stdin, mode: ProofMode, strategy: FulfillmentStrategy, cycle_limit: u64, timeout: Option, - ) -> Result> { + ) -> Result { // Get the timeout. let timeout_secs = timeout.map_or(DEFAULT_TIMEOUT_SECS, |dur| dur.as_secs()); @@ -198,15 +208,14 @@ impl NetworkProver { .await?; // Log the request ID and transaction hash. - let tx_hash_hex = "0x".to_string() + &hex::encode(response.tx_hash); - let request_id = response.body.unwrap().request_id; - let request_id_hex = "0x".to_string() + &hex::encode(request_id.clone()); - log::info!("Created request {} in transaction {}", request_id_hex, tx_hash_hex); + let tx_hash = B256::from_slice(&response.tx_hash); + let request_id = B256::from_slice(&response.body.unwrap().request_id); + log::info!("Created request {} in transaction {:?}", request_id, tx_hash); if self.client.rpc_url == DEFAULT_NETWORK_RPC_URL { log::info!( "View request status at: https://network.succinct.xyz/request/{}", - request_id_hex + request_id ); } @@ -217,7 +226,7 @@ impl NetworkProver { /// function will return an error if the proof is not generated within the timeout. pub async fn wait_proof( &self, - request_id: &[u8], + request_id: B256, timeout: Option, ) -> Result

{ let mut is_assigned = false; @@ -292,10 +301,10 @@ impl NetworkProver { timeout: Option, skip_simulation: bool, cycle_limit: Option, - ) -> Result> { + ) -> Result { let vk_hash = self.register_program(&pk.vk, &pk.elf).await?; let cycle_limit = self.get_cycle_limit(cycle_limit, &pk.elf, stdin, skip_simulation)?; - self.request_proof(&vk_hash, stdin, mode.into(), strategy, cycle_limit, timeout).await + self.request_proof(vk_hash, stdin, mode.into(), strategy, cycle_limit, timeout).await } #[allow(clippy::too_many_arguments)] @@ -312,7 +321,7 @@ impl NetworkProver { let request_id = self .request_proof_impl(pk, stdin, mode, strategy, timeout, skip_simulation, cycle_limit) .await?; - self.wait_proof(&request_id, timeout).await + self.wait_proof(request_id, timeout).await } /// The cycle limit is determined according to the following priority: diff --git a/examples/Cargo.lock b/examples/Cargo.lock index 7e8cbf164b..2c51170f21 100644 --- a/examples/Cargo.lock +++ b/examples/Cargo.lock @@ -68,17 +68,17 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy-chains" -version = "0.1.47" +version = "0.1.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18c5c520273946ecf715c0010b4e3503d7eba9893cd9ce6b7fff5654c4a3c470" +checksum = "830045a4421ee38d3ab570d36d4d2b5152c066e72797139224da8de5d5981fd0" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "num_enum 0.7.3", "serde", @@ -92,7 +92,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "629b62e38d471cc15fea534eb7283d2f8a4e8bdb1811bcc5d66dda6cfce6fae1" dependencies = [ "alloy-eips 0.3.6", - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "alloy-serde 0.3.6", "c-kzg", @@ -101,27 +101,42 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41ed961a48297c732a5d97ee321aa8bb5009ecadbcb077d8bec90cb54e651629" +checksum = "e88e1edea70787c33e11197d3f32ae380f3db19e6e061e539a5bcf8184a6b326" dependencies = [ - "alloy-eips 0.5.4", - "alloy-primitives 0.8.14", + "alloy-eips 0.8.3", + "alloy-primitives 0.8.15", "alloy-rlp", - "alloy-serde 0.5.4", + "alloy-serde 0.8.3", + "alloy-trie 0.7.6", "auto_impl", "c-kzg", "derive_more 1.0.0", "serde", ] +[[package]] +name = "alloy-consensus-any" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57b1bb53f40c0273cd1975573cd457b39213e68584e36d1401d25fd0398a1d65" +dependencies = [ + "alloy-consensus 0.8.3", + "alloy-eips 0.8.3", + "alloy-primitives 0.8.15", + "alloy-rlp", + "alloy-serde 0.8.3", + "serde", +] + [[package]] name = "alloy-eip2930" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0069cf0642457f87a01a014f6dc29d5d893cd4fd8fddf0c3cdfad1bb3ebafc41" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "serde", ] @@ -132,7 +147,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea59dc42102bc9a1905dc57901edc6dd48b9f38115df86c7d252acba70d71d04" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "k256", "serde", @@ -140,11 +155,11 @@ dependencies = [ [[package]] name = "alloy-eip7702" -version = "0.3.2" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ffc577390ce50234e02d841214b3dc0bea6aaaae8e04bbf3cb82e9a45da9eb" +checksum = "4c986539255fb839d1533c128e190e557e52ff652c9ef62939e233a81dd93f7e" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "derive_more 1.0.0", "serde", @@ -158,7 +173,7 @@ checksum = "f923dd5fca5f67a43d81ed3ebad0880bd41f6dd0ada930030353ac356c54cd0f" dependencies = [ "alloy-eip2930", "alloy-eip7702 0.1.1", - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "alloy-serde 0.3.6", "c-kzg", @@ -170,15 +185,15 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b69e06cf9c37be824b9d26d6d101114fdde6af0c87de2828b414c05c4b3daa71" +checksum = "5f9fadfe089e9ccc0650473f2d4ef0a28bc015bbca5631d9f0f09e49b557fdb3" dependencies = [ "alloy-eip2930", - "alloy-eip7702 0.3.2", - "alloy-primitives 0.8.14", + "alloy-eip7702 0.4.2", + "alloy-primitives 0.8.15", "alloy-rlp", - "alloy-serde 0.5.4", + "alloy-serde 0.8.3", "c-kzg", "derive_more 1.0.0", "once_cell", @@ -192,18 +207,18 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a7a18afb0b318616b6b2b0e2e7ac5529d32a966c673b48091c9919e284e6aca" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-serde 0.3.6", "serde", ] [[package]] name = "alloy-json-abi" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac4b22b3e51cac09fd2adfcc73b55f447b4df669f983c13f7894ec82b607c63f" +checksum = "c357da577dfb56998d01f574d81ad7a1958d248740a7981b205d69d65a7da404" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-sol-type-parser", "serde", "serde_json", @@ -211,37 +226,41 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af5979e0d5a7bf9c7eb79749121e8256e59021af611322aee56e77e20776b4b3" +checksum = "e29040b9d5fe2fb70415531882685b64f8efd08dfbd6cc907120650504821105" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-sol-types", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror 2.0.8", "tracing", ] [[package]] name = "alloy-network" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "204237129086ce5dc17a58025e93739b01b45313841f98fa339eb1d780511e57" +checksum = "510cc00b318db0dfccfdd2d032411cfae64fc144aef9679409e014145d3dacc4" dependencies = [ - "alloy-consensus 0.5.4", - "alloy-eips 0.5.4", + "alloy-consensus 0.8.3", + "alloy-consensus-any", + "alloy-eips 0.8.3", "alloy-json-rpc", - "alloy-network-primitives 0.5.4", - "alloy-primitives 0.8.14", - "alloy-rpc-types-eth 0.5.4", - "alloy-serde 0.5.4", + "alloy-network-primitives 0.8.3", + "alloy-primitives 0.8.15", + "alloy-rpc-types-any", + "alloy-rpc-types-eth 0.8.3", + "alloy-serde 0.8.3", "alloy-signer", "alloy-sol-types", "async-trait", "auto_impl", "futures-utils-wasm", - "thiserror 1.0.69", + "serde", + "serde_json", + "thiserror 2.0.8", ] [[package]] @@ -251,21 +270,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94ad40869867ed2d9cd3842b1e800889e5b49e6b92da346e93862b4a741bedf3" dependencies = [ "alloy-eips 0.3.6", - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-serde 0.3.6", "serde", ] [[package]] name = "alloy-network-primitives" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514f70ee2a953db21631cd817b13a1571474ec77ddc03d47616d5e8203489fde" +checksum = "9081c099e798b8a2bba2145eb82a9a146f01fc7a35e9ab6e7b43305051f97550" dependencies = [ - "alloy-consensus 0.5.4", - "alloy-eips 0.5.4", - "alloy-primitives 0.8.14", - "alloy-serde 0.5.4", + "alloy-consensus 0.8.3", + "alloy-eips 0.8.3", + "alloy-primitives 0.8.15", + "alloy-serde 0.8.3", "serde", ] @@ -293,9 +312,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9db948902dfbae96a73c2fbf1f7abec62af034ab883e4c777c3fd29702bd6e2c" +checksum = "6259a506ab13e1d658796c31e6e39d2e2ee89243bcc505ddc613b35732e0a430" dependencies = [ "alloy-rlp", "bytes", @@ -306,7 +325,7 @@ dependencies = [ "getrandom", "hashbrown 0.15.2", "hex-literal", - "indexmap 2.6.0", + "indexmap 2.7.0", "itoa", "k256", "keccak-asm", @@ -314,7 +333,7 @@ dependencies = [ "proptest", "rand 0.8.5", "ruint", - "rustc-hash 2.0.0", + "rustc-hash 2.1.0", "serde", "sha3", "tiny-keccak", @@ -322,9 +341,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0822426598f95e45dd1ea32a738dac057529a709ee645fcc516ffa4cbde08f" +checksum = "f542548a609dca89fcd72b3b9f355928cf844d4363c5eed9c5273a3dd225e097" dependencies = [ "alloy-rlp-derive", "arrayvec 0.7.6", @@ -333,9 +352,9 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b09cae092c27b6f1bde952653a22708691802e57bfef4a2973b80bea21efd3f" +checksum = "5a833d97bf8a5f0f878daf2c8451fff7de7f9de38baa5a45d936ec718d81255a" dependencies = [ "proc-macro2", "quote", @@ -353,6 +372,17 @@ dependencies = [ "serde", ] +[[package]] +name = "alloy-rpc-types-any" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed98e1af55a7d856bfa385f30f63d8d56be2513593655c904a8f4a7ec963aa3e" +dependencies = [ + "alloy-consensus-any", + "alloy-rpc-types-eth 0.8.3", + "alloy-serde 0.8.3", +] + [[package]] name = "alloy-rpc-types-eth" version = "0.3.6" @@ -362,7 +392,7 @@ dependencies = [ "alloy-consensus 0.3.6", "alloy-eips 0.3.6", "alloy-network-primitives 0.3.6", - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "alloy-serde 0.3.6", "alloy-sol-types", @@ -376,16 +406,17 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b034779a4850b4b03f5be5ea674a1cf7d746b2da762b34d1860ab45e48ca27" +checksum = "8737d7a6e37ca7bba9c23e9495c6534caec6760eb24abc9d5ffbaaba147818e1" dependencies = [ - "alloy-consensus 0.5.4", - "alloy-eips 0.5.4", - "alloy-network-primitives 0.5.4", - "alloy-primitives 0.8.14", + "alloy-consensus 0.8.3", + "alloy-consensus-any", + "alloy-eips 0.8.3", + "alloy-network-primitives 0.8.3", + "alloy-primitives 0.8.15", "alloy-rlp", - "alloy-serde 0.5.4", + "alloy-serde 0.8.3", "alloy-sol-types", "derive_more 1.0.0", "itertools 0.13.0", @@ -399,57 +430,57 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "731f75ec5d383107fd745d781619bd9cedf145836c51ecb991623d41278e71fa" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "serde", "serde_json", ] [[package]] name = "alloy-serde" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028e72eaa9703e4882344983cfe7636ce06d8cce104a78ea62fd19b46659efc4" +checksum = "5851bf8d5ad33014bd0c45153c603303e730acc8a209450a7ae6b4a12c2789e2" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "serde", "serde_json", ] [[package]] name = "alloy-signer" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592c185d7100258c041afac51877660c7bf6213447999787197db4842f0e938e" +checksum = "7e10ca565da6500cca015ba35ee424d59798f2e1b85bc0dd8f81dafd401f029a" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "async-trait", "auto_impl", "elliptic-curve", "k256", - "thiserror 1.0.69", + "thiserror 2.0.8", ] [[package]] name = "alloy-signer-local" -version = "0.5.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6614f02fc1d5b079b2a4a5320018317b506fd0a6d67c1fd5542a71201724986c" +checksum = "47fababf5a745133490cde927d48e50267f97d3d1209b9fc9f1d1d666964d172" dependencies = [ - "alloy-consensus 0.5.4", + "alloy-consensus 0.8.3", "alloy-network", - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-signer", "async-trait", "k256", "rand 0.8.5", - "thiserror 1.0.69", + "thiserror 2.0.8", ] [[package]] name = "alloy-sol-macro" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bfd7853b65a2b4f49629ec975fee274faf6dff15ab8894c620943398ef283c0" +checksum = "d9d64f851d95619233f74b310f12bcf16e0cbc27ee3762b6115c14a84809280a" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -461,14 +492,14 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82ec42f342d9a9261699f8078e57a7a4fda8aaa73c1a212ed3987080e6a9cd13" +checksum = "6bf7ed1574b699f48bf17caab4e6e54c6d12bc3c006ab33d58b1e227c1c3559f" dependencies = [ "alloy-sol-macro-input", "const-hex", "heck", - "indexmap 2.6.0", + "indexmap 2.7.0", "proc-macro-error2", "proc-macro2", "quote", @@ -479,9 +510,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2c50e6a62ee2b4f7ab3c6d0366e5770a21cad426e109c2f40335a1b3aff3df" +checksum = "8c02997ccef5f34f9c099277d4145f183b422938ed5322dc57a089fe9b9ad9ee" dependencies = [ "const-hex", "dunce", @@ -494,9 +525,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac17c6e89a50fb4a758012e4b409d9a0ba575228e69b539fe37d7a1bd507ca4a" +checksum = "ce13ff37285b0870d0a0746992a4ae48efaf34b766ae4c2640fa15e5305f8e73" dependencies = [ "serde", "winnow 0.6.20", @@ -504,12 +535,12 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9dc0fffe397aa17628160e16b89f704098bf3c9d74d5d369ebc239575936de5" +checksum = "1174cafd6c6d810711b4e00383037bdb458efc4fe3dbafafa16567e0320c54d8" dependencies = [ "alloy-json-abi", - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-sol-macro", "const-hex", "serde", @@ -521,7 +552,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a46c9c4fdccda7982e7928904bd85fe235a0404ee3d7e197fff13d61eac8b4f" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "derive_more 1.0.0", "hashbrown 0.14.5", @@ -531,6 +562,22 @@ dependencies = [ "tracing", ] +[[package]] +name = "alloy-trie" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a5fd8fea044cc9a8c8a50bb6f28e31f0385d820f116c5b98f6f4e55d6e5590b" +dependencies = [ + "alloy-primitives 0.8.15", + "alloy-rlp", + "arrayvec 0.7.6", + "derive_more 1.0.0", + "nybbles", + "serde", + "smallvec", + "tracing", +] + [[package]] name = "android-tzdata" version = "0.1.1" @@ -606,9 +653,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" +checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" [[package]] name = "ark-ff" @@ -751,6 +798,9 @@ name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +dependencies = [ + "serde", +] [[package]] name = "async-stream" @@ -844,9 +894,9 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", - "tower 0.5.1", + "tower 0.5.2", "tower-layer", "tower-service", "tracing", @@ -867,7 +917,7 @@ dependencies = [ "mime", "pin-project-lite", "rustversion", - "sync_wrapper 1.0.2", + "sync_wrapper", "tower-layer", "tower-service", "tracing", @@ -958,18 +1008,18 @@ dependencies = [ [[package]] name = "bit-set" -version = "0.5.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" -version = "0.6.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" @@ -1120,18 +1170,18 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" -version = "1.20.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" +checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", @@ -1194,7 +1244,7 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", - "semver 1.0.23", + "semver 1.0.24", "serde", "serde_json", "thiserror 1.0.69", @@ -1202,9 +1252,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.2" +version = "1.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc" +checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e" dependencies = [ "jobserver", "libc", @@ -1262,9 +1312,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -1286,9 +1336,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.21" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" dependencies = [ "clap_builder", "clap_derive", @@ -1296,9 +1346,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.21" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" dependencies = [ "anstream", "anstyle", @@ -1320,9 +1370,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "colorchoice" @@ -1332,15 +1382,15 @@ checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "console" -version = "0.15.8" +version = "0.15.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" dependencies = [ "encode_unicode", - "lazy_static", "libc", - "unicode-width 0.1.14", - "windows-sys 0.52.0", + "once_cell", + "unicode-width", + "windows-sys 0.59.0", ] [[package]] @@ -1440,9 +1490,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -1459,9 +1509,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" @@ -1848,15 +1898,18 @@ checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +version = "0.16.8" +source = "git+https://github.com/sp1-patches/signatures?branch=umadayal/secp256r1#49b6288468aff7f88f0be8cfd3719c7c20b2ba47" dependencies = [ + "anyhow", + "cfg-if", "der 0.7.9", "digest 0.10.7", "elliptic-curve", + "hex-literal", "rfc6979", "signature", + "sp1-lib 3.0.0", "spki 0.7.3", ] @@ -1947,9 +2000,9 @@ dependencies = [ [[package]] name = "encode_unicode" -version = "0.3.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "enr" @@ -2049,9 +2102,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fastrlp" @@ -2155,9 +2208,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" [[package]] name = "form_urlencoded" @@ -2385,7 +2438,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.6.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -2488,9 +2541,9 @@ dependencies = [ [[package]] name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -2534,9 +2587,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", @@ -2555,9 +2608,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.3" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http", @@ -2810,9 +2863,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -2828,7 +2881,7 @@ dependencies = [ "console", "number_prefix", "portable-atomic", - "unicode-width 0.2.0", + "unicode-width", "web-time", ] @@ -2929,10 +2982,11 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.73" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb15147158e79fd8b8afd0252522769c4f48725460b37338544d8379d94fc8f9" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -2983,7 +3037,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ "cfg-if", - "ecdsa 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)", + "ecdsa 0.16.8", "elliptic-curve", "once_cell", "sha2 0.10.8", @@ -3033,9 +3087,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.167" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libgit2-sys" @@ -3147,9 +3201,9 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memuse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2145869435ace5ea6ea3d35f59be559317ec9a0d04e1812d5f185a87b6d36f1a" +checksum = "3d97bbf43eb4f088f8ca469930cde17fa036207c9a5e02ccc5107c4e8b17c964" [[package]] name = "mime" @@ -3165,9 +3219,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ "adler2", ] @@ -3493,7 +3547,7 @@ checksum = "21aad1fbf80d2bcd7406880efc7ba109365f44bbb72896758ddcbfa46bf1592c" dependencies = [ "alloy-consensus 0.3.6", "alloy-eips 0.3.6", - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "alloy-serde 0.3.6", "derive_more 1.0.0", @@ -3509,7 +3563,7 @@ checksum = "e281fbfc2198b7c0c16457d6524f83d192662bc9f3df70f24c3038d4521616df" dependencies = [ "alloy-eips 0.3.6", "alloy-network-primitives 0.3.6", - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rpc-types-eth 0.3.6", "alloy-serde 0.3.6", "cfg-if", @@ -3549,7 +3603,7 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" dependencies = [ - "ecdsa 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)", + "ecdsa 0.16.8", "elliptic-curve", "primeorder", "sha2 0.10.8", @@ -3805,29 +3859,28 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.7.0" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be4817d39f3272f69c59fe05d0535ae6456c2dc2fa1ba02910296c7e0a5c590" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ "arrayvec 0.7.6", "bitvec", "byte-slice-cast", "impl-trait-for-tuples", "parity-scale-codec-derive", - "rustversion", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "3.7.0" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8781a75c6205af67215f382092b6e0a4ff3734798523e69073d4bcd294ec767b" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.90", + "syn 1.0.109", ] [[package]] @@ -3893,7 +3946,7 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" name = "patch-testing-program" version = "1.1.0" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "curve25519-dalek", "curve25519-dalek-ng 4.1.1 (git+https://github.com/sp1-patches/curve25519-dalek-ng?tag=curve25519_dalek_ng-v4.1.1-patch-v1)", "ed25519-consensus", @@ -3943,12 +3996,12 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" +checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ "memchr", - "thiserror 1.0.69", + "thiserror 2.0.8", "ucd-trie", ] @@ -4136,9 +4189,9 @@ dependencies = [ [[package]] name = "proptest" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" dependencies = [ "bit-set", "bit-vec", @@ -4166,12 +4219,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" +checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec" dependencies = [ "bytes", - "prost-derive 0.13.3", + "prost-derive 0.13.4", ] [[package]] @@ -4189,9 +4242,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" +checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3" dependencies = [ "anyhow", "itertools 0.13.0", @@ -4225,10 +4278,10 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.0.0", + "rustc-hash 2.1.0", "rustls", "socket2", - "thiserror 2.0.3", + "thiserror 2.0.8", "tokio", "tracing", ] @@ -4243,11 +4296,11 @@ dependencies = [ "getrandom", "rand 0.8.5", "ring", - "rustc-hash 2.0.0", + "rustc-hash 2.1.0", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.3", + "thiserror 2.0.8", "tinyvec", "tracing", "web-time", @@ -4255,9 +4308,9 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.7" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" dependencies = [ "cfg_aliases", "libc", @@ -4399,9 +4452,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ "bitflags", ] @@ -4507,7 +4560,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", "tokio-rustls", "tokio-util", @@ -4556,8 +4609,8 @@ dependencies = [ "alloy-chains", "alloy-eips 0.3.6", "alloy-genesis", - "alloy-primitives 0.8.14", - "alloy-trie", + "alloy-primitives 0.8.15", + "alloy-trie 0.5.3", "auto_impl", "derive_more 1.0.0", "once_cell", @@ -4578,8 +4631,8 @@ dependencies = [ "alloy-consensus 0.3.6", "alloy-eips 0.3.6", "alloy-genesis", - "alloy-primitives 0.8.14", - "alloy-trie", + "alloy-primitives 0.8.15", + "alloy-trie 0.5.3", "bytes", "modular-bitfield", "reth-codecs-derive", @@ -4660,13 +4713,13 @@ version = "1.0.6" source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374182a43a3602aaa953d37aa9217b" dependencies = [ "alloy-chains", - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "auto_impl", "crc", "dyn-clone", "once_cell", - "rustc-hash 2.0.0", + "rustc-hash 2.1.0", "serde", "thiserror-no-std", ] @@ -4733,7 +4786,7 @@ version = "1.0.6" source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374182a43a3602aaa953d37aa9217b" dependencies = [ "alloy-eips 0.3.6", - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "derive_more 1.0.0", "nybbles", @@ -4770,7 +4823,7 @@ name = "reth-network-peers" version = "1.0.6" source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374182a43a3602aaa953d37aa9217b" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "enr", "serde_with", @@ -4784,7 +4837,7 @@ version = "1.0.6" source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374182a43a3602aaa953d37aa9217b" dependencies = [ "alloy-chains", - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "derive_more 1.0.0", "once_cell", "reth-chainspec", @@ -4813,7 +4866,7 @@ dependencies = [ "alloy-consensus 0.3.6", "alloy-eips 0.3.6", "alloy-genesis", - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "alloy-rpc-types", "alloy-serde 0.3.6", @@ -4842,7 +4895,7 @@ dependencies = [ "alloy-consensus 0.3.6", "alloy-eips 0.3.6", "alloy-genesis", - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "alloy-rpc-types-eth 0.3.6", "byteorder", @@ -4860,7 +4913,7 @@ name = "reth-prune-types" version = "1.0.6" source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374182a43a3602aaa953d37aa9217b" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "bytes", "derive_more 1.0.0", "modular-bitfield", @@ -4889,7 +4942,7 @@ name = "reth-stages-types" version = "1.0.6" source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374182a43a3602aaa953d37aa9217b" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "bytes", "modular-bitfield", "reth-codecs", @@ -4902,7 +4955,7 @@ name = "reth-static-file-types" version = "1.0.6" source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374182a43a3602aaa953d37aa9217b" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "derive_more 1.0.0", "serde", "strum", @@ -4961,9 +5014,9 @@ source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374 dependencies = [ "alloy-consensus 0.3.6", "alloy-genesis", - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", - "alloy-trie", + "alloy-trie 0.5.3", "bytes", "derive_more 1.0.0", "itertools 0.13.0", @@ -5026,7 +5079,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7a6bff9dbde3370a5ac9555104117f7e6039b3cc76e8d5d9d01899088beca2a" dependencies = [ "alloy-eips 0.3.6", - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "auto_impl", "bitflags", "bitvec", @@ -5043,8 +5096,7 @@ dependencies = [ [[package]] name = "rfc6979" version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +source = "git+https://github.com/sp1-patches/signatures?branch=umadayal/secp256r1#49b6288468aff7f88f0be8cfd3719c7c20b2ba47" dependencies = [ "hmac", "subtle", @@ -5086,9 +5138,9 @@ dependencies = [ [[package]] name = "roaring" -version = "0.10.7" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81dc953b2244ddd5e7860cb0bb2a790494b898ef321d4aff8e260efab60cc88" +checksum = "41589aba99537475bf697f2118357cad1c31590c5a1b9f6d9fc4ad6d07503661" dependencies = [ "bytemuck", "byteorder", @@ -5168,7 +5220,7 @@ name = "rsp-client-executor" version = "0.1.0" source = "git+https://github.com/succinctlabs/rsp/?rev=3647076#3647076da6580e30384dd911a3fc50d4bcdb5bc1" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "eyre", "futures", @@ -5201,7 +5253,7 @@ name = "rsp-mpt" version = "0.1.0" source = "git+https://github.com/succinctlabs/rsp/?rev=3647076#3647076da6580e30384dd911a3fc50d4bcdb5bc1" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-rlp", "alloy-rpc-types", "anyhow", @@ -5251,7 +5303,7 @@ dependencies = [ name = "rsp-script" version = "0.1.0" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "bincode", "clap", "rsp-client-executor", @@ -5315,9 +5367,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" dependencies = [ "rand 0.8.5", ] @@ -5343,27 +5395,27 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.23", + "semver 1.0.24", ] [[package]] name = "rustix" -version = "0.38.41" +version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.23.19" +version = "0.23.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1" +checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" dependencies = [ "log", "once_cell", @@ -5397,9 +5449,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" dependencies = [ "web-time", ] @@ -5465,9 +5517,9 @@ dependencies = [ [[package]] name = "scc" -version = "2.2.5" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66b202022bb57c049555430e11fc22fea12909276a80a4c3d368da36ac1d88ed" +checksum = "94b13f8ea6177672c49d12ed964cca44836f59621981b04a3e26b87e675181de" dependencies = [ "sdd", ] @@ -5489,9 +5541,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sdd" -version = "3.0.4" +version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49c1eeaf4b6a87c7479688c6d52b9f1153cedd3c489300564f932b065c6eab95" +checksum = "478f121bb72bbf63c52c93011ea1791dca40140dfe13f8336c4c5ac952c33aa9" [[package]] name = "sec1" @@ -5513,7 +5565,7 @@ version = "0.29.0" source = "git+https://github.com/sp1-patches/rust-secp256k1?tag=secp256k1-v0.29.0-patch-v1#c78195abe3c5bc11163d69588a5559ef21bdff31" dependencies = [ "cfg-if", - "ecdsa 0.16.9 (git+https://github.com/sp1-patches/signatures?branch=patch-ecdsa-v0.16.9)", + "ecdsa 0.16.9", "elliptic-curve", "k256", "rand 0.8.5", @@ -5562,9 +5614,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" dependencies = [ "serde", ] @@ -5580,9 +5632,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.215" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" dependencies = [ "serde_derive", ] @@ -5608,9 +5660,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.215" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" dependencies = [ "proc-macro2", "quote", @@ -5623,7 +5675,7 @@ version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "itoa", "memchr", "ryu", @@ -5673,7 +5725,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.6.0", + "indexmap 2.7.0", "serde", "serde_derive", "serde_json", @@ -5798,9 +5850,9 @@ dependencies = [ [[package]] name = "signature" -version = "2.2.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" dependencies = [ "digest 0.10.7", "rand_core 0.6.4", @@ -5945,7 +5997,7 @@ version = "3.4.0" dependencies = [ "bincode", "ctrlc", - "prost 0.13.3", + "prost 0.13.4", "serde", "sp1-core-machine", "sp1-prover", @@ -5996,6 +6048,15 @@ dependencies = [ "snowbridge-amcl", ] +[[package]] +name = "sp1-lib" +version = "3.0.0" +source = "git+https://github.com/succinctlabs/sp1.git?rev=e443fc9ca17edbfffb8af8a6d3834659739f7705#e443fc9ca17edbfffb8af8a6d3834659739f7705" +dependencies = [ + "bincode", + "serde", +] + [[package]] name = "sp1-lib" version = "3.4.0" @@ -6188,7 +6249,7 @@ dependencies = [ name = "sp1-sdk" version = "3.4.0" dependencies = [ - "alloy-primitives 0.8.14", + "alloy-primitives 0.8.15", "alloy-signer", "alloy-signer-local", "alloy-sol-types", @@ -6207,7 +6268,7 @@ dependencies = [ "p3-baby-bear", "p3-field", "p3-fri", - "prost 0.13.3", + "prost 0.13.4", "reqwest", "reqwest-middleware", "serde", @@ -6497,9 +6558,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0523f59468a2696391f2a772edc089342aacd53c3caa2ac3264e598edf119b" +checksum = "219389c1ebe89f8333df8bdfb871f6631c552ff399c23cac02480b6088aad8f0" dependencies = [ "paste", "proc-macro2", @@ -6507,12 +6568,6 @@ dependencies = [ "syn 2.0.90", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - [[package]] name = "sync_wrapper" version = "1.0.2" @@ -6670,11 +6725,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.3" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +checksum = "08f5383f3e0071702bf93ab5ee99b52d26936be9dedd9413067cbdcddcb6141a" dependencies = [ - "thiserror-impl 2.0.3", + "thiserror-impl 2.0.8", ] [[package]] @@ -6690,9 +6745,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.3" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +checksum = "f2f357fcec90b3caef6623a099691be676d033b40a058ac95d2a6ade6fa0c943" dependencies = [ "proc-macro2", "quote", @@ -6740,9 +6795,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -6763,9 +6818,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", @@ -6792,9 +6847,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -6807,9 +6862,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.41.1" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", "bytes", @@ -6836,12 +6891,11 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ "rustls", - "rustls-pki-types", "tokio", ] @@ -6858,9 +6912,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -6881,7 +6935,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "toml_datetime", "winnow 0.5.40", ] @@ -6892,7 +6946,7 @@ version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "toml_datetime", "winnow 0.6.20", ] @@ -6917,7 +6971,7 @@ dependencies = [ "hyper-util", "percent-encoding", "pin-project", - "prost 0.13.3", + "prost 0.13.4", "rustls-native-certs", "rustls-pemfile", "socket2", @@ -6952,14 +7006,14 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper 0.1.2", + "sync_wrapper", "tokio", "tower-layer", "tower-service", @@ -7083,13 +7137,13 @@ dependencies = [ "http", "http-body-util", "hyper", - "prost 0.13.3", + "prost 0.13.4", "reqwest", "serde", "serde_json", "thiserror 1.0.69", "tokio", - "tower 0.5.1", + "tower 0.5.2", "url", ] @@ -7135,12 +7189,6 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - [[package]] name = "unicode-width" version = "0.2.0" @@ -7254,9 +7302,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.96" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21d3b25c3ea1126a2ad5f4f9068483c2af1e64168f847abe863a526b8dbfe00b" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", "once_cell", @@ -7265,13 +7313,12 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.96" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52857d4c32e496dc6537646b5b117081e71fd2ff06de792e3577a150627db283" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", "syn 2.0.90", @@ -7280,9 +7327,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.46" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "951fe82312ed48443ac78b66fa43eded9999f738f6022e67aead7b708659e49a" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", @@ -7293,9 +7340,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.96" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "920b0ffe069571ebbfc9ddc0b36ba305ef65577c94b06262ed793716a1afd981" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7303,9 +7350,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.96" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf59002391099644be3524e23b781fa43d2be0c5aa0719a18c0731b9d195cab6" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", @@ -7316,9 +7363,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.96" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5047c5392700766601942795a436d7d2599af60dcc3cc1248c9120bfb0827b0" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "wasm-streams" @@ -7335,9 +7382,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.73" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "476364ff87d0ae6bfb661053a9104ab312542658c3d8f963b7ace80b6f9b26b9" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" dependencies = [ "js-sys", "wasm-bindgen", @@ -7755,11 +7802,6 @@ dependencies = [ "subtle", ] -[[patch.unused]] -name = "ecdsa" -version = "0.16.8" -source = "git+https://github.com/sp1-patches/signatures?branch=umadayal/secp256r1#49b6288468aff7f88f0be8cfd3719c7c20b2ba47" - [[patch.unused]] name = "sha2" version = "0.10.6" diff --git a/examples/elf/riscv32im-succinct-zkvm-elf b/examples/elf/riscv32im-succinct-zkvm-elf index dbd4cfab994c920e538d9c66156ee5d554547c41..e2873d98e003dae4d5046b5327d9bb36902bf115 100755 GIT binary patch literal 1242656 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ξ zn?BmUGH^LKc)5>H&}DGR-M+rt{_6f!(6d$cju%$h51m*A9;wndUmaLsKeA`VxNmms zUtvG=%nG~zg%$R;6D!cQz{OGUa0Gnuzz6WA9h^Ke=bxp;DdIUan0%I+9z3n- zW4%>8qXA!wF5(?o-6t?8c|Uvas_+zDFW?Dp+%W(=EtF2(kADQEst)pvo- za~ZqY?Z2Rz@h?S&xs)+hA>WC8ZdE|bBsMjm;etQw+xV`H@8;PL4v^1!4|IG#cGe5# z@w}DiZS)6Sr)>vqk3i?Y`i$64M7L+$=oNN{^AXl(+F#xCn*Gok6IehO_J7LlTmLEW z@l$Sp6c`PJI3pqZEBiy7kq~s?ETK{K(=Bw$r%}KoRp``oDhZ8h_TW{>c@blN89u$t zH=XDsoo>qG94hFSzm2$vz$XW9{3`H23-|-CBF#%5iCZwT372G{-ZeYyjv0? zr;tahkF(y#S?}M!5LkSI^>g0$d;++BLP3*&-^X0&62F}N7o<(zTL>)qZa?S$#6sR( zSi~Xr2)b~=LiPgwvcH=-gB!yCisNtkV;P_4oW=6zSN%ymk}&;w<({dSSAQ_CZOrQ{ z!Mq*`=Jg2k`YLp38}sUydF}V<(u2(FE9LXLfag)>1%1+T9C$5!sF{6Cj6hSK-6HhB zhY@r|=!u3=ZWMa6d8}>IAHz$Sd-2_Jcnq=(sUbCvyicLRwXtGFBJ$Aw_~HleXW?AQvym!bE7%bX`O7!%vc z?A_olevaCR*0V%b@aLmrKweMxLU;8}^5g9+>0Np4$HNvbF*0w#XUCZ>zrT0taYeV6 z`8s_#l=;tyE7EXCw?RWr_Me3%MptyK?B|{c?h+hErY4R-Vr+Ljr_Z#&hS;KdU#7Z+ zvo3HVzIRd`HCOXS_a}YZ`0CRA$#Jqpt5>=|sb!0fQQ&+O+-X#D4vTZ~_f2A_t2Er> zA6+MUgyuoQv-EvR^a(#^>HFY;Q>ObON1Z~hI9DQ zeR_zWVH_R!FB?lcZcjHvVx04r?aoGGvK(TwHgf-MF22TY?jdEWRDTaP6$^TKFy{6T z8;jQM^W`68pL~>9^Xh{Vmllq1pvJ4uiw9hMPr6=+*a`3HuU5&7mA51oZtu)^FS;~+ zs_pc7e`5u2E{J(t= zeU|q+4@=BRl}b8Qj8nxpRq#XZlsggjqgtN{__U7GsanDs(qVz~7Jc4~4=DOYhs2J~ zdVn{2IlS5w|1N$_2j6gkI81Eb&CId1PS%H=U8Ow5H(}nzEOKjaxI|C8tM{ad5PVTJLTf9f`0hl z#HB8Jl{2j7WsvK6w_)(ixXka!6@E@Z` z#LDJs@~lnP7au$W+C~h{v8&8o$1mgl(vakk5L#;4Dfvd?WWBK7(_#*a(mfJS`-SK) z;_{7x4l^Efi1B2sX6S84w`q6IrQdXD@^@DA&PwPbHgw;=Xa@Issf)FuNV9&d=6R+& z&oN!`g|(PM$LSM$0_(`LN9x;q&3N?;^aAV``mW$}@S(-kxp8d1mtZbv499W~-E@GQ=7RP!bD&GGX~zX07m4vz}j zE@STaL^aRIk(c<27stsSxyTIq{3Uc@s-1MEa_*#DsqK;7pr4 z)~XNQgMC@`NE|z|M{Jn7hfW>)7uk}~_V@^VvR?Bye1F-^yRQfK^)4~W*)Q~;BXi)c zu9>~M|NL=%8N=tZ|KcOn@g|D+6T7V-ck$}B=<_->B7L)`b*j~=D~)mA?oR2yw7zQ( zE}o$8_k&aTl1IfyTeszit{pqdSUQe{J@j)4q?~%U)vM>6O>vt|^6d1u;PVoXP?X>F9#$vd{V^lIKE!>DY9s#_ z$O{{)@NXe|-6Hp6k1<~h*&{MCL8A3CyD$Jv~(O`M5d&g5mvPF@BbXhP0A zfSh+&*&SDLj!fcOh{15?7RgZ_2MnT%-It#O3I}iP6#R#N)`XN$ifqUSx>l zkza?H9)1(vROrA|=)hFyz*Oi!BXpn<9BPCPG(rb-tR{4z0XonC9hed~&A8A3UryY& zyCf$Dcp^NzOkTWSc%#&^QYnYL7M{ddftMNZ(yMoyoqFiTkIVng$D-g&mB{TG$yX4M z4DZ&yghz_;FEqzwUd**VgeK6A3Jlg=FUd~rE02lM%diPn`T zen{y5#BD`dI<#Kq&6ZHzX!61{{dbE5tPYdQjK3db(nayLRK_$PmZ3GnU=Z zm(<@Sg73&%CEv-Kx9D%v|4{Mm-MeS$Z@K%yx6S%nV(#>qZ6|-5`}>M-@7X;=f1A?Z zCiJ(-;9KsoRE|6Jor-Ta@1CZ=<(>=U&eq>{7T^J_mDu9SZ;fwPe0%S1;(b{!vIF1F z3dRlTZ;>}DzfJG0`1VV?;yBzTL!=@h!3L*<1i; z9dp5)i3hJ7cj%iH-`>9)y2rQNGvwPMoFg)p=3nUeuI76?BTrb^RBt@q;I`8C(38fZ z>TetBgVmhv=|LWZCyi|VjMMV#v`u=7&fsNG)(eYJMi<+NQ)9o2t_>U2>DCcGHA@8>+*R zHQzDu93GSTRh`n9B2O=Hh#${zA3hjgWa6_-MgK2N-2agDKM75H%GhG)Se*0pUI)AZ zz5GYxWW|Z@@%Z;2UV1~@l_geFyxU zKvolS={Ed^34zs&d`xl#IA?2}@`$#ta;D95IBVy?pU(zX)MPI#L=Il4TD)`Ygtypj zF_)-z=WM&VuvoQZmT)E)=X=_T89LjvQ-#IZ`z>g$$$Oc_tfPxQ7IWsi+?2Bj99m>| z5ZBS_EylK$v{R!=-bvD)x5a6J&bPQJvxRY*p*PKTrv)uVk8u=unTAYmA;$>9IJYRKqX**d+u}3NRPzpGl&zOr;%3H*ktd}+&*MdKh zI2zi4hqIXW#qNSkhW0LEY4M>G8?z4ClsFgQB{66k7Qm`YwQ4wZt2T${BMG~Gl=ZXL zPS%<*ZM*qsb2c1B9|&UkZvO@Qzgc39EA~Gw`~Rh3_SxTixnBfKByQK=ci)D;R4p*i z5x$#kc(ef+E@8e)m=AMik5fArGpBQy(>ZpMHME*M8)0putU=-d3gCyi5cqUs&tz?^ zI{^$jce0<3UK?=hb|r43!(StCWB*5JH&cAaemm@UM)o_&euE2MGy4s#H^B!__B#n| zfe-l520o1Kx6NE_+HKlxyOX&64(`Fo9h|n22Fd;A1~Mk=k~;@ed3UNiA3ZP0yK-ly zjXNg#PSKFypWrro!Wn2`%_;93`dv~y2R3H_eM{p$?MrB1Li>B@Yq7wIz67^{N9H}W z<0JLnTK4u*w%1!77Gkra6}32bQHiBZ;_lC`r^5>h;Mo3ETpf6 zf>*3z5#I{Va~?8_c$VOqj+NqFo;lzQFl_gL8G8cERjVWCPU1F_s?A(zr$&L}QO=LR zQed2sGsrmuz6s7|=T77bGwHT?z}5k_8Jm7)^Zsn+HJiPYc3|%{15f`fCTVY`eQa+k z&f>{?L;T28&YV7PI({UrY4l;csicW z7BOSUFd6LJJnL9_CUBWE>3(+>M0ROle%RzP#A4^_b$o^%*Z3FJ;^8+m8(2>RV;GEq zz1KtLsMT@nf=lXQV#>f3iF?i8Cb8fWyTCm;%R$CSPx0wS`kBgjYv@li_L1b3(4kf6 zir4au#9KQJW8WAD-GtYpl1`5cUr_VR9(SI%RJA)xS_dcND5pGB31Dsdx z(|PB|O>>!VD={0N&~f;~|E%K{#`1(R)|?b5g+=i_AC_q)FL|2W@!FSvyc?r@fhdyOMXf2R&X~cZ<%UK zPWx;wgCCplI}@ISeubVD3m0-u>w&TRcYoN$|KN{s3}I(r0y?JduhV)N-apkA^pyPejNaxttv8k~{KBa7`fUDZhDwxGlMNyz9VWBYzCPt&XQc{|x5*1hI_y4M8j; zzBE;lgAiV+a}dg!@F%pvH+3FKV!gQo3$H{!bu4)08|IO8=Oh0DqvCkkTunsH>qRCe z{@3S$&s64+G{{3qd-*q#OLAUM**C^PzBhyK50vMUjI%yjBX$Gv`yRF5$=ue&G8bij zat+Q9c|IRAWAU0ZjW~I&^EV!!qVoqx9-&vraa}_$A@bECr&yEWM_k{l&^l0}s3(Yg zgM3#79#$d$iJ!D|pR8>BhH_m~=f1v2=N4+IxX*KtoTxMKgBwOt-{o1?$8V5h=+h!o zq=%5Z{2W8~_nndbJ8}%o4sr}l8#u4@uHGwS1M?!sP~Utdxu3}~q{Ma(E@K<;eVWq; ziRTXbU!nagQp+@UDBOonGndTX_s6fFXXwtdJVRH@{Bp?bPL$lzDap0u_FZVG{tetM z^-jt&H0PIo{9IW+=`iOz?7d_8cUW%-8jVjbqd5O!m%-L);#=^r+mGPy9_6k}1F<6I z_tW+gE0RS1l(;;}+3s+!(~~>E?`Zy+-)U~6BM~UYyjJl#XZw~{L5nwW^<$Q@H%D#3i;^)`h4GjJG zYspKaw+oAO&B1JIU1(V zh@C3HYj}?R(teY9jW|0$Wd5cb|o>HNPJVlLN}W{W+PMTlt{V|flWKUPC& zyPCdlH6$^@idYRr9;CYLx1nz{h}F3D8)w05{r4Jl?8QGRd2b%?&FE{*3tvC-YAU3JLlL2A#%z5KWd%M$5_u;(vu}=??_o>LgpniUp8uq=8e_b`Xd>5g z!arXRHwW<=zCA_D2*9nB2VHV@%vHo{C}K4fu^MWUSPj}%Dq=O%1hE>#y_pg>7Y=fE za88cmKb<62BU~_`s|I<^{8)`h!H?Cj_?1`<%kyJ3stSIrMwO1$fNna-O`Jh;?LZ$m zKOSdkL~`_FCvw1njL=79FVAEj(ADLf?&ORULk^#;ymy9N(tIT}1la_-Ds-50q8J08 zFZ8yZ_OUpK31jfk?IUWw8G)Br==K)6y`>hImb<_Ub1rmz9&>`GnVj}3mh zqIrOcZ<*(^9?q`NGw7n^5)Rrucm!~5&4m4Sv1#zW+!>U(Z{ojs|A@t%*LLN517ZRPk~OEq_5HTC(J0L*$;wX9vmIO#VA)YJU9*WX!$BuHHVaD`xL(u|y}+_?p)8thRe)?>k$| z^z!|oKOB5j@FV|G^p;ZIYKcQg>oF$DdBA-v-!D+aU)~pa(s0`{26!NJ5Zx|AUTgAS zOD=BiXUFgLb8#>FX~@j~pxSi*H?roqIi z)wwf*dCW{vxcXGq$)KH{;@8x@Q>QhlW|Wh)>X~_b7D7Lk*Xm zTbhf{C%!6kA&1;&XeairATlfQcRKb#;_f6T-C~}_4$Z!dylufce0gSv{`T&^tMs=z zzJqUxd4PTquUCj5kKrpZWn5&d@^5qf`rCW@R_kxc539#b1mhxOLoYk%Cz6NHAF3Uc z7(E|`4LSzr_vL$6@}#vo4b)NkGvS>gJ7}3HDPs?{(Ra-xm(8jC*7&mi_TIkBf_bCwvgTAUZ(>G(*Ib@O_?B4R zV9tin3B%FfeyMMz{?^wI#P5Z^0=$U#0ABc4yeP1iItl)I^_+8g{q22ym*{VG4LAH} z3!Fy2naNyZ-+TJrr`JYIk=}=n0G8;1>_4$TnHab?rS$EOw0v=s z{&sWUx%%7Y;M?}#TVzb&1C0;HdraFz{s;XxxGhct_yMkPepBo_dcNE0H0t=r2J2%s zwL|PS@KEGA=$6LCR6+D#jaRDGtL1%d8`ON_j|Tq=cuRa}8EzY&D2}CCGvK(4CHUcm z^*B?l58>~FpN;bO^Tx@2yU3^HV2-j`p8I86C9$%Cfx$?xc;Dg0;^fR> z?dQADRrq#2@ItOD@QZ9mu0N3(@FCZutBH-rx5e2e`alMm&qH4v31z=<*?bp%f^EIi zZFXw%!_CN5Ud^tRq}v z>tlXyrxSC}%EZ)JCUx(;Xm;Hb?b!`qZ_kGQx+A-Re>eZH&TNc-H}C4oZrI(G4eci8 zU^L{m^m1-{km)R)A6|*=D?#4EPLEoqBegOIU`K3mBWGYGxHlI(>;^}`lT?B8A$FH* ztnBrNgZu>j`YxT&Pd`7wHsb0I5=*ffy-H&1hB#aD{~mk?=q&P2&Z2GBv2S&58|!NJ zs5J*|vdt>iX0kSuwT0DLUdY8x;cAH~{_bJb%Pjjm7 zlUjfA>9^=U)) zgMIky7_7(kDd_)E!MT(7E9jpZfY1Ka?|%#rg8m2S|0e-_O1S2?84t0Z!|^whM?mMX zf3U3n^+|c`8+3e$*ziT(`A?L`Uhe1)iC-1^5kcopVv|9Ch6jVIqOW7aH{n%}Bi|sy zym8%_HyM)?z)Z*Fl;@Kt{zJno{gQ@R4=|HE0}<|K-#`5Slb9Uhr~g09hcRKD%E{sj z#Qv0=tEAq?)`*TTfc9pHo6`CSF>@w4RW0OF5B?)Kp5g8^{I^x(4>;xV{V1}|QSSZW zhY+6^`q)Hrpw>CSKj<)WYgGC|7O;R7v6p-!-}`s0#CMj)*65E3p3=rU74;*Z!_Kld zunh@LXOLYS?Dot@+lj#GF`K$lNk`|@RQOCd|KY$^^tv${liK4VfvuSPzT^OI$j4r( zv=txGzToqL9k${!JF(b&?~K*QV?X14oio_CEo=U1NRDA8XF=yPZIBOiW3r?lOq zhdqQYneb4bHmO$jl>4Q&_(4UlY#R;bS%0Oi8Jec!Kfnd(m;wj*9y~D7#TK9JTbVQ# z1e`c^o3r-886SH?JMiRj{uQ)zQamfqdF$JUz7LMPoAcJsd0PQPJIGgMCo`{KGqm2~ zuF5+6Es}pKM!YU(_d)IF@$KfmJ!~y-Hq{0Aq0o1rmRqQeNuE`7=J@AM zOj+~?5p+7vOEY#2>>H{l!`xP)Pp>xY$m94*p`BHGjjdI*kJ;QSXs8?bz}&L>llZ{M zg$-?cP}4Rao(-B7V$U>nU1H7WXAfg55cuQQ7zayq!XsDweEjo4oSg z<(lEgwZFx3{J2&fcQo`FSNP<+a?P8TG3A`GKd+pUFYam`2XWwS(BOAA-mcbaRuZ>~ zT!Xyy{$l`lZ6BD+ZbkFxqb`MQLz=_j@PG@rc9`lxSP@oW1a{}4wI#HJ=y6 z{j4vj<8vKynV&Bk-fxNzBx?*_So&W3kZ40b z@B6%eieB5yO|5D{2Ahhfa{E|3YcLdd%Dlj1hIQ z2fGqm*v?wpotUen$Sq(z6IpqNhF|rg&878#ck+z6nAzL=nt?$?`E~;hRx;AAgN$L}5FF3ox^gap*griNnUfxmx+>&!ba{vU zpe~EYd^~bC&>qa!mbf;F;bUHmNq;7>AG}AM7i_V#brWmO`-u!b0LDytyeF|8#kn0| zZergu0{hnCZ-|Y+x1(J5O?fXKxhs&zb6?Q=KF_mU?)@@%^brT#^2iBh;;#m`r1n#X z7Z$vzyvOu7a?q8fcqh9}V#UE9U^fQ0+Vg>(IHV{NQ|Z0)_A(<83Vqjvna@t34_-vQ*6s`0h^bo`02_HFQ?ad$XGADFOy z@$KY>XxWDzj_;#bLpoJJ|3*I&T@IZtZXusk7s_f#I|gtk$FLdlW6+151qV&l;FxZkXX|x(0bgd)L1->UL5JY16sn~ zi0nviNIzzMA7|`j+3~+}j<%oSXL{#qEY@0`!f&;#bnRfmMmEEj<=5+}<4(lqxf4tL7d0@s5}Mx+Og&IZVq0UmCcw z^xcq_i*5+!wHz6x5nd#*AR-e5^%So-#{Y}*+oww3`nj9_UcOb-MRcVu;LNai zEEdRpp}|j9ekXDYJ~Z*wV=qEiYsk*L>i5Rvzd65(TWM;%KKh9gtlr=rdcLkp>{8*< zI70%HAz&_jTkjoLQ*i-fpK?vbIfpBKzCA)a-|-rM&>8qAd=$Sqat8S@P5kEYPvXUF z@o-33&>NBj@fXhhfn>tBXbT+ z{@z@{Ven7nK6&?w?=dDYlQA+nPK~t_^Wur#q2JN{2k_$kzt2}Or~lHm6X*Q3(suQX zQj*sfJR-gxSeewG^K^_jcohQIkaNH*a{7Wh(2GVZev9Oqec)Tj4S_uC*GJ@xBVQMv z1@#m)4@iHT{rs!3wxAB9-}W^7v3sno{JY!%#u3|AX&h*9*%-(Cx}Cb8q3V+XDW9W$3Kvd(CD@+f~Rj<@Q8~ zvD``CBI-j#2V(geYAxON-)j6iWoJ%V62^{O_oC0&Z?irjwaBDqnZ)OCHt?@VU5QQe z^86B);@5%lWwO5>SMO`vz^T<+O5!V-q}~#GP&knJ_UJn^wbo+ap0nc=>^aagU6a{( zA3TA4uEd*^-z&O!_j`l&_%+b9oRWK9*RmL1-%TFaMPk#*KHrx(xi<5mdpFFg`1aEx zOXU8@-4R`wy?w*Q)XE@t3vxtX4L-Yz@JZc9{_O9_Iy>rrC2AYO-`XTy%i#5=m{rREIw@<5>`_(e{p;<09wGQ2N`;XCemqHi)I%(78{+8Zz zA4X}t&Og?5fTmd&s-DwLws~3EZdKc^8z}~iE(!QQk}GAU*w(j zyfc8Vvu8p*NMb|WWgq9A3wY-<(El|hn|878nOc6j;eIeWzE0ZmdAxt_o3E4BOibyK zIX|d?h4ya^bzq}kNPb^xxem2wr`>*I#XB0d_;ICPS@?EjR)OV7b=3UxbK3;x=hW(` zrS$npfmf5%QG50~TDEDggI7OVR-fxz$WD(UH>UqYWCgXrF|%LTF+IEPkxx+f>XStr z!2dw(@Tu0kO8=hPM=hn_RlP1~_{p-)J6$tP;J{w4@?&F8s)MER-)PnNAF^iWH63gk zUkA(gL;fkeVXO|8ewO6Gi#1@QO)IPlhM znVn)?GH_8b&YP-#W=~Sf%%6AqJ+Hq7x^~!wwen0U1P`+5N zOg~G%kJ?qu?mJPh%MWz;K6#h|?f^qrmPJzgk#J3g^( z*naVWh^&>rP3Q3tS#qrQm=E7JH;Dg$j?`7skvFLS^_ZqFr&rLI|A6{m8eYIkmDQls zuqvxTDQm8@jenPY68`l2_5aax*_`Rt>mhV z)h^6OB}XMPmt{8UyNr5&jY|~z?Gxf7TgUy`nZps6`ybhxzuuL-Guox*a}Ol2?YZ;K zsqvWPIlRE+9$KW_7N>oD_Y4!KmU|C9b>O z1JA*A?)RYUVtYYf!ydr<=Z(!@$3T2dp^u}}Ob1`Y?=+ROg^gk-`ZIY3(aROOvrE4= zdFSlJ2)Tww$z^+#ytf{?+KIt$FVrh?A~O$(8LsCW;_?f`gz?~Agr|99k8_}r@bo_i?RD?0F5 zwPTBD8xgw&b{rF*omWMB72|8)8Q%lf5&U_XD%!F0c-Yb$bZ6jBUJbryAEcJTP*U)O zcgWueJh6S+Eh>*4=8e+`vtp=U4PaOU0TUKj%%>O$eAqd#XL!)KQTjhBdOPnol1nNQc2iE^3J4t?D;;l+Ck1a85+b-&DA&slt} z5??V9Y!X3D*z`A5yQA121uXCrnUe27Y_Qnz=(8A)$k>&(TVf6;jYnL1vh9|>86)NQ zf3oe?eUo>kpvluGi))SJQV=3$3y36l?aPrcMtP%YRVtrq-) z*ka_4a7gD!Qj*g?s3)@tyu>f&DABF3Ss2{W<;(>Ad~R^MD}D6#;l~R4hz(*>aQr?r zEl(ejKJ@nyzTZ4N&E>8P_mO9+)}^LmKH3)g+3no_+l#Ho3oo(`qu;WIloOWPh}tH~ zUGR8sSn_nA?%PF&nq1~#Pk7hgzkkoUsu8=Xe@4$19TD4cM(~jR_1IreL31=M!TuJK z{_VE8?3*X^0545!yx>3iHJ}OD&qu(i(U2mphBjd7fzRN(;Jw7I3T+bHOB@a7iEmcR z_Y%uYeTaH&`-x+mg+b250qoDi_;t&0p{<26Y3mqfoC9)it|E4oz1H!nm21hFGJi!s zjL(`_5BG>{oyUW@>N#`%^jRIzYm=B9&cOt6xf0KtCQtqn4P$LZzsgt9kJRycXMCo&GcI@;_)LGK?K}Sl+}`z>ntn|CDaFqDe#M90FlM3M z0{8t|vGH}_q2OY&l*3}24_xHCN#YjZuMd{pp|OsS?IZU=^ggB!POy*f-Umr-V-NPC zBYap(Y36{H){U!4`>7GGG zWFUASJW%wk?O}YUqs(&z{45yR9GsTF?F?uL`NV7R7aK-maye-Q^1-0I6U!qf`FHcAX6X>P>7jc%Q}9oc z+XSC)D|cSCe6$lkH?ljifOe;8A?u(wjS?rAA$HL8bqVwcS7IOLIruVpAK3(bEgY{| z!JUS^$fe*5GO3-o3i+8D5y{Jt<9g5~TF{$%u!|t~Mbav`<7q()n^e+ia+8@RHP38v z=XukR*QdGdnQ3aiInAB##Z`wBcRMn1wZM$K3%sf9r7ruWrzOLuT<$Bwe2Su()zZl3+KWA-IfMo-)Yyf_K zzuLE-(Rnaz@(lR)0gt*qqT_pk{wwthd_1wmP9XRAo4tCyX6y*esg5;a2k@vh=EcCZ zdiJ%RGr%*GnoAybfDC;D4?S;k5Rv>D(TgN@4$;SHIGW0yf5F@(hqmi(fcLe zX!{7ZfzfJkl~{+3$oE1gt~1?>-l!=TNs*blU6sjYZdUXGZc`BphOC3litcS!X`PK!U10J8OH@z!wzfHNzPIbfIGSE5fXo=Ot>akky24Xggk=mZv7YLn3w$edk*0+ZitR zINW|@H%+%P*ciI?y}ay;KMeW#j4wBJKI08D$;Bf1j8~c2Tc59u$K+0S4tjNt=-<#a z@?nq%eo@b`pY#3G$B@l(#C-G+8$yov;`1vd{{Xq*f81ZY>!aIsF8D+DSG~F<67gyD zW&Py*YtnZCg_alB74Ic~cEx?~E0GJ(gG#d9Qs$1Wt>ZcDBU(4Aknw<77}$l~_KdDS zj65LszI~gC-0cB=#67&?K0K`9NDkYu8t7%NFm?#BFj&RKebkS>CRci`d~3GO5fWUMt5hAbzD?(CwGv%CaF6euglcv+S4&| zjfy|6c7^aGowJCQ@?(?+P9a9g!7gYCPDt&e z@pY=xyU!_&)unULeH=bLUG+Fk*}DhN%Kq;iVeZjI4$Zg>*b=LB_amzW&voqf4TII= zd^&dxqhE;5v5mUgBI8QUo`i8|+Tg!sL;nq5c(AS^ZF|qkx>SePgnZG&ow9TFSvvCU zQLU@Y*s-GYzMo(8`vDxzRqYw^-%LlA5S?wht?!p{r?l9=FAr{VI~?rt!1N1`h)&~eeG%Rv-mRZIAN~6{%e>R< z$F?G`APYM9k}{HC2-#2aPnrDfjm3H5Gt#o5_>ht#(k`;0_?&cHDC>}R-+$!Gj#}EwhR-eR$b*8&*-t-_3 zw$1@+ry9u-IYBJZTe>@!L7sO+KM>u)_k{&_(V!WPB8LJK;DM~^!=r=eQ#lJk+-T3g z#3K(HTkaCxmYXAIQgL>G*L3!#cqfj(&FR3e$xS(u;}PGS$KR|imEk?cl`-WWUI(&p zr(+4dqK_tUn0I(r;Lz$d+0DEsGJJA0h^a--)OY11-$;h|XY(|h^T$}6-<|ke8Ml=& zIEyZQ$oa5Sqxu}lc~ZL0motSJTzs#bpRqYt`e4g^gq#8R&Lp^0erFDRsEi8`zY#o6 z=Lm;2&;B=5)2d zJl$R3Nlo)v+Ak#gA~`vFd#}}byY#*cO@}uf8{4zP>{-I}_snQQ-@w*C(SD}moaLkR z{dVNiJ1gYUAuaD;$KJjxm%crF;J7_O&hX{XiSDOuKn{%}j}>k7zFqK_V|&B>G`%;* zCpn{I_Xh9VCwJ4rE_^v&(!;f!_&PSew9r_CGf0j*Q}P=k>q4t_4*5~&KY4`K5$A5C z$yvpj(DuD;+CJ*yTjR`P-$M@6ays^+3GCt`FN2rbHqP%jeH2*enh+EEDsHtRF8BCP zvXTA*SOhlGonapq>5CM4=@VAq>z_FoW?kYd#tvyJ&Cij$Y}P3}fjFqJ&fg<&;v3%< z`nox{t6X#d7oQ_=5`P|kV%A<^3l-lbFeKIsdI{evV8g_YneamX7{~m)Upm*v<8R7F zD)KY1JN2A6PyI&n2%qs*?FOf0o6vE|#<_2G4A$eoAK%Iyg~17Jy0sBxg{7w0bo0@b zpTw?99FqmE26phGT{k2-qIIl!tG4ZS37tz{rykvNk(P62JUUhNuesRmJD2$S6Bn!P z=U(D&Uvr7uzvp6b=Z3A@Uzojh-~{;|qMQo@9D_eh;+x~#aCZU!b_Bd!cMdgR&Yk0K zKQUXinV*NZ-C!q=-e5QL|4y@;v$oJ~9+i5dUGTRqcvqL|$aK3MW;Zz14Zbae2QO6f z9p2@gX5LATbP3L@WqaZK)3Mod78BTNo3Yj68?;l`!Mipwzg~2+tDp#T zJJwv}?l|`%_u&&4sYig@BR<@K-zC8D67}$&i??ncShjUw&$6u#?_UqT158Tw0i0sAg- z6E8kW%#z;kG5dS{N&B7F`%P}@JuBRP=Kkop7pd+3-si*IH~GSTb%NO^_Ou{-$~}z{_H?vM;|+C# zkfn%g7$rtWd>p30LXE8{cbDqh^I^B|#D`V?xiZfcTl)si10LsX9oT=~)`y=tPxYNx z0jyR6O@xYirBr>?l|8|pqZZsT+ek*WP+ks<0I1s=wySb12OOwG*$31q7?1LZsa}~Ds zoR&@3`Y^iUsW|Zp0_Xh6aQ@oB`CA{|b3XWVekGiNar-E6J{rJz&fkuUvnYqP=A%Pv z#=*Kk|6A$5Z~ysQw?A`!1+2HN`S8|<2hxn6W}nmJ;H>-1UF$zTFsA~}{&=6&bV~5` zwLWyllju`y@carmH)uKRy=wT}i?ShWn%`d&wt+_Wb;$7fU+z!UrqeHR4{+AD3|y!V zeDPw*QKb%^xY#}T%*B!mW$V^~3**xxV{)y+8iTTPuA(=9_Y>fOww*saCc|LU zJ?$1FfBg6q8As@&yJ^jZwywv`8Jo?X&)M0fHhu9zchjB=)#hg|bT^;4&~D(|HFEx@ zdJFCN2zO$j*GJ|&tcJgMkvqKpBDHVLMRsn$*!ma5W&g$g*VOQ5c>ZyoUvQDT?=u%~ zy>s9-`_4VDZM|dvYg=!7X0{sML;C>j`)PmXqRHSTJVFhh;N2H^H+r$V@AQi&dl$Mw zzvo`;4$r%oae4RSlfMf+RKw8M7WjqaE*f4l2Rb<$eGD3P?i`VAisLW`WF}`}KA@FF z83}#)!vQ|d)aTyENAAk+InV7oaUT7=&+aH(im&KWaeYfz(WPfvpP3Bk|D;i6yC(JEm9M%sJ^|PS}~@+dh5a zzI7DaZ=JN~CO$`98sFpZjLiL0#yCmlHtqr5|0QH@VE7`oVtmC8zSoV!X3xbp-Hp#R zL(cD&PtpBC(%i5#Rj$R(9^X2^v1!dVn3~j(e!P<5iJkog#H_s zbMC9O%pozFUmC`zovF&+{BTNg^TBJ)?6m{4eLHN6Dfe*W5q!BDhC8sUR=FKcRb29E zeQ9`BJbF5I*`%3|aaaHPfs`L7!eJ}Q$6;MV#UJ}IZJ!nUU6oqkMbtb;*U1UusgtEO z+%%X}{j4DZzqkZ_O^^Lu?9)zJKSN)UH7IO(;7z0yV}0*|&U^$pJ%9&%!Iu9|l!r@f zxPkwqR?F2Q8}yzn_GRRLzhAdCQ^i@WQmsxE`vC3mpc9> z6g@7CT+R7~-so6j-Y0fFA0w7{IEaPd{m9GeFv*ap;ZdK8@z#Dj&Myir?Wt;yoLesF$IZpN3YM|BlOrCV&&V2 zpYIq!htKfbMBn$&pB(lb+d=aPcrdDMF4>cFrQq)<)l|qGh{U6Tk1mS*B6;V)C+7H% zj0J9byQCPxcYs=E&TM zqcO3^(7(joOCDzQgSaJe4bOfLT$<1(WhXPQpRd)hV#RZsy^;8+>#0?YT$a5#63f;` z8j3VPErSM77cEfgCXG`;9w68@`WE{!4lGtiBRW7%fLqeCWhtS!wacErlZj!Y@`=Aqa*V$&__%lMGrR}VJ*^5;2`{eW3dyfnri$r%4Hd+#16)m`8JpR;FX z_P$(ZA%q|ddv<4+W!Zp)kPF6{$dUw73mS6MUjvTBR+BXG8&mab?HmtFuBO4st@+xJ zsX%ICY$)0AXszuW%f{HWHdyekWCKBsF+$8uYwPd%{(R1vGqW?huz(Q^fAARgob$PV zKCjRF{x)iz9pmpk}>7r$>JCH8@Xb>x;~>Um)tkVC3jCP@o_IPB&VG05#b3`F1hE(B?nKTV%;V- zA|nG=lRKg5_p(1SK&RQm3W{p|fcGfm2 z_MmC%X5Ezhm38mtUC;KwR-m}%%$1T8%Um+2|9wbuNG1R8<~b8gp33 zjq3-e#RdcU8#dIBD*45;3WNKIWrp1EL@ovP>DXUwn0GqF>J2kLV^mEf(J@o2T$a{6Rn3Q%8SkE$UIP8v_bh9&*2_yX`Y;G_#gZ-RqXd#MJGHUyhkbx z2Gv0yD|#}x>#?D(%iPq^o@@A7c^QQTssB-B;CYJQPv-mE8`^?8~3rEi)WNwbHajtrX z%!#VUqaG8x*)(>u4tBKAwMl5_t|911p(pclPeff6ug<}C;sEW?AD{(;!NuJRS8t=Y6C`gh5d3hmFk81JCx(-P~JK5U6-S|1yr zE-#WX9&XCq-dyB)L!wTkRdRI5|4hys(~Drx$UFCCJ)FEQvJ-pJ2Bg;0|1G+R*8lCSu<~8;U)c?92FV zVtb6v5n9IWgg%kny{~0tcYe@L4sR+*$Cm-SD&B@UyewXJ>m7Z@j_nNjF$?;AiJ}_1x{vihmtO583d3 zW4LcW&0K`{?E`B3A96dGzZ3WEkzo4~+_%I02i2OS;D>%+*W``4Zx4y~y+hp#kG&zZ z@46@$>(f~kHYw1)YTXNOm37zHFLKIFk>JiHPj@W9dg}?WKCll(Rwy_{9!m0c3npfx ziifGr$H%}m#Yb4ay$VK8)*z)M}QqBHf?0Hlkn>hSX4xU@{6CzhisplieIvT7cGvRe7!0XO~ z*G*UOx?A`Chl(-pRF zBho#Ue!)K#8W1^y_6t^+VGw8dgkSJzn0!ckSYvW|EDJrqPn_7prjo%j$4V~8Z^a%4 zFAm+uDi+*_zMqvL^n2=Vxg+44OiTQ%x=nZ(_?TH<&DJ%KW4ABz&$I=fOUxSha(sTc zf0`7HP({uucVZ~(%r;3*9lJdZ50-})U4brV9o&K=@S!@7 zyQ~%;srPdi%J2L3wQT*?KIJQwxg9xYM<23ae5(BK_I&cSU!zm`pKauIh0gfR)?LpT zxmWO^QnEtsZNJZ2Hm~CCF$V1B%H*Z+U`k%Pn0`W^bis=$e=6jsy~t08#hYPnM)aq0 zXTv`;M?rg;Y$JNxe&z&UD#b4rHkJEQ8RYEdeQ6o-shZVSQYQO1lsEnI`BI;%fbT|L zD?U}5?cNEO+C9#t+$WcEpIpZNxQzL~%x+t8nVndDncaKcCA`0c_m`mmx&&FlC4o#_ z<}WAlkR;wT@u=)Xp8XJG&Ko2*DYPZNHxg?ay_||QjlNd-R3Yn#H_kQ0rz-d9x3E9R z-6Oi7WR$hnF;jB=$ZLq7ViQY4;?!%u`s{~t_06ijfF6xECX9G0yO>4Guf!&?w*?G{7Th7Y$&Bk7A7yCGWR_3PY66OUx zq@G*mc$x3tXChCy$em@b%*C9QrG8e{9Bhr+^K)ruE^W-UHa$TfoU^PX?Iq2#X^ZE? z!|e8Y;RAZXkh6JzHt)|y9kd$Ge*_OhJQXT=XKGf~CB(&H;A9_nt^c4=n%f-_}5 z$oiu<+N=2(&hq__Tqw_rb2dV*vS1Hs-#)2h#xuovG}JuKa_5*!rQXciN6wOV+#cq# zgE?!@v(M8@*;_(4FXe3T>n*jxE%Iuh3yLxB^fG1p)nP7U|4B}dW$d{{7U#kx50RB* zZf1MS?6&+OY#A2WNpBHj{+65<+1Cr}CBC{b1zp$$=)x{Q7j^-aN{aj%anG0f=I=wD&Oj*BH#?;EWYGwbl!qd$P)~R$~BX<_LtC^X? zx%bBmKPhoG&tb2Lt!sn7-@eNn&*ePKv8=Pm$h<{vhqH*gX%YL7vibAbhvzfr=c8*sKYnww;m&akYYw{0 z+ayjx+Q{8pE9W+zqd#F^3OnqCgB{;>Gw45dd@E+K7vIKO6HnfG8{>Z)eVb0-rqj3S z^ldtGF_Sr&X}8au$+yS}^9jZS-sKbAZ#+vQ&y!~!XHdNpS#X=(=GeTu!0j+Ozux(7 z(m9`gx6$u5`rSsq+pJk$+@0kR$0Xg#_*(gn_#LLq|3vl_aWciv&%~e7gBH!U`13i) z_Y?VE{JHSuBJQlRZ9vwFT|(wlv6?tBXNBf>u~$-9?fc&`cfzw1ufvpiq0ZDeA8!lt z&O+D8`)0%8{XBp>+^Vmfj-L%nz|08!+ncvw1SDN?3ac>88CoNvz--%y|D2 zvDuG@^HTVtoA55P+MUZ>?p14+d6_%QyVUA-E(Px{wPu@_y0g7YEbdshCw+-E$GpUy z<6Rs#&C9j@kQ3Lr@dm#O76|?0|K0Jucx;t%&niWeeG%QY+~+TGpA)YWoliG9pRSqB z+~>`9d%BtX9DmZ)=z!4q^q}+UM(5L&Z;bo?(Q=o^gV=^Ou{Nul`=*2Y=GuR35996h zg?4961E;YE>UF#w@n0#dayy)QtJ|zEkteaI{dzt+(C&)OWoc}~mI3ZszYaBytmtBO zd9jVm)OAR%$<^57wb!jKC18q_MM8EDmK;3 zd%ZQw;cve6^8~u&pM(YwT?{&s9d%$)x21F^4tk+H`hqlZR=31*eY3b17s&Y}4|%j# z*@R0xqW{HaPsSy&n*y7>nv%KE{n$!-^__|24OT(|F<8}E;B52T3)OF!DL zi`vP2l)X@Eq06y4O=7>S7r#w%ovg;@X^1!`E3g5>Hxpk;TiJ%CYk7{2 zg~q#SUst?Q*-3Rs`H|_hgio)56Ghpc*pZ3Pl}8*Ill+Xb25Iar^XR3pZ|fdXF}3^yM{EX}FQsE-{K}SY z9{XrTlsfiPWnT;aXc{XG3pXU^*KMAzBi zcA5=Rm$p@8Ua?iQ+f4XS)k8!E$Gx0BYzn3|!%Ks|irc~dATvyNE!)}LjLarOiX?_AN zjt@P4^lj_$sh@e0-8*lR-IJbVcdwXacdedeC$F2t`$+-s9gn~l%bgwOdkW*g*EKB) zbTfiLGi5W9=)+gW$wYj_jD2;xjT#14S|8!6|RQGh=1`(IE#vhbV^c9to0RT67F z9p}u&?e4t9{*idq#N{xlH!XCp#MtB64rrkvKYm-jg)%LaAx^;o;iq)Vxp^bK?}pZugpHV`ttNx6{bHHM&XOCGw1&JIIe+m$|*MCf+1*-zA2-zm{2{ z&9eV1 zOYVb~CgCZioZMTM|NRS`4eYDJcqd}V6j%O7N~Wb^g2dOA$2t@`h`prtyDR5N@&zJh zK&JUq@Q{7%z}KyZUz<4zJdA^fob?rPyK8kEJdE=`&igofF3z5t5WhWI8SAO#pNY*B zy-LYkk|L8q?gE|8I!aCk)A|u!sNXF5a09neh@E>gj22Z@M9KUyJw=n(>wW>0HbH=$?Q3 z;?&$)3t5O|#BZrFa<|qYAFDHRpGKC^SWB!#XnLV>ZWfz4iNo1K%r1qk|3=;8-9BPQ zlG`ud^lM|!w0_I#O=D}d-^g4waC*)_j=2s$wsj5g1dT@SMr3bw$XssX|1~^wk;A&s z)^~Ln?4!o5!s~5{8XqvC{GG0i_jNEnr&eT|d&WmEv>2-^WBuqr%4Mwby{tv91-r8Q zcfH+~TnM-R)T{H`$A8AMgHWxNZc~{*J&bU3T z{WiP=JSO}Q-`ntPwBNl@=m_jWTzr`J+_{PV`0M%cf$0_Nc?UkHVnf0@N;$h-=E7gk z@zJMQPm!zY`5ZscQ|ynP&mlFQ*8bIMJni{9Fh%Y~?njvmqmAc{{{CuI`>Qp|GrvEd z7-*~L&u4bo>@D~_b;db^x^KlkO^!Z6y(#L|b3ApRy}VC_Z>c^_?Y~6zsoP&8@Y3&> z@TufrNGm+pGi9KySYFX$*)RL$->u3M2Z{BNJ<2|3T;z$Qd~31H146&0I#roie;j)2 z5Ba~cncXu!h<(gi*7Nms_1(1oKTvgd<;kbZd~wHDJHxEyIKB_YNvw?0y_EWzs%vsT z>ywtVr1vuMnEZY+&H{QDzl^f`G}yQ78*qv-albM)J3ZcQV^7%*^agz)uCGgc-=IGM zj?kCdVqFOtvq6qeZ=6eg-074vh1OH?lSQUu6H6BT$S08HiA@o_CHK6-4EAYvJ{Ht} zFwC;RImQ{_%Vy?2QS6606UO~PKde(3OE3NCb;e5{GOf{%&VTMj^HAFo{LV~o;m%?I z={)MieTW?IHM?gBInEA|+28{Q?<{AoJ5Su>-LJ@=u0~^PJ*voEgw8Ik&PCv*(Oc$P z_&1J!P3XyPniQNp?xuW$4KB%gQa5)~zHTACINQiRplg~lv43gJ+}4uF z4fY@d`-qwORP^**OHA9vu0!9_`lPY24jqZ{rPEoP`b^E^r)L_z%>SMGjPdvx&=U2T znEaacnI`%5>i7noklC22lV7JH)AIOP$S9F@rE8H_Nqk^v{N>oRz4-K5B9|$3)iE#D35;eGhU@WSp7XW7C;uXcy!?Lce$PiLAXQZlPaM z_;nZfl?ES8Y>w0TGMOq)J9C(@$yv=>i)^ZyvLgGVyd&kYrSe}Mn&A8Rw z?T=gTZi(v|+}}1hE_e7s;&SAo{U1ga(gOWy+>?^~FN==JX_31H9+CAKSd9F?MfN9S zjRbdi?v`lDJx<-~9)~{l?{RCkSz9`W;bY!&Z_5vL`+XAU1zF!J!K?)Os&VM6#-XoL zzGUus-nhVb%Uv=wt~9m;u`94`+cC~P@4z^V*yuKU!UC(<_xuVDnvGlWk5E2p#P0)> zxmz5tz#GTD68@;c621mLjeW%TUPGLC7_8saI5OM$YhEelE#LaFS4`F!{?2Q1JDsNa z|EELFnBt*W1Ng$qeZZOLOnKO%3(dwFC6J@HO@PnYg59*qo^WdI?&}0!>)bZ8-s%;; z#EiH?|JzQzb*fY6o@&;(JzhO?X}aV^a_2ZTR!b9{%8EWY~9t6WeQPoBL;@ z(0P2f5#IkI?#nc?`;GjX)VUEoLu)OFt0kGq9exTBxe<-&8Q%NZ|YU+|y)Sy{{Z zYSRA?&!J!c0qXyE|2%$}@BH(s&b@#B`ike?@9&HB_iKLL!_Hy$1?u~%ei!0^E?0P- z{tga5`+k3aLVvgW^Haokzr7#P-dA*;Ar|O&+2?4la7gy>bCpc;KM!gTKcZcb)-(As zg9=%-$V#i)6y74X@ek;nO4>I5dG1g4kpr$^8-K0hA=B(%Xbk*9YlY8w&B%OqQ)nOm z(a=8LEwPW6I5KkYW^UgX5nMmGjXXX@+%cBeZ+E6m&I5XqywI}X)dBb|iRYMAHX6C; zLcwK``?80jcWy`Kf}fz!d|&~0n@4$Q%0u+uALdU(s zn(e(K&OJ7N%^L3L^kR3Gx!CRS7PJ0+tVtgjxtOt^Oa12}Q$05`QSmnC(*8TFWcnSf zSr2lZ9y{TwSU;SBSJ_W}?5i`;Ro3hH8^#w|r+3<7C)Z&T15SRuciQlEF=ZfWw&t*RPY3@nUZ*MBox94OXrwp{j zo8O|=P;97}+mpqq>>paam&CRZYh>@$76 zthU9-sxy7JoABOkwL9;2+2htM^WEHk?_zD=#hSm1`|n-uY;T3des_D)E37%@3huw< zoRf{D~x%YIA@^@68A zcYC~duomyIu@kd8(u-|vH@2AhmovPW`QVpwz3M%6P*;+=k|wrztaBIZ-0krzdm+7q z_e*%cq_`Kl*)KipmtIfazk@!UX}9ND_w5^fBK{ z+iJ~d2m3tsMsHrNo7LgWp{`RY!+Qt&9G-V$ht!1~QW85PmB-p6UcIxBeY=o0v0vhS zg7>{U61j*uiSwZLm)e&aW0B8+SBd;|>Ib*v*CS4X{HALdFTds)ZburP(K*9Sat11F ztJcq?4A_uQAY0}CChMP1P#&9H`E}R}^6LrzmI&;i)E-xTC|u9G9=F4s!yL`wTX=D8 z2c>ZQhLZii1b&JAuJh7tG|5X7QG50l@q;QLZ`HBD1fOId%N`ZGH?UwAXG_`b#Mce} zV4Lu4>-s*HZR^o}%!IB)|BrozyRnaW`cX6U()Jb=b9K`o=ld=t7gw>MVuN6$Srdmpyl0h) zDJA)KYpnKkjoWV4$eu@LOAF(aOI>aob&=b)Sl9T?*r^Sx>w`}=#gSvgE#}f9=YrVJ#KaDv&_b>Z);Wp{ zzM8!-@)GU}b!I7FQclO>5I#SNy$1c2Hid_gc7pG65#$Yio7R(qX1s0+cWo4${Rq6q z8rrC2vvKlzfy+{}-~ zOcis7dUXsU*1{miTg6!KHl#1C@oO%2b(Y`n+*jIGz`drOs2`i zWZC_5#!x|D*`xW=-4>0M*i!huM|~x97PbI-uRp|o5X|%M4ffTv$7__`#3pn}&`@#? zH64{w^q0uGgyzwEhxyk&{ZY4qj=~1Rr=xO;j!G#%xWl2DSj%Een~~6w)xSc#sr~3kFJL_!=sWIhWhb6`Qt&J@ZGk1z6H0$k|)|1#Wsr@W;!(R6D%WD4c7iTYTXHV~x zeQdFhM~&-KZ4O4Hx0P?jqa`^^`)>me*rR3i_ARc^+kMd6>YSqszJKudB&U-2X1pOW zKSn&GRr#Rd{(;I~r~meFZ8)RKE;Ds)#oD~d{R1oR+}p63HqGB~=W?DL@R_?)*{q~8 zM~T1vIdzYxZghC-(Iw8DzJLHIh)^nGjQ za%WZZt%1+-+gc^`c=k_R(cknrjhVYUI`>@lg;(Q~I-qM-nxZ2R9kl3CGO>p*4a+Io z=9|(-@V$|{x-l~iqayKHQ+Yl3zUdLsE$cDeA?>6-qrRWRw^RAHS-!pEC57krePMag z=j8el`2afYxWr1iZxC#rr1C6*;W2%GiT*TQlevG>(qh>US1EgMSXRo}@QUzTqIc7M zyH@5q`>dMp$sKQZd(usQpV04swb)k1qggN>y`tD#2IZ7q(RkeIU_4Wz=%kS)Dn2xg z9eG~vWznb5e-AmL*iS6sK3Rv(#X+99gZm<{?Hb5oMA>?9q8>V0VyYsi6nh5`xw(go zlh`xZPD2at<~wY%q;Bfa{rRD~&qj>bQ<#=%Xl%>WG@rJOvB%Ll$=Iw;=FRwO4fWL0 zX0408u${;^!TVshu>-vs{(tzyLuZWlqQNB5~J0i?C^J8lJ;J`-6w~6AN=&d3y zv2a}CYFeF+&{0tttMvr5g5)W<9l9W~82(!1>~}(Ux586J;IB49`$9jELk?O3zU?tt z3ybm=?M0{${$nHaiA+6=MKj(4!`${X`B;(vs{E|ZIJY}J&YEqKv(#&`dYl&aZ;Lg@ zY;os!&2iJ5AoR19Oe?ybxrdH-XwQSMLEkHS-<|_C!MgBH_PEf-5rt3v=%-?<0-os> z=-K@)dx83}fpcW-Sp)XH*y1U>`k@H=Wct1Zn=))gu!Uw!*#0?upJspYT;@;m_Da6O zpE|69pH+P;Nvsat(3aY1RH^A)d^y7ARZo(H{lqr?~D%yDk; zN3gqw#Ab;8V)i`7ir)iIN8H=6d8^7#=9lTi9X>|7k;{+P-hM&yfong)>Pdkw6k)GaxF(LbwvM*f_>!kj+9Jnx3459T>~ zgVI4N-qh&l`|pPD^!J)4Nx9&_x5Ia(>yve;^PAy2`daK~;V;1DUGZVO$cT4bOys=y zE<^iEUYy)I=;~_~=0Cx_*Kk*uhec}|-yE;c<&Dtl!uuQbBh%vs`l>wfD%YD}gb7BN zBVYvYc9>uUdWx^A_#7qq%G7=bBWe^zB!|H917NSjo6@r3_{BH+7$GtUaIeH)`QUNp zJkFL0e~|X|Xq@XRya4kak#i{fgLRM`-y_nSZZ-S*>hV>o(VJgmUk~R6PQ?8<+_)c_ zu3uY8*BAc2VxHgRbbYlweMo$*(jyH%9?mg(B*i;rKU*=!C-_?AXVozVnn2`bB{*}1 z;LL0AKHP&2bkTZzoMvJhG!I>T8vXYQWj6!wLo7oFU%2%`1EL4tqVklD!23)q(%K&% z7@vdJ(eheiQGMdoaf;5n?bpb9iIw}xtMFA@z<6je{w|jL`v{)M1UNrOVCxn+VGWSXxrtD0Wv;9+>;Db!!XK^1XT|)M&?2!nvk4WaeyH3uW z|40qAcqDVnBlC*iEmt=42}{1iZp1~txTo%}*J!UZ7foO{FFx{qoms^TY?N>L<`vqV zk*Rt3)Z%+pSK$f=LgbGvw*;6wow^wzg(@raQ}#`v!WEdszGuk^ie0L&PU8 zmr+4qw(W&3hxSaiLvuoF64O(~@+8&OH%ot05?jQ@hR0(6xb5jW z_E<4SDdWf2(yVo7dok$F7<4B#TxJZqGs?cJS9Ir+nGxc1MTpN8AwE~6`u)9{cPk>q z=ZaL`-=3zgyV6m0f5TS@y^8MDf<}72e7>>&*+1ha#NR~5y;$dp`1K~@xQh;MK*{Kp zPbPA8`yqTXn+BENKrnZD{6dptu`x+Q%bU=gGWT1UYx*Jk2fEyaK38iZYt!p7pF3!G z!#Zyu_@}0?h9$Z)PK^y?~m~AhqNcOreAI)<>m&o z?e}T#JBK8%(K6S;!;#mB9d)2{IHb0gEBQ$GLE9q!iPWq4KlU~H4z(wrKrew`OpbW% z_U(g`Be7Ec^r&j%wZm>5cN(pUaiLYBu|CI9+!_#yhsV@X*&p*}3>~ z_iA=7YE7~e)tVerb}r|EUj@Zy91S~{LpqPE{raIR5ek$(&sopY6<{p|fx(oQ_p zMSIuSZ4Y5yf69Cyx6MxT_YmV~oaJ^r#n^A{l5wf= zF-|wRtjp?b>~cGA?XSRoM9ufx_hsk(`)Hv06W!#J(zs^tC{z!tWL((Xf+~ zqPWi0IEj3k&Qgw_?M}~GeZGG77Xf&+k zGKm3oEp1&2U3)owxt#NQrJv`KJbgi(sXt`?-@`gw89p=KnQ3ZT9>lXR?pHN$#uHYL zKW`Ji(0Y{T?S0JK`{?WYn78+p%-j2zm-jK2Rm|I}l6iX{^Y%XGZ8h&#+im%47%O|v zy9zq-Dr>fPwKdDRntIfk;=60;J9D0guiFCc?HSw96_v%xQTezQBVQ6a{(9ucLd(A& zo1C?r+wI~r%3dX3p1zaLj+>_K9zmYl>g#Nv->6t;#?9Efyj868sHWozTWW2bd`19j;rwdxXL=;yjuJ~0zZ%Vl$(fS{JJ4^TIc2YW~YQ>&&|s$u$=u*97Ohi8~eZAyN0^2iPxKdN?i(DOV$e;C&}S^S0nG< z6Q213KKTFdEmntfx!d7g&K&|4rQZXdPXo)Rf#t*p`<~dnaYvZEPhW1g|6k&YJxng; zFA+!VDg5!I-bvU;Ijh5ZQ^Mb|Hy>`J?p4&iin=+k>D6}P;dZ<2OYPig?RN5e?bLk* zb@M*WKEJiY?&f_D?|YwWXFt!0$BfzGo+()F?DW+mp7FMP4_MM;V>g;$z6>UOyuBAb-$xh;7~7nh-~Cx(=WJk4mn# z0l^$y$9~n9=h+9fnMiax>s+Vmlej>gCNYuH_3UGbXNAwoP>g$4#aiM%oFZ+EoDaRw zAbxY2u3R8=CH zy3ClZVmFAMk2aDfeo6;a{aS`5bG(DLh_NK`!N~REcAG+D$$HmYvl)Zv-X#VEu|0b;Q_@pBZeTk9C>s zgZL54JkeH%6Jr zmOhiqG2FxSS@g(y?VlL3%I)>YoHrzH7 zY-TQchLoPp?plGZCw7}Ritp2mrw@rIRoGByKPXRnBr+l;D=u7o&^8Xm*0zegXjJ}p zxc!-yQDB==!vCfO<5TQ!r(AAyLQhpy4pdd&(GvA-as4>nO6OnrqJ`{TV>{=2>Oce> z0cX>Kb6_`dxD(LwZJgcqyvP^F7{@GI>te&@ii{sy4Oi@!lMc8p^fYHe<^GU(fSebV zZ;UjFDv(E_J{Q6#NI5I`yAokH2&^Qwl`l#7leJB6SKS5<4ZiV7TkmmNu$qP zfj)CJ`poO1yvGlDz1SK-8;qjgY>9^Y%^S3SQ|UAtwSF__>o(*6jjj{AUFf)Ai$Y*^?ut;}ccIwi9Nz2;=} zn(H1}z&X<2C6unx1_x9Q**#67(=?Jf(P>VUxF-I0NoseY zUem`%4_X1N!j4h!O742-TzuES0AeHf_4>Mr`WcNPXu&ut<~<-y6hd=Cbzd2v$~y_+npw! zml=a@j9Tm?wy%Du$xI90-GX1s4WO*U7Ute#{u~QB*y4V`hLh(i2Cm0FCOXdD&v7sD zo_?YSwK~&$qwgF=ueHx)eupR{cCs_}P`6(fWn^rf>4*)T2mPr6G%?zdRisyJL#7g3rkx0)@>T&2I0^IU${{odHJXuCP_sXn;9oKr%7 za5l%FzdIzlU;7PQdH6K>T(H3Rf2*7RrzE- zI*_#S`LWx~8ashMuH<=WJ_UJ4!OUR`7jOJ;e3-SLPyFWSYGn^6zCg;~CtJh)qy0~` zJ(@V5`QBhZVrn0s h z&$FL@UHkZON&7xN&|Zqh%ESi#C@ib=lJ`j8pwSwk(Hb+8*Q6EAgk2hU?{yxw^KP;yK`;4RQ&jM|SeVc<%iy3u0(^0p} ziPDegwwN(2w=(p08?9te+J)_hc<^V*$ln^ zAoDHpg?sbjPg5i7l(}JFjrAb%;o7gF|0C`lK1ey@>evr$$A|E>@!RCw-K1N=^X(8i1LZFS zpPEL-ek8s<8~#g=1H3vU-<}OmvmT1)u}1KZQgQ!cz5W<_z1x>hCV{E0c2mpeS~(u7}n|g{OI!Y*ZvB}c(?*`VVoELhN%cKv9 z1~%mGO687#78)Z@TWbGUn)^1OfwP~gSjXQRp7xE2J8($ro)X%IxD~`~QZ!VHl2sX& z_{y86De@;3(`97dry`!sD7MJxCZ9l0u+DIk;;$Uzj?ZfypV+b|uu+uU=ymy;g^D-o zYXU>KM@;gW5vNA!M~v0rH#&Rg4T?vR$0lYy_uUr5JIaZapa%J&uSVtA-M*9aUznuf{ zEiHDt(_*)+Z?O|IiAgZ8+3ra<_BMY+|7sVvidVUneI%_tU@0+M6{J&p><*#CJmcCPa3~ zn(J6+O5T#4X!-u@+_%IgHOX7V-8S24P%)mHqUguc&@g%SmMK2+byBB_k=%mcxcKRI zQpdXJAIlhIepye-|AUdaVK7#~6Mc3NKN1t)EVG0+D$JI-g#Qp50Tl~? z`EF+Z8aRhM^CZ5ryd$=0IFIPaDRUiu?*%!JdTmr+Q~QFovB>iVUD{yv`s>mXO{n@* zz17#p?wUuvj`-87c)0P{;N!{tQd#^F(WeJ&UerC%@3+?efccO{!n?N%EUUx1`>qXOdr!cwp*1 zb{jimyvL41eobs!`qNq*VW zvIp6hyer}aH0W-ZeN&Vb+_dR5rQ=Slw^Um#QQ}fi7dZx9sf+w=jG@7mvw=Q?aW(Rs z_`X|Wm3WSb532#2H)98B4Q9)P)>{ z`Cwi>Sz|-hg?^~AFDfU5;*Zo?OdFKFAXsNG7F`}2DOJ9$YWe>v>&rCob`EQC%a_|i zEU#FmV2kfA@vz^@`2ahRxOArFge{WA%5-c{k&8)!(h+-4*%j@2-{hHdKF?mG=I+`nx-% zz0X#E_kgr_pPGMY2n!nu7a6Q&JJ?G?&z))_({M}|8ywg6Ot%+)6WcQDR8#tLU-dd4 zmGv2qi#1bky0eD2m? zZYO4vb8p^d&}f$-OSsJLT74O^1bh|o*J)cXK0B8|Q(rRT*)=$yoFAnFy#ZeeiP>Cl zF2kSn;#|XALvkVI8s7rHp!J|)ALr{nv4bnrjdWf$e?K?i?-#0ieVt*hApxK7ycL^u zWDjOi%b5!Q4qnWK#+qxl=i8yPpc5Vb_9X7%JZOV?(8BG|WBBZN`0VUxFZTQ61MQ{! zc;?l9Goy5?*)yx?RxPbtEi6>J)wP?>h)12J3b&L@AuIAObksbn{~z+JE;u#wwH@IwfwzcmfLZG*v2ijk~f1d z`LkG;v#gGXc?J3S%R?XY9?rd`zdGFtDb$Cl{ z?4lX3%#rY&%NUpZy^L}5>n*d}^EJpV|3JrQOkXH+B-Zjm`p&O&A#(t}%ls~34%RV8 z$VQXig~}GYJHH6tauNEwMU3&g1A%Gv&`-CmicjBh@pRgTniIUWp003KDSEW`h3aRA{I1qKrn)R1i$SqV{Vq& zy)t)OWUly|^O^LPx=Hqe%&E++Ko&`{n%H z&5gqMwleQ;58KIRDJOdjKgP7g+2_~9c2#~I=n3`rIc`V#9QMUIZj!bWd33~E67(ZM zKN5V8jclIZwCINucF(+-{2!T6zKuGNHOV^%+DZQQkcG*wiR?!G&3;hdNt--RFLgUi z@W#7Et@>n0CH4>=}!J$xa)%Fvb@DPR9S697#!XB_+MM zoNw#F2>xm4t|bm-`;JKF2K>-UF_AM~v|G&%Hpm?3ZdP`y*wkF09AQ}4eq^$KeGlR9O#yKLb*n7lGxDX8hl&!PyY|GZNoTSV!sq`UM{ro zC^Yr*;C_B~JA<=ePUfzil(~OkPUb6LK-LwF?U{bpYw_rEWblt%T5R_qc1ZE& z6l2Y{$lbJO>cC5x$X~s?*p{JWmgmb@TtDY>X8OR}J*z zmvf%lI8OsobYi z-R|^MYqmMno$Z}$ah|zPPqyZmC%bdJDRI-B=HI82xKAf>pHAXFoixII%DWwtxKAfl zxlbp%oz7(L)5*R+0da8;G{Fa8-@d!beY)X!k+U-g2J!9^a+Y!p>`UVj^u2=VPCb6- z0golL2k*&Yz2Ic-v{!yJ|6_gT){luV@@nl{k366KfNmfi%~3uqo1I{{p;JoCthdMw zKjQo&gNB|Je}M?tT1y{@*+q_cjjytIBCKhIy`y*$b)P7o5)ayShqkr4_PGYF)7-3d znnE|~oFN-IZ^WU!S?r(;_M$hL@l3YK%}krn4{823C$kqOxk-n-SJ@`^GJi9l$u!@w zhh+b>?LZ%tmfSE==nkP5Cvjf*hHqu=JH1JEo8D)3`w;r31MDZpgiZhq`F1YwcVK_T z)g89`JG6ZgZJ%Uw{%IfF*fP;g(w9!!1q)p2mGfyQhtxUd+;LVt&YD9U`vb&F@OW1o z2hUB;sK*&}tiyv!M@Fsqwk6x;8axKU41{4SjGCTlAL!l z{v&+%9PbjQ|4#D$Jr%wyEoZ#Wc)zCJ5lbW2-+w)88Qg!bvLC-1uOd4gQ5H~{6Jsso z5dM&HV4Gqne~U|*lX98q?~OcfEH(&^$@-h@A#6Cb?CN0to+UO2zk()VuQ*`gdUTmH zRb0@jGS*K;IqQ!KKG!VNzQ`}ICN-=Hb|D8MdQGzMWKNC5jm|~MQ8IZz&RS@92VLk2 zU8v-H@Q~<qW4dnibDtktS10q8Z`v9#o9ONz$`Cm55 zxfGo*vP2U+l^izH)!rsMYR7 z!S^WmE-^1-g58vnIfqYlXn%|Lk*6(ik~>Y=c2wA5LF=j9H&y2rIbd0=Gd;i99|n6K z*_Yb$*;&%&Hs(dvFmpd~&Ng9>fDg0Si;CP+zdP7`LH{ZFriV|yDSCCrV}h&j!a+`; ze#xzv^5<$hbG1?EoI~Dg+=ZpF&c-$$)n$PLRptYI+%ODyliL}xM=NZ>xWAOX7Fi&E zldCN|c^$l=gY5)*+(aJ!af_+=4DyD#Vlxzp8urGBk$GuXB3_?0HE%{vlZHELa}DI6 zZ$wtt_&{yEDFuJ=Xl=YXYbcxK=r-_}GyG}c?V`WR{TcB$A9~EpyxJ+TCpg>a0n|QD zJ;h!!GUFH6u3!Rf?s;a{ui0-WXD)gO{rpEJWTxF^OBuOG!g7Uwm2zMme87TE;R7A>up_dimLb7&0VVAy}OdC-aGqemDRhX1Dm-8#ridkxzC7C zikh@#itUy^o_(4B{lVnY|~`^s=PuB9LB zp>+~Vx>ockv#bvGPD>P;Ds60CyD>F?;IFxR9!PEN|Lat6f9kts4fSpKg|<_B%+$~N zWo=$^=?8e}+ZCqK4bg`l`p~#Y*r+h13)@!}%(=x~A@Hx)y`ZRO=7<1e# zdFFmHT79`)G1HzTb3yy9YA$}H`@Yk^D_6>R_G#RA!1KJ^UF6VXos9L&(^_Mj+&k+A zx8&5h+hY1>^()vZN!dMGHy(W<&fRcNR^~H%ve1z6b8`H z48K$#v&1g+`#AL|;g_n{_~T-|lYa~Nwf_fGjwXI-T~*?DfMFXBf?=+M{o z-&({lz4vZ_udRk(|4{|M{wu^K@atN^xzwug8Th518CQhQz%TWz@c$hr_%&bQ*R%yQ zxhJdBUsI~$*X-gMp6b(I&u>0W(I7AEdaI&A?$~tZQK7%?ukAi4{WZPsEoJnV#xHau zK7O_O`1Rw>-Kvkz@9NTY(waGCbkf1-FTIDR73&@EKe8xyTyCUM3;5 z#udLDo$ku69~H9{FCO$?=&l(rYd*h}?%G|6Sw&ubFMWaT(S6xpK_``d$2amV^pwUd z1G;P2+$y?@In{I*@dSs{dnNTLx@&^W1?`VlbMa%{_fooR#*YN!EO_^L6k7BFu}w}5 z(1+)I3@M?hQfs$W&{Tz+L#zof$v7!|7GP3gQur*uq-^W)fl0>m3X{gd6YBH+Z1G$M zJmHI*Pgm#i8J{P-^LNM-sy?Q^UF>7P6TaZ{gfH&uR@iax7@xl>d=_9=;mP9zyHfWn?3z9bJvCgOrO)r(#q%3r*Ir+qwa>?{ z`;HQJ-F*oB;Ba}C#@E}5eGIVc+0DHQU-$a*tosiKy9}|v(Y$bgUHg3O`mv8)_x_f! ztBy0>2rbpXKYnd~6+Kn&(^K`(Q+4{x=c357#P0WK(Nx6EK=)8nK~woMF1s6=3VUP0 zn^EOi3cHM7E9|O?qW`ZV&l1@fG@R6xi~8~`6^ldDRk`R0@~mFUCAOp2*o)oK%c?)3 zN3EcPO21P!($H1tViYe}2VFI6julR*EDydJ=RVPdTX@AO2)ibDKh86DAbG+eMA9pkjrZMYM#eN4_`~r4AJ9Jt3<)bXiqF-RW1J zz@!pcRaW^Xs8P3v4%hDqvKsa!n3q|^%`{sfq0{4{(PU{c{H#|I{*{^js6sj#hh zE<-v=%c@@3b($|fKRWgcha*4N^vom0K8Bd2?H8W+WmR{Mk>6AG8h=}?H^ii*FF$Yh z<>#FzuKfdaJ`(rG1)Ara@ng&&h4>h zv!MEzdS9`RN6ThG)mwOPvECCl3!~UwjbgK)@oUGZ_*Efee^c5l+#Fz-Z*Tv>3Y!Iu zUtg($UtcZ5ujN9=8Y{zR&|KqtIcGDw^QT6LeU0K2q7gYYe-w9K%xIsG!3X-V|n4!LL(8 ztSaKyKZVbV`1PgmS=Prn;~$R`{Q66UUt^KSYy7&Yc!opS*Rf+eT2OM%KQHz%lzknU z?Wn3Z_0eLzq3r8~?dZX5M-^rjel{v*y$NJrWwxW&DjngkD&+ABld{iLVv?~h#2PRu zCHFw;|Af!LB=yYraQF;NQqKz49`l%_&)1SMW0F4a=M>N7F^fsr(~5mOs+eS)TCDd3 zCLOwtP+?Mb;|WYE(GhA)Dpbd$)IF7$RPbZ|3jY>hlF=RFPk>2rUp z#d8~C)-lH084ncu7-H5@;O(;a73&Q#>jZCiNSI}ypLlcIHI(so`;}kdMHO_E=EZ6% zF)39d8xJrk>*qJ{?G{wo)SZ=>WaN%{OnOvgGTA>KGbX8W#_Hm^3^D20p`%nE3l|sr z7-G_q(NU`2l(OSjadJXTIzdMr5+)U%c(Y^DLFlOG%jhV5)>c)gqq5s7G0XUJh(%!5 zTt&Ms4WB_rsb|Io;WOwc^{jB-@qt+>?DfWIv##-AQV|bA%sO`HDAmVoW3i7RW*r$F zrT0**SZ|0~C+MhyVb&dTezO1f&5l`RbkuSsBmYtb9i_46nlen%xKbhy4=~9vL;MLa zsqmZdS%68||2;l1N!t&MDdwI&@Bdyrmx2A%u@qlH^)dC8VjlzhsUwZApz1CBQ?cH_ zNBKm21r-zKkYesBY%0tf6`Lw-KY#yY?gh5%B{m1^0-EX`eHT7e5nn;!RJN@WyNnVU zd4OH1fe@zx>@pq;p9R=e`1|7nyHd(_U`)2_`ut{#=l58&nR-C+w>K2~c(iP$RK3P^ z#d?n$o2lPLe3(&erZj$`lNd!tRe@h`GTU_>GjwYazx3Ywiwc`5jbGoaf?wYcaS8lN zD1Puy!e`)@dS?7__ze6~&k9!_^Z2FaBeh7*;+TAxRk=c_`#%=>LDk1>cM)ff7C)%> zP)D)e6a3(z+b1Z@5}m{-nDu6}nNs{<;l2_0!B1CWQsFZp)&!VjB*JF_CKaZK&jL)! zzUBD9B;yx{he_E`_kYY{QfjD(9Y+&MJN$Od)L>?YsQsJ8+{sfqm-4#9yFe$b3_`syX=MN8)Qh!rC@5d}A8TS_Z zcvLYd`znvd+NF=LXR$IFW6@>s+q)yKj+i+wy=n561WT~Ms|1SX9UlM4TQ0+UK? z%N3oJy{kGVWw%sflCdqs8Zc?RqCFRf&%h-0%y>um3`|nb3hCnmlTs%g9wrsW70+de zNym;&l*Zd=v5z4p9hps(#$%&cZ-_}JY@!avyIrg73qJB@$E1VUMEx|7e=FN^eYduN zS>^GkG!|W1hFKbSJ``e6fLX>b!)F0z6>VT}DX`zyP}n4;>%al~Q&DW76Mcg_kabe*Xczwb##=wa?F&b>F6i zzq5Q)!qo z`Lc%RDOH%2{o$LP-qQJYR6gw>eu2)3>;F=vYGH1 zIHaDX-gme-6u&uYxRN(HS+DaZx08?ipM8 z{*IBk;~;rv8rC#t#;*+XCKvl?B#V8V+=uR;KE41BNgrR-I24a1jLhAGJ<`vz+{v^X z=1wLTWmNJ;lRLRscPde=dwkz1{`lMd@$1;bcih!kR&QzUKI$Jick+yVnO}X6+{u3y z=1%VZ2Xc~Z*sF3U8{{w(P3zo! zD$n;bVqc!UhBYqF->0xCbyFoa6-s2{0X7+@gg6vnQ{m+BS%6L1DTj+qZ&*%uec!*R zuxTv$`!xNruXr|(MgC6pG4=goACDG)r}6xo#d?nm{x0=9h-o)U{=QY}j$c-aPbYG^ zZvnq0r@NmIS=(p+eUZP@XZ5)X{!Y_Ii^{M|Ju}V?F)6^V)PIK00_-xr9zF}OtMKo~ z2X<-ufy3bMLf`*@zdM$4%xHYQqXc6#e|Mz$ko6wAwODV!-<`;Nb@04b3bUa5PuLxV z`H)vB-e!M=j!)rF>KB!mRCqnangElGb>XuBlL~9YX8|T<-D4h;u2psz%6?!>n54>O zL*M^n5tCFOQ{>z&#w9;Gn5610q>J^Qz@$UBJ5ZREA~(?qTd1NfR6)gJ`RD4GWIR-f zN!h;(u?9@q9~1f0qVO4*q@HEZ4xfQZ>RIZn;{%hl{lJ*~@br1d&dxvYp&y>MJ9yTY zKi$3Q%%dU)zw;pSr@EERnby8g{?s2q&Y|%3e~Wz#{qS^LgJ=A_SNE-%GbTB>syF+3 zvEI-RPum^r-KAwuclIBC-mCpTm@>b1TPS;a=rLqZyS3~og6yf59LF*K@oV#|WKU5) z&vBGI$B`hnIeCt|M3%!h(PPXHZ@IGJxq4K5dK38JmBl!CTJWjRTY*msPmEP%_@r@X zO^7>1e0nK-R>Y^0JjX?R+J89sbcph&Xs&^r(Txcs*Z4p*j%+;F^k_7WY}|ctyD`5X z+4y-;Bi=8v@!DUNKX8N`o<_0~_+LHWpt9%&? z`Nhj}pBymteNy;3GM3kMuJRxUd%wyhk8kX2qvlfgbFNFybH06f)NlQ~>-yU(4&+wS z2D$5p=U$Ir+;4uae!CH088z+tjpVnNd!mYb{2)2l>CaDx=U=yb)SdGaA4{~JPGinV zl{jR)CB&Qnhf)uP&jK7WJ|8{{aH#O$k>HT^U_|TaHb#uhOV1_Z=;yZ88`<2=zck_v zcN`pt`q;kO42^X^S=J1R8N9kspjlWsKTU-?z^W>GUf zso$KxW`Ms3Wl#JfBQ(-Pp^>DIJ`QOf{X@k*-sxlIi<^5@AD`LPtNM7~nt2DOk)+;K z$=Fj@7VEutfzF{m+y>#!{&E|HQvKXRJ4eyaU9m6o^1dls*L};do56?)hQCY3wUXz%_vY%Ei~f4G@4`9B#&UcwWfsPaY&^D)a#CNrX?LAw+THE+eZ!EC zMJ3o)_}aEX=6PN8glGSeOmvqjXJChL4AWg2@1_;|c(mv)Rj;<+ zSAN8AG~HDN;||6Xa(9Jvm!Ct=>hQoSXT+SKhs#3-*m!WdYpvnaU4HB&=q^3C3&DWb z_4yBYTd*D877Tb5%%#sJ*ajWhnb!CU?%KV3IrCtf;FbEe3f(1G9DJ*AjqlaBKHUW` zJsi&z-37m`=&mSqm%_CwbXQ5;xm|*3v?cuk)BOJYG{7`%Yq8RQzM%@;Wn?R{Dcc`n zPJm5?iQ%&Vo3azaX8|^)#vhwFR7!Ul*bzW?O37V(y`7o*%7V zg+UW!PUy#Yp{r*6SdU?+KL$lpmD^@&+UATh>`~7OZwoOcz#ikN@L7O8g|CIr0_@2? zd2C{jS<1iMZ*donodzo0E#(v)a4gE6)P0)0t=Pw-N&^`;7V8bL=Z%s*aR*o2)8FKb za8HN)UT{{0--C8IEE)(q9L~IZnEc@((Lmb1XN$J)31}eW!8bJxq%r5`l{l1oCB&Bi zhq9jvp9MISa>8c;4#69m=6~DC2@xA!-)>tUu@f_+cJDmP?nzsA_X^AIT5Z|M>nz?| zytnK`-g?7i;LDW_#Y#C-qvFuCVKQ)4F7?jhSqx~PANw@W^F9r9|52iW?mn1)4jO3c zFd4Y&qp`Ty$3Q=~&zFJ!*q4ESW{fg$Rd4p3V!eUQ!1F#0^nyF}@mu10rYqKE3qg0^J5cxe11%y&%uMzK}r^6q8ssbaQggx zxkw94^kqTM`gG7rn&1n`JfZeYT#~RiD{Z~}l0929x=x;Yv+5nV(>&t-j zx4Sj%bI5X_-DR|oD>Cttx`)ew{Qmq@k13P|>E|<^_whpO$u$0y+W=@>nHJ(o5r4{U z0Q7f%8-5qiKG`F(0r>6d#C+N(rSz=Y24FN>q~Wq?Rjwd$cC?&#qA%xtcJo`6oOkc8 zxk}D^@1_Mu$p)Z%bQ=Kpu-5ZViAPIh(W;Nx4;A~^y1=%OwP%LsMEUHRS!1#RQ1u#D z7VDk5;3QS=-py@l?E7{lwEaWBT~_Z{YyfW9)jFar(qZGz*yPGbh(FjLg|g^-vdaF? z0$+YL0>1omH2H2IU-r*4d|28PTLi0`EV>+Dela#V^X?Z$t9t}|`Pm5g@EGl7Rp^cs+?yyeWUT^)Z!g~EYdd` zUpk6?JX-XP#+NV#zzO=M%ns>ba%Qn7g1%`EWXy`b(QB1DLEofqu7W?ehqzM2pAwp< zh(A-q@3KB7Wlug1@aN|T#h>AFW{p2TDxU2?wsS1Wnf0FjL9vfVOU|tE=i9}4f3M}t zi8o5ld~1M5_vpR#+M8O=tZA43pS^F7kFzTCKa-jFO$en7nKZ;0L+CVZDTr~)fa~=Q zI3Rc-C@JfDAuvX~(!g5QbzObykaBU=$PmDLv9#XS-C{|*xbFIPF>&1+@sj9ocYoVL zDJnn2pwzqa`##Te-piSJXOe~?4VORinUnY2p7T8CdCv1Z=Q-y%hAa}j=j>3%__E0P zZurfYMd~}@H(wTcQ%heKxjW{RMdjx{gdaZ>@Z(b4dzU$VV*q2l_TIT&=OaP8zMuI? zxA(rVGi;de^E~$v#2@Or6S3bVxc$4Q^xnJ3oL^PSA@}#8eDURwcYXNHmqYG#;Wu9n zIoB>}In>MNN8dQ794fcTxSqQq;KikAlQE3WD*_nnWs`Bc-q}IBPupaNXOoG~`2k-C zVw+58b=gzeCKLIyGe-W5hjIn-XD9EsNA5O){NZnIUsw+Ehrc<_(v&~i=gf3hZR9^a ztoUcH=PnQYuD(sSl=j$Ts`?RtL*+V%CIr}x|IyWd`-_~*NBD)&*tR(tZr zKZ~q*iy?bN&b%{}DZcDczYV|nvd4?u`R~gf_g4#%J=s%lPaMYGv^an7S|yyp$NjXH zzMs~j`)P}GKW*F@{B>Wz+1KaE8GO2DRru*YSO@CNpJ?7si?graqcix|99L-nTzCdQ zsOL-udO%wq_q9Kc_tSoQuK2^t5Px`4ct1!0qxxC^W2?SHx9on}!Y!MgZQLPCXE2Pr zX)iYKrWN_SJ7~94-%Y!J$7;Tt_FjEI$PEjd}Mchk^Jwe=0doJ!j&Lyxfh?vHsaQ+f=&*6I@|D|AC z4YWU)v2aiDXf8?T_02NwWYz1*-#b*^6B>QTOgkzcN_)s>2DVz zpC13X=%{YwTutlzVd+NQ98dk;KtEWDx)HGvPb0t z{%hCwf&6HP+z0Z2z7OQni*+9epG!6G0}=VSE`Txgq4#pk&X4qcAU6!HH)3|?I+x1r zI*0)XWRKhj@_>$Ue9(_^d<^%2yt_;%ir!1K2s%-y4;^0oP$Ul8PC~aSS%a$3G2TXc zQ4x33Wb9tMaP>qBVp{FOrzcvAz;(v%w+pvWx(DgBUATeLIiwxC@X3jmVm>crZklLG z<_FMbcVi(v-a_|bY*gNHF|rAIQH@xkl{ha7od>W&FRD>4(2GtuOugtc(2J_KTd5bF z5Th6EyH9X4YZpE~(U3$OS;?BR3$446&LOU5cZ1+%l=6Yw0m4@!-Dv>)vVLjmkNfs% z*(7m~V)I?ICmNR|x|jJ50Lw5p5(D7NI>&qmK;++o-T_!NJxk=lPZlQYocjZQZ_%>u z{vFTLa^!T5{rlwh7mys;^;q5~!978RkI!ZQLDsdM6C>-?{{%3mb!_;3`tGCqr%z!R zM-TJvBUvA2f_B^W-A6ytXZs(RUd`=(e8h~WJe;`4E1%%9E)ClcvW{dNCOFo2Puc_@}kx z5XnF}m%r~Y<=e$SuGMa(eA^cz-#&9t)`K*y1Gs;01;(u!3+=m+25v}>rFO^2u@mk! z1fob++jJ|Gpga{yi+`>um17Eq$HMxs~PE;lyu?{QFqI%S$nS zTjUM){&Zlub?=^w1cqzsTFpTcG0gUyE72tM_^Z#;J z?bGMe<`t`?&!;_T#0m(l-t?4?6%hIJpJHd zndtd6nbU~?#`fHaup8)nn%uYV@27oo$h>cVE}s;)t9}=>n-0#Wb?ftKUHW_)?w+GN z%eS*XhIH-ZIXRWo?N@(868m)TnQk%m>7HmlsrEhkd@k*$;l7WG`_Aa@#p-^Wa6j#0 zoOP{HF0`u-^PKC&HT_XBc2&h0SNOEd^R3M9&RY%nA#&mJP%Z@W<9Fe=Kz>B@oIrm3 zdTGiJLw~t@f%?lg1KnWh>M!9P0QJ>h{yrG{)3J_m_EFV4_O<@My^0gUxJ^TF+^;h3Ysp8Cs=!ToP`%kL< zE+^dY`Z(>|(|(uJSh$hWwBLn2u21{>UHE>Bzu$#@pBrdDpZ2@3C)OG4cg5`IKbiKs zT-yJ`-aX+4I2ffg?FIHW%052r1-f?ief$&5cRobF`e3D8^F~8?<;ykI6@K&On%5bA z^W~cR%%v&Uw0$S?>EQ+HS3eGPjHRnz?F(S6uYUDkLA#5sU*RpUiub@$UeUGEaFW$fB z_cE5^KD^B7n*%+lUiVzuz=R%g!Jw^UED1 zx9h$~I_8u`wMcJw zEaE$g*PC+4TltjsX^Sj*yCH}8o4O*DFTNad{t$li<&cWpcjU_<@3%`+4r!Z9zR>j8}QIxEZVI$sUi_2tmh_lVT@9+9)?tn69usf;Un z5}uW1Ipbw3Wsh@GC}(`x`Lf4}+;!y39(Bjkmp$Hf3zI$02Lk?Ein3=v`54r@ z0~qTid$`@m`TwV7&*O7WUu4fCPaWB#{-;v*xc=UlocS7L`zsRX2-(Bm+{j%=kUjj( zdB@U}J=zx}{CVb__E)(tNcivhfeqrzo~7gqVi=v?0LFUxg1B98UC{26+84A4cgadz z(XPM-leu-?Q`#3KzME2|Eb?v%bsk5{7!`?m^ktE^DlF&AA~y?J^n1MH+JJXj8}LqR zL$>=wey25)LVSfjPjIu$@82a)LYxlX+K{)W4&lCqFQoWP!2{cy=q;hbL%W-HZQ1VN z9I`6hIN6-sf%t!G2hQ1AI`01tMREV76;@)`!3nkg;C3Z#yKkVkfj26}`>^!(N^$jG zdVfXUBjG-t=C1AKu}{KJThk3EaWekOb_-RecSBuL0vpUgj!w#^lM^ z2eTj4ey}Zi?6{M_!dun0FN@z7;-owBUA3T{-(^n)UQPjC)&VbTPsDq+c;9waU$S(a zrHZ%Z6PcrI<>N_@;{n!d2uHSZGxjgw6Q8gP4~{J_?l>w@xOaCtxdV5|T|efmw{KF} zFW$*GE?H>DZuZ|i*qB89LW5-|@eb$u>sBRpHe$iQf`WMu$kqKwL^#zCCs-d^3 zgcd{oyUccy-*N8)?tnwQUz1(^4SCNU?>1-G;T-lUz}=~j=sj-fCX)E`UxiB~kp_?#A6_cORtOuyxv1n!f-eG<4&7Eb~#)@>#lq?iVD=Ywtizsv~U z0OPe!`D-M;Md{!TEfC+|tpmRQWC`K>nv!MU`?rGc;JwRSU%T*Xn@p zz9oV0V2v^GeV^bvSmO>C-~PF{a(vSpwH0y}?`0?OUUs5Vo+Ny^xSenX9u4J58|2CU zv1Kez?%%zvQl3DMGvx{Nl7uQKk|%xDTT|FV<+swkE4Gy1^yl=yF8|S8r)^cGt52iyDar3ae!rjp zkwTl*P)emKzhTcf^=F|!=w#C0hf1k#+)0A<5in-eje)+kFy8WhQH98 zTlZ_;dT{shN_xYmZpb9(o_XwPF1<&LZ6J+al&^>g|GO|c-C{()sSC@ z$y4tBcpN)FSQw7g*~!(Ru3fUBYq!tXg~O9y|28iivtB52zhps=lz2#6_eJ2ksy>ss zzT7^7KErf(+hN;@J_Gt^EV3bY*aeautD6%Ak{zr6RqeV?+ehoZ3R^?#GjzAH$7g0f z#cM^g)r7Or$XBe>tUvu@u#N6?cAb8wT5r!dyR185BVoP*mwV7xX@qPfiuF~vr&~d< z>4RPa*#O-pxfZ$&=`&QGZB5MYQy#%QPbEsYABuIJm2>MgCA2H+5$wN4jIZ(gXcKJ_ zJ=cDZ_JI6*&LcLF_sMu1yEoRtajecL@>${l%5}zj$69zj{?YE1O8H!_Gdeg^xDcJu zJ8J&xvC~*wh4uKPK2`YZR72rkQq5il5LMiy3R=^@RIOGyb-~eiYgKDDJgx zDjj8kj)-wR3V9<(VQrziul+L4SF@{c1inv$%zCVArz%#^rk{Pi@5wYPz}Sqn8~vtv zUM3ePe}4Fwr0c!P264lIl}oWtM^4>}Hb1M;l|+!dO3Hw4SFO%n^ei35<0cb zG_k%j(sN&izCnlA_`e%+%VwR^I>dSG6Jy$_|0FqAXtGjFJK~{{iG%Q=CZw+Vccyz2 zYzE8)$UWa?xPom4q3^eZzB!SLSce`vot^dZbXF%XjLzOIv2=bw^WOgX@SgXqh0)n- znm?T#y9gPPu?HdF!EZNAq~PCF{O+$c1fIiplKG5x=PU5jHb~w?S)RKy?tO)Y@mz2( zZkZf(4&P7BIsy(n(V1I}b3uM;<~d~%Ju&{J;HSp>r-ps;xdr>FMV2Mw=e|QRYlpWl z;BmaeTOX4>C-{D7Uif~z?K$yBU0a6l(FNIajBC$-$G&WCyZ0TooMBu$uO>Vdqia0v z!Q8KXrVq~HGi6*m-)A|)b9??iQ|+Hf&0p5I;6d0SSnJvUFwEy~J_i3o1NK#dJ*}Gl zQ<<+ns4`#a&Dw>`S3b-C80EuVJYQ25;++q79}BU}^W4YcJ*#fkV`};l%Kbp46zz3= z6nMv8m*}mx2XmU|kz2@i-$*u_e=n8TY=ZB-Rq%c10`V>P0F=w)`TEp&&Z@temwW)O zqJDloXY1)x!#j*3i+N5nF1=S_PS>PQh)-Y7biNdRi|Uzb8*uzv>{+L>t2U>wXPwG+ zpJ-t(C5gS1xV_oL%>qLjJl%jfoiNtC2gX`i_un6uz_!FIAeSr()o_;I;7dI&L5pUh4SIoIQ3T8 z014=oiDb6>cEEEh+T06Wc5~up#dZVUC%YQ|?^W`@dpE7C+3pnhV&5UMPspx|?)@N6 z{*jPwJ}q7UOkA0aceY?mRsBe@J`Sd(dIWSZWjyVR&DUlSoc#sM_`}~9TcFJ_N;X3Z zx<1(qu;(H+gV=K}*$g*NG2WMnJ=X($-m}HtJBa*rLgzR8HiNbav`u(ubH*MOyMxlSzm9wGMT))7`$N}GV1Ed<;nfq^U)rkhwn$3s!jZq@eImjCLxnWkd^)dZ zC)<2N{|5^#7I?8cV$YAfi|swhf1t38@_Ruulm8$)YU&Qe_uyUs{zX~Sm`2Wp@w8K~ z0PPl_LwI)r@0B*jeAhIlod-Q+^V~K@th}x3J`wKQ+YFoV3g8?vP4t6%fb03MX^dm_ z;&>c;xdrmawhI0@99>uVV=eQ?V(YqteCK=PT=O-=7x2zF^!&L0a4q5Q?uiS-p@TO7 zV%Cy}wEyY8-L?0x8HY~m0%go$>|cA4{p(p(xOSq6{C|bNp0G>s^Fek%&P+GaeLoa$ zSET!P@!m&iY(!D4UFjw}ky$a4SU)ta)(?#<+IP-unRtKk>^4=Ln0SBkoYkmzI?8Q9 zdAx^ld}9K!dWrRKzF+Mc+O5{-$JP4Nw<3P8jbu_%?~}vF*iZi_058F#(o0rM{R~agm$(dUQhUkbrFfL*{gOP^~Z@_<0mE7 zk04%ew~p5vLA+j>jKaDOpVVI3hYDl$s_28fM~K)whNyW;t;<~=dcs}g62rsIKNWjdG3I!?M*z1DH> z`|&h!@2-QJ-2EpLor&d~$gDF6$z5`qVL3A7>v9-p7dOyCR$aXaW4; z-;YzKt9cc6KfTT8$I_E7BfRMzN=D+KI9{Y>hnzWhaJ$WC4)*Ia2cUi7ru%UYf!-Y0 z0sRN-K6Ifh-VPw0X8pk(I5R-;HZI~L`sgiRI$uCB@`%p>J`tahU3Z`OV^$*eW7Ri| zI9ALF^IQS*x!SDfP2n4A-Cb5L7tC>Ezm{>W?ynekmmc?z^jV7s z{c$_kqq@J@8233nsu;YrfHN1zU!&Gv_Dhw)xeMSTLAY2ybdY^Fb;AdbPx96X!1kAGDuh_2aj{sr|0x+XO})AJW_L9p%&XonYkgwF->0G(M!K@tw!llAJt< zG>;GILrC-ZkcPaG@udMj(lowq8ebaY!#4|MRU`UeF5^RcZItez_NafPb4U*oewWGk z0BXTZuA4aJU!D4y&K#+i6MF_V(EUFsj{5qwAau9*hGU7FfQdON-Yt`tV!aq;KuJ2cvr^_*Z1-L*j3+`m|G;#!R?R z6OSwd?(xmSH%0jx_vpKY(z=aKANObjaZb_(;|l2kZV&Kje(9&Vg7hZolW8%6G|LF! ze++4ilWDOXX_RMLj3bSHnHCdBJ2ZaKVp_^DEe;}0{0-Qd7Fge6d1w@V3I#u(ZtJ%scq!H4uFqycLO z$?*{>0~s#k9HjOkr?=xf`f8{2IMNtr%S@-pg<*QPw?otOnF8Y=@e<_t3Mt!3Jl`X2 zuq?zK$K?~)O*E~ah zN1yD zKo;nJc>Ym8!&(+lKl}CkqkhmH&p+J{&p+x1GKc3M^#gqI{G)#QAq#rvkOe!TGie## zJOf!fO!~)a!3X+VKGV(o*5%Jb^wmyjg0q`oLz>`Z+Jy74jpii5*-yAfn&2E2et>=f zUOo}?jOKm|#+3kWv>u_TeWX`V`$T)BsjpcYyVfI6hV_fQd}sZF`U3q}zo5R*FY6bZ zkVZRQG%rV}Jn1(`k0FhAS}46;%CLShj`S$aEzHpgDo^kuJuPKAXf7UlfolYq+pZfqqsI7A&EVK)JbVcM&JEeQ@-J>~)bPj3YgXIyy;Sfzh>j9+GG$y2n=sV3B z(03EkzyZsn5u`B&$fM%Kn81CDua9`3za{mU<}0LLyTAUSy%tJS|LCWa=u7iI?ydDPqLl#m0XouIsF{CjLUJth;4Z5;C8b^AV+6Rp%kVcy6godc{uG?0fj!1?Ea;EpRY&aTZ+LE^Yb6quK5m_zwLsyZ>X1xoteP&@oeN4B>-(SCBc$I*ujqn`FL^ zy*(OBS7SqF4Cw(Yk!e)v!tg;mbLbbxW*Xs(ZQGy%U*hrPWG@jMu7B4ghUn$tN{ zw~_KQ_KpPSO>aqTYy7q<&1_Lw{BE;>WBb-f9oqAAQc~w8zYfZQ9!9xdl=BjqA+%@R zio9<}+JKL5EAPSGU8I;S;EDZvpWKdl5uQr`&Die-pB-Yi61a=wHqiPGoQ;6*4)qYD z0bgDM=eO{k&TsJ^+V=wAonIfnk0NFaXQ{C_IsrZ$>rrQX6MLYIjSuY_IjEAK!#C{f zU8WlGcCDhl!A{H{g?b6{f80FF-#%@8+e+V5gYj)Yee-UKeoOAyqKZ2vF z!{x_}Z#%i%r16bma?UcoabGHBd>iEU{?ho?%in%)eB(aUYm9IGRL z@qKyR#;=U>47W1y7r@4CIVNng+(wJh#uR`1SK}M^<*YTn?WA(fzZ>7S(licTz0{XWJRkI>aec4xt((g|!}!MI@$N9bO)=~r zG`_j?4RK!4J_fnm{~F)=>6`OOwTECB8Td=Of2w3}DV{NdHKu9H zqZxZY)*45Z8nLggXphMKYIIz&ZP8dqHr*j@-E^{U3+p!EY#fZV<&8(%5|~$9m$3)S zU@m@9@L+WVp0d2VKCkn>o3T|Hj*_3N4&TrhE8*K(4&Rpy_?S);JsEqp42I%XfqiUi z#vU!pyX(^eUr$#h>`B_Q<@LRi7CjvT-!GmS(qgI{zFRBdv(g#cE5k$arr3UjP9Lc3 zr?;#h=M&L>YP9t!g0*DtzBYsz_%LYh-Za0qraxFoAIuA*E$^ezwuA;fyJPrai{uU6 z9K(NC>w2H9q+PODeXP@;uf$vVSiNfu_=L}&ZOosaTaW?8_X-TwXABrP@2>Y$hvDES zYT|p=B7S|p0RzjS6{8t@IGm^4&spz^?T6(;&-*LKnht5f{iwgF>?il3%6{&8r;K&` zhb!}vbjN5VKkz&qx~6ih{bewChFq6^4vrZ#7km#%-uRb|xgz*3NM6p(z|RoKW6n!n zDtXg;z++{3XAMeT&lW@GN`G$@88E)4lJ!jZFdSh+iHqUyk)H`@} zOn(irzLp^|?w=Y0O< ze!PL`oT=W{rt2%)ipT<)e;3TJt%1#zZGp}PT+S=X+Ty+G;u={mOC#UJJsa4Y=6N}i z$gYAtYHh|nWB6?t)NARA_enp&TFQ4jmYQxl8MH)y4($C4V4o3>dKaRvy5jcA zxtV-^6i3NCd;u$Z)E-*1x7d%ax26%7DKK8ih>tW+4B3Gk^MWo&R&fE%IMkmcK#g|F4YAeYu%`=pvoJ54fTF z=bHKB7wG&M&;(<5&oT2y26X=a&Di}^KX2yeSx#pfxBQzP|5;}K^k3-ue?Z+nGjHOJ zI`4-9oA(kk|Ik@F|64l$MP`2f!#e+eq;Ky9W`6EXI{*L4*t|bB^AB#+`G+7U$S-n+ znV&yX=TDNZi2R(Hf6#CLLFllQ4_T(?#yIJT)+Sy5>yUqx|J)#-*Pi_KI{$!%|2by+ z16Sz$UuyWCZRW4IO6UJpXzzjlqI}WgHL2bzVuEs^9S-e|6hggyc5j)@ptL`-)QK|{`&t0hN|Ch{tZ-tqkKU?SjyM`}g=I36g z^Y0Vh_Kq|2SDdHw??&Ipnt2C(+W$)0R?7p}d2WroQ`hxmZmDHv{oJ4H{NKsgRkN9& z|1+KcYk^JS>_U{bV=veFQ;=Jry|T^x{Ks|vzsTHCsj~bR>-@dKJFs7j_P3v-^Z$c% zgOUv!OxBCMu|64fdir#o2_6&9Oqp%w9i4v{_c^-{^Cmi`f!FB#|D*GP+h~6NgF64e zc}%nWeqrYK4C?$J@qC}%_lTK4@d};)ZI(B)`+jETulQ4)f3JogYeKaDo^y5ne=1GUgsZVn$7ORni9?5G_3P6F37XleHe$4|4NduV(jQO^fDR z-_-dJqx}Zdhun|mkG(_Z1Md#ygKwkxxwq*2pYmEfyAN^Je z_(~uJ#vj)B^1QS7 zF7=W<4gH}!uXwe_Eo5dnE${k3?6_Dr*?v;xxX`wNBiHZ&T;|eUdx+&-J)$z#Kv&1! z4cSu}yHOo4bZ$g{zda%b*%*u9Of_nq5;QQ{AU&6jn z{^crjT_etkHOk)L2P}#;$2s$(Rb~VBPFw7zOdIyrHrR=hjs3MN5m$88A*`i1`|yX! z=55E^O8Z+_du~U5n%4NEGtIWt=kL9$bUk99_doh5e8exs9%I9vqY-EO!QW#4ebWl= zhs)t!IXYj)=NDYud9=Bq(6H$k*aI!tt50k@277ZGMiSeOMSlY$DvRH3%lE46a^7Fl z{j-jeB)V@q27d7kBPeq#${-!U*b5k4&d(w*{EodjIXkg}Vbrm}*!xv`aIZb~OA$XX z4g115x=8zSt8wOd4eozm(?|Ql4cXP$2V8p(_GKRq%eUfeBH_`;1D#uAJb3G=k29LF z|JVE*#G~b{pd9XeEKxazMIFO@OWj|}4nZj67bHS7CrafZpP511@{7KM# z46r+~cZj?6EX$-6t@DGqT*K^BXD??AbSscVN7r6X>&MGw8GzblPmtX+C%X ze!DaL_JO5Hu4L@7r1Wi!=VwOW>G7sy{#?YdTFn`p5y~cS#Tg&WVg4n2Tmsm;Be1); z=O_Yu>-e%@&ZVXix1-vMm@nA(MLfV}jAt*62V((U{WBao1_1LD^B4I&o0H+bG3ufH zB<3vYqaJ7<**7L0WBeQN8RNT;;0x&0-g7j`yo?=32M_lgCz1zL&!JfSp8`HP^&a>y z9&QN6n4WIRSgO{1L2N<=p#8mK^ z2jE!t=8gMFzyloLf#2%9uzWte;Qgn8+cx3_w^4XOHEc6@C^}~x+;tq~3G16OFI7Xx z6Y5(A-j>yiC)9~^^Mte4=sT7t29wo!!udy|etU!`nusUd!{7;T0X*S>CqM`03DCjd zjVK+wuMnJ-yb()}omBR~vYwyMH7DoK8{QWUJUyv+Lw(A?t-%{k4c>4+M)kt=V(cBl z8%~5boSO~2Eh=xgIP(~hXR*97T!S~<4;uB4C~trcRe3{gCO9j3ql_NIeCGOnRJLxs z!EGwK?2R%jDFzDAbbPQx0U-M8t0^kVcW;f zy8w6M|4E3ygwJZ+7iZhsN$^{7Ri6#tmkr;S1>cvINhBKC-(?Njgm1KN$PDuQ| zv(o;@&8F|3=ZaUP@*yweKQ6qWqV^-({lR=%ES-6f@4hl^enV%TQn5NI*K@8iXnaI? zKsDBY5APkt>C9#L=drkNrLuM70m09k4E#Jjk}a)DY-Q%g5VcJ5|P+ti=BLs(WC=K8!td_$WB8qYrT%n-LeZ zm*Q`pL-2>O3Sz6WZ(r#1L!+N^J~)cToK9`yUmE*~7`rjQ4jA<-)&}<(#hwJcWdqm~ zh*jvL7?~=u3Lg0fk|-aERX{!90saB19}}zKtz=vq@M&8?#`k|1KA$$Nxnso^kHfk8 zK9xP7a)?!k!8P6Qa0+mJY9ywoa~k^)@U>O%|Jw$By2cxL{~~3fPD0No!f6y{7cl@4 z+Bc2U{Z#2W@o4%%D(6ZBe#{Nr{ka)24t@Gv<4QjW`aC8>zK*J6Q{Nys1KHBmV@3QN zn9qY^4>KKT{~vR{6EQoX&w%}M;apT-H^%Mz4XVX7MaC1E`w7f__z?ES#WWc)8}RD{ z@5y8yiw{A@w<{Tyv$ggbq&)BahwI}&Ue?Fi2+q{sQk#JcSX8^oF?|4r-85UnZt^~B zz+52@79)14%3g!WgIf$b1-^q={NF@n>#HkzqXvGK_E zbiu*K8u0xw!&jjT#^KsIoyu0#1^s)sPN~!dYxMtI13wX6aNDuIE?ACJ4}1O*n%7Gg zjKGim7U+U~&;=87>VnnB=41)ZK&DjF1!aE0?ysQ>3jcH&5%dR|H=$XM=Sx7XOE+Y<<^31wTLpuSx9mfA;(h2+ zejk+&d7x)dc)*FSfB&}(UyI{I7x<=)zRUe2?0=hz_rpnj_yHocJ|esT{2P8k?Q;0~e*`~Eix+C1p^J^fy53rr{G#?78nL&)xrK9WjB~|4fIT?( zRl1(eeGTBOhgTVQ5SITk;i%9)p#6peuN5BgB5jt%|1YChEb_heJ;rlS&MF#D=ttZv zzMB9xXPZI4_VG53$699D;hCqwO8yAzf5xa^8J7iKXFuS4&OAMX@mN0BgT7q$0R(t& z8OVs=Di)t(1lNJ)fnUbrF>-Dwh$HKmUd}$j>ix41Acza=%r^#cS?n7dzn1CBaan_5 zT$aaYCJQnL^1*$fh}*%tOMBrr-5l|oiXT<{uA5{0rcUFW_%!^9F>@#~cJj?8=RPx4 z^-N(VJWE)AUUT?7fy4nAycV+_(HxQTZ2O12w*CBIJqpUGcNuebF?fw(b9wJS@C(NB z8qT~L^AA4z0B)D<|DgV3=Czo0CFsk$gmL8KJ>a!id|q5vUSnK&ucbC)d5zC39(rbV zUUN^Ox`=^%vhv!(V}%&E>ZOcZKh}|Tyuo-KPs;ZRKK*mM({C1@(moEM*Ndr4FgF(~ zZcgCi`2V2qSRJo7eot8Hn{fa~M8^aE4Zhbpp1{ZF04jC7I6641i4JwMcclLl%V=vK zfi=jm`?2m+J-1ua?-#eX%VYFl`@>)3`653zqV*{oxA<{C)@DB!0gs@qu$0 z7q)-I2lROC1q*!|jeg4KKkoykld*fjQa@?bubBUf;r|1!J{eO|Y$3X9^wHGY?KWyM9;{S`?3+6iBPmDVC^8ZEPf6RNq45xE|;0$C-HUA%% zb@x-*s(ZoG-v1iop3DCi8Bgf{>s$Q2U>VO3mFuGOA7!$0 zaeN;#o(ZGxa=F0k&1{Wz(Z$|>WKFM-3ya|gthFwd#s3F>z&JX1chFesyDqwaXW(aP z`92<_j_BP=V>5X{)zA^WPgD7j7xEtzUeLa9nU5U*ALwa|sv~+g8nlY#1y$+iptIBr zd)fZ~5#a^kzp9Q{7XKgcLL42`)r5<>@j@@}_rK4;@6zIh`uiq$%*NRYvQ_XE)^RRsqJK6u2rMgf1 zBq;8p>^zdpKl99gE!|7Xv&|o_H-|1VbT2OB=6JqX@YCacuEJuiHv-?YjlN^o8z+9f zk@{@&2Yhuz)|)E2m%w)d^Mda~3f7xAI;dw+**dQ`#~b)vTI zcZoUix|fuP{U6o6hF&GSp!Z;fUMT}#cD?SuaBAOwA@Kd)=(|hb1%p^>e~&4Yxsfxi zT-Sl^f23^?;66_868L^f@CCFA_#lo3?t@gezI@>P(7?~q;)BOY?@~YDF&lapbmO@F zTA6D3$lIoR?Z3{Ycgg*KLBEFHHCjXO^1f-%{W0rZG4VD5 zZj|@|e0&FbR~#Olf8sg5fPL3c29)bv>P~8NVS1OxcdR|FcU9B7WdA>qUmWwcztV;w zJ6Po1R-#3ycjaF!ytH5Z-okI}3kc@)V#T}(d^Z_|5BNGku+GHde+!kZ?>ghT27Z>-Idy?^vh5MGo)9gh{4kY|@WAJS z^&}|cy|WBo9kFpJk^81Y|My;;156^MeaG4!Q7V@ofqZ+S@WNc@#(8YcnFcS+=iE5g^ImN7 zMD8uZ6TNb7oXfZ`H0I@Eof{YUPBZ$B0**d7YSz*OjFFF;qTWCx%`vJTWV}lHlv;GJGxKI^km9 zKVnK_rE3HYzNPPm5%zJOlAIuS<)?`KrDZaS0D|0f21o>aWx?K5y& z%U{d5@cxI&hrBTHM&Sh=Lniq8uQGfsA}^HL|M9#K@2{2d;p~5emyQT84A#(@JdXXZ zJzW*=cr@B6{D}pl4 z=M6kAM(nc8Z?^jboi{di*{$S{0B+CR`>%t)szUAueJSw)_;?TfRdM(%@mybkzp6(6 zAEq{A{Z+Nj35@dnt%FqeX@6CWzbeh=0p88H_5C2c?o{ztN%>8JPd|2f;5EWi+F!+G z#QqQF_G0Z53VeM3f6#aAy0brC2b21j(fES;M`Yar{^N8of$t3ly#gI9jt=ghQrWt# zJJLVf{{eoM*1A*Sw>s?DWgeqChhr|m6X88pph;Y;vy?~te>8S^)3C%YM|r~QGvYWO zkJx3Q5AFbr#7LLVe~t;>86UeW^$`aUsb4Yw7bA8VxQ>fm7Wkgc@cFa}VwdA^?yjS< zb&Fk={&5dr1V3}dE^{5V(x|f(W0x6Dy8nM3vCCZ6Yo)SPW0$497GvB`l-Ok%pKZul z-p3h?_f1H7w*5nUZ0tqa9uwb$;3HwIEsM2}Bk-B~{>DB|cljK%X@|w)|HqHRdU&6KpC!H?&in2HnXfZ6wg9)ad=gUryHq~pfuTzbpM=oMJpaF_ zx}p0mgI48hBkNrID{U^?$C2@w@&6TT;}MMC7x@0cpjV(9#?it1dn#LB-O$}-;P*+z z3*L4Ex1IEcQqA??vs6Chg)tqQJQ!UMOdmi)y<*6`6KcLg$#ccK#h_J(jv-T4^R^`J zH?=6HG;*Jt%&#${&XJk_HP!-o|1XeN!TgWIy~q3ib)Nr413ycA{vWn&q}X2o`ycwR zuYdEo&UE}8zf%56))Rwsozs_#ZIqV#Y`BcV{(nTLemra=?uYLGkMvV6|Jmkn<833U zKV;OenE#7m8v)mGwvoX1I)=}uO<)_v;oQTXe;sWj>Hjqbe&(``xQ>Ip{|HT%qHV-* zdU=8~kS*2Db#hs`|F5cTB<(rIxEI$ps=t4p$E5H7_x;3te#fn}naHm!=fuGBWBkixWmx3`l90L&4d(3`$w{pD; z`f@uNH$J|}FJBdp-ZQ9d-Old_{on(r;+L;=r-;kvcR0@aspOZZ^%n0HCQDaasz~?h z`)?J}-TGg^TXJ-NdWDbiD9tM#V*Vk2KqR+3to3|k1F5~@5J)&*7y72_y58>{At~#cl2z1UV+!M(U^5NsQ-`w=c2E> z4(`?mt}E8v06zEtBD87E>$~;iaPHhgWe=$Qp~rr=e$YQ+0U~QCt-JD0Va(n7ejV=z zMjc*v-D8V$y-{G?h1FMwyY<~=8EZJk-|NHaAPyjc+m5^?^K9tzGM|TGPx)otf1|QA z=Q+>9y>nY&yQ>6ZQk{1i<6VUH7H=ii=U#nTkN%NmEp)rgQFvRUR;-ki|0Slf2z)z@zRPuS_QmXs_r*y4zcK1p$b`l4#Z-xv68PBu5A?;r z7LB8WVn0CLY*Fd|;|6|~xGg$wza)=MeTc>u;I@`uQp#UXOd3;9Dmva{P<>Nh!m5ReBd;klx$!hd3Zvgss!hG*k9VVMhEhl)M zN;X-r?#y+TL*{=E;U`#kjI$hWVw-VZwp;xCGXJpuA610WWza8Jhhpi$`~P)2%OUf}-2Y!% z>rh4PRKOc^o#l}E`*Q=gtdk8_o*}2bR4G4e^2EfY!V|+0o^WCJN9N^X*(Ur=ya-DG44-m-OMdb;1+@P5eL*yi?&o%WGqu$b8A3kT$E#Qeb zI(WBH**dQepE20 zT@d)p{r^~A*q@BGQKi1=2RI_UP{nQ#_*NM73V0!o4sHvTtuHS)$CT05E@ICQ?;BQs z56RfGtjqg7^L{&F-ZnJjR?hzia)x=KyT-cU{*G`Ft_v&vRCu8~vMxA?12|Iag8MV0 z?^s?KuCXqZ+5bm`7l8k&>w?R%{{g)MUWlWEhkgHg^MZ?ge}lG9B3|(Rlg1X{me1eR z;sp8s?0viSeSI)B5w?d>&aW!TPJE91!mJzVbp3+(+P!~@}a6^RL#_23SJ zP5}?Z;{SFkTj%w_j00F&x>5c2_88~tQ#_aaJtmH`?2nJLl=2)45bo_A(r459CC*aj z=gr3aT#WlVW&VsB{TgwWy_I}H`)mTQY5PCsJ-z<;I7`9b76aeGo?aXtog$U3Tb$(- z@9)2l+6-dJ-xa7QjA-N-vA8OnOgRTl*bu> z=sJ^oone0ny$U>EtVO;jUEnkQ0I@pPXuQrP^*IjU$gVe4><@wOmCOr%99*#8#L>a! zegC?xH_|`O0X%VZu9|0jn&?gtob|F3iIS~-uRKO|2FFSQ$9(@mYYwr-vv#(6`O_rs zGN)sWd(M^E%vsrQ;x@hK8u6FSo&$ zl56@B#WjgUcHQ?>cI|zbJCCUB$~$EKthx(%$;S8O!*7X~@@F z_g72#N2q-0gUCCw9`29uKE?k>WaeVoT>{?&M&E`!a4Ypovb(sRXYT)3$b-d*FWz6N zlZNoI?H|n9U>%Ib|9=q<>bnkl-!t&KwCt{h$FeZ()i-Hu0dD2)k9a?vl>Y{mkMO|R z!UOs)Mww5h{lBO@puTF*%HV-?Bwi|F+cV7WZlm52;eo-%Sl@%d$F_e!r;rEY@c#uG zOMQ93gurOWFxrx`ZQ15^)xW9%j=#+SU49hA-E=|ef0Kcq zxpYCU<6U9YS&F)#;OjDiGmt6ObU`lbzKP0K)di)!OO0_qQFK8W-v*MI0WR1#va{09 zNIHp>$NB&0I+(*7-kTdr_D<0S1s@j}YszB9uL*qT8hyw5MpXRXtkgGc{|dRV7&;;F zAGaSR@JZ}HXNn_+8@bVX!wlS4=05&Fi7D1-vky*nh6) ztfYFOZaDC6;R#pvXt|8)Ht@DsvHt?!JYxU5<75A&eyaidQjG0nIK3*d|FQIFq%qYk zwp02~7`cCNmc&j!)p*Ve}oVEB40kqe=bG8ucsW!eZ!(RbrO}zFP>sfL?*F7)J-W|G&Pv zqG#^=FY)y-&=u#}Q)b*MjsXa8TPt=+%JW%(kQaJhV(`LFj>m`1e*}E!+_&Ph0D+&& zSR04qedt`zz0!dB2=PFy|4`sF_x=MOh{gX9jiqipApH*-_<6GM0FTXkHI2>Wf!=r@ zx|Bbk%7;8K_HyBYUa^w|U%dAp%)`a&g3n0nA5)2YTau=mH=6 z0RlP&JP?cjT>W`K;{OBuJgIoVW!pc%Z7rQh<~PUwhdeMoRJjf~hy#eM1B>N96Zkmx zKcH2tPShRmKa={$8L%G_UZ|oI34Cn#2lNVfA&w4Ss{XuC_Ws|KiWj_x310zjnHNUm zeaTD<4|acaJs8k;HjRpJK9g|M}!xE|2SW=;D3hT z3+NT_LL40w#{$$>H4gh_M7-T*#M|}F8E;p8Z0e%~XCPau?Xk*y{xFrTy2r|86wU%f=F(h# zv&eYDc)LEt+hJT7-=f9a$@tjz4{*WjBF-Ym-HWi5`~VL70YV)yccJKr`Ybq?QGaQy zEsM1-3VeTN^j$6&c)gj8*h`mSe^|=}sn7TS1#-VaE-Z%M4ET>*7X?1{0|fL6*2OqF zxY+xzqt8J4e}jSFC)>KnV^r`3L}V|oi_lf#)c7OOUorm|V_gKU69zBGa}(72bQ$UjOD9wawZ~=Lr%S z`*ua=QZ_2Lk@7S4js)jTZ%J%x{I)91Y*AVKZnN)ES)0#w=sNv$P9!CDZu0A(9P}`w zTrbLbiOdk%vu;J+wVdpGyu1$jE#2)fLoC{>Q|U2sXf{bIna_jQOa*6nHyLB5S1@<%pK+VOTWJJ%YaPFQV|sKI!_#DS&H>L)4R|_o$4hyy8a(g=0G?DX zv9UY-x)3Jobb-m!Fu6Z2gGp^ntEP?JQx`E@%Ic^MmwS-v`)mJ!uAXD0yhAoy44&M3 z8LqaTi$j?5&lQ-Q1m^YYG=17?_pAPw;STB3DCK9X;p4x#-;UfxVZRgWq~BSeK0n|# zL;75}G3_*KJhaXM&vXwvF6()dc%hD(tzAdrv1 z!}%G@WgZlKZB1-5@aC@_?q?akw%iF3*g6EZtr|9Gs{vbjyc2kPj-Fo)wc&CQSzDfpM9k~|>TvhoIu>d^3 zvLQ_QHi60KMejofOr7IhkPpI#&DI=vQgjX=klT1WgXgh+KPOIJUBmEn^duP`K4YK1 zLEuroyt>+ehjHY-24`AR@FApQ|!MlPh>39^v;&`92tv~xS7kT zcN=3#LC$qMkSX2;3|E8op4xEH{eKa-T5`{l@~V<=rN1i}u8v$3zt;!&u~I%}-U@!-#N!}- zO838$%4%I`Z7_Fbyq6kdA^fKM-v<2tiKhE-ZMf7M4Y*ozdi{@)i_+igLb#?1AzTw# zfeUg`;Qy0KxTXdH*BhYArZ7J-mlIYJ^B8kEm0b+2!uBn^ z-$pth^h#+TF#zG3aG+~^nSS?)>wy0f*_5w0(K!LX9^3!n`qn=FHt6Z^sNRnv`#&gu zfZj5d_oXym_miIg(i-(&R#so$PinSw{hcbiob3zf&3oDBs>k=zXuU$`_?56bSoe^5 zP=Sv=qkP-=dl}AU*82#yjOA46hwlH2jIRsxM~z1LxeV{>1<~?_mhr2op99M*Tl(=- zJl@?iqV+(pCiHW3b-cN!Mavhu#xK|XXuW8(NSC{dQmyXsskREq7s;R!}eR#)2%NN?mU&ehbx0tVC+g2G1 zY?=rT(9g@z&$-q6aS#I#!CCA0nYy1>P@Rm`UxhXvo%s)Njeh#kPsFw;mjxbd^ssy( zJ^n)OCuO}_`kAUWp5I679cUZB5VYA)V?4i!mWPZwP51Ms($8R(e!O2q>!F|5qn|fc z@5lRjv^?l@s_y4f>1S(|ew^88J@oS?^z-KG{Ww2~mWN+qt?uV-(vMrEAJ4G;(a$^3 z&*f4Feuda|$i1KY^6lcN4rnFxOeuvn0-0vFrYRyG;kI?@h_?lvTHRV1uZ+vx5^Zd(LRq;jd{{?p1fv(&| z$u;My;+pHAvwRfzPc#Va^3P{I#UdYAue!Ng(HmNf@&u)le3Lf%rf-W8U0 zby?^9BKq-tf(P8~(4(Lu^(3r_|1U*l;Qu2X3cAy6hW~G4dP>V+*lMx3^!}-AEU%2v zB=nsyF4fnlY{AYwI&WOIO`j)o54J{p|7`R7^XNdkmV?dKg;Xzo?zy`dW`DjeAK$Ps zon|{TV?l?GjBlr z>9Oq}&@(;0nq^6YRb!m)O~yD|#&3YWp~nedQS7|o^Zy|aw&WsuP{d~>^c>aW{NcRE z*)gqkv1;?y`Ct_01D)gWA-+@knT=n7w!^tXxY`fFiZ&I;%6Na)kzvhZh+JZi{&f8OKmnpT4E7`jUT z?~K9@ed#?sf7`5krCxvKeB^r0+oEvu9s%s`5cXU~Y}S4~PKSK}QqI{RvR}U=J51|@ zYplu8KVSp9FUH?%1P;ja^7$h0Ut++~X6&7W{x`wj#f(2Y_pSNjuh2Ek_Hiu#OaHGe z!{3`V|F0#uv*mJ*>$n@Dbq+Mc-q?S_cVwJftKs`K#yDG|IzVKPNZRk`ai(&6=RM92 zUk9i*Pn?%WVTQiDfyb#V8E3gIBKS7#{}jfVc2Ada#;jX{PqF@s+;K z#lBF3@8OH#ew@>(j;|XQI(pd0d`7uXl*_v7Wt=^?&wHFL(`U*!6}^3K`eLPj)AnyB zJJET*)PX)5%WLXn9;Z*6wD_O3-X8isrTw)G^YYx6<_&ZEw4NK)WV6b0|5^`%JuJ3R zgVjQC$MYJ!{}HabbGyFyD2gSY}`}5+*={ypxb3l!^Y}|kMPv`U>8*ehi z?3qODW$dTGCfl5Z4?0=>j>jq9W2bu_EA&#qm)QTlOdy~A{__up_#Hb|^ngKM-(lOI z^??0%-&?Y-vnik7lOH8Lz%g}3^6BqCe?QNQ<^Dcrf_>o`Tj9=XeqYttb9MUaE#~gHOAP_dijUAJzw_o81MckJx1*dtBUWhM_~c{&k5lee~rN5jlrg5OjFImDi|nh@e);~7jE8Momr2`cAAftOe1XdyyGz<8|E*G`El26O?0lAC zHO6`VP9EnnOT$w!|372YX&_%;n)Q{8wX@0`bpDp>7<_y87ed%K(OtusgFAhF&qqQQv^TeKkl@R@c8~e;QeNg<7|BX!u~)r_Pw<4Z>JrvM>@9{_-&Ke zFX8WrSD9mS#~8P*xf38;5|qdCka=7E+Q4hecqil3_W3$87p6!SI`1>etMOMre*U%K z3ARP73~+_FjJa^^bs-J%mk7LDeR;(D{=(BA*<#>JO~H*;C_S5&r; z&NcG)5%?)=@FmM1?Su9CQm^5~ldek?nk+|PD5r%xWWd`n{?d(8pZR&LUU4e++Pm** z$gYgWGVDd1V*;@ZeGQOB?7N39S4l&L-Qm4|Kh}_GGqvx*aID%lOMY1?e>snp)|9D> zA24Xx&3JPS*olTy`+lh9koNsmjMuPh3k_sbxEBR}5T1KG6WfeA*zLn3xbo@5aP8Y4 z!hcZD!JP>W|D_T5|JQ(D(nKd%bC&NIf`HGW>ndWP6eGzYm|r^hJM zFn$_n!~0%*CsVnt$GCPc;yV7=T5{)v<2t1EqbZFC??N6|TI(Rbt|9Z^uro2HQ-ELI z+haS^z-!uX?|h^0R_zBCJ9A9tKVokfPW4LeyG3*W%Hy?(cz|V#`#f&T=YiDtD)i6$ zmozUc`_{zMO2(F`bkB{&9|blD!<;)pO2WOJ(7^IUf3bD8thvSDY6ZwCEgfrTA^|&@%*9 z_#R^Cu_Ly>PmgqtZChDS#|lDo#9ax$byFV)8gdh$hmJLxtu{ZOWsD2!e}oo#ZqDj) z@%{f4uX!~0=kw+u+X1uDaUHP7e+C_)QO2~jO5cdX1)PD*HhjN1N5+ITm&fE}sBED% zm(19*E|#!9iA?g|YV_SS{y^*+6S4imc)7kL&gbEczrD$r^Lcg>ar4DheRlGsgpK>~ zt>n7R7GmlfDK;O!f5@JC9QFY%l^L;c#`7AS$Glzb0gseMCI+&raLxd4=VVvnx54$l zZ#ZKH`S#h*r{7G|q#*gMhR&S-y^ExbP`u?I4>G-Cau^mqRyW`8#oAdec* zUm`NT!P@GanNK4+ujdu>^NkK$|u;`xMr z*;RWr&PL9XHcw|g;K}siqRNb`i`BGiWVb4A z$GI!lB6*^}kF+v98nY&xjK)xu|`zp8my0&jkO(h?M5wwix&lR75Uj!xAOi_$(nF!{%0Dk zcK~02aWizIMqi)FMPWkyn(tUs?zl~?wsfM4POhLvSH8Bh>`o?Z*k6W(+ci~%QeGaiT5H0*-t>aXG5W3(=nKf zEjXu`*mexgkZu@}H^Bx*R2J_oY+H^seL0^4)&0|1QV+W9D9VH88%9v(R+K@S`yd$U z9I4CsdhbEk?bdxO@&PpXemU$1hVO1QPm|B&Xz0Q4pX_Z&u1WAdM-u*&Y~);nA2V2J zoo))p2Rx9?%Xo0kr9S+4ltMa>cr@UfV1&<>%P}4t#uxIFM3aoQLS;XDn>qtF7M*V; z-5O&_%>_@Wm+!^=OYk|17`@y|uG(xBSM^!Y%Pr{TDd^>?;<~<6^5jIScrw3RWz!t? z*P`qxn<-Wga{t6ccJ*@;nWHeDR!yi3=2l@#3O){(&bwlM!=~tGx;`TV`@;O@wij1j zrwSiP!5%mlW5oS9Mjf}UvW~N&c+%C7`6;#D%Jmg49ZTU4`+hH_|50DtvTWmckLfR!-eF6zg>dP zP_Sp-hwQkREI-bj`dw zIXQ%M+Ag$HdK1!~U1*{72-2g}{#D7zF{B-8AL;E*rV^sJ5ck)B4n zo7%rJIe8H2-bS>K^dTx^p?#z+$R3y49|rtL1BNzA_mE5?_>sokMVS)Oym{tw(C2cE zFB|ztuRwdK*D>=B88={QrF2fdcg?&l7T6{^qu>m{`-p)Ly(K;|Hg^_6677`c)zp_ zxI1QE6|~(-X=)p7bj`d%+8!qOkfyd#zJ=1%w$oU$z_Y*wV12o?*Gu{5Nqe(|-jq(|g?3#G@91`a!C&J_9qt~N@K z<9nLMkMx9;@0f9fXK1dELdMKEfEV8^%u$|I*e0OMk zNYnUHzH{dJ0x#xd8>Khl`z-a3^a#?RQOC^l1YV50mD1a(4AK8|ffum1Q+h($Y@zft z(kS0KbDHot!9Gm#iG20=W+5LicFz1!0DBvyd!$~P(mA97SI11Rz>Yp!DNV2guCAF= z1@?aGA8CReeYQ|~1Zm*CbLJF*9euS?db_llru4X!@0eMqOkFc;1$N-6 zozjP-d<&&TK9#JUG=Elu9&2Pwsu8@_q4B>e7+d=c(t2zyl+Fnpoii(gv9(cpfchZ( zBRzyPXwfm#UBuX6%VGXcB0ZuCqm$h-u2IVG3dYq+>2az@^y!pwF@2Dp#`iSQAL)bC z58ex)jHEGHy&>|hSI%^*!}qn$LR^>{mGQZin^(mInWVh&~qho7EoC}O;Yk54wp zSh;_sr_n|~^{LnLvjnozVFlbhdN`^9Fo* z9Jj@K+sKs}(%UN9a&9X$SZ%D^StG+{TkdB8|FR79Nx;8MU|Io~hRfmE3ivUXR1IC# z`&6OJf==6ww%kVD)_bw8m9^!30`NnJ9VPg+Zh8-;#!i2r|;fy~7Jzsx}1;QwDn=PdY3?CR7E@C13(v?B$1Lw1gW ztiajldCt-QPu|J82p_yB=0H*hwH`kmKeiD3+99C#|V0QzuQj+aMg=q&2-3j?<<#k->4^ zF7yI^t$n}Gnc3B@UI4%K*M5F~z>a3loH^$?&-;0v=dAzJtG!&Vu_HC4sjN$ee~3}OW-3c%~`$)e-XV{ ztyTR4VgGyUU0c~~rSE+LS_{T9JnmWkW2b_7h5b}E28AQS-)aw#Yro1L!<+;D7_3=* zhkF&U*4CHdMPSznUVv*A?J`%KYD{H#p#1Y<=Nkhl-5tOWBxCy2fsoNZjIBMa87W|7 zt(~5pgWuI^)SP>U1@7R7&U(Bku|u=*b!aQ7hvk_kuwjSr4Hc00!|($Q_-eeDk#`K@ zP_YvW_{Xr%IU}4HQccw{D4rEwtYe^QA)|#h_%hU4+im3Qao%>hUj#m&Y<=bu3Var0 zHO`m=rYDxB?SAzgC;n)0yo{lMKSjqE zgilE7tTxfMnYQtRe(eRR!63C5g0W9lkBl*v##RC68zzDCJdvfqEFy3#!aD&k#NW9} z{1%xRj9ViH7g#2BV5-af2CsTdOK-M99`E_%E$BvT62BE=lUip|C!!TNwlm%(Vco8R zx8YkFJUpzWzh=R!gcjtRtXc4VXj+X!XxFadK7BjQGGFOS`lRo6`izBv%drV{*vjWE zc%|0FpTp4q*K0ES{~EF9yO(!#csc&Nfp*f* z^~f4?!0*dMH=8wmI`!d>$o<{WkC&TO&wC-eE2q=1?#)`RNj*E;+!nUG*7NR8&8|ki z-Rsk4y76A*2l%%WKV5Y~Pg~W^=|uJWR^-|>BQfi@0u$TJUFIQIy=rjED*A)97s&}c z&uL=*_{5#Kj@*eh3B9N5?`;JS|G=)sw;p_FwC>*LjQ))}?^MZLeRwdR{~~Y^Kd#%q zQcq{hYWo1=gT}lyaZTzedTTm^-|pbo(&fJ0dEymsO{2Er64otpN!Q?s!|XX6eg)rJ zV)xmsTQ~oGns(C94F|Li>mk1{d~drOS-0*JN96u)i*@U6tmnOuy{22IU)^gwTkGiF z3%s|7?KM|vgE_{NV_dAIz;96S=0J-!cnDlMkP3ct!LNxPP5a^FugF|>gI8YnnlAa4 zcl^*R^p#k_&}{4Mj=>YO8=)U?PWInaUwmr?|OlGEu|x3@3X z2F(W;)3&fTB6!7k1cnNaQu^rp>Yt&Pz+=boV>A>ces2eJN-Dk;#I)>^zeTt6z(fCD z=01bi0ptn&rjqHaTh8R)0{D;o4UXeW7Qg*kkrmpOj%XV)VS%o2FLW<JK$d>Z1dYZll9A?d#N0a{HG0c3754()**Y4HBHE!*q)NCahs9li;(4u zkaulao&5}*{S4U?R<%HF`t!_ce~n`*=4x3vK8${@<%x-HwBM69e{$rBpL_5fJICG? zee`UR_@c}Y==)h>VAu=IR>8lk;NMY^Z=y3913AqdNU6PNC*I4L3%+i_-nbWDpxY+@ ztR03O-C-ykRr@B|hn)D)4*TXWY_kw1ZpQ4{p~k$}x6caUo`n3Jn62KA?Na(a_00plGxr70 z%$l}!lvw8Co=)b+ZmdvcFjrt*1+1%>e^hj?U`*a_(dD~`zbwD@EvdUa^FH?6jz)T( zRNs2(O@LSDtAUpn7I*>Q(}&j_>|Wqpf>(Gvyliu$=FdB~sR*+m=KDdXDGZL@AvpRv z;Fka88xOb4+g=UaCc`r?EO@q6;p0R+)9??M!!3X0ByihY2{&!v^}{SP^2Wm~apvoV z*~w`$f3yD}XZezHX`QYorwZyG&0=)kD)xhgD z$j`n?o|f1$9$sa*c3Tl~zW8xOO@y{{K$Q_4@JkLPbJ(WZh~=A+|b7SQIGitrkv&HVh=Oq)Ku z-v1`R>&`bBUe}C+*P1EdwQ&-7)x1u4{r;N(uiTpquS>?k>zpazb^9dndhT_?tJOO$ zv6xR1>x^$@>OItwA7A-d*$?PhrS=tn>HD{Pec7!MZ|dtrj8(@bz7~5FJ5T9E+V2>v zj-59lcSiOHD*MgB8rclk|_hSkeChU$??WeO2Gc zJUspzWBRV&|Jd3l9y!?>jD!F16#b&xjPE!9@agxP`MdG`mcbkypd2QN;nxO}#Df#R zQEoexe?$AbGTZ4i*EKOXvHy}E0C`-||AVg{ZxY`b-+!>C_+`e!UK>1p*yq1FMZd_z z@%?7LGrnJMo2h#vCVs0^@S#&Z*Yy+R{#C(Gs-XKS{9RGvila_*GU_y~jykb*QDWC4 zJdf}^;8Ke&!j==)>36mx6X1*iX1XOJBJYzf(dV zH1~uCbKk|kI~?lB-J=a!n-ciHLp=!JQ*_7vJ5?ckki5-<|TiKAe6=+lOiUE84y=bz23exe?|bVeS#; z9+`6P3Qm{O_5#{oL)*_z-B!WrF4}IU?LD;p?v!myaQYN`Aqq|pM<&84PuzPpY)3Wx zZaT1(IFS4&{{IA@^rwb5oCH3q=9L{4I)iSTdx;$=kTap1>=~GDJZs{I=e&E>nfo?Ds@};weyQmu4=*1sR+(C@-H0=-B zVU4|-XuCZP-#hd0Y9!uDi%5Qk(K1al78k-sJM$rT!=K;(WKZM^?1}tDbK}$4uj;Ls zU%IMV>OmOn2S^-+#9i=x#u3l5Pr~q5?;H0MbGqqmZh72Jo5UGqiIo^8USLG_ z2cb*mBl}=8hUka;&AI7L?A!G7x5(dT)gG|Z^i6)VJo_dzmT0y&&xPL4XKxPL7M&n^ zf2bqcqT7D~u6*X=w{&##w>hj0-UhC8e=p>jMO@S#9D{pNchJ5~U#u;70*=Ug3SYJ_ zF5(NdKD60B@7@;3wx1y@9!6ID3R&^Ol(NE?ZF8%TS5?TXD&$qwl=4c+wo7Sy0d23L z?PsTMt7O|bB5e({0eg`P0)c^o8sO z)@I`-)@GxkL)(hMN5Q`>+v|kKJ3G#X|8L_tw0Otfm%(k~tl*U~!MP-TDcl2x_>C2! z*vwHE9hSY(DErV=@a-!0p{tC=dKGzf5u-gDaodv-<19Vmo>j2$fmE06pWe4y_D#D} z_aoblo_b}sJHl(h$GV;k$`82HZ!`Rt?5%QMz1-8@C$@oY4)^+h=YKzVXNLbyX25@* z`exAoJ?u9Z`+qBAc#%D9_C&K`_VdC{Yyo+r@cH&6bsbk5PU|{DVrWJ8cG10eOAJqb z)^EjD^!t@K9;Npd>G=o5cQ$!E7g~1PHfhG1wmQ$efH9(zci$5l?1oN<8#Uu0@<$(v zYsQbx4q~fZ7UoAUyn-wXp=WCyA9w||a{t>qm$-|TOhd4uZrhUs?t;0H; zNY@Y4d)>$+(SsuoVV@l0exMI8Rr2m?qopA6d?9DXrJ~0Oze1PTC45euPv*38?_ZkH zD}324c?PzLjQ-U3>N>hVlq7$!%Dbyg8?3$*xwE;>+q4q-8Hc~YpVT+VeN{P_#PZE* z(FSu5`f&<7wt@Tob?MKn*9Vuc*F`ptZn*blC$^HfzGh@n7#WvUWB2>X{ITR)I`L*5 z{6}77!{C1y{11cw2KaA){|5MPfM@0yuBYzxadG%No|y^xxSlx%eh9A5=vk}q`p<(l zWw@SrYjE$cWX=Kp&r9D-jCfE_2AdIGW-D=t3($v_Aq$d>eKql{#5SI1RT~4HS~_G| z#?EeXD57Dn8XVn8%)X+b+-3G=Y&FSa^?hMqMkZAYE|=nieE7Xz#e(F(>F&)UKO#;O zZHSL_Vk0V_A#H`jE4n4#t?{=j4nv<-_hphdE4kp6-^kx4{rj;>=hKcH*)NC5KhC4K znWEzx(q7^K*=Of@4jnO!oq!!6>lN#kHt;rLQ-bk0J5toD=vL!lU3At(XI)CUu&fJo znN&Hk#qk2aQfw-GAk@)KJm|+Cs1iDtJPWU3mX^M5yTy8G=@Z*5Z}`|N-pFyC^YM_m zD}5aj`cu9RXqNp&zK;*F8(8`};9>AuOV2UG!bhDZWEuWn9b-y55g|ILYW z%73hKPWfw2I;Wdir;B$eoZCHgPsqy+-6QKYIE4Op<#v^)4E`G(-H(Qfb2JvNglCUn z*Bv~`y5+wg;2`$U$#GEOm=FK8m1EZ~Kkc!%oX^;opFeTznb$CO?XO?`*b~@)qO(9B zYA%V3rW`wQmg!rGqZK+o27SL~I?sGF80V>JL-91B^KDbpxf-|B0W6idDArbzKM>KQhIcU^?*Kj+YS2Q_y0v3ob~{^ z2(iPaX^w6&UpD$BS3s|F;(8S__6GOcdyp5rZ}5*;OVLr$KSG0>zm2aqJA+tI;w*c^ z9YeoHXL=D^YzV#OxAi+t zh;u})shG`768V*o^%||}d&!B3{+~=3ZF&ORC+dZhXZv+63JG6lN<1w0ktb0vM<2dE zu@CtNEErGQ0`Y@0u4EM0SEX;KUIuoA_)a|WWhmRUFXUApc_pny!}e_{;rqyc(e1=$ z(40ZZVe2}cRCxf=eJ^|1ww_s|jaKFU!@mCbbn=)k#9x8092>osxrwg0@nYTWLr<)J zL3|F+8^dSl?r>B$_AWxleW&j0(Zpjnl2eI}+i`d=`uPBQR&T->ew@6^edJ(1Lk{Ni zfzCZi+qks-3T?3o_U@$ZgHyL{mbM?F?fJC*C~g02>b6bN_6*uaX}gHF@0_}AtT$ns z$tw0c5L!Z z)U~xXF_kJWG7SD(g&JdcKy$Zs;ik zb?NX3`ii~^`?tDB6JDa-;l_12&t;W^uaWkvlrJ)_%X{G0R{VwdLGcHIbLgAvjC9xv zr&n56+P7ifiLFPzhWJvHUMKbyK2_1BgK<9zE?wc7@H}*8(X|B61h-@^vhV2N+w|M! z?}CTd><(+0ba-1ZPQAt-XJ!+y^~Wi;jf^uczl=-kmAbkXG@Rhu(5L)n#iw~5f0HZI z`(E0IsPXe&FMz9U?mx%>X2#>$2i%tI2Y}~$ogD+3F{|(aqx0YgoNq{7F#KS5fWx`H ze5(+;yQcTOb|ibA6WdJ;_xU^rPY3n^`zX8$TeNvMw$4M~{A08SUQ1*QI(D**DJf%- zvEe6`UmckCCV*{1XvB$aWt;`^oARq;m+&pd%hr@7$#a@x)D`_*3NyUUGuVL5GW z&(dRljsDD1;Sbng=;`=00(=M0tqNSQRw+CP*7fg-?cn3@6&$d6?zZURAn)$a+4~~5 zsrPKBDSI~amNOdRq59c9F`+f>IPgfQInEqfYNV!tH^(_MuQ1DqXJ`32jK^OYlpLk& zhmk8uYtS0eI)+%wxNb=fONZO9xvg2VBiCpctp#(CqlP7?WzaN4hG;J5e{+5q@AQM4 zn%RX3&W>;3-?wT@bFL+iX{tF}X7y{Hvt>2B-Z?9{#yd-Jl{!SD^R1V~HlFI4 z8!KFd>}IbZd6BV5zX+ejg~-|qv5hY@7V8(fiwmm_^dGl9x!O2OU+tb%SY_+_#UII# z+XlV~u9f4D;HKf|7WUk)psU5c4*2Ki`z{5*2Et4h3F6=4(o~33Yvd-64-@`l-o|S};!2e}T z3B|V#1B0K4oN!_~yh6uc&NJVhx=myWKF(0^_hzxN!CkXwmDuo^KN9^<_J5Rq;p z0QX7#ls0hy#zOoB8{s>`d;D{eM7}_GyEsc!zC{f^f6h0;Z}(t7HZp3o!jQs19<_VCU|AJ$e^S=$Xk+r%B}JJ1kxj!cIk zQG?7#oliXw&Y_9x@C)gm^??3+j;OO2Ix61L^q)AcG#o z&-E1Wy&su!4A~?#;_}lC$Wfs z^N7@$u7F!lz2bd;qQ+IMojrFsHSD4RoQD0mQ~SVgoBz19+!!~Pu-8ru}5@a!9#M(=|j;8zQx$ZQQ@5(<~HmtzK`r2tu>!hav|1N1-u&! z;ORCe8{nM{@J`!k%i8cx8+gwW9?9=-80$=@J&TUIb*9t0!1igBaYbU}k}n1B{1cf% zUU>lTM*8#NUBC0qg*UMFW;e3m3Y>wp{n&AAn?_B1_Z2XnJ08ZFkAb(7z&P`p(}!{X z87I~Zj5TWL&C*o<^)`M5&eaugwt=$^oNeGDux$|7icfa-sN|8mC10BCBdZz^5o|QG z8yca8ukt-xe~Zn)8fSz0*+;-Hn9HG@Es;^CYSn#v_sGN zzWS|N^L=nd)i8FNsjZMvJo{eoq2#|cCaafvx2lus%ucJ{_xZoZB>|qCCU1{P9nuOO zrFgsIQ(6o3G{)QKE|0+5HF!IGBH-=J2mg5n+6Z`iBJfQo-YM_Gw<1M8?e=Xv39rul zRDBDcp!mDu)%jP+tF?M?G2HBMrcW@Qht*yLdwu9k&@FVyUX_|}Suq$)) ztnQzvxmI=mNc~-P;wJ(dJ0djBSqX}MwOfHtnE4gurK$_$-Gbkf{YTL$vGE^Mx@E*X zfPJT6t7;Rg_Y*?@CHT_MB=6^b>c5|R%(ga+fB&1~-hUo>Z8@ADfxO1{Ul2iFjr6=~IcLN%k zrDBFeR|LN%J&y!^#WWV{Cbpj7fAMURioH-LwxCp(MQj?Qvy;7J3%`(woE04x-Nipk z^3&)AQL)9`z8ttYEO^6n!J9DnfG(`sWv&Asv{GH@xhdvGKhhQ(O0`omEx%jZrRSzf zc;WQz6n}#Od=w0wdx($v)`Ozw0|UWNfVJ;=lq?dgF9bPW?li+M`XvJ|AU$d8Y zxVMZo*F!-)h5v=mC|tyEz7L-Vm&Gn=-UC1O=L_sB=2%=Se-HeAsU`P+{BNZ8?dDrv zcj`y-OAUob(8Yx2!ht<6wE#|9_ubd8v$|g+DzVo9o~4>x_0+t=4wN++9Nz2ie^blR z3#%GXLSI6Y*jKb!2(B!ICn!6y4EDfX;16$_;et=%#~OUTADCu=%d)V-U-6?KF@S$! zrjg3(kVI$wdbF|-p#>!*Y>h!%zf4ze=P0G)?49($X($1 zq|8VAWO^oZfp@ve7M1p_H*%x6*0S!bH!-?d)19QoI_qbN&MPr9PU}kWt9gvJ#fCp} z`Aa9qg=GOQBpw>8Ny7XSD*oYm`adatRM7Smb;l&eyjXKAzzy~=1O`ImnfL!^;8e$W zoD$xta7z2FT4Qj^6`aa|Q+p@DDZxRXhjvxqROx<#7@J9Oiti|#x~2F%>IS92;WrJZ z^5?yAIQ8}br{4Y=aZ39}38!*JoYG2quS0xSV84faT*%AWc;!AF_LX#{J1HLgq_Pbc zDIQ!WH2DVe;4KR0Q|y^l!PB70tbV#Ym~o!muO>bHKyi~PE%?@T7YPENZ; zKAyP^IxX3}l`zfBIWY)<|uj|PRpU=++zW4}M$vzl9D7{R#g6AVU&^_^`A|E*y58jBK zk;UJP9(bR;pLv8eH0-Wz3E3Cg-GZKK`ZLI*-Oll!{l+Ew{DJiHg(hkMdrA=2}Rn%8yUMXiht zm_(3)5%l*6;{Yc76WvGZN>V>F7!NhEfGu!kJ!qrzt7HH0eO14T?}vM_^K|S6JuK^h zKQ&zXeylgBcV+%7dy>RCWWzz6UlTkNy(`co>7*IsixIk@{! zsH5soXfQ(D^4~=Cj^+GqntDgoVea$0{99T_BiH5taWu5+9wEN&0eqpmwT=}hsNHu+ z8#Mn$>!1K+N8}J|w;z}mSmRyjQ=)@qf%U-v-}C>5jD!YaLNBr|Vw(tmRk|cFA-iq_uZw-fyf+b4$)TJ5(azKw4b|9Jq{Hu`AS<)4o~@m_uv{#pWi zAFp)a1I`rnb*Y_(?}GUKpQ{*Yt6&EB^D?oU=)pSndeSr`H!RTAm5m{L3eY1sQ)LA8 z&cFe`)|u*iDm{H!RZtu5EZS4^YDS&Yo+VCuYn{`&U^?+t#B(R76JIsmi?ZLaG1zb5 z+$7~=Q2SQ}cu^I0Aotiewr^qYYOU;(`>~6{zp$l{ce*d{2FPC%yCc@i8tu{sTL!d_ z6#tg*VEyh(bR6mj|M!ziX~NHvnoW$bPs{m#^VsXRE!OPTVQPcQzWAE3kUe=+S zF|cPy?30at?cGw`8^}K?>jJIT%KjL>q>vxOk^da`zyZBB*l+le+pHVLq9nO)f*S?w zvOUs160|4IHOU!E*&5cr#*OPW<$Dqm8|*Zr&k%RcK2;Sw(chEy_a3IRF4Ljq>Bb^` zI(lH8(Uz@q+mdy_yFE;8kzKyyo9PrEk0QOIU`}4v5`QZM1wYMg5?+U-!tD1n@+7`w< zL*e#3<&&EMUd#Y5W*~!Rx&vY0!Jb(Y@KHEU{6}g8_!MSV;5qzB@Z5$sNvxcY=ZX7D zc%B)q_VK(P-^5Ur=yB9q5ZodjPk$@$nNfz%AK+dC_ud-dGqn`;D1VD=t_tFoIP*F= zkFm~Utn;;|SxQ?^8G>c|yUN+3ylR zsnH@a+1v1`kdL>q0lg+M%^n$ox9a$VSSM<{+Uw0)b!PMN; z?pA#yG-HuJuMV>%nO?gMdXjmxu$Isc{<(mEoi!Nt&l^LZ5m}+LPNh5xU>8z+i1k!H zV|nipbvE8J(m$~tFH8nsWQ3}{ZY;uo$U4dxJbaGnwZo-xjEy1FazaUP;_a@m}KX$P(b9qvyz)a3IT-Fm z-{XF(=yU~%haA&&(FOhS$@~Rw#Ah{%94rJnW0L;h_c8v7zcK_kw-G(#fWD!U?oMd$P`G#wyu>weHjemg;gRN!2z%n>9BkC@o=%OV0~^U_Gl>;0a3K>>K)bZ$VS@va2abSe3V=T`L3B!Z5`T-J&*Z#e?-w~r4MM{(AasG zwJB3{Q)8j7^1GGo+WHjubPPS`e%5%8T4TONOiglP3{crwo5j77(K)FXWgJD?^aKyo zIJ6dpyXAW&;!pMWO7Lxi%WZ;Br;dpNpC-f-p4Jq)FmD>{h6I%qkoU^bzPmQVS@jk8PX(gRb-vQ^I17? zA(w=%t#o22WDIw!a~Z%5>a=eP_D>GU+^RkDF@T4za8&KVWEKDi-8f&@%X}TsA$oq} z&RX_Gkz?4trk1fyiHFTZ+|&Zy=$xUuoy&CN+@zeDG@<^C(YcOit9AF>YpDZIUTtGH zc{GPrzOIX%#~OzW&Y9@A>V&d4oaTcf=ZUAuY4)d|pDr;qQs-UXlREPL`V+UMcr!dY zUhwI?GN#KwrW$T@5<3DOxu_s9CSj4Q61y$)?$Ok~6TY47*nBz5)xMtE0UGO#e}pr8 zUS$1sL)oK@b0N64FsVCn@UIw07x?>x=LF|`PFQ23uTv-YMNeOMzvcGt#cs}#a{!H4 z*iD(?uqQGS+g5U9lpW!(M-|@=87s584|Dd#zSfT|7DJw*JI%Yl)@VK-dWP4mp@tOe z;^q8xsl2yb*4r{ty{y$%)@oOflQB##p~cwrdAbrx8sgU}neiA^Yc+&FJPvi7Lv zo_kc;801%L_H29t>m$0?Lw%vc*!zbE)Ocil>`xz?E^F(=WSyj@f-W{Dv29u4Df%1t zThYJU4vF4Vu|~!9G2-WA`$vJ*fw1TtZhRl{YkSGf0AC}(>*m8E2a4y_lYq|sY2rS@Z#Etpz8scwF?0Dq8@R2NQT#)@M*0`6k!UyqH z*xPQ=J^D~{ee4!BU+=N*QvNo1Eu6J*V!GtE_;WwR+zX6d2fvd#doxFv-vqo+v>)%J z4Y+aau;nh?t99J^nC4btfdtVA1X(a9~6Ls1i zpeEED@<^(lbHx5rvQ}hxQpsDT-&^4NlXA|EwvM?^bI1*r++BbEEi(UFH#I<9R(*AP z-Y=`9=D);`yXWp@kBMCOR5y6BUH5Kz_7(fNXQw-LoYA9IH7dQ%m*wcs7VBLQx?-Jy zo3)EPHsA)G5#t-gN@ebIp*8%Yy2R&r*0WlA`-sFZ!uvSuq8ok0>fs$(XTj-iMGN3= zqj4_zV22KA={rq)WaZ-rm;4$E6}VJR?{?L#C%mc+)T61IZO>`dcK;F^^wuB!s-tR- zZnRcm>r`p!BZpcCbGsEydfjo>{DA0czxLMGT?=7=K^3hL%&;xPw0;dF6eh_PYFIK9wPk1Pf8_LQD{+W47i=^c(z(M&bt=6eu#6m1ZPh`vsEHTnXevl zh1WiPnDsi!_jK@l26 z`9JNCUCw_IessOS@vx1qsc-?kMZq%hvYh+$9R+NgMs2jQDC zrZfLxGJYa36`mZxa~}Qu2)=dFF;=(TTKodFVvw56SdTzprrDwjQR(v1Vyp;=u$uUBW6 z{i8hR*)ri_qNk01eBgx0U$3h>(3Mi!-QoM;hmR5`oYNiaDSl0244x9bhIlFVJjnZX zBK)G;gWq9eVS$(}-Ml*@`~ey(?%Ran5v}4g5gV#cWN3}ioUL(zHF{1Be6JdPv)XM- zRuh|4?Jh1v4dCv!C!@w$del9uAoVV4MGunv9O;L;BJV5BX{nME2ax?T4tQ?A&`KzM zv)S&pq|k%F#kO6R(^{}xWVx{rJ!WAFxPr6s{p`magg+mZoI8B$GH%9OJey5)cb~r< zb5p(WvaRs4UGS?ypf`>v-C~TF9pu@5c-c{XaQ*HvUPi4H0~~kJQ{2`Ugd29u>pB+2=jV-oI^X-cz~GMc$KmdvTr9Kc&uI zX^r!58@*N5_*A?n^XuXor?+ogn4Z)BmdZ8Gbj$Pfo!b_d*7)OZ{u&o~4`WeyWRpX_ z8()#J(9}B4g-#=@^z_nhc)ln+1lvWA}{SmhN^h5 zkwcsbM!w=5=3l$b!`f&j{MSZv4jzPTy-(3+m$&iQD|Q$@yFL6ea_T-MBTUu_{AVmd zyUdRb>=$s6{C;q=U2J!7QfLM_iJlK1^Kn+$a-2yBj@;u3Kb$#qUJ=geP<1SbyZlRo zcYU1(J8a%ivn%!y_JYV$d|2Q#e6gtj@7r%-i^thdIj_WrIDbj;p(SN}C?vp&LXqQ@l0q@VjICXXDwr45}Q;fCZT|A z-H(hth=2AdwJ`b=O({OB&MyVl&Bs`uFP(5(c#nKmY#mGZk|8`6yj1uJo{rvhX#1;> zp=Kp-Ey~dR@)B?T;69(X-YN1Eo-2FNH}}8GIi(EEY-7$!hT>OQhzwn!XeS2^YN7{a zmdf+=mj1I!{1q7rpSbO`Y0%%dInOBP9dm}TB?>3u9f^8k45}yRYxyssbN}^gS?kgH z=94!21mFsF$>4L1+nR(wc_wlVo?%<7ioA1EssGdDowDc7xPCmoKXCe+rM_MTPLIwZ zSAmJr;SV1N2b6fZN?ZbJzR!Mndu6bHupC=C&Q(T@*{32 z;nJP`5}jax`+dlRZ|u>W9ikI_X{Y@f z?OS6fx=$QmGrrxlWwk4NcNlvQ`__1P8*w}AOVwzW8h;J?OKo7|)U3;8l`oZtC+Q)#(#ESbTJZDKnxC<20{iZE>^s(Ex5TP^ z0sBtYq=q%Q?L~i0h|hFlJIB`Kv*Xufy`HYG7JJVru8D22FSB=8@tD!u&6pEoO`2Gf z=3dri*CgwbSX^3{uU$VYJ%9O_4WRf+Vy{}4E!V$A#y{Fbx5q-}CyTVQ8@t=X?iN~+ zb@8yfC(z3Hb@|NrbwP(vw4%j|>yi#=1t0YMQ`3qjK5JiZxO2!R4_2+4@(HOm(Y_>|~!Fuc)w-wZyt0zUuEQ)@=R|c^4WFf35b8KclBDDE0GdY_R#}kG+x&R)*h83fN!x0>u8RGh?TvFIAroei!v6 zt$qspt~(9 zDEt1Oz?%qoWtH~*?-<7RiE;MG(EM~=b*s1O8QyuPo~E9iyr=X*pC4WTKa7<0yLm&{ z8U<`$?B95j^P2D-lhefBgYvP7o+#(qrRQjzX{9Yd{#tJ5L95K)$=?OerrKq>=k{8Y z_&Y@wMT~{?zpxOQ=%&qF*9@tnOweE-xxQFcZf@guE=QABOVDo%w9}xD{^6*zy1Qwbk-T z-_HY8@PYIqK~qvE>*`k+1v@a-(yH^oOT z`y1(-2O5ie3-IO<8|U(qH;^tD#5HOa|MjOox~|)Cj$>hO8qxqte|Y z_%Iu^IX)cl*C_uGxZU&=>y=TthO)1|!emd@TrO*9$-cAf2S7Wzdv2i=uP8BX#eHX^ z^B~Xmm-e0g{SRVj#_er%T*ba~{2=&q6g!nzANCQ17N^|fCmuld`0X{a$1ivWzAa4p z`xq5_{Ont@A0cZbYY0vm;FOAGWSvwD<5(P~%u8}m%5igpM>3vJnM!#ywnFj~U=j-D%b1va@rhz_x1FT9p zD4w;$$K|R6oDZ1M(=!KJ4ff~;4M&iaWXDwK(taPJXw{ZQWm9CfT<OjcdNuDA)a5AE6$k zTn}-rne;#37#`+&6}4pLdW7qkMgQ}R;X_>C7p8x%k4qcrpKFuYx-ByPxs0FdRbl$) zx`k`TTrbzlxsIU+jm&ZPrjTc=jPxA?T;l`TGBAg+^SoZ3H!^mvw-|iC(b4d+YKevt zjOLDTJP<~^p)~_z{`-t-;m!BN0pJRrSP!%Ov3HV26pQ~TO#E}36Ln=cI> z#%HmS`e%D*5udo1xK6GW%!;vf0<$4a;N)m#5U(eoZsG+dLM? z>0_Sk<*M&$KNJ`iVL$s%4dOn3*zf`U;_{}>V+fGDlZp9X5tvF8Of$b?>b3;Q%+WS=m#5sbsUN zc6n@g_LTj3o>O77Qjb4akK?wrinwJ{#njGrB#-Z$kMRA9{B-arD!3!^-WbSHrz)lL z!X1f)7F~mUV01fV(*kgWf7TA-GaFQvV#ipYUTekmZQyfm z4|;AfulhOBd2NY*kUi&Sow$W$#8JL{)-v$rd*(3TDTK*uH+y0VXI;Trx#!nH$bVA3 zkG=`b=}v90Z<|}@3D3-$wsjQWEOeBYv1!e~zLb{@&PpttpPMZ{elzugk2k63<=4Ii zUZe7Qjz;|Y!g)CZ<&B2d|9ZXf@r|5cg3l`d zQ1QG3xmEPlOnk7p6yD1>i6x#HA5Z} zYZjX*6N=|#zp3zo-#`nWDu>s9!uLK_{ypGWVQ;`M4A~zQ+qz>f@rKqaUthbDxFfkX zHO>ngV9n~Or!;_l9n;ed1FF`q#Gm6kWlaNlYt5o=`<^*P{yn&d=Mr=F)Kl;+ey`d- zr{l5hwSJ^PUz{QcGbdB&oRT3j(+^!D_Q@IDqqNt`O5qudUe!j*@MqvBhOZ9PTbWDH~N z@`GjgGFXW(XFi7xpxe1HaD-m#74Q22I_L=}zJNXLEd8uSwjc+jexjB7r3cK5@AN2M znK+a7|F=}%Omt&S$<~|8aZ%(9c_QG_wT2TXZ+S>`p5aFF9h7d3eo=!i#65Vw)Q}|q z*)t3NIoh#abZlAcB(yAj=QoM`kg@o+>oUuorZ6-ZF8KrawxS`aHCCkgz|K&#R(#HH ziPtJwh)x#dDX%e7Iy{iNgi>G4l(7kaDvmuhm+_8`oiVGiOI_7w8M_Xx?ZO`?V=u^9 z^`Oq)P5#&m!PxVQrW(6Je2U1ylZ}7&py=wxzs^o8o&7HV?{gk^Td1Xkyhz_cJ&DvX zYqpg9Nce4wiGKxtdpGN08H(@nzOp5R=lJ^Ya1C;0ygvMZfBqP}{T7qCN=z~`fLc1f zzWl>K0G3nMccs2C__R)!xF5-XmO8E-zoziI;6+tU)rzjJF3;-fTCu#N!?u=pte7>O z__E_iD3hd9=d?cE7_G7&JA<=gpV7Qa7OHb$y-Uswes2kW$-VptG1TWi`-*qTY;Eua zIa;57`jw8zV~N2V9@1=ik6+H6Cy%RB>#z=R_RWCCSvJ(~&FR#_kerw*h08xXmQ3Fj z#z&`d-Yax|XEi=OwKq1`zJzgnQ#N`^}xY4v4^X>^wHa^4^Jk0q%K3Co43pPvdBAK zbXkWy+q6|9_CENUgck8l?@&4cwo?*3r;da0Ep;zrq`Skk)v({n+v4L^ZG~6z9shmk zr+}==BCDX)X7quvIv62zXqLT`doQWMJO4f!S9f8%VZyv#AN z@APaa&T^l^=JYCTsMK3aHm9ObCLCquIW-pMBG-k7V zMVsA+-w?8p`e)0=Y<8)IR(jge@L|Z>EG?RI0yiFe988Fkqv1_pd&Q`!3Dt!hO& z6TP6v?;jnq(&it-WBRYa+Hq%pnM2{P4v4FYrIWV-fl{ps1Cg_z%#)Ejuzl$9g zd{_FHJ$wH*VY*X(Gvvb9S<26YUxyl#=mo*Pi7oFuq6@G59DW7jqPK;yN#TnPvc^H4TK>IaBj8sc zhb60{2jY*)5@%8HYY4;(er}kYlPvkRs*dj-U~>%kiqA^9N!jlka{(4FWHRe}fnP7X(v6Ol>3dN^uVPYuV!lK=W}Ox#=v zM{UVz!f}F5FS@DIp5$EW)zpSw7jfd(lIM{1^BrQn!zI{Kh~wCvSwFHLDd_DkImhhu+))~~kR=5`Kt1=cRR9b&-wsWEh<~?6&bfwPKM;2K)kldtZZlR+5;J0=d@T`5knMd{Obe zKVfh4w*qUiH;eH0d5j+Tj^Wqe8lbMo1LRZfC7%j;vcnR7K0%i^IOiIhF=8y%BktmY zWx&(i_M~N;rCaV<1rr)ox;|qIGq$kX&N$l{@1msXw&^B(iJBLaKV$wX4q14aqO^_?1r~e`GJ9ySC%8?lIqHOA2{omfDTp>>} z&*#0`$L#R2SGb%}yL5O`$oWff z>Kh^h;a5BQ#UJ_`))+e-JXd@@v0iA?zs_7)DdWHXD}!;2YT*~$X59qYu+3?!c&4@-SidGZmi-fl+KwK&gQ{0YO&4N>6&;G+Vc*WVN1xp% z=V(Gpz0|DhQnW7dB0_g|?l5%3?`> z@`^N>zG3Iw$!RYsbtCbE<kJXiwLPcMv|nIoQOxg@+`Tvy2WC8!Ko? z>M)#fe z5Sob%Y2w$aq#5mPV>FXkR!%doix)xrqoMGzO4?5>uAu!Rm;bw>$-3~7N}9~Kj?tvn zT1k^<{vT-Yl(k@yr6#mwifv=GS@^;AQrwSMU9F|Bd|2CEt!rtmy1pbozjDDi`H4T! zw|$=`CuVNBFVTx84ZHe-Nfl510oGROq$1CxCZjQMKJg}-GC5*^}%!;ojIji-o>ufoGgSrOTN?rqPx~<|Iq! zz6l+%UVe?(7Cr1TPD8~RC()0S=*7%~_$1+HPV;r(u;|0+#!?drUD=hGns)!2itoqz zBo62~zKa|v^6)(86_(dL`8x9yzAdm+y6)qQ;iP9bIk9!rkY!)0JxeXqt%lSn7MsCo z0&nQc-I>zeev|q4Dmbm6zLp(*H+AtItoCY-Ot)(bLnHXo_>Kdc>5*Jce&Di(%SXJ;>ccy$Q!|d%Pyu=g$f+nZ|X1D%q- zocNW@iM`d21$-4<=XbJ4V2R&D{P}8r@?3l!(q@P9FRb_X-k@9dft`Vk$PVVs zp0e|eFnWmEZ`7HK@LT1tU@q_+=C1p3jFKbd?=Q%@Dtx?8Y()tRoU5ADkGKBj`ZvQ7F^)bj@R)Cv@ONq=nw z{sH`;J>ULNe#XB-Ux%0N1Gda-%Qmhzjcb$mPRH^cJfEd(Q6DbH;R(tvodDk=Z28SP z@fkNc&DooX@w&;0E%-ck)s0Sj@aZh_Z)<}Jea25tW#&ye948=JMBlRED zL|dl%uFak0#5U<(ZHzH~1zKeu)AXg(Q-l`*`-(YbRvPHn>6bQr%4MI*XwQ6on)P#)f3t&28dlh|Z3!FGI zr5V}Mx)qxiRzHEQ*f zkHJU3x(q(#J0(BNyg%&H1{ka}7G~E0*UOxy!evhL{>#$8Idmy9<1%1(nGx5y*UK93 zTI$3KtYKj(>!PkA92Z}Q}QJb zvR?pl|USVMw`v9DEtNhXb=CoxQPd4o|Er5S+UAh9_w9~$9S-K(D zZnPw?bX)W*jd&qVpI6c6RrGlk>mTqjGs)Qs>pcsck7U<+k?d7oG<%hQPOWx_4`=gz z0>5A%U(t#k72eGEDrhA?8sNK>rs7cyQrV-?PI-I@W$hKcCobir?PE7eCY#%yb0a&CiJx%jkfHKZd>w3bk7^z#f8rq z?b*+{?a9v>XX&5gozIIeTz$(*wcF+nbSiYYnCLe7P5%8HzH9D_O``56ZZ)WfjQqj= z+ehwKl)ZrSkwx&?*yHeyXBgk}&`<&%r_tXm6{}@i+u?z|$lzV*-tg-d&+#mTd5!p~MHhA$=W7rQLJP2+cT{`I)ns#bZgV|`&mx9wv zUHF@W>~P}TZ$;jAojj2anW6NR z&Dc8Va$>W9gJX6|<}R^Yz-t*-;)iId(sh z!yi-8H~p!+9DYmjeja(7$_Dr~C!;wx>;DT$`n|$wONi z)yCoZ*!!^{=PC1;%YI$a)*!wanpF0N*scfj`_t)ox( z@t)Yfdsxdy1x^+3(@(`7n$x;~y`E(eweQY47}!v<|LhJ72m8dm^v8VK_TwwY#>7X0 z-BeBPj?5t}XIKi%l&@%uvQhuRz_04_MdIS;4~2|jVzfi1<<#m^ypw;Z;vH*9&PiLq zJi`Y2mCTDA>ZIw4k0#E%if4Hc&)_s2Q*eTBG_wYLW2$jw3hEnC`1PjesYSQ^EehwX z+(%^|(U21ZZ-|BDeWM6} z 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%0ABx96Mn@P2TCx zuF`VHo<-jeB#dU=jKBD-mOH?=$DV~J9`e4=4lswJkv}HC8EAbVkUNmoa~qiFW6v5n zt9qO{7QQ<)N8mX4v-^G~@ErW@{Ri!EHFZQkOg_1=Hu&@N4&`q<$H><_Oz!L&^<4Ib zaq}E%j6*Y7Y+Y;+PX;9ZCBJqp^#0+=%CK3b-#4a_8jeFM~r!F&k@$uu% zJwK)%_^;8a=%8Mn-CJ|qz4yZ7&Q|I;_g?s#6Zs9gm~2apSg8k0oo=dWy40-iNou~A z)=!OGwf-=5WS1D;`j=o^l-9q7=X*RQMf3vSiA!+Oi_w#RuTY z`%Q5R8d$TPy+z0xy!{K`RO<&0*xT0N*YB5gKO*a8Z}W%^z2&Ag(MQn|8g(|^sOPQi znv;GOnV$)yR<0&59J#mWBIl9$@lcZk}`oikN*B|-7PZfVprB)^T$oPt$lji9~ zmtuzoFI^^lP~z>~*rT~D|NAU5Rb(!5I&O*lMeZWIcVnaGvd50d^WE5})IO;jlHop| zGY?bt9Ao)BEww?TtSRb7lTr2-QT7&&(Ux(bf5(`sJFKzMXwNjd?a4;tEWOb^tJuJP zqsiYVU=K|8^XE!D0(tTy#qzqBsb2Ri`m)Pft8vDR5cv+`@5Bt;uD>QorIf&&9>DV#kt5vy~ zf9I6lR;aKKSbA!fya#?)ShecC4V}8ZY>QrcxAdJ;A>YlHF-&`d;QoNTGs*krS^h5j zrmPS7uGGh7)kgwYd+QQdQ}0G}qYu#3u=l>dJ23xJlvrQ$z8n(4zM&@i%U32HffFgJj**{rPwke#fNz zo4q#UdF#I_zPeR+q7BOb9(?{){Ead`FnUStNr9id zX%y*!~PG}pH_Kfv$mBn z#V<&oB|N;tUbaRjCo}eaSa;O#8f|l+yV40HL-v8y`evQB10mf}zpFJ>lSW%WZ8q)0 zZrgd}>+B-NW0mF*7n8G&7y_GA-L6@7m1f3+_a&4a!?+&awZ9yKA#1STF-^n%K<4)Z zoO^bb`D~c;N=3h45WkhvWd>6}|JZcb=@9K_$kT2$Wh z^!M|tT9dX_V6U<*5D)I+LrIWaBLF!U(NWc3zAM(PcU_44||}+=r(lwD(3F-s}oy!D593>>YiE#o>baMWO-g-cV3tR(8LN&AdpZ`4er4O&C zKgNDJ*B(81FfMSO_h#t2Kn!~tUW1p8gXX7*{P{lyXD21U|80!?etrvlRq|h#WMQHee2tdhKU6YW z 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

@BYw4#C8B%V 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 Date: Fri, 20 Dec 2024 18:24:08 -0800 Subject: [PATCH 06/10] docs: add conventional commit guidelines to CONTRIBUTING.md (#1854) --- CONTRIBUTING.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 85557b6352..c2c99353f2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -107,6 +107,25 @@ changes that are split across multiple commits. That said, if you have a number of commits that are "checkpoints" and don't represent a single logical change, please squash those together. +**Conventional Commit Messages and PR Titles:** +To ensure consistency and aid in automated tooling (such as changelog generation), please follow the +[Conventional Commits](https://www.conventionalcommits.org/) style for commit messages and PR titles. Prefix your commit +messages and PR titles with one of the following types: + +- **feat:** for new features +- **fix:** for bug fixes +- **docs:** for documentation-only changes +- **refactor:** for code changes that neither fix a bug nor add a feature +- **chore:** for changes to the build process or auxiliary tools +- **test:** for adding or updating tests + +For example: +- `docs: Update README with corrected links` +- `fix: Resolve race condition in event loop` + +If your pull request title does not contain a valid prefix, automated checks may fail. You can amend your commit and +force-push to correct this before merging. + #### Opening the pull request From within GitHub, opening a new pull request will present you with a template that should be filled out. Please try @@ -162,4 +181,4 @@ _Adapted from the [Reth contributing guide](https://raw.githubusercontent.com/pa [mcve]: https://stackoverflow.com/help/mcve -[hiding-a-comment]: https://help.github.com/articles/managing-disruptive-comments/#hiding-a-comment \ No newline at end of file +[hiding-a-comment]: https://help.github.com/articles/managing-disruptive-comments/#hiding-a-comment From bfb0c6d8e045b5f40422b9c06cb0e9ee21b3c19c Mon Sep 17 00:00:00 2001 From: Ratan Kaliani Date: Sun, 22 Dec 2024 15:40:55 -0800 Subject: [PATCH 07/10] fix(ci): remove docker login (#1887) --- .github/actions/setup/action.yml | 6 +- Cargo.lock | 751 ++++++++++++++++--------------- crates/sdk/Cargo.toml | 2 +- crates/sdk/src/network/prover.rs | 2 +- 4 files changed, 394 insertions(+), 367 deletions(-) diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index d928b91df6..e9c7ba7f2b 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -1,6 +1,7 @@ # Note: this is only compatible with Linux runners. -name: Test setup +name: Setup +description: "Setup the environment for the CI" inputs: pull_token: description: "Token to use for private repo access" @@ -101,6 +102,3 @@ runs: else echo "pkg-config and libssl-dev are already installed." fi - - - name: Set up Docker - uses: docker/setup-buildx-action@v3 diff --git a/Cargo.lock b/Cargo.lock index 034824d0bf..8bcfa75065 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -105,9 +105,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy-consensus" @@ -252,14 +252,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6259a506ab13e1d658796c31e6e39d2e2ee89243bcc505ddc613b35732e0a430" dependencies = [ "alloy-rlp", - "bytes 1.8.0", + "bytes 1.9.0", "cfg-if", "const-hex", "derive_more", "foldhash", - "hashbrown 0.15.1", + "hashbrown 0.15.2", "hex-literal", - "indexmap 2.6.0", + "indexmap 2.7.0", "itoa", "k256", "keccak-asm", @@ -267,7 +267,7 @@ dependencies = [ "proptest", "rand 0.8.5", "ruint", - "rustc-hash 2.0.0", + "rustc-hash 2.1.0", "serde", "sha3", "tiny-keccak", @@ -275,24 +275,24 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0822426598f95e45dd1ea32a738dac057529a709ee645fcc516ffa4cbde08f" +checksum = "f542548a609dca89fcd72b3b9f355928cf844d4363c5eed9c5273a3dd225e097" dependencies = [ "alloy-rlp-derive", "arrayvec", - "bytes 1.8.0", + "bytes 1.9.0", ] [[package]] name = "alloy-rlp-derive" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b09cae092c27b6f1bde952653a22708691802e57bfef4a2973b80bea21efd3f" +checksum = "5a833d97bf8a5f0f878daf2c8451fff7de7f9de38baa5a45d936ec718d81255a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -378,7 +378,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -390,11 +390,11 @@ dependencies = [ "alloy-sol-macro-input", "const-hex", "heck", - "indexmap 2.6.0", + "indexmap 2.7.0", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "syn-solidity", "tiny-keccak", ] @@ -410,7 +410,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "syn-solidity", ] @@ -534,9 +534,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" +checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" dependencies = [ "backtrace", ] @@ -721,7 +721,7 @@ checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.2.0", + "fastrand 2.3.0", "futures-lite 2.5.0", "slab", ] @@ -817,7 +817,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -847,7 +847,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -877,7 +877,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -888,15 +888,15 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" -version = "0.7.7" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504e3947307ac8326a5437504c517c4b56716c9d98fac0028c2acc7ca47d70ae" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", "axum-core", - "bytes 1.8.0", + "bytes 1.9.0", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body", "http-body-util", "hyper", @@ -912,9 +912,9 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper", "tokio", - "tower 0.5.1", + "tower 0.5.2", "tower-layer", "tower-service", "tracing", @@ -927,15 +927,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" dependencies = [ "async-trait", - "bytes 1.8.0", + "bytes 1.9.0", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body", "http-body-util", "mime", "pin-project-lite", "rustversion", - "sync_wrapper 1.0.1", + "sync_wrapper", "tower-layer", "tower-service", "tracing", @@ -1033,7 +1033,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -1159,22 +1159,22 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" -version = "1.19.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" +checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -1191,9 +1191,9 @@ checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" [[package]] name = "bytes" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" dependencies = [ "serde", ] @@ -1224,9 +1224,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" dependencies = [ "serde", ] @@ -1239,7 +1239,7 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", - "semver 1.0.23", + "semver 1.0.24", "serde", "serde_json", "thiserror 1.0.69", @@ -1253,9 +1253,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.0" +version = "1.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aeb932158bd710538c73702db6945cb68a8fb08c519e6e12706b94263b36db8" +checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e" dependencies = [ "jobserver", "libc", @@ -1285,9 +1285,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -1344,9 +1344,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.20" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" dependencies = [ "clap_builder", "clap_derive", @@ -1354,9 +1354,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.20" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" dependencies = [ "anstream", "anstyle", @@ -1373,14 +1373,14 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "clap_lex" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "colorchoice" @@ -1399,15 +1399,15 @@ dependencies = [ [[package]] name = "console" -version = "0.15.8" +version = "0.15.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" dependencies = [ - "encode_unicode 0.3.6", - "lazy_static", + "encode_unicode", "libc", - "unicode-width 0.1.14", - "windows-sys 0.52.0", + "once_cell", + "unicode-width 0.2.0", + "windows-sys 0.59.0", ] [[package]] @@ -1468,6 +1468,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -1476,9 +1486,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] @@ -1527,18 +1537,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -1555,9 +1565,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" @@ -1838,7 +1848,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "unicode-xid", ] @@ -1919,7 +1929,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -1980,12 +1990,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "encode_unicode" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" - [[package]] name = "encode_unicode" version = "1.0.0" @@ -2019,7 +2023,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2030,12 +2034,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2057,9 +2061,9 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ "event-listener 5.3.1", "pin-project-lite", @@ -2086,9 +2090,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fastrlp" @@ -2098,7 +2102,18 @@ checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" dependencies = [ "arrayvec", "auto_impl", - "bytes 1.8.0", + "bytes 1.9.0", +] + +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes 1.9.0", ] [[package]] @@ -2178,9 +2193,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" [[package]] name = "foreign-types" @@ -2281,7 +2296,7 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ - "fastrand 2.2.0", + "fastrand 2.3.0", "futures-core", "futures-io", "parking", @@ -2296,7 +2311,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2365,9 +2380,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96512db27971c2c3eece70a1e106fbe6c87760234e31e8f7e5634912fe52794a" +checksum = "2cb8bc4c28d15ade99c7e90b219f30da4be5c88e586277e8cbe886beeb868ab2" dependencies = [ "serde", "typenum", @@ -2391,8 +2406,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -2499,17 +2516,17 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ "atomic-waker", - "bytes 1.8.0", + "bytes 1.9.0", "fnv", "futures-core", "futures-sink", - "http 1.1.0", - "indexmap 2.6.0", + "http 1.2.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -2568,9 +2585,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.1" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ "allocator-api2", "equivalent", @@ -2646,18 +2663,18 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "fnv", "itoa", ] [[package]] name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "fnv", "itoa", ] @@ -2668,8 +2685,8 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ - "bytes 1.8.0", - "http 1.1.0", + "bytes 1.9.0", + "http 1.2.0", ] [[package]] @@ -2678,9 +2695,9 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body", "pin-project-lite", ] @@ -2735,15 +2752,15 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.5.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures-channel", "futures-util", "h2", - "http 1.1.0", + "http 1.2.0", "http-body", "httparse", "httpdate", @@ -2756,20 +2773,20 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.3" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", - "http 1.1.0", + "http 1.2.0", "hyper", "hyper-util", - "rustls 0.23.16", + "rustls 0.23.20", "rustls-pki-types", "tokio", "tokio-rustls", "tower-service", - "webpki-roots 0.26.6", + "webpki-roots 0.26.7", ] [[package]] @@ -2791,7 +2808,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "http-body-util", "hyper", "hyper-util", @@ -2807,10 +2824,10 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures-channel", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body", "hyper", "pin-project-lite", @@ -2958,7 +2975,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2999,13 +3016,13 @@ dependencies = [ [[package]] name = "impl-trait-for-tuples" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.90", ] [[package]] @@ -3026,12 +3043,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown 0.15.1", + "hashbrown 0.15.2", "serde", ] @@ -3138,9 +3155,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jobserver" @@ -3153,10 +3170,11 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -3227,9 +3245,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.162" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libgit2-sys" @@ -3245,9 +3263,9 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", "windows-targets 0.52.6", @@ -3299,9 +3317,9 @@ checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "litemap" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" @@ -3328,7 +3346,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.1", + "hashbrown 0.15.2", ] [[package]] @@ -3354,9 +3372,9 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memuse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2145869435ace5ea6ea3d35f59be559317ec9a0d04e1812d5f185a87b6d36f1a" +checksum = "3d97bbf43eb4f088f8ca469930cde17fa036207c9a5e02ccc5107c4e8b17c964" [[package]] name = "mime" @@ -3382,20 +3400,19 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ "adler2", ] [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi 0.3.9", "libc", "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", @@ -3419,7 +3436,7 @@ dependencies = [ "openssl-probe", "openssl-sys", "schannel", - "security-framework", + "security-framework 2.11.1", "security-framework-sys", "tempfile", ] @@ -3686,7 +3703,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3734,7 +3751,7 @@ dependencies = [ [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "p3-field", "p3-matrix", @@ -3743,7 +3760,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "num-bigint 0.4.6", "p3-field", @@ -3757,7 +3774,7 @@ dependencies = [ [[package]] name = "p3-bn254-fr" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "ff 0.13.0", "num-bigint 0.4.6", @@ -3771,7 +3788,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -3784,7 +3801,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "itertools 0.12.1", "p3-challenger", @@ -3797,7 +3814,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "p3-field", "p3-matrix", @@ -3809,7 +3826,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "itertools 0.12.1", "num-bigint 0.4.6", @@ -3822,7 +3839,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "itertools 0.12.1", "p3-challenger", @@ -3840,7 +3857,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "p3-field", "p3-matrix", @@ -3850,7 +3867,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "p3-air", "p3-field", @@ -3863,7 +3880,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "itertools 0.12.1", "p3-field", @@ -3877,7 +3894,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "rayon", ] @@ -3885,7 +3902,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "itertools 0.12.1", "p3-dft", @@ -3899,7 +3916,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "itertools 0.12.1", "p3-commit", @@ -3915,7 +3932,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "gcd", "p3-field", @@ -3928,7 +3945,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "itertools 0.12.1", "p3-field", @@ -3938,7 +3955,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "itertools 0.12.1", "p3-air", @@ -3956,7 +3973,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#d33eaa69b1ef96ad678ebd96ae8e75aef3508b2a" +source = "git+https://github.com/Plonky3/Plonky3?branch=sp1-v4#bba88386261c3eaceb7f922b99bea56c1d6c6c58" dependencies = [ "serde", ] @@ -4078,12 +4095,12 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" +checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ "memchr", - "thiserror 1.0.69", + "thiserror 2.0.8", "ucd-trie", ] @@ -4094,7 +4111,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.6.0", + "indexmap 2.7.0", ] [[package]] @@ -4114,7 +4131,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -4136,7 +4153,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.2.0", + "fastrand 2.3.0", "futures-io", ] @@ -4218,9 +4235,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "powerfmt" @@ -4244,7 +4261,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -4254,7 +4271,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eea25e07510aa6ab6547308ebe3c036016d162b8da920dbb079e3ba8acf3d95a" dependencies = [ "csv", - "encode_unicode 1.0.0", + "encode_unicode", "is-terminal", "lazy_static", "term", @@ -4319,7 +4336,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -4330,9 +4347,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -4359,21 +4376,20 @@ dependencies = [ [[package]] name = "prost" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" +checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "prost-derive", ] [[package]] name = "prost-build" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c1318b19085f08681016926435853bbf7858f9c082d0999b80550ff5d9abe15" +checksum = "d0f3e5beed80eb580c68e2c600937ac2c4eedabdfd5ef1e5b7ea4f3fba84497b" dependencies = [ - "bytes 1.8.0", "heck", "itertools 0.13.0", "log", @@ -4384,28 +4400,28 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.87", + "syn 2.0.90", "tempfile", ] [[package]] name = "prost-derive" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" +checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3" dependencies = [ "anyhow", "itertools 0.13.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "prost-types" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4759aa0d3a6232fb8dbdb97b61de2c20047c68aca932c7ed76da9d788508d670" +checksum = "cc2f1e56baa61e93533aebc21af4d2134b70f66275e0fcdf3cbe43d77ff7e8fc" dependencies = [ "prost", ] @@ -4418,44 +4434,47 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quinn" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.0.0", - "rustls 0.23.16", + "rustc-hash 2.1.0", + "rustls 0.23.20", "socket2", - "thiserror 1.0.69", + "thiserror 2.0.8", "tokio", "tracing", ] [[package]] name = "quinn-proto" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", + "getrandom 0.2.15", "rand 0.8.5", "ring 0.17.8", - "rustc-hash 2.0.0", - "rustls 0.23.16", + "rustc-hash 2.1.0", + "rustls 0.23.20", + "rustls-pki-types", "slab", - "thiserror 1.0.69", + "thiserror 2.0.8", "tinyvec", "tracing", + "web-time", ] [[package]] name = "quinn-udp" -version = "0.5.7" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" dependencies = [ "cfg_aliases", "libc", @@ -4592,9 +4611,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ "bitflags", ] @@ -4661,12 +4680,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" dependencies = [ "base64 0.22.1", - "bytes 1.8.0", + "bytes 1.9.0", "encoding_rs", "futures-core", "futures-util", "h2", - "http 1.1.0", + "http 1.2.0", "http-body", "http-body-util", "hyper", @@ -4682,13 +4701,13 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.16", + "rustls 0.23.20", "rustls-pemfile", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper", "system-configuration", "tokio", "tokio-native-tls", @@ -4700,7 +4719,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.26.6", + "webpki-roots 0.26.7", "windows-registry", ] @@ -4712,7 +4731,7 @@ checksum = "562ceb5a604d3f7c885a792d42c199fd8af239d0a51b2fa6a78aafa092452b04" dependencies = [ "anyhow", "async-trait", - "http 1.1.0", + "http 1.2.0", "reqwest", "serde", "thiserror 1.0.69", @@ -4765,7 +4784,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "rustc-hex", ] @@ -4794,16 +4813,18 @@ dependencies = [ [[package]] name = "ruint" -version = "1.12.3" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3cc4c2511671f327125da14133d0c5c5d137f006a1017a16f557bc85b16286" +checksum = "f5ef8fb1dd8de3870cb8400d51b4c2023854bbafd5431a3ac7e7317243e22d2f" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", "ark-ff 0.4.2", - "bytes 1.8.0", - "fastrlp", + "bytes 1.9.0", + "fastrlp 0.3.1", + "fastrlp 0.4.0", "num-bigint 0.4.6", + "num-integer", "num-traits", "parity-scale-codec", "primitive-types", @@ -4836,9 +4857,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" [[package]] name = "rustc-hex" @@ -4870,20 +4891,20 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.23", + "semver 1.0.24", ] [[package]] name = "rustix" -version = "0.38.40" +version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4901,9 +4922,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.16" +version = "0.23.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee87ff5d9b36712a58574e12e9f0ea80f915a5b0ac518d322b24a465617925e" +checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" dependencies = [ "log", "once_cell", @@ -4916,15 +4937,14 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" dependencies = [ "openssl-probe", - "rustls-pemfile", "rustls-pki-types", "schannel", - "security-framework", + "security-framework 3.1.0", ] [[package]] @@ -4938,9 +4958,12 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +dependencies = [ + "web-time", +] [[package]] name = "rustls-webpki" @@ -4988,9 +5011,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.11.5" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aa7ffc1c0ef49b0452c6e2986abf2b07743320641ffd5fc63d552458e3b779b" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" dependencies = [ "cfg-if", "derive_more", @@ -5000,30 +5023,30 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.11.5" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46385cc24172cf615450267463f937c10072516359b3ff1cb24228a4a08bf951" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "scc" -version = "2.2.4" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8d25269dd3a12467afe2e510f69fb0b46b698e5afb296b59f2145259deaf8e8" +checksum = "94b13f8ea6177672c49d12ed964cca44836f59621981b04a3e26b87e675181de" dependencies = [ "sdd", ] [[package]] name = "schannel" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ "windows-sys 0.59.0", ] @@ -5051,7 +5074,7 @@ checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -5066,9 +5089,9 @@ dependencies = [ [[package]] name = "sdd" -version = "3.0.4" +version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49c1eeaf4b6a87c7479688c6d52b9f1153cedd3c489300564f932b065c6eab95" +checksum = "478f121bb72bbf63c52c93011ea1791dca40140dfe13f8336c4c5ac952c33aa9" [[package]] name = "sec1" @@ -5091,7 +5114,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags", - "core-foundation", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81d3f8c9bfcc3cbb6b0179eb57042d75b1582bdc65c3cb95f3fa999509c03cbc" +dependencies = [ + "bitflags", + "core-foundation 0.10.0", "core-foundation-sys", "libc", "security-framework-sys", @@ -5099,9 +5135,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" +checksum = "1863fd3768cd83c56a7f60faa4dc0d403f1b6df0a38c3c25f44b7894e45370d5" dependencies = [ "core-foundation-sys", "libc", @@ -5122,14 +5158,14 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" dependencies = [ - "semver-parser 0.10.2", + "semver-parser 0.10.3", ] [[package]] name = "semver" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" dependencies = [ "serde", ] @@ -5142,38 +5178,38 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "semver-parser" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" dependencies = [ "pest", ] [[package]] name = "serde" -version = "1.0.215" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.215" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "serde_json" -version = "1.0.132" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ "itoa", "memchr", @@ -5258,7 +5294,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -5438,9 +5474,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -5533,7 +5569,7 @@ dependencies = [ "cfg-if", "criterion", "elliptic-curve", - "generic-array 1.1.0", + "generic-array 1.1.1", "hashbrown 0.14.5", "hex", "itertools 0.13.0", @@ -5600,7 +5636,7 @@ dependencies = [ "cfg-if", "dashu", "elliptic-curve", - "generic-array 1.1.0", + "generic-array 1.1.1", "itertools 0.13.0", "k256", "num", @@ -5637,7 +5673,7 @@ dependencies = [ "sp1-prover", "sp1-sdk", "sp1-stark", - "time 0.3.36", + "time 0.3.37", "tokio", ] @@ -5650,9 +5686,7 @@ dependencies = [ [[package]] name = "sp1-lib" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c8744af050832df5ca44fcd63979a83b93ca3010b2d5a5ce2a2b91f7438065c" +version = "3.4.0" dependencies = [ "bincode", "serde", @@ -5661,6 +5695,8 @@ dependencies = [ [[package]] name = "sp1-lib" version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5729da1b05d56c01457e5ecabdc77f1cc941df23f2921163a2f325aec22428" dependencies = [ "bincode", "serde", @@ -5679,7 +5715,7 @@ dependencies = [ "sp1-sdk", "sp1-stark", "test-artifacts", - "time 0.3.36", + "time 0.3.37", ] [[package]] @@ -6116,7 +6152,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -6133,7 +6169,7 @@ dependencies = [ "num-bigint 0.4.6", "rand 0.8.5", "rustc-hex", - "sp1-lib 3.2.1", + "sp1-lib 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -6178,9 +6214,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ "proc-macro2", "quote", @@ -6196,20 +6232,14 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "sync_wrapper" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] @@ -6222,7 +6252,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -6247,7 +6277,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags", - "core-foundation", + "core-foundation 0.9.4", "system-configuration-sys", ] @@ -6280,7 +6310,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if", - "fastrand 2.2.0", + "fastrand 2.3.0", "once_cell", "rustix", "windows-sys 0.59.0", @@ -6341,7 +6371,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -6352,7 +6382,7 @@ checksum = "f2f357fcec90b3caef6623a099691be676d033b40a058ac95d2a6ade6fa0c943" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -6411,9 +6441,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -6423,7 +6453,7 @@ dependencies = [ "powerfmt", "serde", "time-core", - "time-macros 0.2.18", + "time-macros 0.2.19", ] [[package]] @@ -6444,9 +6474,9 @@ dependencies = [ [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", @@ -6496,9 +6526,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -6511,12 +6541,12 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.41.1" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", - "bytes 1.8.0", + "bytes 1.9.0", "libc", "mio", "parking_lot", @@ -6535,7 +6565,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -6550,20 +6580,19 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls 0.23.16", - "rustls-pki-types", + "rustls 0.23.20", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -6577,7 +6606,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" dependencies = [ "async-stream", - "bytes 1.8.0", + "bytes 1.9.0", "futures-core", "tokio", "tokio-stream", @@ -6585,11 +6614,11 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures-core", "futures-sink", "pin-project-lite", @@ -6608,7 +6637,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "toml_datetime", "winnow 0.5.40", ] @@ -6619,7 +6648,7 @@ version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "toml_datetime", "winnow 0.6.20", ] @@ -6634,9 +6663,9 @@ dependencies = [ "async-trait", "axum", "base64 0.22.1", - "bytes 1.8.0", + "bytes 1.9.0", "h2", - "http 1.1.0", + "http 1.2.0", "http-body", "http-body-util", "hyper", @@ -6679,14 +6708,14 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper 0.1.2", + "sync_wrapper", "tokio", "tower-layer", "tower-service", @@ -6707,9 +6736,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", @@ -6725,26 +6754,26 @@ checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" dependencies = [ "crossbeam-channel", "thiserror 1.0.69", - "time 0.3.36", + "time 0.3.37", "tracing-subscriber", ] [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -6786,9 +6815,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", @@ -6816,7 +6845,7 @@ checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788" dependencies = [ "base64 0.13.1", "byteorder", - "bytes 1.8.0", + "bytes 1.9.0", "http 0.2.12", "httparse", "log", @@ -6845,7 +6874,7 @@ dependencies = [ "async-trait", "axum", "futures", - "http 1.1.0", + "http 1.2.0", "http-body-util", "hyper", "prost", @@ -6854,7 +6883,7 @@ dependencies = [ "serde_json", "thiserror 1.0.69", "tokio", - "tower 0.5.1", + "tower 0.5.2", "url", ] @@ -6896,9 +6925,9 @@ checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-linebreak" @@ -6948,9 +6977,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.3" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -7025,7 +7054,7 @@ dependencies = [ "cfg-if", "git2", "rustversion", - "time 0.3.36", + "time 0.3.37", ] [[package]] @@ -7082,9 +7111,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", "once_cell", @@ -7093,36 +7122,36 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.45" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7130,22 +7159,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "wasm-streams" @@ -7162,9 +7191,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.72" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" dependencies = [ "js-sys", "wasm-bindgen", @@ -7201,9 +7230,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.6" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" dependencies = [ "rustls-pki-types", ] @@ -7483,9 +7512,9 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" dependencies = [ "serde", "stable_deref_trait", @@ -7495,13 +7524,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "synstructure", ] @@ -7523,27 +7552,27 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "zerofrom" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "synstructure", ] @@ -7564,7 +7593,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -7586,7 +7615,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml index e1156d7ce8..d8e8f7e14d 100644 --- a/crates/sdk/Cargo.toml +++ b/crates/sdk/Cargo.toml @@ -56,7 +56,7 @@ backoff = { version = "0.4", features = ["tokio"], optional = true } [dev-dependencies] test-artifacts = { workspace = true } -tokio-test = { version = "0.4"} +tokio-test = { version = "0.4" } [features] default = ["cuda", "network"] diff --git a/crates/sdk/src/network/prover.rs b/crates/sdk/src/network/prover.rs index 2c97ef45b8..7208e65fe3 100644 --- a/crates/sdk/src/network/prover.rs +++ b/crates/sdk/src/network/prover.rs @@ -145,7 +145,7 @@ impl NetworkProver { /// # Example /// ```rust,no_run /// use sp1_sdk::{ProverClient, network::B256}; - /// + /// /// tokio_test::block_on(async { /// let request_id = B256::from_slice(&vec![1u8; 32]); /// let client = ProverClient::builder().network().build(); From 3f539fbee7da25c0316ed25ca00ac0cd2947cf62 Mon Sep 17 00:00:00 2001 From: N Date: Tue, 7 Jan 2025 15:35:57 -0800 Subject: [PATCH 08/10] chore: migrate book from dev repo (#1915) --- book/docs/developers/common-issues.md | 4 +- book/docs/developers/rv32im-deviations.md | 2 + book/docs/developers/rv32im-specification.md | 8 -- book/docs/generating-proofs/advanced.mdx | 2 +- book/docs/generating-proofs/proof-types.md | 2 +- .../prover-network/versions.md | 11 +-- book/docs/generating-proofs/setup.md | 2 +- book/docs/getting-started/install.md | 2 +- .../verification/off-chain-verification.md | 4 +- .../onchain/contract-addresses.md | 58 +++++++------- book/docs/writing-programs/compiling.mdx | 2 +- book/docs/writing-programs/cycle-tracking.mdx | 4 +- book/docs/writing-programs/patched-crates.md | 75 +++++------------ book/docs/writing-programs/setup.md | 2 +- book/sidebars.ts | 80 +++++++++---------- book/verification/onchain/getting-started.md | 2 +- .../version-3.4.0/developers/common-issues.md | 2 +- .../generating-proofs/advanced.mdx | 2 +- .../prover-network/versions.md | 4 +- .../writing-programs/compiling.mdx | 2 +- .../writing-programs/cycle-tracking.mdx | 2 +- .../version-3.4.0/writing-programs/setup.md | 2 +- 22 files changed, 115 insertions(+), 159 deletions(-) delete mode 100644 book/docs/developers/rv32im-specification.md diff --git a/book/docs/developers/common-issues.md b/book/docs/developers/common-issues.md index 5b06ec3b43..96a91eee54 100644 --- a/book/docs/developers/common-issues.md +++ b/book/docs/developers/common-issues.md @@ -8,7 +8,7 @@ If you are using a library that has an MSRV specified, you may encounter an erro 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. +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). @@ -51,7 +51,7 @@ This is likely due to two different versions of `alloy_sol_types` being used. To ```toml [dependencies] -sp1-sdk = { version = "3.0.0", default-features = false } +sp1-sdk = { version = "4.0.0-rc.8", default-features = false } ``` This will configure out the `network` feature which will remove the dependency on `alloy_sol_types` and configure out the `NetworkProver`. diff --git a/book/docs/developers/rv32im-deviations.md b/book/docs/developers/rv32im-deviations.md index e28f294450..9456c08aa8 100644 --- a/book/docs/developers/rv32im-deviations.md +++ b/book/docs/developers/rv32im-deviations.md @@ -15,6 +15,8 @@ deviations are outlined below: - LW/SW memory access must be word aligned. - LH/LHU/SH memory access must be half-word aligned. - 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. +- The instructions FENCE, WFI, MRET, and CSR related instructions will be categorized as not implemented, + and hence not allowed by the SP1 zkvm. ## Security Considerations diff --git a/book/docs/developers/rv32im-specification.md b/book/docs/developers/rv32im-specification.md deleted file mode 100644 index 84e8aa7584..0000000000 --- a/book/docs/developers/rv32im-specification.md +++ /dev/null @@ -1,8 +0,0 @@ -# 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/docs/generating-proofs/advanced.mdx b/book/docs/generating-proofs/advanced.mdx index da9e3548ab..50ac3df8a8 100644 --- a/book/docs/generating-proofs/advanced.mdx +++ b/book/docs/generating-proofs/advanced.mdx @@ -47,7 +47,7 @@ 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 = "3.0.0", features = ["neon"] } +sp1-sdk = { version = "...", features = ["neon"] } ``` ## Performance diff --git a/book/docs/generating-proofs/proof-types.md b/book/docs/generating-proofs/proof-types.md index dfdae364d5..62bc4ce90d 100644 --- a/book/docs/generating-proofs/proof-types.md +++ b/book/docs/generating-proofs/proof-types.md @@ -34,7 +34,7 @@ The trusted setup for the Groth16 circuit keys uses the [Aztec Ignition ceremony ```rust,noplayground let client = ProverClient::from_env(); -client.prove(&pk, stdin).groth16().run().unwrap(); +client.prove(&pk, &stdin).groth16().run().unwrap(); ``` ## PLONK diff --git a/book/docs/generating-proofs/prover-network/versions.md b/book/docs/generating-proofs/prover-network/versions.md index 3060a610ad..e69af7b9ba 100644 --- a/book/docs/generating-proofs/prover-network/versions.md +++ b/book/docs/generating-proofs/prover-network/versions.md @@ -2,9 +2,10 @@ The prover network currently only supports specific versions of SP1: -| Version | Description | -| ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -| v3.X.X | V3 Release. Latest performant & production ready version. | +| Version | Description | +| ------- | ---------------------------------------------------------------- | +| v4.X.X | V4 Release. Latest performant & production ready version. | +| v3.X.X | V3 Release. Previous circuit version deprecated in January 2025. | `X` denotes that any minor and patch version is supported (e.g. `v2.1.0`, `v2.1.1`). @@ -16,14 +17,14 @@ You must switch to a supported version before submitting a proof. To do so, repl ```toml [dependencies] -sp1-zkvm = "3.0.0" +sp1-zkvm = "4.0.0-rc.8" ``` replace the `sp1-sdk` version in your script's `Cargo.toml`: ```toml [dependencies] -sp1-sdk = "3.0.0" +sp1-sdk = "4.0.0-rc.8" ``` Re-build your program and script, and then try again. diff --git a/book/docs/generating-proofs/setup.md b/book/docs/generating-proofs/setup.md index 52fc7f66f6..9055d15a80 100644 --- a/book/docs/generating-proofs/setup.md +++ b/book/docs/generating-proofs/setup.md @@ -32,7 +32,7 @@ name = "script" edition = "2021" [dependencies] -sp1-sdk = "3.0.0" +sp1-sdk = "4.0.0-rc.8" ``` The `sp1-sdk` crate includes the necessary utilities to generate, save, and verify proofs. diff --git a/book/docs/getting-started/install.md b/book/docs/getting-started/install.md index e58b9a624e..7c1a4ae85b 100644 --- a/book/docs/getting-started/install.md +++ b/book/docs/getting-started/install.md @@ -91,7 +91,7 @@ git clone git@github.com:succinctlabs/sp1.git cd sp1 cd crates cd cli -cargo install --locked --path . +cargo install --locked --force --path . cd ~ cargo prove build-toolchain ``` diff --git a/book/docs/verification/off-chain-verification.md b/book/docs/verification/off-chain-verification.md index 1b8fd1b9a5..1738301abd 100644 --- a/book/docs/verification/off-chain-verification.md +++ b/book/docs/verification/off-chain-verification.md @@ -16,7 +16,7 @@ the [Groth16 Example](https://github.com/succinctlabs/sp1/tree/main/examples/gro Import the following dependency in your `Cargo.toml`: ```toml -sp1-verifier = {version = "3.0.0", default-features = false} +sp1-verifier = {version = "4.0.0-rc.8", default-features = false} ``` ### Usage @@ -40,7 +40,7 @@ Here, the proof, public inputs, and vkey hash are read from stdin. See the follo -> Note that the SP1 SDK itself is *not* `no_std` compatible. +> Note that the SP1 SDK itself is _not_ `no_std` compatible. ## Wasm Verification diff --git a/book/docs/verification/onchain/contract-addresses.md b/book/docs/verification/onchain/contract-addresses.md index 6986d7cee8..fc5136c2d7 100644 --- a/book/docs/verification/onchain/contract-addresses.md +++ b/book/docs/verification/onchain/contract-addresses.md @@ -1,6 +1,6 @@ # Contract Addresses -> The current officially supported version of SP1 is **V3.0.0**. +> The current officially supported version of SP1 is **V4.0.0**. > > All previous versions are deprecated and may not work as expected on the gateways. @@ -15,35 +15,35 @@ must use the correct verifier gateway depending on if you are verifying a Groth1 ### 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) | +| 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) | +| 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) @@ -70,9 +70,9 @@ verifier contract by following the instructions in the 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 +- 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` +- Deploy just the `SP1Verifier` contract that you want to use. Then point to the `SP1Verifier` address in your contracts. diff --git a/book/docs/writing-programs/compiling.mdx b/book/docs/writing-programs/compiling.mdx index 0bc50d9fd6..5d6d9ac6a2 100644 --- a/book/docs/writing-programs/compiling.mdx +++ b/book/docs/writing-programs/compiling.mdx @@ -61,7 +61,7 @@ The path passed in to `build_program` should point to the directory containing t ```toml [build-dependencies] -sp1-build = "3.0.0" +sp1-build = "4.0.0-rc.8" ``` You will see output like the following from the build script if the program has changed, indicating that the program was rebuilt: diff --git a/book/docs/writing-programs/cycle-tracking.mdx b/book/docs/writing-programs/cycle-tracking.mdx index f38f50d74d..f0808d33d6 100644 --- a/book/docs/writing-programs/cycle-tracking.mdx +++ b/book/docs/writing-programs/cycle-tracking.mdx @@ -14,7 +14,7 @@ Note that to use the macro, you must add the `sp1-derive` crate to your dependen ```toml [dependencies] -sp1-derive = "3.0.0" +sp1-derive = "4.0.0-rc.8" ``` 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: @@ -79,7 +79,7 @@ Once you have your script it should look like the following: As well you must enable the profiling feature on the SDK: ```toml - sp1-sdk = { version = "3.0.0", features = ["profiling"] } + sp1-sdk = { version = "4.0.0-rc.8", features = ["profiling"] } ``` The `TRACE_FILE` env var tells the executor where to save the profile, and the `TRACE_SAMPLE_RATE` env var tells the executor how often to sample the program. diff --git a/book/docs/writing-programs/patched-crates.md b/book/docs/writing-programs/patched-crates.md index 0ebda21693..2feb3a5e57 100644 --- a/book/docs/writing-programs/patched-crates.md +++ b/book/docs/writing-programs/patched-crates.md @@ -9,8 +9,8 @@ Under the hood, we use [precompiles](./precompiles) to achieve tremendous perfor | 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 | +| sha2 | [sp1-patches/RustCrypto-hashes](https://github.com/sp1-patches/RustCrypto-hashes) | sha256 | 0.10.6, 0.10.8 | +| sha3 | [sp1-patches/RustCrypto-hashes](https://github.com/sp1-patches/RustCrypto-hashes) | keccak256 | 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 | @@ -28,34 +28,18 @@ To use the patched libraries, you can use corresponding patch entries in your pr ```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" } -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" } -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" } -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" } +sha2-v0-10-6 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", tag = "patch-sha2-0.10.6-sp1-4.0.0-rc.3" } +sha2-v0-10-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", tag = "patch-sha2-0.10.8-sp1-4.0.0-rc.3" } +sha3-v0-10-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha3", tag = "patch-sha3-0.10.8-sp1-4.0.0-rc.3" } +crypto-bigint = { git = "https://github.com/sp1-patches/RustCrypto-bigint", tag = "patch-0.5.5-sp1-4.0.0-rc.3" } +tiny-keccak = { git = "https://github.com/sp1-patches/tiny-keccak", tag = "patch-2.0.2-sp1-4.0.0-rc.3 } +curve25519-dalek = { git = "https://github.com/sp1-patches/curve25519-dalek", tag = "patch-4.1.3-sp1-4.0.0-rc.3" } +curve25519-dalek-ng = { git = "https://github.com/sp1-patches/curve25519-dalek-ng", tag = "patch-4.1.1-sp1-4.0.0-rc.3" } +ecdsa-core = { git = "https://github.com/sp1-patches/signatures", package = "ecdsa", tag = "patch-0.16.9-sp1-4.0.0-rc.3" } +secp256k1 = { git = "https://github.com/sp1-patches/rust-secp256k1", tag = "patch-0.29.1-sp1-4.0.0"-rc.3 } +substrate-bn = { git = "https://github.com/sp1-patches/bn", tag = "patch-0.6.0-sp1-4.0.0-rc.3" } +bls12_381 = { git = "https://github.com/sp1-patches/bls12_381", tag = "patch-0.8.0-sp1-4.0.0-rc.3", features = ["groups"] } +rsa = { git = "https://github.com/sp1-patches/RustCrypto-RSA/", tag = "patch-0.9.6-sp1-4.0.0-rc.3" } ``` If you are patching a crate from Github instead of from crates.io, you need to specify the @@ -81,13 +65,9 @@ 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" } + curve25519-dalek-ng = { git = "https://github.com/sp1-patches/curve25519-dalek-ng", tag = "patch-4.1.1-sp1-4.0.0-rc.3" } ``` - 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: @@ -96,28 +76,6 @@ Apply the following patches based on what crates are in your dependencies. 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. @@ -140,8 +98,11 @@ Apply the following patches based on what crates are in your dependencies. ```toml secp256k1 = { git = "https://github.com/sp1-patches/rust-secp256k1", tag = "secp256k1-v0.29.0-patch-v1" } + ecdsa-core = { git = "https://github.com/sp1-patches/signatures", package = "ecdsa", tag = "patch-0.16.9-sp1-4.0.0-rc.3 } ``` +While `secp256k1` doesnt usually rely on `ecdsa-core` the patched version does, so you must patch it as well. + ## BN254 Acceleration To accelerate BN254 (Also known as BN128 and Alt-BN128), you will need to patch the `substrate-bn` crate. diff --git a/book/docs/writing-programs/setup.md b/book/docs/writing-programs/setup.md index 42ab5383bc..bca2706f69 100644 --- a/book/docs/writing-programs/setup.md +++ b/book/docs/writing-programs/setup.md @@ -32,7 +32,7 @@ name = "program" edition = "2021" [dependencies] -sp1-zkvm = "3.0.0" +sp1-zkvm = "4.0.0-rc.8" ``` The `sp1-zkvm` crate includes necessary utilities for your program, including handling inputs and outputs, diff --git a/book/sidebars.ts b/book/sidebars.ts index b2c0ce6812..c6248ee9b5 100644 --- a/book/sidebars.ts +++ b/book/sidebars.ts @@ -1,4 +1,4 @@ -import type {SidebarsConfig} from '@docusaurus/plugin-content-docs'; +import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; // This runs in Node.js - Don't use client-side code here (browser APIs, JSX...) @@ -16,34 +16,34 @@ const sidebars: SidebarsConfig = { docs: [ "introduction", { - type: 'category', - label: 'Getting Started', + type: "category", + label: "Getting Started", items: [ - 'getting-started/install', - 'getting-started/quickstart', - 'getting-started/hardware-requirements', - 'getting-started/project-template' + "getting-started/install", + "getting-started/quickstart", + "getting-started/hardware-requirements", + "getting-started/project-template", ], collapsed: false, }, { - type: 'category', - label: 'Writing Programs', + 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' + "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', + type: "category", + label: "Generating Proofs", items: [ "generating-proofs/basics", "generating-proofs/setup", @@ -51,23 +51,23 @@ const sidebars: SidebarsConfig = { "generating-proofs/recommended-workflow", "generating-proofs/sp1-sdk-faq", { - type: 'category', - label: 'Hardware Acceleration', - link: { type: 'doc', id: 'generating-proofs/hardware-acceleration' }, + 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" + "generating-proofs/hardware-acceleration/cuda", ], }, { - type: 'category', - label: 'Prover Network', - link: { type: 'doc', id: 'generating-proofs/prover-network' }, + 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/prover-network/versions", ], }, "generating-proofs/advanced", @@ -75,33 +75,33 @@ const sidebars: SidebarsConfig = { collapsed: true, }, { - type: 'category', - label: 'Verification', + type: "category", + label: "Verification", items: [ - 'verification/off-chain-verification', + "verification/off-chain-verification", { - type: 'category', - label: 'On-Chain Verification', + type: "category", + label: "On-Chain Verification", items: [ "verification/onchain/getting-started", "verification/onchain/contract-addresses", - "verification/onchain/solidity-sdk" + "verification/onchain/solidity-sdk", ], }, - ] + ], }, { - type: 'category', - label: 'Developers', + type: "category", + label: "Developers", items: [ "developers/common-issues", "developers/usage-in-ci", "developers/building-circuit-artifacts", - "developers/rv32im-specification", - ] + "developers/rv32im-deviations", + ], }, - 'what-is-a-zkvm', - 'why-use-sp1', + "what-is-a-zkvm", + "why-use-sp1", ], }; diff --git a/book/verification/onchain/getting-started.md b/book/verification/onchain/getting-started.md index 834a23dc18..8519d620a8 100644 --- a/book/verification/onchain/getting-started.md +++ b/book/verification/onchain/getting-started.md @@ -29,5 +29,5 @@ You can run the above script with `RUST_LOG=info cargo run --bin groth16_bn254 - 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"] } +sp1-sdk = { version = "3.0.0", features = ["native-gnark"] } ``` 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 index 5d0a50e808..5b06ec3b43 100644 --- a/book/versioned_docs/version-3.4.0/developers/common-issues.md +++ b/book/versioned_docs/version-3.4.0/developers/common-issues.md @@ -51,7 +51,7 @@ This is likely due to two different versions of `alloy_sol_types` being used. To ```toml [dependencies] -sp1-sdk = { version = "2.0.0", default-features = false } +sp1-sdk = { version = "3.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`. 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 index 192ab3cb92..da9e3548ab 100644 --- a/book/versioned_docs/version-3.4.0/generating-proofs/advanced.mdx +++ b/book/versioned_docs/version-3.4.0/generating-proofs/advanced.mdx @@ -47,7 +47,7 @@ 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"] } +sp1-sdk = { version = "3.0.0", features = ["neon"] } ``` ## Performance 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 index 31503adb80..4190b713fe 100644 --- 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 @@ -17,14 +17,14 @@ You must switch to a supported version before submitting a proof. To do so, repl ```toml [dependencies] -sp1-zkvm = "2.0.0" +sp1-zkvm = "3.0.0" ``` replace the `sp1-sdk` version in your script's `Cargo.toml`: ```toml [dependencies] -sp1-sdk = "2.0.0" +sp1-sdk = "3.0.0" ``` Re-build your program and script, and then try again. 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 0041ba8fae..54bf018114 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 @@ -61,7 +61,7 @@ The path passed in to `build_program` should point to the directory containing t ```toml [build-dependencies] -sp1-build = "2.0.0" +sp1-build = "3.0.0" ``` You will see output like the following from the build script if the program has changed, indicating that the program was rebuilt: 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 index f29c303a08..0281f5fdc7 100644 --- 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 @@ -14,7 +14,7 @@ Note that to use the macro, you must add the `sp1-derive` crate to your dependen ```toml [dependencies] -sp1-derive = "2.0.0" +sp1-derive = "3.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: 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 index 2cd677f4a9..42ab5383bc 100644 --- a/book/versioned_docs/version-3.4.0/writing-programs/setup.md +++ b/book/versioned_docs/version-3.4.0/writing-programs/setup.md @@ -32,7 +32,7 @@ name = "program" edition = "2021" [dependencies] -sp1-zkvm = "2.0.0" +sp1-zkvm = "3.0.0" ``` The `sp1-zkvm` crate includes necessary utilities for your program, including handling inputs and outputs, From c0845a6613efa5e32f171ced91feb2ed7cf0974a Mon Sep 17 00:00:00 2001 From: N Date: Wed, 8 Jan 2025 09:35:00 -0800 Subject: [PATCH 09/10] fix: v4 rc3 patch fixes (#1918) Co-authored-by: Ratan Kaliani --- book/docs/writing-programs/patched-crates.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/book/docs/writing-programs/patched-crates.md b/book/docs/writing-programs/patched-crates.md index 2feb3a5e57..b60c00521a 100644 --- a/book/docs/writing-programs/patched-crates.md +++ b/book/docs/writing-programs/patched-crates.md @@ -32,13 +32,13 @@ sha2-v0-10-6 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", packa sha2-v0-10-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", tag = "patch-sha2-0.10.8-sp1-4.0.0-rc.3" } sha3-v0-10-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha3", tag = "patch-sha3-0.10.8-sp1-4.0.0-rc.3" } crypto-bigint = { git = "https://github.com/sp1-patches/RustCrypto-bigint", tag = "patch-0.5.5-sp1-4.0.0-rc.3" } -tiny-keccak = { git = "https://github.com/sp1-patches/tiny-keccak", tag = "patch-2.0.2-sp1-4.0.0-rc.3 } +tiny-keccak = { git = "https://github.com/sp1-patches/tiny-keccak", tag = "patch-2.0.2-sp1-4.0.0-rc.3" } curve25519-dalek = { git = "https://github.com/sp1-patches/curve25519-dalek", tag = "patch-4.1.3-sp1-4.0.0-rc.3" } curve25519-dalek-ng = { git = "https://github.com/sp1-patches/curve25519-dalek-ng", tag = "patch-4.1.1-sp1-4.0.0-rc.3" } -ecdsa-core = { git = "https://github.com/sp1-patches/signatures", package = "ecdsa", tag = "patch-0.16.9-sp1-4.0.0-rc.3" } -secp256k1 = { git = "https://github.com/sp1-patches/rust-secp256k1", tag = "patch-0.29.1-sp1-4.0.0"-rc.3 } -substrate-bn = { git = "https://github.com/sp1-patches/bn", tag = "patch-0.6.0-sp1-4.0.0-rc.3" } -bls12_381 = { git = "https://github.com/sp1-patches/bls12_381", tag = "patch-0.8.0-sp1-4.0.0-rc.3", features = ["groups"] } +ecdsa-core = { git = "https://github.com/sp1-patches/signatures", package = "ecdsa", tag = "patch-0.16.9-sp1-4.0.0-rc.3-v2" } +secp256k1 = { git = "https://github.com/sp1-patches/rust-secp256k1", tag = "patch-0.29.1-sp1-4.0.0-rc.3" } +substrate-bn = { git = "https://github.com/sp1-patches/bn", tag = "patch-0.6.0-sp1-4.0.0-rc.3-v1" } +bls12_381 = { git = "https://github.com/sp1-patches/bls12_381", tag = "patch-0.8.0-sp1-4.0.0-rc.3-v1" } rsa = { git = "https://github.com/sp1-patches/RustCrypto-RSA/", tag = "patch-0.9.6-sp1-4.0.0-rc.3" } ``` From dbe622aa4a6a33c88d76298c2a29a1d7ef7e90df Mon Sep 17 00:00:00 2001 From: Ratan Kaliani Date: Thu, 9 Jan 2025 10:37:35 -0800 Subject: [PATCH 10/10] chore(book): Add patch for sha2 `0.9.9` (#1921) --- book/docs/writing-programs/patched-crates.md | 1 + 1 file changed, 1 insertion(+) diff --git a/book/docs/writing-programs/patched-crates.md b/book/docs/writing-programs/patched-crates.md index b60c00521a..be82e2b0f0 100644 --- a/book/docs/writing-programs/patched-crates.md +++ b/book/docs/writing-programs/patched-crates.md @@ -28,6 +28,7 @@ To use the patched libraries, you can use corresponding patch entries in your pr ```toml [patch.crates-io] +sha2-v0-9-9 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", tag = "patch-sha2-0.9.9-sp1-4.0.0-rc.3" } sha2-v0-10-6 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", tag = "patch-sha2-0.10.6-sp1-4.0.0-rc.3" } sha2-v0-10-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", tag = "patch-sha2-0.10.8-sp1-4.0.0-rc.3" } sha3-v0-10-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha3", tag = "patch-sha3-0.10.8-sp1-4.0.0-rc.3" }