From d58df166e7dc0159f7c3eb2ba8ab76057e347c3f Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Wed, 25 Feb 2026 15:32:31 -0500 Subject: [PATCH 01/18] initialize branch --- nssa/src/error.rs | 9 +++ nssa/src/public_transaction/transaction.rs | 79 ++++++++++++---------- 2 files changed, 51 insertions(+), 37 deletions(-) diff --git a/nssa/src/error.rs b/nssa/src/error.rs index 45d53108..37177465 100644 --- a/nssa/src/error.rs +++ b/nssa/src/error.rs @@ -2,6 +2,15 @@ use std::io; use thiserror::Error; +#[macro_export] +macro_rules! ensure { + ($cond:expr, $err:expr) => { + if !$cond { + return Err($err); + } + }; +} + #[derive(Error, Debug)] pub enum NssaError { #[error("Invalid input: {0}")] diff --git a/nssa/src/public_transaction/transaction.rs b/nssa/src/public_transaction/transaction.rs index 7c8f7f74..f5fcc0fb 100644 --- a/nssa/src/public_transaction/transaction.rs +++ b/nssa/src/public_transaction/transaction.rs @@ -9,7 +9,7 @@ use nssa_core::{ use sha2::{Digest, digest::FixedOutput}; use crate::{ - V02State, + V02State, ensure, error::NssaError, public_transaction::{Message, WitnessSet}, state::MAX_NUMBER_CHAINED_CALLS, @@ -60,33 +60,33 @@ impl PublicTransaction { let witness_set = self.witness_set(); // All account_ids must be different - if message.account_ids.iter().collect::>().len() != message.account_ids.len() { - return Err(NssaError::InvalidInput( - "Duplicate account_ids found in message".into(), - )); - } + ensure!( + message.account_ids.iter().collect::>().len() == message.account_ids.len(), + NssaError::InvalidInput("Duplicate account_ids found in message".into(),) + ); // Check exactly one nonce is provided for each signature - if message.nonces.len() != witness_set.signatures_and_public_keys.len() { - return Err(NssaError::InvalidInput( + ensure!( + message.nonces.len() == witness_set.signatures_and_public_keys.len(), + NssaError::InvalidInput( "Mismatch between number of nonces and signatures/public keys".into(), - )); - } + ) + ); // Check the signatures are valid - if !witness_set.is_valid_for(message) { - return Err(NssaError::InvalidInput( - "Invalid signature for given message and public key".into(), - )); - } + ensure!( + witness_set.is_valid_for(message), + NssaError::InvalidInput("Invalid signature for given message and public key".into()) + ); let signer_account_ids = self.signer_account_ids(); // Check nonces corresponds to the current nonces on the public state. for (account_id, nonce) in signer_account_ids.iter().zip(&message.nonces) { let current_nonce = state.get_account_by_id(*account_id).nonce; - if current_nonce != *nonce { - return Err(NssaError::InvalidInput("Nonce mismatch".into())); - } + ensure!( + current_nonce == *nonce, + NssaError::InvalidInput("Nonce mismatch".into()) + ); } // Build pre_states for execution @@ -115,9 +115,10 @@ impl PublicTransaction { let mut chain_calls_counter = 0; while let Some((chained_call, caller_program_id)) = chained_calls.pop_front() { - if chain_calls_counter > MAX_NUMBER_CHAINED_CALLS { - return Err(NssaError::MaxChainedCallsDepthExceeded); - } + ensure!( + chain_calls_counter <= MAX_NUMBER_CHAINED_CALLS, + NssaError::MaxChainedCallsDepthExceeded + ); // Check that the `program_id` corresponds to a deployed program let Some(program) = state.programs().get(&chained_call.program_id) else { @@ -148,28 +149,31 @@ impl PublicTransaction { .get(&account_id) .cloned() .unwrap_or_else(|| state.get_account_by_id(account_id)); - if pre.account != expected_pre { - return Err(NssaError::InvalidProgramBehavior); - } + ensure!( + pre.account == expected_pre, + NssaError::InvalidProgramBehavior + ); // Check that authorization flags are consistent with the provided ones or // authorized by program through the PDA mechanism let is_authorized = signer_account_ids.contains(&account_id) || authorized_pdas.contains(&account_id); - if pre.is_authorized != is_authorized { - return Err(NssaError::InvalidProgramBehavior); - } + ensure!( + pre.is_authorized == is_authorized, + NssaError::InvalidProgramBehavior + ); } // Verify execution corresponds to a well-behaved program. // See the # Programs section for the definition of the `validate_execution` method. - if !validate_execution( - &program_output.pre_states, - &program_output.post_states, - chained_call.program_id, - ) { - return Err(NssaError::InvalidProgramBehavior); - } + ensure!( + validate_execution( + &program_output.pre_states, + &program_output.post_states, + chained_call.program_id, + ), + NssaError::InvalidProgramBehavior + ); for post in program_output .post_states @@ -211,9 +215,10 @@ impl PublicTransaction { } Some(post) }) { - if post.program_owner == DEFAULT_PROGRAM_ID { - return Err(NssaError::InvalidProgramBehavior); - } + ensure!( + post.program_owner != DEFAULT_PROGRAM_ID, + NssaError::InvalidProgramBehavior + ); } Ok(state_diff) From d029def7c7b8a6c51832532aa4bf965489339770 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Mon, 9 Mar 2026 12:21:44 -0400 Subject: [PATCH 02/18] add ensure test --- nssa/src/error.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/nssa/src/error.rs b/nssa/src/error.rs index 37177465..19f39c9f 100644 --- a/nssa/src/error.rs +++ b/nssa/src/error.rs @@ -67,3 +67,23 @@ pub enum NssaError { #[error("Chain of calls is too long")] MaxChainedCallsDepthExceeded, } + +#[derive(Debug)] +enum testError { + testErr, +} + + +fn test_function_ensure(cond: bool) -> Result<(), testError> { + ensure!(cond, testError::testErr); + + Ok(()) +} + + +#[test] +fn test_ensure() { + assert!(test_function_ensure(true).is_ok()); + assert!(test_function_ensure(false).is_err()); + +} \ No newline at end of file From b5d0d2d0c151e18a12f789c3380f5fa2671897ae Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Mon, 9 Mar 2026 13:05:29 -0400 Subject: [PATCH 03/18] fmt and lint --- nssa/src/error.rs | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/nssa/src/error.rs b/nssa/src/error.rs index 19f39c9f..83c88998 100644 --- a/nssa/src/error.rs +++ b/nssa/src/error.rs @@ -68,22 +68,23 @@ pub enum NssaError { MaxChainedCallsDepthExceeded, } -#[derive(Debug)] -enum testError { - testErr, +#[cfg(test)] +mod tests { + + #[derive(Debug)] + enum TestError { + TestErr, + } + + fn test_function_ensure(cond: bool) -> Result<(), testError> { + ensure!(cond, TestError::TestErr); + + Ok(()) + } + + #[test] + fn test_ensure() { + assert!(test_function_ensure(true).is_ok()); + assert!(test_function_ensure(false).is_err()); + } } - - -fn test_function_ensure(cond: bool) -> Result<(), testError> { - ensure!(cond, testError::testErr); - - Ok(()) -} - - -#[test] -fn test_ensure() { - assert!(test_function_ensure(true).is_ok()); - assert!(test_function_ensure(false).is_err()); - -} \ No newline at end of file From 6e74cca512288d8328e45c08ca5f3274b3f9160e Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Mon, 16 Mar 2026 09:12:29 -0400 Subject: [PATCH 04/18] fixed unit test --- nssa/src/error.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nssa/src/error.rs b/nssa/src/error.rs index 83c88998..c42b70d2 100644 --- a/nssa/src/error.rs +++ b/nssa/src/error.rs @@ -76,7 +76,7 @@ mod tests { TestErr, } - fn test_function_ensure(cond: bool) -> Result<(), testError> { + fn test_function_ensure(cond: bool) -> Result<(), TestError> { ensure!(cond, TestError::TestErr); Ok(()) From 756f2f413586dd082e40543ccf10a00309f567e0 Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Tue, 3 Mar 2026 14:17:34 +0300 Subject: [PATCH 05/18] feat: add workspace lints to every crate --- Cargo.toml | 6 ++++++ bedrock_client/Cargo.toml | 3 +++ common/Cargo.toml | 3 +++ examples/program_deployment/Cargo.toml | 3 +++ examples/program_deployment/methods/Cargo.toml | 3 +++ examples/program_deployment/methods/guest/Cargo.toml | 3 +++ explorer_service/Cargo.toml | 3 +++ indexer/core/Cargo.toml | 3 +++ indexer/service/Cargo.toml | 3 +++ indexer/service/protocol/Cargo.toml | 3 +++ indexer/service/rpc/Cargo.toml | 3 +++ integration_tests/Cargo.toml | 3 +++ key_protocol/Cargo.toml | 3 +++ mempool/Cargo.toml | 3 +++ nssa/Cargo.toml | 3 +++ nssa/core/Cargo.toml | 3 +++ program_methods/Cargo.toml | 3 +++ program_methods/guest/Cargo.toml | 3 +++ programs/amm/Cargo.toml | 3 +++ programs/amm/core/Cargo.toml | 3 +++ programs/token/Cargo.toml | 3 +++ programs/token/core/Cargo.toml | 3 +++ sequencer_core/Cargo.toml | 3 +++ sequencer_rpc/Cargo.toml | 3 +++ sequencer_runner/Cargo.toml | 3 +++ storage/Cargo.toml | 3 +++ test_program_methods/Cargo.toml | 3 +++ test_program_methods/guest/Cargo.toml | 3 +++ wallet-ffi/Cargo.toml | 3 +++ wallet/Cargo.toml | 3 +++ 30 files changed, 93 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index c868e0a9..a9e94f46 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -141,3 +141,9 @@ inherits = "release" opt-level = 'z' lto = true codegen-units = 1 + +[workspace.lints.rust] +warnings = "deny" + +[workspace.lints] +clippy.all = "deny" diff --git a/bedrock_client/Cargo.toml b/bedrock_client/Cargo.toml index 696174d8..2137cb74 100644 --- a/bedrock_client/Cargo.toml +++ b/bedrock_client/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] common.workspace = true diff --git a/common/Cargo.toml b/common/Cargo.toml index bf4a0032..8aafed40 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] nssa.workspace = true nssa_core.workspace = true diff --git a/examples/program_deployment/Cargo.toml b/examples/program_deployment/Cargo.toml index 2199fe21..96964a36 100644 --- a/examples/program_deployment/Cargo.toml +++ b/examples/program_deployment/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] nssa.workspace = true nssa_core.workspace = true diff --git a/examples/program_deployment/methods/Cargo.toml b/examples/program_deployment/methods/Cargo.toml index 95b10ea8..269df069 100644 --- a/examples/program_deployment/methods/Cargo.toml +++ b/examples/program_deployment/methods/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [build-dependencies] risc0-build.workspace = true diff --git a/examples/program_deployment/methods/guest/Cargo.toml b/examples/program_deployment/methods/guest/Cargo.toml index 1f4db355..69d0ffb1 100644 --- a/examples/program_deployment/methods/guest/Cargo.toml +++ b/examples/program_deployment/methods/guest/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] nssa_core.workspace = true diff --git a/explorer_service/Cargo.toml b/explorer_service/Cargo.toml index 1dc989d0..fb787230 100644 --- a/explorer_service/Cargo.toml +++ b/explorer_service/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license.workspace = true +[lints] +workspace = true + [lib] crate-type = ["cdylib", "rlib"] diff --git a/indexer/core/Cargo.toml b/indexer/core/Cargo.toml index 792fb4b7..198cf78e 100644 --- a/indexer/core/Cargo.toml +++ b/indexer/core/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] common.workspace = true bedrock_client.workspace = true diff --git a/indexer/service/Cargo.toml b/indexer/service/Cargo.toml index 925482e8..911121fd 100644 --- a/indexer/service/Cargo.toml +++ b/indexer/service/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] indexer_service_protocol = { workspace = true, features = ["convert"] } indexer_service_rpc = { workspace = true, features = ["server"] } diff --git a/indexer/service/protocol/Cargo.toml b/indexer/service/protocol/Cargo.toml index f9a3c2ad..2ee61b74 100644 --- a/indexer/service/protocol/Cargo.toml +++ b/indexer/service/protocol/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] nssa_core = { workspace = true, optional = true, features = ["host"] } nssa = { workspace = true, optional = true } diff --git a/indexer/service/rpc/Cargo.toml b/indexer/service/rpc/Cargo.toml index 0fa72635..e52191bd 100644 --- a/indexer/service/rpc/Cargo.toml +++ b/indexer/service/rpc/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] indexer_service_protocol.workspace = true diff --git a/integration_tests/Cargo.toml b/integration_tests/Cargo.toml index ac14d183..b18b782f 100644 --- a/integration_tests/Cargo.toml +++ b/integration_tests/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] nssa_core = { workspace = true, features = ["host"] } nssa.workspace = true diff --git a/key_protocol/Cargo.toml b/key_protocol/Cargo.toml index 0a5e9e9a..7a16b627 100644 --- a/key_protocol/Cargo.toml +++ b/key_protocol/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] secp256k1 = "0.31.1" diff --git a/mempool/Cargo.toml b/mempool/Cargo.toml index ee7e884c..a2f51bc0 100644 --- a/mempool/Cargo.toml +++ b/mempool/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] tokio = { workspace = true, features = ["sync"] } diff --git a/nssa/Cargo.toml b/nssa/Cargo.toml index fe74b7a3..671ea853 100644 --- a/nssa/Cargo.toml +++ b/nssa/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] nssa_core = { workspace = true, features = ["host"] } diff --git a/nssa/core/Cargo.toml b/nssa/core/Cargo.toml index 3b6b430f..ad1a997c 100644 --- a/nssa/core/Cargo.toml +++ b/nssa/core/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] risc0-zkvm.workspace = true borsh.workspace = true diff --git a/program_methods/Cargo.toml b/program_methods/Cargo.toml index 999c1522..573fd4e6 100644 --- a/program_methods/Cargo.toml +++ b/program_methods/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [build-dependencies] risc0-build.workspace = true diff --git a/program_methods/guest/Cargo.toml b/program_methods/guest/Cargo.toml index a4627b86..eabcffc8 100644 --- a/program_methods/guest/Cargo.toml +++ b/program_methods/guest/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] nssa_core.workspace = true token_core.workspace = true diff --git a/programs/amm/Cargo.toml b/programs/amm/Cargo.toml index 54df6763..6b45fc90 100644 --- a/programs/amm/Cargo.toml +++ b/programs/amm/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] nssa_core.workspace = true token_core.workspace = true diff --git a/programs/amm/core/Cargo.toml b/programs/amm/core/Cargo.toml index 935b60c7..b9c59dc4 100644 --- a/programs/amm/core/Cargo.toml +++ b/programs/amm/core/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] nssa_core.workspace = true serde.workspace = true diff --git a/programs/token/Cargo.toml b/programs/token/Cargo.toml index 39beb96a..57c88b7b 100644 --- a/programs/token/Cargo.toml +++ b/programs/token/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] nssa_core.workspace = true token_core.workspace = true diff --git a/programs/token/core/Cargo.toml b/programs/token/core/Cargo.toml index cf61a35f..90df286f 100644 --- a/programs/token/core/Cargo.toml +++ b/programs/token/core/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] nssa_core.workspace = true serde.workspace = true diff --git a/sequencer_core/Cargo.toml b/sequencer_core/Cargo.toml index e939c7ae..334f093c 100644 --- a/sequencer_core/Cargo.toml +++ b/sequencer_core/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] nssa.workspace = true nssa_core.workspace = true diff --git a/sequencer_rpc/Cargo.toml b/sequencer_rpc/Cargo.toml index 42aa978f..5c76ba34 100644 --- a/sequencer_rpc/Cargo.toml +++ b/sequencer_rpc/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] nssa.workspace = true common.workspace = true diff --git a/sequencer_runner/Cargo.toml b/sequencer_runner/Cargo.toml index 5e627ed2..71404d13 100644 --- a/sequencer_runner/Cargo.toml +++ b/sequencer_runner/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] common.workspace = true sequencer_core = { workspace = true, features = ["testnet"] } diff --git a/storage/Cargo.toml b/storage/Cargo.toml index b6374249..f18625cb 100644 --- a/storage/Cargo.toml +++ b/storage/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] common.workspace = true nssa.workspace = true diff --git a/test_program_methods/Cargo.toml b/test_program_methods/Cargo.toml index 1c3368c7..9b4934e2 100644 --- a/test_program_methods/Cargo.toml +++ b/test_program_methods/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [build-dependencies] risc0-build.workspace = true diff --git a/test_program_methods/guest/Cargo.toml b/test_program_methods/guest/Cargo.toml index 21c4fdc7..1ca958b3 100644 --- a/test_program_methods/guest/Cargo.toml +++ b/test_program_methods/guest/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] nssa_core.workspace = true diff --git a/wallet-ffi/Cargo.toml b/wallet-ffi/Cargo.toml index 0da8a248..93096e12 100644 --- a/wallet-ffi/Cargo.toml +++ b/wallet-ffi/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2021" license = { workspace = true } +[lints] +workspace = true + [lib] crate-type = ["rlib", "cdylib", "staticlib"] diff --git a/wallet/Cargo.toml b/wallet/Cargo.toml index 67224047..63e14bb6 100644 --- a/wallet/Cargo.toml +++ b/wallet/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2024" license = { workspace = true } +[lints] +workspace = true + [dependencies] nssa_core.workspace = true nssa.workspace = true From efe8393ba006492bbf0058e43efc4c47f669ad64 Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Tue, 3 Mar 2026 23:21:08 +0300 Subject: [PATCH 06/18] feat: add pedantic clippy lints --- Cargo.toml | 14 +- bedrock_client/src/lib.rs | 13 +- common/src/block.rs | 2 + common/src/config.rs | 2 +- common/src/rpc_primitives/errors.rs | 6 + common/src/rpc_primitives/message.rs | 18 +- common/src/rpc_primitives/mod.rs | 2 + common/src/sequencer_client.rs | 16 +- common/src/test_utils.rs | 8 +- common/src/transaction.rs | 2 + .../src/bin/hello_world_with_authorization.rs | 4 +- .../src/bin/hello_world_with_move_function.rs | 23 +- .../methods/guest/src/bin/simple_tail_call.rs | 2 +- .../guest/src/bin/tail_call_with_pda.rs | 2 +- .../bin/run_hello_world_with_move_function.rs | 2 +- explorer_service/src/api.rs | 22 +- .../src/components/transaction_preview.rs | 4 + explorer_service/src/format_utils.rs | 7 +- explorer_service/src/lib.rs | 5 + explorer_service/src/main.rs | 4 +- explorer_service/src/pages/account_page.rs | 23 +- explorer_service/src/pages/block_page.rs | 2 +- explorer_service/src/pages/main_page.rs | 161 +++---- .../src/pages/transaction_page.rs | 8 +- indexer/core/src/block_store.rs | 6 +- indexer/core/src/config.rs | 13 +- indexer/core/src/lib.rs | 80 ++-- indexer/service/protocol/src/convert.rs | 10 +- indexer/service/protocol/src/lib.rs | 3 +- indexer/service/rpc/src/lib.rs | 8 +- indexer/service/src/lib.rs | 8 +- indexer/service/src/main.rs | 4 +- indexer/service/src/mock_service.rs | 27 +- indexer/service/src/service.rs | 27 +- integration_tests/src/config.rs | 3 + integration_tests/src/lib.rs | 26 +- integration_tests/tests/account.rs | 17 +- .../tests/auth_transfer/private.rs | 6 +- .../tests/auth_transfer/public.rs | 2 +- integration_tests/tests/block_size_limit.rs | 5 +- integration_tests/tests/config.rs | 2 +- integration_tests/tests/indexer.rs | 2 +- integration_tests/tests/keys_restoration.rs | 2 +- integration_tests/tests/tps.rs | 19 +- integration_tests/tests/wallet_ffi.rs | 414 +++++++++--------- .../key_management/ephemeral_key_holder.rs | 4 + .../key_management/key_tree/chain_index.rs | 32 +- .../key_management/key_tree/keys_public.rs | 26 +- .../src/key_management/key_tree/mod.rs | 7 +- .../src/key_management/key_tree/traits.rs | 1 + key_protocol/src/key_management/mod.rs | 11 +- .../src/key_management/secret_holders.rs | 28 +- key_protocol/src/key_protocol_core/mod.rs | 8 +- mempool/src/lib.rs | 2 + nssa/build.rs | 10 +- nssa/core/src/account.rs | 18 +- nssa/core/src/account/data.rs | 62 ++- nssa/core/src/circuit_io.rs | 12 +- nssa/core/src/commitment.rs | 11 +- nssa/core/src/encoding.rs | 28 +- nssa/core/src/encryption/mod.rs | 17 +- .../src/encryption/shared_key_derivation.rs | 10 +- nssa/core/src/nullifier.rs | 13 +- nssa/core/src/program.rs | 14 +- .../privacy_preserving_transaction.rs | 2 + .../program_deployment_transaction.rs | 1 + nssa/src/encoding/public_transaction.rs | 1 + nssa/src/merkle_tree/mod.rs | 16 +- .../privacy_preserving_transaction/circuit.rs | 17 +- .../privacy_preserving_transaction/message.rs | 14 +- .../transaction.rs | 7 +- .../witness_set.rs | 8 +- nssa/src/program.rs | 27 +- .../program_deployment_transaction/message.rs | 2 + .../transaction.rs | 4 + nssa/src/public_transaction/message.rs | 1 + nssa/src/public_transaction/transaction.rs | 17 +- nssa/src/public_transaction/witness_set.rs | 5 + nssa/src/signature/bip340_test_vectors.rs | 2 +- nssa/src/signature/mod.rs | 2 + nssa/src/signature/private_key.rs | 9 +- nssa/src/signature/public_key.rs | 2 + nssa/src/state.rs | 120 ++--- .../guest/src/bin/authenticated_transfer.rs | 28 +- program_methods/guest/src/bin/pinata.rs | 5 +- program_methods/guest/src/bin/pinata_token.rs | 16 +- .../src/bin/privacy_preserving_circuit.rs | 40 +- programs/amm/core/src/lib.rs | 8 +- programs/amm/src/add.rs | 15 +- programs/amm/src/new_definition.rs | 47 +- programs/amm/src/remove.rs | 17 +- programs/amm/src/swap.rs | 15 +- programs/token/core/src/lib.rs | 9 +- programs/token/src/burn.rs | 1 + programs/token/src/initialize.rs | 1 + programs/token/src/mint.rs | 1 + programs/token/src/new_definition.rs | 8 +- programs/token/src/print_nft.rs | 1 + programs/token/src/transfer.rs | 3 +- sequencer_core/src/block_settlement_client.rs | 22 +- sequencer_core/src/block_store.rs | 4 +- sequencer_core/src/lib.rs | 82 ++-- sequencer_rpc/src/lib.rs | 1 + sequencer_rpc/src/net_utils.rs | 14 +- sequencer_rpc/src/process.rs | 34 +- sequencer_rpc/src/types/err_rpc.rs | 1 + sequencer_runner/src/lib.rs | 4 +- storage/src/error.rs | 3 + storage/src/indexer.rs | 50 ++- test_program_methods/guest/src/bin/burner.rs | 5 +- .../guest/src/bin/chain_caller.rs | 8 +- .../guest/src/bin/changer_claimer.rs | 5 +- test_program_methods/guest/src/bin/claimer.rs | 7 +- .../guest/src/bin/data_changer.rs | 5 +- .../guest/src/bin/extra_output.rs | 5 +- .../bin/malicious_authorization_changer.rs | 5 +- test_program_methods/guest/src/bin/minter.rs | 5 +- .../guest/src/bin/missing_output.rs | 5 +- .../guest/src/bin/modified_transfer.rs | 21 +- .../guest/src/bin/nonce_changer.rs | 5 +- .../guest/src/bin/program_owner_changer.rs | 5 +- .../guest/src/bin/simple_balance_transfer.rs | 5 +- wallet-ffi/src/account.rs | 47 +- wallet-ffi/src/error.rs | 9 + wallet-ffi/src/keys.rs | 33 +- wallet-ffi/src/lib.rs | 12 +- wallet-ffi/src/pinata.rs | 48 +- wallet-ffi/src/sync.rs | 20 +- wallet-ffi/src/transfer.rs | 97 ++-- wallet-ffi/src/types.rs | 9 +- wallet-ffi/src/wallet.rs | 69 ++- wallet-ffi/wallet_ffi.h | 4 +- wallet/src/cli/account.rs | 6 +- wallet/src/cli/config.rs | 4 +- wallet/src/cli/mod.rs | 32 +- wallet/src/cli/programs/amm.rs | 30 +- .../src/cli/programs/native_token_transfer.rs | 24 +- wallet/src/cli/programs/pinata.rs | 10 +- wallet/src/cli/programs/token.rs | 60 +-- wallet/src/config.rs | 8 +- wallet/src/helperfunctions.rs | 9 +- wallet/src/lib.rs | 52 ++- wallet/src/main.rs | 6 +- wallet/src/poller.rs | 10 +- wallet/src/privacy_preserving_tx.rs | 14 +- 145 files changed, 1549 insertions(+), 1187 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index a9e94f46..0e7d0cbc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -146,4 +146,16 @@ codegen-units = 1 warnings = "deny" [workspace.lints] -clippy.all = "deny" +clippy.all = { level = "deny", priority = -1 } +clippy.pedantic = { level = "deny", priority = -1 } + +# Reason: documenting every function returning Result is too verbose and doesn't add much value when you have good error types. +clippy.missing-errors-doc = "allow" +# Reason: most of the panics are internal and not part of the public API, so documenting them is not necessary. +clippy.missing-panics-doc = "allow" +# Reason: this isn't always bad and actually works well for our financial and cryptography code. +clippy.similar-names = "allow" +# Reason: this lint is too strict and hard to fix. +clippy.too-many-lines = "allow" +# Reason: std hasher is fine for us in public functions +clippy.implicit-hasher = "allow" diff --git a/bedrock_client/src/lib.rs b/bedrock_client/src/lib.rs index 534a0cf6..227cc47a 100644 --- a/bedrock_client/src/lib.rs +++ b/bedrock_client/src/lib.rs @@ -96,9 +96,14 @@ impl BedrockClient { } fn backoff_strategy(&self) -> impl Iterator { - tokio_retry::strategy::FibonacciBackoff::from_millis( - self.backoff.start_delay.as_millis() as u64 - ) - .take(self.backoff.max_retries) + let start_delay_millis = self + .backoff + .start_delay + .as_millis() + .try_into() + .expect("Start delay must be less than u64::MAX milliseconds"); + + tokio_retry::strategy::FibonacciBackoff::from_millis(start_delay_millis) + .take(self.backoff.max_retries) } } diff --git a/common/src/block.rs b/common/src/block.rs index 0343435b..e5a58aed 100644 --- a/common/src/block.rs +++ b/common/src/block.rs @@ -69,6 +69,7 @@ pub struct HashableBlockData { } impl HashableBlockData { + #[must_use] pub fn into_pending_block( self, signing_key: &nssa::PrivateKey, @@ -93,6 +94,7 @@ impl HashableBlockData { } } + #[must_use] pub fn block_hash(&self) -> BlockHash { OwnHasher::hash(&borsh::to_vec(&self).unwrap()) } diff --git a/common/src/config.rs b/common/src/config.rs index 3850f08c..537c35bd 100644 --- a/common/src/config.rs +++ b/common/src/config.rs @@ -43,7 +43,7 @@ impl FromStr for BasicAuth { Ok(Self { username: username.to_string(), - password: password.map(|p| p.to_string()), + password: password.map(std::string::ToString::to_string), }) } } diff --git a/common/src/rpc_primitives/errors.rs b/common/src/rpc_primitives/errors.rs index 1f799815..1c376a53 100644 --- a/common/src/rpc_primitives/errors.rs +++ b/common/src/rpc_primitives/errors.rs @@ -49,6 +49,7 @@ impl RpcError { /// A generic constructor. /// /// Mostly for completeness, doesn't do anything but filling in the corresponding fields. + #[must_use] pub fn new(code: i64, message: String, data: Option) -> Self { RpcError { code, @@ -82,6 +83,7 @@ impl RpcError { } /// Create a parse error. + #[must_use] pub fn parse_error(e: String) -> Self { RpcError { code: -32_700, @@ -93,12 +95,14 @@ impl RpcError { } } + #[must_use] pub fn serialization_error(e: &str) -> Self { RpcError::new_internal_error(Some(Value::String(e.to_owned())), e) } /// Helper method to define extract `INTERNAL_ERROR` in separate `RpcErrorKind` /// Returns `HANDLER_ERROR` if the error is not internal one + #[must_use] pub fn new_internal_or_handler_error(error_data: Option, error_struct: Value) -> Self { if error_struct["name"] == "INTERNAL_ERROR" { let error_message = match error_struct["info"].get("error_message") { @@ -111,6 +115,7 @@ impl RpcError { } } + #[must_use] pub fn new_internal_error(error_data: Option, info: &str) -> Self { RpcError { code: -32_000, @@ -133,6 +138,7 @@ impl RpcError { } /// Create a method not found error. + #[must_use] pub fn method_not_found(method: String) -> Self { RpcError { code: -32_601, diff --git a/common/src/rpc_primitives/message.rs b/common/src/rpc_primitives/message.rs index 98867448..5092dbc9 100644 --- a/common/src/rpc_primitives/message.rs +++ b/common/src/rpc_primitives/message.rs @@ -32,7 +32,7 @@ impl<'de> serde::Deserialize<'de> for Version { fn deserialize>(deserializer: D) -> Result { struct VersionVisitor; #[allow(clippy::needless_lifetimes)] - impl<'de> Visitor<'de> for VersionVisitor { + impl Visitor<'_> for VersionVisitor { type Value = Version; fn expecting(&self, formatter: &mut Formatter<'_>) -> FmtResult { @@ -62,6 +62,7 @@ pub struct Request { } impl Request { + #[must_use] pub fn from_payload_version_2_0(method: String, payload: serde_json::Value) -> Self { Self { jsonrpc: Version, @@ -75,6 +76,7 @@ impl Request { /// Answer the request with a (positive) reply. /// /// The ID is taken from the request. + #[must_use] pub fn reply(&self, reply: Value) -> Message { Message::Response(Response { jsonrpc: Version, @@ -84,6 +86,7 @@ impl Request { } /// Answer the request with an error. + #[must_use] pub fn error(&self, error: RpcError) -> Message { Message::Response(Response { jsonrpc: Version, @@ -212,6 +215,7 @@ impl Message { /// A constructor for a request. /// /// The ID is auto-set to dontcare. + #[must_use] pub fn request(method: String, params: Value) -> Self { let id = Value::from("dontcare"); Message::Request(Request { @@ -223,6 +227,7 @@ impl Message { } /// Create a top-level error (without an ID). + #[must_use] pub fn error(error: RpcError) -> Self { Message::Response(Response { jsonrpc: Version, @@ -232,6 +237,7 @@ impl Message { } /// A constructor for a notification. + #[must_use] pub fn notification(method: String, params: Value) -> Self { Message::Notification(Notification { jsonrpc: Version, @@ -241,6 +247,7 @@ impl Message { } /// A constructor for a response. + #[must_use] pub fn response(id: Value, result: Result) -> Self { Message::Response(Response { jsonrpc: Version, @@ -250,6 +257,7 @@ impl Message { } /// Returns id or Null if there is no id. + #[must_use] pub fn id(&self) -> Value { match self { Message::Request(req) => req.id.clone(), @@ -276,6 +284,7 @@ impl Broken { /// /// The error message for these things are specified in the RFC, so this just creates an error /// with the right values. + #[must_use] pub fn reply(&self) -> Message { match *self { Broken::Unmatched(_) => Message::error(RpcError::parse_error( @@ -343,7 +352,6 @@ mod tests { /// But since serialization doesn't have to produce the exact same result (order, spaces, …), /// we then serialize and deserialize the thing again and check it matches. #[test] - #[allow(clippy::too_many_lines)] fn message_serde() { // A helper for running one message test fn one(input: &str, expected: &Message) { @@ -491,10 +499,10 @@ mod tests { // Something completely different one(r#"{"x": [1, 2, 3]}"#); - match from_str(r#"{]"#) { + match from_str(r"{]") { Err(Broken::SyntaxError(_)) => (), other => panic!("Something unexpected: {other:?}"), - }; + } } /// Test some non-trivial aspects of the constructors @@ -503,7 +511,7 @@ mod tests { /// Most of it is related to the ids. #[test] #[allow(clippy::panic)] - #[ignore] + #[ignore = "Not a full coverage test"] fn constructors() { let msg1 = Message::request("call".to_owned(), json!([1, 2, 3])); let msg2 = Message::request("call".to_owned(), json!([1, 2, 3])); diff --git a/common/src/rpc_primitives/mod.rs b/common/src/rpc_primitives/mod.rs index be5182e1..5cc74995 100644 --- a/common/src/rpc_primitives/mod.rs +++ b/common/src/rpc_primitives/mod.rs @@ -39,6 +39,7 @@ impl Default for RpcConfig { } impl RpcConfig { + #[must_use] pub fn new(addr: &str) -> Self { RpcConfig { addr: addr.to_owned(), @@ -46,6 +47,7 @@ impl RpcConfig { } } + #[must_use] pub fn with_port(port: u16) -> Self { RpcConfig { addr: format!("0.0.0.0:{port}"), diff --git a/common/src/sequencer_client.rs b/common/src/sequencer_client.rs index f847b865..dc6c8ca7 100644 --- a/common/src/sequencer_client.rs +++ b/common/src/sequencer_client.rs @@ -30,6 +30,14 @@ use crate::{ transaction::NSSATransaction, }; +#[derive(Debug, Clone, Deserialize)] +#[allow(dead_code)] +struct SequencerRpcResponse { + jsonrpc: String, + result: serde_json::Value, + id: u64, +} + #[derive(Clone)] pub struct SequencerClient { pub client: reqwest::Client, @@ -86,14 +94,6 @@ impl SequencerClient { }) .await?; - #[derive(Debug, Clone, Deserialize)] - #[allow(dead_code)] - pub struct SequencerRpcResponse { - pub jsonrpc: String, - pub result: serde_json::Value, - pub id: u64, - } - if let Ok(response) = serde_json::from_value::(response_vall.clone()) { Ok(response.result) diff --git a/common/src/test_utils.rs b/common/src/test_utils.rs index 09651c18..1d166ade 100644 --- a/common/src/test_utils.rs +++ b/common/src/test_utils.rs @@ -8,6 +8,7 @@ use crate::{ // Helpers +#[must_use] pub fn sequencer_sign_key_for_testing() -> nssa::PrivateKey { nssa::PrivateKey::try_new([37; 32]).unwrap() } @@ -21,6 +22,7 @@ pub fn sequencer_sign_key_for_testing() -> nssa::PrivateKey { /// `prev_hash` - hash of previous block, provide None for genesis /// /// `transactions` - vector of `EncodedTransaction` objects +#[must_use] pub fn produce_dummy_block( id: u64, prev_hash: Option, @@ -36,6 +38,7 @@ pub fn produce_dummy_block( block_data.into_pending_block(&sequencer_sign_key_for_testing(), [0; 32]) } +#[must_use] pub fn produce_dummy_empty_transaction() -> NSSATransaction { let program_id = nssa::program::Program::authenticated_transfer_program().id(); let account_ids = vec![]; @@ -56,12 +59,13 @@ pub fn produce_dummy_empty_transaction() -> NSSATransaction { NSSATransaction::Public(nssa_tx) } +#[must_use] pub fn create_transaction_native_token_transfer( from: AccountId, nonce: u128, to: AccountId, balance_to_move: u128, - signing_key: nssa::PrivateKey, + signing_key: &nssa::PrivateKey, ) -> NSSATransaction { let account_ids = vec![from, to]; let nonces = vec![nonce]; @@ -73,7 +77,7 @@ pub fn create_transaction_native_token_transfer( balance_to_move, ) .unwrap(); - let witness_set = nssa::public_transaction::WitnessSet::for_message(&message, &[&signing_key]); + let witness_set = nssa::public_transaction::WitnessSet::for_message(&message, &[signing_key]); let nssa_tx = nssa::PublicTransaction::new(message, witness_set); diff --git a/common/src/transaction.rs b/common/src/transaction.rs index a996250b..74a41ca2 100644 --- a/common/src/transaction.rs +++ b/common/src/transaction.rs @@ -13,6 +13,7 @@ pub enum NSSATransaction { } impl NSSATransaction { + #[must_use] pub fn hash(&self) -> HashType { HashType(match self { NSSATransaction::Public(tx) => tx.hash(), @@ -21,6 +22,7 @@ impl NSSATransaction { }) } + #[must_use] pub fn affected_public_account_ids(&self) -> Vec { match self { NSSATransaction::ProgramDeployment(tx) => tx.affected_public_account_ids(), diff --git a/examples/program_deployment/methods/guest/src/bin/hello_world_with_authorization.rs b/examples/program_deployment/methods/guest/src/bin/hello_world_with_authorization.rs index 043da1bf..e327ca47 100644 --- a/examples/program_deployment/methods/guest/src/bin/hello_world_with_authorization.rs +++ b/examples/program_deployment/methods/guest/src/bin/hello_world_with_authorization.rs @@ -36,9 +36,7 @@ fn main() { // Fail if the input account is not authorized // The `is_authorized` field will be correctly populated or verified by the system if // authorization is provided. - if !pre_state.is_authorized { - panic!("Missing required authorization"); - } + assert!(pre_state.is_authorized, "Missing required authorization"); // #### // Construct the post state account values diff --git a/examples/program_deployment/methods/guest/src/bin/hello_world_with_move_function.rs b/examples/program_deployment/methods/guest/src/bin/hello_world_with_move_function.rs index af0d4bf4..e278a732 100644 --- a/examples/program_deployment/methods/guest/src/bin/hello_world_with_move_function.rs +++ b/examples/program_deployment/methods/guest/src/bin/hello_world_with_move_function.rs @@ -1,5 +1,5 @@ use nssa_core::{ - account::{Account, AccountWithMetadata}, + account::{Account, AccountWithMetadata, Data}, program::{ AccountPostState, DEFAULT_PROGRAM_ID, ProgramInput, read_nssa_inputs, write_nssa_outputs, }, @@ -35,12 +35,12 @@ fn build_post_state(post_account: Account) -> AccountPostState { } } -fn write(pre_state: AccountWithMetadata, greeting: Vec) -> AccountPostState { +fn write(pre_state: AccountWithMetadata, greeting: &[u8]) -> AccountPostState { // Construct the post state account values let post_account = { - let mut this = pre_state.account.clone(); + let mut this = pre_state.account; let mut bytes = this.data.into_inner(); - bytes.extend_from_slice(&greeting); + bytes.extend_from_slice(greeting); this.data = bytes .try_into() .expect("Data should fit within the allowed limits"); @@ -50,21 +50,18 @@ fn write(pre_state: AccountWithMetadata, greeting: Vec) -> AccountPostState build_post_state(post_account) } -fn move_data( - from_pre: &AccountWithMetadata, - to_pre: &AccountWithMetadata, -) -> Vec { +fn move_data(from_pre: AccountWithMetadata, to_pre: AccountWithMetadata) -> Vec { // Construct the post state account values let from_data: Vec = from_pre.account.data.clone().into(); let from_post = { - let mut this = from_pre.account.clone(); - this.data = Default::default(); + let mut this = from_pre.account; + this.data = Data::default(); build_post_state(this) }; let to_post = { - let mut this = to_pre.account.clone(); + let mut this = to_pre.account; let mut bytes = this.data.into_inner(); bytes.extend_from_slice(&from_data); this.data = bytes @@ -88,11 +85,11 @@ fn main() { let post_states = match (pre_states.as_slice(), function_id, data.len()) { ([account_pre], WRITE_FUNCTION_ID, _) => { - let post = write(account_pre.clone(), data); + let post = write(account_pre.clone(), &data); vec![post] } ([account_from_pre, account_to_pre], MOVE_DATA_FUNCTION_ID, 0) => { - move_data(account_from_pre, account_to_pre) + move_data(account_from_pre.clone(), account_to_pre.clone()) } _ => panic!("invalid params"), }; diff --git a/examples/program_deployment/methods/guest/src/bin/simple_tail_call.rs b/examples/program_deployment/methods/guest/src/bin/simple_tail_call.rs index e933598f..01389085 100644 --- a/examples/program_deployment/methods/guest/src/bin/simple_tail_call.rs +++ b/examples/program_deployment/methods/guest/src/bin/simple_tail_call.rs @@ -29,7 +29,7 @@ fn main() { let ( ProgramInput { pre_states, - instruction: _, + instruction: (), }, instruction_data, ) = read_nssa_inputs::<()>(); diff --git a/examples/program_deployment/methods/guest/src/bin/tail_call_with_pda.rs b/examples/program_deployment/methods/guest/src/bin/tail_call_with_pda.rs index 684fa1e8..679df3bf 100644 --- a/examples/program_deployment/methods/guest/src/bin/tail_call_with_pda.rs +++ b/examples/program_deployment/methods/guest/src/bin/tail_call_with_pda.rs @@ -34,7 +34,7 @@ fn main() { let ( ProgramInput { pre_states, - instruction: _, + instruction: (), }, instruction_data, ) = read_nssa_inputs::<()>(); diff --git a/examples/program_deployment/src/bin/run_hello_world_with_move_function.rs b/examples/program_deployment/src/bin/run_hello_world_with_move_function.rs index fc116241..85bd19c6 100644 --- a/examples/program_deployment/src/bin/run_hello_world_with_move_function.rs +++ b/examples/program_deployment/src/bin/run_hello_world_with_move_function.rs @@ -148,5 +148,5 @@ async fn main() { .await .unwrap(); } - }; + } } diff --git a/explorer_service/src/api.rs b/explorer_service/src/api.rs index 1e2bdd5b..6cec377c 100644 --- a/explorer_service/src/api.rs +++ b/explorer_service/src/api.rs @@ -22,7 +22,7 @@ pub async fn get_account(account_id: AccountId) -> Result Result client .get_block_by_id(block_id) .await - .map_err(|e| ServerFnError::ServerError(format!("RPC error: {}", e))) + .map_err(|e| ServerFnError::ServerError(format!("RPC error: {e}"))) } /// Get latest block ID @@ -91,7 +91,7 @@ pub async fn get_latest_block_id() -> Result { client .get_last_finalized_block_id() .await - .map_err(|e| ServerFnError::ServerError(format!("RPC error: {}", e))) + .map_err(|e| ServerFnError::ServerError(format!("RPC error: {e}"))) } /// Get block by hash @@ -102,7 +102,7 @@ pub async fn get_block_by_hash(block_hash: HashType) -> Result Result, limit: u32) -> Result, ServerFnError> { +pub async fn get_blocks(before: Option, limit: u64) -> Result, ServerFnError> { use indexer_service_rpc::RpcClient as _; let client = expect_context::(); client .get_blocks(before, limit) .await - .map_err(|e| ServerFnError::ServerError(format!("RPC error: {}", e))) + .map_err(|e| ServerFnError::ServerError(format!("RPC error: {e}"))) } /// Get transactions by account #[server] pub async fn get_transactions_by_account( account_id: AccountId, - limit: u32, - offset: u32, + offset: u64, + limit: u64, ) -> Result, ServerFnError> { use indexer_service_rpc::RpcClient as _; let client = expect_context::(); client - .get_transactions_by_account(account_id, limit, offset) + .get_transactions_by_account(account_id, offset, limit) .await - .map_err(|e| ServerFnError::ServerError(format!("RPC error: {}", e))) + .map_err(|e| ServerFnError::ServerError(format!("RPC error: {e}"))) } /// Create the RPC client for the indexer service (server-side only) diff --git a/explorer_service/src/components/transaction_preview.rs b/explorer_service/src/components/transaction_preview.rs index 68c1e86e..f4ff2bb4 100644 --- a/explorer_service/src/components/transaction_preview.rs +++ b/explorer_service/src/components/transaction_preview.rs @@ -13,6 +13,10 @@ fn transaction_type_info(tx: &Transaction) -> (&'static str, &'static str) { /// Transaction preview component #[component] +#[expect( + clippy::needless_pass_by_value, + reason = "Leptos component props are passed by value by framework convention" +)] pub fn TransactionPreview(transaction: Transaction) -> impl IntoView { let hash = transaction.hash(); let hash_str = hash.to_string(); diff --git a/explorer_service/src/format_utils.rs b/explorer_service/src/format_utils.rs index 20c1824c..07d7e8ec 100644 --- a/explorer_service/src/format_utils.rs +++ b/explorer_service/src/format_utils.rs @@ -3,7 +3,10 @@ /// Format timestamp to human-readable string pub fn format_timestamp(timestamp: u64) -> String { let seconds = timestamp / 1000; - let datetime = chrono::DateTime::from_timestamp(seconds as i64, 0) - .unwrap_or_else(|| chrono::DateTime::from_timestamp(0, 0).unwrap()); + let datetime = chrono::DateTime::from_timestamp( + i64::try_from(seconds).expect("Timestamp out of range"), + 0, + ) + .unwrap_or_else(|| chrono::DateTime::from_timestamp(0, 0).unwrap()); datetime.format("%Y-%m-%d %H:%M:%S UTC").to_string() } diff --git a/explorer_service/src/lib.rs b/explorer_service/src/lib.rs index e2b2291e..fadc164b 100644 --- a/explorer_service/src/lib.rs +++ b/explorer_service/src/lib.rs @@ -1,3 +1,8 @@ +#![expect( + clippy::must_use_candidate, + reason = "Warns on code generated by leptos macros" +)] + use leptos::prelude::*; use leptos_meta::{Meta, Stylesheet, Title, provide_meta_context}; use leptos_router::{ diff --git a/explorer_service/src/main.rs b/explorer_service/src/main.rs index 6cc4a9a4..357219ef 100644 --- a/explorer_service/src/main.rs +++ b/explorer_service/src/main.rs @@ -8,8 +8,6 @@ async fn main() { use leptos_axum::{LeptosRoutes, generate_route_list}; use leptos_meta::MetaTags; - env_logger::init(); - /// LEZ Block Explorer Server CLI arguments. #[derive(Parser, Debug)] #[command(version, about, long_about = None)] @@ -19,6 +17,8 @@ async fn main() { indexer_rpc_url: url::Url, } + env_logger::init(); + let args = Args::parse(); let conf = get_configuration(None).unwrap(); diff --git a/explorer_service/src/pages/account_page.rs b/explorer_service/src/pages/account_page.rs index 4c0af1ac..5f95d8e0 100644 --- a/explorer_service/src/pages/account_page.rs +++ b/explorer_service/src/pages/account_page.rs @@ -10,11 +10,11 @@ use crate::{api, components::TransactionPreview}; #[component] pub fn AccountPage() -> impl IntoView { let params = use_params_map(); - let (tx_offset, set_tx_offset) = signal(0u32); + let (tx_offset, set_tx_offset) = signal(0u64); let (all_transactions, set_all_transactions) = signal(Vec::new()); let (is_loading, set_is_loading) = signal(false); let (has_more, set_has_more) = signal(true); - let tx_limit = 10u32; + let tx_limit = 10u64; // Parse account ID from URL params let account_id = move || { @@ -35,7 +35,7 @@ pub fn AccountPage() -> impl IntoView { // Load initial transactions let transactions_resource = Resource::new(account_id, move |acc_id_opt| async move { match acc_id_opt { - Some(acc_id) => api::get_transactions_by_account(acc_id, tx_limit, 0).await, + Some(acc_id) => api::get_transactions_by_account(acc_id, 0, tx_limit).await, None => Err(leptos::prelude::ServerFnError::ServerError( "Invalid account ID".to_string(), )), @@ -46,7 +46,9 @@ pub fn AccountPage() -> impl IntoView { Effect::new(move || { if let Some(Ok(txs)) = transactions_resource.get() { set_all_transactions.set(txs.clone()); - set_has_more.set(txs.len() as u32 == tx_limit); + set_has_more.set( + u64::try_from(txs.len()).expect("Transaction count should fit in u64") == tx_limit, + ); } }); @@ -61,14 +63,15 @@ pub fn AccountPage() -> impl IntoView { set_tx_offset.set(current_offset); leptos::task::spawn_local(async move { - match api::get_transactions_by_account(acc_id, tx_limit, current_offset).await { + match api::get_transactions_by_account(acc_id, current_offset, tx_limit).await { Ok(new_txs) => { - let txs_count = new_txs.len() as u32; + let txs_count = + u64::try_from(new_txs.len()).expect("Transaction count should fit in u64"); set_all_transactions.update(|txs| txs.extend(new_txs)); set_has_more.set(txs_count == tx_limit); } Err(e) => { - log::error!("Failed to load more transactions: {}", e); + log::error!("Failed to load more transactions: {e}"); } } set_is_loading.set(false); @@ -123,7 +126,7 @@ pub fn AccountPage() -> impl IntoView {
"Data:" - {format!("{} bytes", data_len)} + {format!("{data_len} bytes")}
@@ -190,7 +193,7 @@ pub fn AccountPage() -> impl IntoView { Err(e) => { view! {
- {format!("Failed to load transactions: {}", e)} + {format!("Failed to load transactions: {e}")}
} .into_any() @@ -208,7 +211,7 @@ pub fn AccountPage() -> impl IntoView { view! {

"Error"

-

{format!("Failed to load account: {}", e)}

+

{format!("Failed to load account: {e}")}

} .into_any() diff --git a/explorer_service/src/pages/block_page.rs b/explorer_service/src/pages/block_page.rs index aee0a7cf..d63d9f8e 100644 --- a/explorer_service/src/pages/block_page.rs +++ b/explorer_service/src/pages/block_page.rs @@ -144,7 +144,7 @@ pub fn BlockPage() -> impl IntoView { view! {

"Error"

-

{format!("Failed to load block: {}", e)}

+

{format!("Failed to load block: {e}")}

} .into_any() diff --git a/explorer_service/src/pages/main_page.rs b/explorer_service/src/pages/main_page.rs index 28d1d1d9..7e26e794 100644 --- a/explorer_service/src/pages/main_page.rs +++ b/explorer_service/src/pages/main_page.rs @@ -1,5 +1,8 @@ use leptos::prelude::*; -use leptos_router::hooks::{use_navigate, use_query_map}; +use leptos_router::{ + NavigateOptions, + hooks::{use_navigate, use_query_map}, +}; use web_sys::SubmitEvent; use crate::{ @@ -7,7 +10,7 @@ use crate::{ components::{AccountPreview, BlockPreview, TransactionPreview}, }; -const RECENT_BLOCKS_LIMIT: u32 = 10; +const RECENT_BLOCKS_LIMIT: u64 = 10; /// Main page component #[component] @@ -33,7 +36,7 @@ pub fn MainPage() -> impl IntoView { match api::search(query).await { Ok(result) => Some(result), Err(e) => { - log::error!("Search error: {}", e); + log::error!("Search error: {e}"); None } } @@ -48,7 +51,7 @@ pub fn MainPage() -> impl IntoView { // Load recent blocks on mount let recent_blocks_resource = Resource::new( || (), - |_| async { api::get_blocks(None, RECENT_BLOCKS_LIMIT).await }, + |()| async { api::get_blocks(None, RECENT_BLOCKS_LIMIT).await }, ); // Update all_blocks when initial load completes @@ -57,8 +60,11 @@ pub fn MainPage() -> impl IntoView { let oldest_id = blocks.last().map(|b| b.header.block_id); set_all_blocks.set(blocks.clone()); set_oldest_loaded_block_id.set(oldest_id); - set_has_more_blocks - .set(blocks.len() as u32 == RECENT_BLOCKS_LIMIT && oldest_id.unwrap_or(0) > 1); + set_has_more_blocks.set( + u64::try_from(blocks.len()).expect("usize should fit in u64") + == RECENT_BLOCKS_LIMIT + && oldest_id.unwrap_or(0) > 1, + ); } }); @@ -75,7 +81,8 @@ pub fn MainPage() -> impl IntoView { leptos::task::spawn_local(async move { match api::get_blocks(before_id, RECENT_BLOCKS_LIMIT).await { Ok(new_blocks) => { - let blocks_count = new_blocks.len() as u32; + let blocks_count = + u64::try_from(new_blocks.len()).expect("usize should fit in u64"); let new_oldest_id = new_blocks.last().map(|b| b.header.block_id); set_all_blocks.update(|blocks| blocks.extend(new_blocks)); set_oldest_loaded_block_id.set(new_oldest_id); @@ -83,7 +90,7 @@ pub fn MainPage() -> impl IntoView { .set(blocks_count == RECENT_BLOCKS_LIMIT && new_oldest_id.unwrap_or(0) > 1); } Err(e) => { - log::error!("Failed to load more blocks: {}", e); + log::error!("Failed to load more blocks: {e}"); } } set_is_loading_blocks.set(false); @@ -95,13 +102,13 @@ pub fn MainPage() -> impl IntoView { ev.prevent_default(); let query = search_query.get(); if query.is_empty() { - navigate("?", Default::default()); + navigate("?", NavigateOptions::default()); return; } navigate( &format!("?q={}", urlencoding::encode(&query)), - Default::default(), + NavigateOptions::default(), ); }; @@ -142,78 +149,78 @@ pub fn MainPage() -> impl IntoView { view! {

"Search Results"

- {if !has_results { - view! {
"No results found"
} - .into_any() - } else { - view! { -
- {if !blocks.is_empty() { - view! { -
-

"Blocks"

-
- {blocks - .into_iter() - .map(|block| { - view! { } - }) - .collect::>()} + {if has_results { + view! { +
+ {if blocks.is_empty() { + ().into_any() + } else { + view! { +
+

"Blocks"

+
+ {blocks + .into_iter() + .map(|block| { + view! { } + }) + .collect::>()} +
-
- } - .into_any() - } else { - ().into_any() - }} + } + .into_any() + }} - {if !transactions.is_empty() { - view! { -
-

"Transactions"

-
- {transactions - .into_iter() - .map(|tx| { - view! { } - }) - .collect::>()} + {if transactions.is_empty() { + ().into_any() + } else { + view! { +
+

"Transactions"

+
+ {transactions + .into_iter() + .map(|tx| { + view! { } + }) + .collect::>()} +
-
- } - .into_any() - } else { - ().into_any() - }} + } + .into_any() + }} - {if !accounts.is_empty() { - view! { -
-

"Accounts"

-
- {accounts - .into_iter() - .map(|(id, account)| { - view! { - - } - }) - .collect::>()} + {if accounts.is_empty() { + ().into_any() + } else { + view! { +
+

"Accounts"

+
+ {accounts + .into_iter() + .map(|(id, account)| { + view! { + + } + }) + .collect::>()} +
-
- } - .into_any() - } else { - ().into_any() - }} + } + .into_any() + }} -
- } - .into_any() - }} +
+ } + .into_any() + } else { + view! {
"No results found"
} + .into_any() + }}
} .into_any() @@ -274,7 +281,7 @@ pub fn MainPage() -> impl IntoView { } } Err(e) => { - view! {
{format!("Error: {}", e)}
} + view! {
{format!("Error: {e}")}
} .into_any() } }) diff --git a/explorer_service/src/pages/transaction_page.rs b/explorer_service/src/pages/transaction_page.rs index 2859719f..266f3f80 100644 --- a/explorer_service/src/pages/transaction_page.rs +++ b/explorer_service/src/pages/transaction_page.rs @@ -105,7 +105,7 @@ pub fn TransactionPage() -> impl IntoView {
"Proof Size:" - {format!("{} bytes", proof_len)} + {format!("{proof_len} bytes")}
"Signatures:" @@ -212,7 +212,7 @@ pub fn TransactionPage() -> impl IntoView {
"Proof Size:" - {format!("{} bytes", proof_len)} + {format!("{proof_len} bytes")}
@@ -284,7 +284,7 @@ pub fn TransactionPage() -> impl IntoView {
"Bytecode Size:" - {format!("{} bytes", bytecode_len)} + {format!("{bytecode_len} bytes")}
@@ -302,7 +302,7 @@ pub fn TransactionPage() -> impl IntoView { view! {

"Error"

-

{format!("Failed to load transaction: {}", e)}

+

{format!("Failed to load transaction: {e}")}

} .into_any() diff --git a/indexer/core/src/block_store.rs b/indexer/core/src/block_store.rs index 681b63c8..f2fb2ce9 100644 --- a/indexer/core/src/block_store.rs +++ b/indexer/core/src/block_store.rs @@ -3,7 +3,7 @@ use std::{path::Path, sync::Arc}; use anyhow::Result; use bedrock_client::HeaderId; use common::{ - block::{BedrockStatus, Block}, + block::{BedrockStatus, Block, BlockId}, transaction::NSSATransaction, }; use nssa::{Account, AccountId, V02State}; @@ -50,7 +50,7 @@ impl IndexerStore { Ok(self.dbio.get_block(id)?) } - pub fn get_block_batch(&self, before: Option, limit: u64) -> Result> { + pub fn get_block_batch(&self, before: Option, limit: u64) -> Result> { Ok(self.dbio.get_block_batch(before, limit)?) } @@ -79,12 +79,14 @@ impl IndexerStore { Ok(self.dbio.get_acc_transactions(acc_id, offset, limit)?) } + #[must_use] pub fn genesis_id(&self) -> u64 { self.dbio .get_meta_first_block_in_db() .expect("Must be set at the DB startup") } + #[must_use] pub fn last_block(&self) -> u64 { self.dbio .get_meta_last_block_in_db() diff --git a/indexer/core/src/config.rs b/indexer/core/src/config.rs index 95e6147c..326a79a3 100644 --- a/indexer/core/src/config.rs +++ b/indexer/core/src/config.rs @@ -43,11 +43,16 @@ pub struct IndexerConfig { impl IndexerConfig { pub fn from_path(config_path: &Path) -> Result { - let file = File::open(config_path) - .with_context(|| format!("Failed to open indexer config at {config_path:?}"))?; + let file = File::open(config_path).with_context(|| { + format!("Failed to open indexer config at {}", config_path.display()) + })?; let reader = BufReader::new(file); - serde_json::from_reader(reader) - .with_context(|| format!("Failed to parse indexer config at {config_path:?}")) + serde_json::from_reader(reader).with_context(|| { + format!( + "Failed to parse indexer config at {}", + config_path.display() + ) + }) } } diff --git a/indexer/core/src/lib.rs b/indexer/core/src/lib.rs index 6d56eb18..38fb5989 100644 --- a/indexer/core/src/lib.rs +++ b/indexer/core/src/lib.rs @@ -98,43 +98,40 @@ impl IndexerCore { }) } - pub async fn subscribe_parse_block_stream(&self) -> impl futures::Stream> { + pub fn subscribe_parse_block_stream(&self) -> impl futures::Stream> { async_stream::stream! { info!("Searching for initial header"); let last_l1_lib_header = self.store.last_observed_l1_lib_header()?; - let mut prev_last_l1_lib_header = match last_l1_lib_header { - Some(last_l1_lib_header) => { - info!("Last l1 lib header found: {last_l1_lib_header}"); - last_l1_lib_header - }, - None => { - info!("Last l1 lib header not found in DB"); - info!("Searching for the start of a channel"); + let mut prev_last_l1_lib_header = if let Some(last_l1_lib_header) = last_l1_lib_header { + info!("Last l1 lib header found: {last_l1_lib_header}"); + last_l1_lib_header + } else { + info!("Last l1 lib header not found in DB"); + info!("Searching for the start of a channel"); - let BackfillData { - block_data: start_buff, - curr_fin_l1_lib_header: last_l1_lib_header, - } = self.search_for_channel_start().await?; + let BackfillData { + block_data: start_buff, + curr_fin_l1_lib_header: last_l1_lib_header, + } = self.search_for_channel_start().await?; - for BackfillBlockData { - l2_blocks: l2_block_vec, - l1_header, - } in start_buff { - let mut l2_blocks_parsed_ids: Vec<_> = l2_block_vec.iter().map(|block| block.header.block_id).collect(); - l2_blocks_parsed_ids.sort(); - info!("Parsed {} L2 blocks with ids {:?}", l2_block_vec.len(), l2_blocks_parsed_ids); + for BackfillBlockData { + l2_blocks: l2_block_vec, + l1_header, + } in start_buff { + let mut l2_blocks_parsed_ids: Vec<_> = l2_block_vec.iter().map(|block| block.header.block_id).collect(); + l2_blocks_parsed_ids.sort_unstable(); + info!("Parsed {} L2 blocks with ids {:?}", l2_block_vec.len(), l2_blocks_parsed_ids); - for l2_block in l2_block_vec { - self.store.put_block(l2_block.clone(), l1_header)?; + for l2_block in l2_block_vec { + self.store.put_block(l2_block.clone(), l1_header)?; - yield Ok(l2_block); - } + yield Ok(l2_block); } + } - last_l1_lib_header - }, + last_l1_lib_header }; info!("Searching for initial header finished"); @@ -157,7 +154,7 @@ impl IndexerCore { l1_header: header, } in buff { let mut l2_blocks_parsed_ids: Vec<_> = l2_block_vec.iter().map(|block| block.header.block_id).collect(); - l2_blocks_parsed_ids.sort(); + l2_blocks_parsed_ids.sort_unstable(); info!("Parsed {} L2 blocks with ids {:?}", l2_block_vec.len(), l2_blocks_parsed_ids); for l2_block in l2_block_vec { @@ -177,14 +174,14 @@ impl IndexerCore { async fn get_next_lib(&self, prev_lib: HeaderId) -> Result { loop { let next_lib = self.get_lib().await?; - if next_lib != prev_lib { - break Ok(next_lib); - } else { + if next_lib == prev_lib { info!( "Wait {:?} to not spam the node", self.config.consensus_info_polling_interval ); tokio::time::sleep(self.config.consensus_info_polling_interval).await; + } else { + break Ok(next_lib); } } } @@ -204,15 +201,13 @@ impl IndexerCore { let mut cycle_header = curr_last_l1_lib_header; loop { - let cycle_block = - if let Some(block) = self.bedrock_client.get_block_by_id(cycle_header).await? { - block - } else { - // First run can reach root easily - // so here we are optimistic about L1 - // failing to get parent. - break; - }; + let Some(cycle_block) = self.bedrock_client.get_block_by_id(cycle_header).await? + else { + // First run can reach root easily + // so here we are optimistic about L1 + // failing to get parent. + break; + }; // It would be better to have id, but block does not have it, so slot will do. info!( @@ -289,10 +284,9 @@ impl IndexerCore { if cycle_block.header().id() == last_fin_l1_lib_header { break; - } else { - // Step back to parent - cycle_header = cycle_block.header().parent(); } + // Step back to parent + cycle_header = cycle_block.header().parent(); // It would be better to have id, but block does not have it, so slot will do. info!( @@ -335,7 +329,7 @@ fn parse_block_owned( }) if channel_id == decoded_channel_id => { borsh::from_slice::(inscription) .inspect_err(|err| { - error!("Failed to deserialize our inscription with err: {err:#?}") + error!("Failed to deserialize our inscription with err: {err:#?}"); }) .ok() } diff --git a/indexer/service/protocol/src/convert.rs b/indexer/service/protocol/src/convert.rs index 1de28aa3..931c340c 100644 --- a/indexer/service/protocol/src/convert.rs +++ b/indexer/service/protocol/src/convert.rs @@ -1,6 +1,12 @@ -//! Conversions between indexer_service_protocol types and nssa/nssa_core types +//! Conversions between `indexer_service_protocol` types and `nssa/nssa_core` types -use crate::*; +use crate::{ + Account, AccountId, BedrockStatus, Block, BlockBody, BlockHeader, Ciphertext, Commitment, + CommitmentSetDigest, Data, EncryptedAccountData, EphemeralPublicKey, HashType, MantleMsgId, + Nullifier, PrivacyPreservingMessage, PrivacyPreservingTransaction, ProgramDeploymentMessage, + ProgramDeploymentTransaction, ProgramId, Proof, PublicKey, PublicMessage, PublicTransaction, + Signature, Transaction, WitnessSet, +}; // ============================================================================ // Account-related conversions diff --git a/indexer/service/protocol/src/lib.rs b/indexer/service/protocol/src/lib.rs index 8fdd3289..3a47e095 100644 --- a/indexer/service/protocol/src/lib.rs +++ b/indexer/service/protocol/src/lib.rs @@ -141,6 +141,7 @@ pub enum Transaction { impl Transaction { /// Get the hash of the transaction + #[must_use] pub fn hash(&self) -> &self::HashType { match self { Transaction::Public(tx) => &tx.hash, @@ -308,7 +309,7 @@ mod base64 { use serde::{Deserialize, Deserializer, Serialize, Serializer}; pub mod arr { - use super::*; + use super::{Deserializer, Serializer}; pub fn serialize(v: &[u8], s: S) -> Result { super::serialize(v, s) diff --git a/indexer/service/rpc/src/lib.rs b/indexer/service/rpc/src/lib.rs index 2a67ac50..be0e45ca 100644 --- a/indexer/service/rpc/src/lib.rs +++ b/indexer/service/rpc/src/lib.rs @@ -44,16 +44,16 @@ pub trait Rpc { #[method(name = "getBlocks")] async fn get_blocks( &self, - before: Option, - limit: u32, + before: Option, + limit: u64, ) -> Result, ErrorObjectOwned>; #[method(name = "getTransactionsByAccount")] async fn get_transactions_by_account( &self, account_id: AccountId, - limit: u32, - offset: u32, + offset: u64, + limit: u64, ) -> Result, ErrorObjectOwned>; // ToDo: expand healthcheck response into some kind of report diff --git a/indexer/service/src/lib.rs b/indexer/service/src/lib.rs index 5741f003..cfbe93a0 100644 --- a/indexer/service/src/lib.rs +++ b/indexer/service/src/lib.rs @@ -23,6 +23,7 @@ impl IndexerHandle { } } + #[must_use] pub fn addr(&self) -> SocketAddr { self.addr } @@ -33,9 +34,14 @@ impl IndexerHandle { .take() .expect("Indexer server handle is set"); - handle.stopped().await + handle.stopped().await; } + #[expect( + clippy::redundant_closure_for_method_calls, + reason = "Clippy suggested path jsonrpsee::jsonrpsee_server::ServerHandle is not accessible" + )] + #[must_use] pub fn is_stopped(&self) -> bool { self.server_handle .as_ref() diff --git a/indexer/service/src/main.rs b/indexer/service/src/main.rs index e4d18feb..e66fe401 100644 --- a/indexer/service/src/main.rs +++ b/indexer/service/src/main.rs @@ -26,10 +26,10 @@ async fn main() -> Result<()> { let indexer_handle = indexer_service::run_server(config, port).await?; tokio::select! { - _ = cancellation_token.cancelled() => { + () = cancellation_token.cancelled() => { info!("Shutting down server..."); } - _ = indexer_handle.stopped() => { + () = indexer_handle.stopped() => { error!("Server stopped unexpectedly"); } } diff --git a/indexer/service/src/mock_service.rs b/indexer/service/src/mock_service.rs index 5f0cfbf2..ac052a18 100644 --- a/indexer/service/src/mock_service.rs +++ b/indexer/service/src/mock_service.rs @@ -1,3 +1,8 @@ +#![expect( + clippy::cast_possible_truncation, + clippy::cast_lossless, + reason = "Mock service uses intentional casts and format patterns for test data generation" +)] use std::collections::HashMap; use indexer_service_protocol::{ @@ -9,7 +14,7 @@ use indexer_service_protocol::{ }; use jsonrpsee::{core::SubscriptionResult, types::ErrorObjectOwned}; -/// A mock implementation of the IndexerService RPC for testing purposes. +/// A mock implementation of the `IndexerService` RPC for testing purposes. pub struct MockIndexerService { blocks: Vec, accounts: HashMap, @@ -17,6 +22,7 @@ pub struct MockIndexerService { } impl MockIndexerService { + #[must_use] pub fn new_with_mock_blocks() -> Self { let mut blocks = Vec::new(); let mut accounts = HashMap::new(); @@ -136,7 +142,7 @@ impl MockIndexerService { block_id, prev_block_hash: prev_hash, hash: block_hash, - timestamp: 1704067200000 + (block_id * 12000), // ~12 seconds per block + timestamp: 1_704_067_200_000 + (block_id * 12_000), // ~12 seconds per block signature: Signature([0u8; 64]), }, body: BlockBody { @@ -197,7 +203,7 @@ impl indexer_service_rpc::RpcServer for MockIndexerService { .ok_or_else(|| { ErrorObjectOwned::owned( -32001, - format!("Block with ID {} not found", block_id), + format!("Block with ID {block_id} not found"), None::<()>, ) }) @@ -227,15 +233,18 @@ impl indexer_service_rpc::RpcServer for MockIndexerService { async fn get_blocks( &self, - before: Option, - limit: u32, + before: Option, + limit: u64, ) -> Result, ErrorObjectOwned> { - let start_id = before.map_or_else(|| self.blocks.len() as u64, |id| id.saturating_sub(1)); + let start_id = before.map_or_else( + || self.blocks.len(), + |id| usize::try_from(id.saturating_sub(1)).expect("u64 should fit in usize"), + ); let result = (1..=start_id) .rev() .take(limit as usize) - .map_while(|block_id| self.blocks.get(block_id as usize - 1).cloned()) + .map_while(|block_id| self.blocks.get(block_id - 1).cloned()) .collect(); Ok(result) @@ -244,8 +253,8 @@ impl indexer_service_rpc::RpcServer for MockIndexerService { async fn get_transactions_by_account( &self, account_id: AccountId, - limit: u32, - offset: u32, + offset: u64, + limit: u64, ) -> Result, ErrorObjectOwned> { let mut account_txs: Vec<_> = self .transactions diff --git a/indexer/service/src/service.rs b/indexer/service/src/service.rs index da3e7cbd..838e1403 100644 --- a/indexer/service/src/service.rs +++ b/indexer/service/src/service.rs @@ -90,19 +90,19 @@ impl indexer_service_rpc::RpcServer for IndexerService { async fn get_blocks( &self, - before: Option, - limit: u32, + before: Option, + limit: u64, ) -> Result, ErrorObjectOwned> { let blocks = self .indexer .store - .get_block_batch(before, limit as u64) + .get_block_batch(before, limit) .map_err(db_error)?; let mut block_res = vec![]; for block in blocks { - block_res.push(block.into()) + block_res.push(block.into()); } Ok(block_res) @@ -111,19 +111,19 @@ impl indexer_service_rpc::RpcServer for IndexerService { async fn get_transactions_by_account( &self, account_id: AccountId, - limit: u32, - offset: u32, + offset: u64, + limit: u64, ) -> Result, ErrorObjectOwned> { let transactions = self .indexer .store - .get_transactions_by_account(account_id.value, offset as u64, limit as u64) + .get_transactions_by_account(account_id.value, offset, limit) .map_err(db_error)?; let mut tx_res = vec![]; for tx in transactions { - tx_res.push(tx.into()) + tx_res.push(tx.into()); } Ok(tx_res) @@ -177,8 +177,8 @@ impl SubscriptionService { } } - bail!(err); - }; + bail!(err) + } Ok(()) } @@ -190,7 +190,7 @@ impl SubscriptionService { let handle = tokio::spawn(async move { let mut subscribers = Vec::new(); - let mut block_stream = pin!(indexer.subscribe_parse_block_stream().await); + let mut block_stream = pin!(indexer.subscribe_parse_block_stream()); loop { tokio::select! { @@ -273,6 +273,7 @@ impl Drop for Subscription { } } +#[must_use] pub fn not_yet_implemented_error() -> ErrorObjectOwned { ErrorObject::owned( ErrorCode::InternalError.code(), @@ -281,6 +282,10 @@ pub fn not_yet_implemented_error() -> ErrorObjectOwned { ) } +#[expect( + clippy::needless_pass_by_value, + reason = "Error is consumed to extract details for error response" +)] fn db_error(err: anyhow::Error) -> ErrorObjectOwned { ErrorObjectOwned::owned( ErrorCode::InternalError.code(), diff --git a/integration_tests/src/config.rs b/integration_tests/src/config.rs index 8dd18a25..062fa442 100644 --- a/integration_tests/src/config.rs +++ b/integration_tests/src/config.rs @@ -38,6 +38,7 @@ pub fn indexer_config( } /// Sequencer config options available for custom changes in integration tests. +#[derive(Debug, Clone, Copy)] pub struct SequencerPartialConfig { pub max_num_tx_in_block: usize, pub max_block_size: ByteSize, @@ -122,6 +123,7 @@ pub struct InitialData { } impl InitialData { + #[must_use] pub fn with_two_public_and_two_private_initialized_accounts() -> Self { let mut public_alice_private_key = PrivateKey::new_os_random(); let mut public_alice_public_key = @@ -231,6 +233,7 @@ impl InitialData { } } +#[derive(Debug, Clone, Copy)] pub enum UrlProtocol { Http, Ws, diff --git a/integration_tests/src/lib.rs b/integration_tests/src/lib.rs index f0111735..b2263b5e 100644 --- a/integration_tests/src/lib.rs +++ b/integration_tests/src/lib.rs @@ -52,6 +52,7 @@ impl TestContext { Self::builder().build().await } + #[must_use] pub fn builder() -> TestContextBuilder { TestContextBuilder::new() } @@ -120,6 +121,10 @@ impl TestContext { // Setting port to 0 to avoid conflicts between parallel tests, actual port will be retrieved after container is up .with_env("PORT", "0"); + #[expect( + clippy::items_after_statements, + reason = "This is more readable is this function used just after its definition" + )] async fn up_and_retrieve_port(compose: &mut DockerCompose) -> Result { compose .up() @@ -181,7 +186,10 @@ impl TestContext { let temp_indexer_dir = tempfile::tempdir().context("Failed to create temp dir for indexer home")?; - debug!("Using temp indexer home at {:?}", temp_indexer_dir.path()); + debug!( + "Using temp indexer home at {}", + temp_indexer_dir.path().display() + ); let indexer_config = config::indexer_config( bedrock_addr, @@ -206,8 +214,8 @@ impl TestContext { tempfile::tempdir().context("Failed to create temp dir for sequencer home")?; debug!( - "Using temp sequencer home at {:?}", - temp_sequencer_dir.path() + "Using temp sequencer home at {}", + temp_sequencer_dir.path().display() ); let config = config::sequencer_config( @@ -260,10 +268,12 @@ impl TestContext { } /// Get reference to the wallet. + #[must_use] pub fn wallet(&self) -> &WalletCore { &self.wallet } + #[must_use] pub fn wallet_password(&self) -> &str { &self.wallet_password } @@ -274,16 +284,19 @@ impl TestContext { } /// Get reference to the sequencer client. + #[must_use] pub fn sequencer_client(&self) -> &SequencerClient { &self.sequencer_client } /// Get reference to the indexer client. + #[must_use] pub fn indexer_client(&self) -> &IndexerClient { &self.indexer_client } /// Get existing public account IDs in the wallet. + #[must_use] pub fn existing_public_accounts(&self) -> Vec { self.wallet .storage() @@ -293,6 +306,7 @@ impl TestContext { } /// Get existing private account IDs in the wallet. + #[must_use] pub fn existing_private_accounts(&self) -> Vec { self.wallet .storage() @@ -386,11 +400,13 @@ impl TestContextBuilder { } } + #[must_use] pub fn with_initial_data(mut self, initial_data: config::InitialData) -> Self { self.initial_data = Some(initial_data); self } + #[must_use] pub fn with_sequencer_partial_config( mut self, sequencer_partial_config: config::SequencerPartialConfig, @@ -419,14 +435,16 @@ impl Drop for BlockingTestContext { if let Some(ctx) = ctx.take() { drop(ctx); } - }) + }); } } +#[must_use] pub fn format_public_account_id(account_id: AccountId) -> String { format!("Public/{account_id}") } +#[must_use] pub fn format_private_account_id(account_id: AccountId) -> String { format!("Private/{account_id}") } diff --git a/integration_tests/tests/account.rs b/integration_tests/tests/account.rs index 36dcca5e..5a700707 100644 --- a/integration_tests/tests/account.rs +++ b/integration_tests/tests/account.rs @@ -45,9 +45,8 @@ async fn new_public_account_with_label() -> Result<()> { let result = execute_subcommand(ctx.wallet_mut(), command).await?; // Extract the account_id from the result - let account_id = match result { - wallet::cli::SubcommandReturnValue::RegisterAccount { account_id } => account_id, - _ => panic!("Expected RegisterAccount return value"), + let wallet::cli::SubcommandReturnValue::RegisterAccount { account_id } = result else { + panic!("Expected RegisterAccount return value") }; // Verify the label was stored @@ -78,9 +77,9 @@ async fn new_private_account_with_label() -> Result<()> { let result = execute_subcommand(ctx.wallet_mut(), command).await?; // Extract the account_id from the result - let account_id = match result { - wallet::cli::SubcommandReturnValue::RegisterAccount { account_id } => account_id, - _ => panic!("Expected RegisterAccount return value"), + + let wallet::cli::SubcommandReturnValue::RegisterAccount { account_id } = result else { + panic!("Expected RegisterAccount return value") }; // Verify the label was stored @@ -110,9 +109,9 @@ async fn new_public_account_without_label() -> Result<()> { let result = execute_subcommand(ctx.wallet_mut(), command).await?; // Extract the account_id from the result - let account_id = match result { - wallet::cli::SubcommandReturnValue::RegisterAccount { account_id } => account_id, - _ => panic!("Expected RegisterAccount return value"), + + let wallet::cli::SubcommandReturnValue::RegisterAccount { account_id } = result else { + panic!("Expected RegisterAccount return value") }; // Verify no label was stored diff --git a/integration_tests/tests/auth_transfer/private.rs b/integration_tests/tests/auth_transfer/private.rs index aa8ca180..fb5643c8 100644 --- a/integration_tests/tests/auth_transfer/private.rs +++ b/integration_tests/tests/auth_transfer/private.rs @@ -86,7 +86,7 @@ async fn private_transfer_to_foreign_account() -> Result<()> { assert_eq!(tx.message.new_commitments[0], new_commitment1); assert_eq!(tx.message.new_commitments.len(), 2); - for commitment in tx.message.new_commitments.into_iter() { + for commitment in tx.message.new_commitments { assert!(verify_commitment_is_in_state(commitment, ctx.sequencer_client()).await); } @@ -198,7 +198,7 @@ async fn private_transfer_to_owned_account_using_claiming_path() -> Result<()> { assert_eq!(tx.message.new_commitments[0], new_commitment1); assert_eq!(tx.message.new_commitments.len(), 2); - for commitment in tx.message.new_commitments.into_iter() { + for commitment in tx.message.new_commitments { assert!(verify_commitment_is_in_state(commitment, ctx.sequencer_client()).await); } @@ -353,7 +353,7 @@ async fn private_transfer_to_owned_account_continuous_run_path() -> Result<()> { // Verify commitments are in state assert_eq!(tx.message.new_commitments.len(), 2); - for commitment in tx.message.new_commitments.into_iter() { + for commitment in tx.message.new_commitments { assert!(verify_commitment_is_in_state(commitment, ctx.sequencer_client()).await); } diff --git a/integration_tests/tests/auth_transfer/public.rs b/integration_tests/tests/auth_transfer/public.rs index ed8296ec..75ae2c12 100644 --- a/integration_tests/tests/auth_transfer/public.rs +++ b/integration_tests/tests/auth_transfer/public.rs @@ -112,7 +112,7 @@ async fn failed_transfer_with_insufficient_balance() -> Result<()> { to: Some(format_public_account_id(ctx.existing_public_accounts()[1])), to_npk: None, to_vpk: None, - amount: 1000000, + amount: 1_000_000, }); let failed_send = wallet::cli::execute_subcommand(ctx.wallet_mut(), command).await; diff --git a/integration_tests/tests/block_size_limit.rs b/integration_tests/tests/block_size_limit.rs index d8ee64dc..47fabdc0 100644 --- a/integration_tests/tests/block_size_limit.rs +++ b/integration_tests/tests/block_size_limit.rs @@ -38,13 +38,12 @@ async fn reject_oversized_transaction() -> Result<()> { ); let err = result.unwrap_err(); - let err_str = format!("{:?}", err); + let err_str = format!("{err:?}"); // Check if the error contains information about transaction being too large assert!( err_str.contains("TransactionTooLarge") || err_str.contains("too large"), - "Expected TransactionTooLarge error, got: {}", - err_str + "Expected TransactionTooLarge error, got: {err_str}" ); Ok(()) diff --git a/integration_tests/tests/config.rs b/integration_tests/tests/config.rs index ed301616..5443edc9 100644 --- a/integration_tests/tests/config.rs +++ b/integration_tests/tests/config.rs @@ -23,7 +23,7 @@ async fn modify_config_field() -> Result<()> { // Return how it was at the beginning let command = Command::Config(ConfigSubcommand::Set { key: "seq_poll_timeout".to_string(), - value: format!("{:?}", old_seq_poll_timeout), + value: format!("{old_seq_poll_timeout:?}"), }); wallet::cli::execute_subcommand(ctx.wallet_mut(), command).await?; diff --git a/integration_tests/tests/indexer.rs b/integration_tests/tests/indexer.rs index ad169790..f12ae600 100644 --- a/integration_tests/tests/indexer.rs +++ b/integration_tests/tests/indexer.rs @@ -12,7 +12,7 @@ use tokio::test; use wallet::cli::{Command, programs::native_token_transfer::AuthTransferSubcommand}; /// Timeout in milliseconds to reliably await for block finalization -const L2_TO_L1_TIMEOUT_MILLIS: u64 = 600000; +const L2_TO_L1_TIMEOUT_MILLIS: u64 = 600_000; #[test] async fn indexer_test_run() -> Result<()> { diff --git a/integration_tests/tests/keys_restoration.rs b/integration_tests/tests/keys_restoration.rs index 1bd207be..8806fdab 100644 --- a/integration_tests/tests/keys_restoration.rs +++ b/integration_tests/tests/keys_restoration.rs @@ -87,7 +87,7 @@ async fn sync_private_account_with_non_zero_chain_index() -> Result<()> { assert_eq!(tx.message.new_commitments[0], new_commitment1); assert_eq!(tx.message.new_commitments.len(), 2); - for commitment in tx.message.new_commitments.into_iter() { + for commitment in tx.message.new_commitments { assert!(verify_commitment_is_in_state(commitment, ctx.sequencer_client()).await); } diff --git a/integration_tests/tests/tps.rs b/integration_tests/tests/tps.rs index 12669f90..9f7dd16b 100644 --- a/integration_tests/tests/tps.rs +++ b/integration_tests/tests/tps.rs @@ -56,16 +56,17 @@ pub async fn tps_test() -> Result<()> { for (i, tx_hash) in tx_hashes.iter().enumerate() { loop { - if now.elapsed().as_millis() > target_time.as_millis() { - panic!("TPS test failed by timeout"); - } + assert!( + now.elapsed().as_millis() <= target_time.as_millis(), + "TPS test failed by timeout" + ); let tx_obj = ctx .sequencer_client() .get_transaction_by_hash(*tx_hash) .await .inspect_err(|err| { - log::warn!("Failed to get transaction by hash {tx_hash} with error: {err:#?}") + log::warn!("Failed to get transaction by hash {tx_hash} with error: {err:#?}"); }); if let Ok(tx_obj) = tx_obj @@ -119,6 +120,10 @@ impl TpsTestManager { } } + #[expect( + clippy::cast_precision_loss, + reason = "This is just for testing purposes, we don't care about precision loss here" + )] pub(crate) fn target_time(&self) -> Duration { let number_transactions = (self.public_keypairs.len() - 1) as u64; Duration::from_secs_f64(number_transactions as f64 / self.target_tps as f64) @@ -165,7 +170,7 @@ impl TpsTestManager { let key_chain = KeyChain::new_os_random(); let account = Account { balance: 100, - nonce: 0xdeadbeef, + nonce: 0xdead_beef, program_owner: Program::authenticated_transfer_program().id(), data: Data::default(), }; @@ -200,7 +205,7 @@ fn build_privacy_transaction() -> PrivacyPreservingTransaction { let sender_pre = AccountWithMetadata::new( Account { balance: 100, - nonce: 0xdeadbeef, + nonce: 0xdead_beef, program_owner: program.id(), data: Data::default(), }, @@ -234,7 +239,7 @@ fn build_privacy_transaction() -> PrivacyPreservingTransaction { vec![sender_pre, recipient_pre], Program::serialize_instruction(balance_to_move).unwrap(), vec![1, 2], - vec![0xdeadbeef1, 0xdeadbeef2], + vec![0xdead_beef1, 0xdead_beef2], vec![ (sender_npk.clone(), sender_ss), (recipient_npk.clone(), recipient_ss), diff --git a/integration_tests/tests/wallet_ffi.rs b/integration_tests/tests/wallet_ffi.rs index e57e6b13..4355e5f1 100644 --- a/integration_tests/tests/wallet_ffi.rs +++ b/integration_tests/tests/wallet_ffi.rs @@ -152,7 +152,7 @@ unsafe extern "C" { fn new_wallet_ffi_with_test_context_config( ctx: &BlockingTestContext, home: &Path, -) -> *mut WalletHandle { +) -> Result<*mut WalletHandle> { let config_path = home.join("wallet_config.json"); let storage_path = home.join("storage.json"); let mut config = ctx.ctx().wallet().config().to_owned(); @@ -163,75 +163,73 @@ fn new_wallet_ffi_with_test_context_config( .write(true) .create(true) .truncate(true) - .open(&config_path) - .unwrap(); + .open(&config_path)?; - let config_with_overrides_serialized = serde_json::to_vec_pretty(&config).unwrap(); + let config_with_overrides_serialized = serde_json::to_vec_pretty(&config)?; - file.write_all(&config_with_overrides_serialized).unwrap(); + file.write_all(&config_with_overrides_serialized)?; - let config_path = CString::new(config_path.to_str().unwrap()).unwrap(); - let storage_path = CString::new(storage_path.to_str().unwrap()).unwrap(); - let password = CString::new(ctx.ctx().wallet_password()).unwrap(); + let config_path = CString::new(config_path.to_str().unwrap())?; + let storage_path = CString::new(storage_path.to_str().unwrap())?; + let password = CString::new(ctx.ctx().wallet_password())?; - unsafe { + Ok(unsafe { wallet_ffi_create_new( config_path.as_ptr(), storage_path.as_ptr(), password.as_ptr(), ) - } + }) } -fn new_wallet_ffi_with_default_config(password: &str) -> *mut WalletHandle { - let tempdir = tempdir().unwrap(); +fn new_wallet_ffi_with_default_config(password: &str) -> Result<*mut WalletHandle> { + let tempdir = tempdir()?; let config_path = tempdir.path().join("wallet_config.json"); let storage_path = tempdir.path().join("storage.json"); - let config_path_c = CString::new(config_path.to_str().unwrap()).unwrap(); - let storage_path_c = CString::new(storage_path.to_str().unwrap()).unwrap(); - let password = CString::new(password).unwrap(); + let config_path_c = CString::new(config_path.to_str().unwrap())?; + let storage_path_c = CString::new(storage_path.to_str().unwrap())?; + let password = CString::new(password)?; - unsafe { + Ok(unsafe { wallet_ffi_create_new( config_path_c.as_ptr(), storage_path_c.as_ptr(), password.as_ptr(), ) - } + }) } -fn new_wallet_rust_with_default_config(password: &str) -> WalletCore { - let tempdir = tempdir().unwrap(); +fn new_wallet_rust_with_default_config(password: &str) -> Result { + let tempdir = tempdir()?; let config_path = tempdir.path().join("wallet_config.json"); let storage_path = tempdir.path().join("storage.json"); WalletCore::new_init_storage( - config_path.to_path_buf(), - storage_path.to_path_buf(), + config_path.clone(), + storage_path.clone(), None, password.to_string(), ) - .unwrap() } -fn load_existing_ffi_wallet(home: &Path) -> *mut WalletHandle { +fn load_existing_ffi_wallet(home: &Path) -> Result<*mut WalletHandle> { let config_path = home.join("wallet_config.json"); let storage_path = home.join("storage.json"); - let config_path = CString::new(config_path.to_str().unwrap()).unwrap(); - let storage_path = CString::new(storage_path.to_str().unwrap()).unwrap(); + let config_path = CString::new(config_path.to_str().unwrap())?; + let storage_path = CString::new(storage_path.to_str().unwrap())?; - unsafe { wallet_ffi_open(config_path.as_ptr(), storage_path.as_ptr()) } + Ok(unsafe { wallet_ffi_open(config_path.as_ptr(), storage_path.as_ptr()) }) } #[test] -fn test_wallet_ffi_create_public_accounts() { +fn test_wallet_ffi_create_public_accounts() -> Result<()> { let password = "password_for_tests"; let n_accounts = 10; // First `n_accounts` public accounts created with Rust wallet let new_public_account_ids_rust = { let mut account_ids = Vec::new(); - let mut wallet_rust = new_wallet_rust_with_default_config(password); + let mut wallet_rust = new_wallet_rust_with_default_config(password)?; for _ in 0..n_accounts { let account_id = wallet_rust.create_new_account_public(None).0; account_ids.push(*account_id.value()); @@ -243,13 +241,10 @@ fn test_wallet_ffi_create_public_accounts() { let new_public_account_ids_ffi = unsafe { let mut account_ids = Vec::new(); - let wallet_ffi_handle = new_wallet_ffi_with_default_config(password); + let wallet_ffi_handle = new_wallet_ffi_with_default_config(password)?; for _ in 0..n_accounts { let mut out_account_id = FfiBytes32::from_bytes([0; 32]); - wallet_ffi_create_account_public( - wallet_ffi_handle, - (&mut out_account_id) as *mut FfiBytes32, - ); + wallet_ffi_create_account_public(wallet_ffi_handle, &raw mut out_account_id); account_ids.push(out_account_id.data); } wallet_ffi_destroy(wallet_ffi_handle); @@ -257,17 +252,19 @@ fn test_wallet_ffi_create_public_accounts() { }; assert_eq!(new_public_account_ids_ffi, new_public_account_ids_rust); + + Ok(()) } #[test] -fn test_wallet_ffi_create_private_accounts() { +fn test_wallet_ffi_create_private_accounts() -> Result<()> { let password = "password_for_tests"; let n_accounts = 10; // First `n_accounts` private accounts created with Rust wallet let new_private_account_ids_rust = { let mut account_ids = Vec::new(); - let mut wallet_rust = new_wallet_rust_with_default_config(password); + let mut wallet_rust = new_wallet_rust_with_default_config(password)?; for _ in 0..n_accounts { let account_id = wallet_rust.create_new_account_private(None).0; account_ids.push(*account_id.value()); @@ -279,56 +276,52 @@ fn test_wallet_ffi_create_private_accounts() { let new_private_account_ids_ffi = unsafe { let mut account_ids = Vec::new(); - let wallet_ffi_handle = new_wallet_ffi_with_default_config(password); + let wallet_ffi_handle = new_wallet_ffi_with_default_config(password)?; for _ in 0..n_accounts { let mut out_account_id = FfiBytes32::from_bytes([0; 32]); - wallet_ffi_create_account_private( - wallet_ffi_handle, - (&mut out_account_id) as *mut FfiBytes32, - ); + wallet_ffi_create_account_private(wallet_ffi_handle, &raw mut out_account_id); account_ids.push(out_account_id.data); } wallet_ffi_destroy(wallet_ffi_handle); account_ids }; - assert_eq!(new_private_account_ids_ffi, new_private_account_ids_rust) + assert_eq!(new_private_account_ids_ffi, new_private_account_ids_rust); + + Ok(()) } #[test] fn test_wallet_ffi_save_and_load_persistent_storage() -> Result<()> { let ctx = BlockingTestContext::new()?; let mut out_private_account_id = FfiBytes32::from_bytes([0; 32]); - let home = tempfile::tempdir().unwrap(); + let home = tempfile::tempdir()?; // Create a private account with the wallet FFI and save it unsafe { - let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path()); - wallet_ffi_create_account_private( - wallet_ffi_handle, - (&mut out_private_account_id) as *mut FfiBytes32, - ); + let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; + wallet_ffi_create_account_private(wallet_ffi_handle, &raw mut out_private_account_id); wallet_ffi_save(wallet_ffi_handle); wallet_ffi_destroy(wallet_ffi_handle); } let private_account_keys = unsafe { - let wallet_ffi_handle = load_existing_ffi_wallet(home.path()); + let wallet_ffi_handle = load_existing_ffi_wallet(home.path())?; let mut private_account = FfiAccount::default(); let result = wallet_ffi_get_account_private( wallet_ffi_handle, - (&out_private_account_id) as *const FfiBytes32, - (&mut private_account) as *mut FfiAccount, + &raw const out_private_account_id, + &raw mut private_account, ); assert_eq!(result, error::WalletFfiError::Success); let mut out_keys = FfiPrivateAccountKeys::default(); let result = wallet_ffi_get_private_account_keys( wallet_ffi_handle, - (&out_private_account_id) as *const FfiBytes32, - (&mut out_keys) as *mut FfiPrivateAccountKeys, + &raw const out_private_account_id, + &raw mut out_keys, ); assert_eq!(result, error::WalletFfiError::Success); @@ -346,17 +339,17 @@ fn test_wallet_ffi_save_and_load_persistent_storage() -> Result<()> { } #[test] -fn test_wallet_ffi_list_accounts() { +fn test_wallet_ffi_list_accounts() -> Result<()> { let password = "password_for_tests"; // Create the wallet FFI let wallet_ffi_handle = unsafe { - let handle = new_wallet_ffi_with_default_config(password); + let handle = new_wallet_ffi_with_default_config(password)?; // Create 5 public accounts and 5 private accounts for _ in 0..5 { let mut out_account_id = FfiBytes32::from_bytes([0; 32]); - wallet_ffi_create_account_public(handle, (&mut out_account_id) as *mut FfiBytes32); - wallet_ffi_create_account_private(handle, (&mut out_account_id) as *mut FfiBytes32); + wallet_ffi_create_account_public(handle, &raw mut out_account_id); + wallet_ffi_create_account_private(handle, &raw mut out_account_id); } handle @@ -364,7 +357,7 @@ fn test_wallet_ffi_list_accounts() { // Create the wallet Rust let wallet_rust = { - let mut wallet = new_wallet_rust_with_default_config(password); + let mut wallet = new_wallet_rust_with_default_config(password)?; // Create 5 public accounts and 5 private accounts for _ in 0..5 { wallet.create_new_account_public(None); @@ -376,7 +369,7 @@ fn test_wallet_ffi_list_accounts() { // Get the account list with FFI method let mut wallet_ffi_account_list = unsafe { let mut out_list = FfiAccountList::default(); - wallet_ffi_list_accounts(wallet_ffi_handle, (&mut out_list) as *mut FfiAccountList); + wallet_ffi_list_accounts(wallet_ffi_handle, &raw mut out_list); out_list }; @@ -400,7 +393,7 @@ fn test_wallet_ffi_list_accounts() { assert_eq!( wallet_rust_account_ids .iter() - .map(|id| id.value()) + .map(nssa::AccountId::value) .collect::>(), wallet_ffi_account_list_slice .iter() @@ -409,7 +402,7 @@ fn test_wallet_ffi_list_accounts() { ); // Assert `is_pub` flag is correct in the FFI result - for entry in wallet_ffi_account_list_slice.iter() { + for entry in wallet_ffi_account_list_slice { let account_id = AccountId::new(entry.account_id.data); let is_pub_default_in_rust_wallet = wallet_rust .storage() @@ -429,27 +422,30 @@ fn test_wallet_ffi_list_accounts() { } unsafe { - wallet_ffi_free_account_list((&mut wallet_ffi_account_list) as *mut FfiAccountList); + wallet_ffi_free_account_list(&raw mut wallet_ffi_account_list); wallet_ffi_destroy(wallet_ffi_handle); } + + Ok(()) } #[test] fn test_wallet_ffi_get_balance_public() -> Result<()> { let ctx = BlockingTestContext::new()?; let account_id: AccountId = ctx.ctx().existing_public_accounts()[0]; - let home = tempfile::tempdir().unwrap(); - let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path()); + let home = tempfile::tempdir()?; + let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; let balance = unsafe { let mut out_balance: [u8; 16] = [0; 16]; let ffi_account_id = FfiBytes32::from(&account_id); - let _result = wallet_ffi_get_balance( + wallet_ffi_get_balance( wallet_ffi_handle, - (&ffi_account_id) as *const FfiBytes32, + &raw const ffi_account_id, true, - (&mut out_balance) as *mut [u8; 16], - ); + &raw mut out_balance, + ) + .unwrap(); u128::from_le_bytes(out_balance) }; assert_eq!(balance, 10000); @@ -467,17 +463,18 @@ fn test_wallet_ffi_get_balance_public() -> Result<()> { fn test_wallet_ffi_get_account_public() -> Result<()> { let ctx = BlockingTestContext::new()?; let account_id: AccountId = ctx.ctx().existing_public_accounts()[0]; - let home = tempfile::tempdir().unwrap(); - let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path()); + let home = tempfile::tempdir()?; + let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; let mut out_account = FfiAccount::default(); let account: Account = unsafe { let ffi_account_id = FfiBytes32::from(&account_id); - let _result = wallet_ffi_get_account_public( + wallet_ffi_get_account_public( wallet_ffi_handle, - (&ffi_account_id) as *const FfiBytes32, - (&mut out_account) as *mut FfiAccount, - ); + &raw const ffi_account_id, + &raw mut out_account, + ) + .unwrap(); (&out_account).try_into().unwrap() }; @@ -490,7 +487,7 @@ fn test_wallet_ffi_get_account_public() -> Result<()> { assert_eq!(account.nonce, 0); unsafe { - wallet_ffi_free_account_data((&mut out_account) as *mut FfiAccount); + wallet_ffi_free_account_data(&raw mut out_account); wallet_ffi_destroy(wallet_ffi_handle); } @@ -503,17 +500,18 @@ fn test_wallet_ffi_get_account_public() -> Result<()> { fn test_wallet_ffi_get_account_private() -> Result<()> { let ctx = BlockingTestContext::new()?; let account_id: AccountId = ctx.ctx().existing_private_accounts()[0]; - let home = tempfile::tempdir().unwrap(); - let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path()); + let home = tempfile::tempdir()?; + let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; let mut out_account = FfiAccount::default(); let account: Account = unsafe { let ffi_account_id = FfiBytes32::from(&account_id); - let _result = wallet_ffi_get_account_private( + wallet_ffi_get_account_private( wallet_ffi_handle, - (&ffi_account_id) as *const FfiBytes32, - (&mut out_account) as *mut FfiAccount, - ); + &raw const ffi_account_id, + &raw mut out_account, + ) + .unwrap(); (&out_account).try_into().unwrap() }; @@ -526,7 +524,7 @@ fn test_wallet_ffi_get_account_private() -> Result<()> { assert_eq!(account.nonce, 0); unsafe { - wallet_ffi_free_account_data((&mut out_account) as *mut FfiAccount); + wallet_ffi_free_account_data(&raw mut out_account); wallet_ffi_destroy(wallet_ffi_handle); } @@ -539,17 +537,18 @@ fn test_wallet_ffi_get_account_private() -> Result<()> { fn test_wallet_ffi_get_public_account_keys() -> Result<()> { let ctx = BlockingTestContext::new()?; let account_id: AccountId = ctx.ctx().existing_public_accounts()[0]; - let home = tempfile::tempdir().unwrap(); - let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path()); + let home = tempfile::tempdir()?; + let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; let mut out_key = FfiPublicAccountKey::default(); let key: PublicKey = unsafe { let ffi_account_id = FfiBytes32::from(&account_id); - let _result = wallet_ffi_get_public_account_key( + wallet_ffi_get_public_account_key( wallet_ffi_handle, - (&ffi_account_id) as *const FfiBytes32, - (&mut out_key) as *mut FfiPublicAccountKey, - ); + &raw const ffi_account_id, + &raw mut out_key, + ) + .unwrap(); (&out_key).try_into().unwrap() }; @@ -577,17 +576,18 @@ fn test_wallet_ffi_get_public_account_keys() -> Result<()> { fn test_wallet_ffi_get_private_account_keys() -> Result<()> { let ctx = BlockingTestContext::new()?; let account_id: AccountId = ctx.ctx().existing_private_accounts()[0]; - let home = tempfile::tempdir().unwrap(); - let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path()); + let home = tempfile::tempdir()?; + let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; let mut keys = FfiPrivateAccountKeys::default(); unsafe { let ffi_account_id = FfiBytes32::from(&account_id); - let _result = wallet_ffi_get_private_account_keys( + wallet_ffi_get_private_account_keys( wallet_ffi_handle, - (&ffi_account_id) as *const FfiBytes32, - (&mut keys) as *mut FfiPrivateAccountKeys, - ); + &raw const ffi_account_id, + &raw mut keys, + ) + .unwrap(); }; let key_chain = &ctx @@ -606,7 +606,7 @@ fn test_wallet_ffi_get_private_account_keys() -> Result<()> { assert_eq!(&keys.vpk().unwrap(), expected_vpk); unsafe { - wallet_ffi_free_private_account_keys((&mut keys) as *mut FfiPrivateAccountKeys); + wallet_ffi_free_private_account_keys(&raw mut keys); wallet_ffi_destroy(wallet_ffi_handle); } @@ -616,66 +616,65 @@ fn test_wallet_ffi_get_private_account_keys() -> Result<()> { } #[test] -fn test_wallet_ffi_account_id_to_base58() { +fn test_wallet_ffi_account_id_to_base58() -> Result<()> { let private_key = PrivateKey::new_os_random(); let public_key = PublicKey::new_from_private_key(&private_key); let account_id = AccountId::from(&public_key); let ffi_bytes: FfiBytes32 = (&account_id).into(); - let ptr = unsafe { wallet_ffi_account_id_to_base58((&ffi_bytes) as *const FfiBytes32) }; + let ptr = unsafe { wallet_ffi_account_id_to_base58(&raw const ffi_bytes) }; - let ffi_result = unsafe { CStr::from_ptr(ptr).to_str().unwrap() }; + let ffi_result = unsafe { CStr::from_ptr(ptr).to_str()? }; assert_eq!(account_id.to_string(), ffi_result); unsafe { wallet_ffi_free_string(ptr); } + + Ok(()) } #[test] -fn test_wallet_ffi_base58_to_account_id() { +fn test_wallet_ffi_base58_to_account_id() -> Result<()> { let private_key = PrivateKey::new_os_random(); let public_key = PublicKey::new_from_private_key(&private_key); let account_id = AccountId::from(&public_key); let account_id_str = account_id.to_string(); - let account_id_c_str = CString::new(account_id_str.clone()).unwrap(); + let account_id_c_str = CString::new(account_id_str.clone())?; let account_id: AccountId = unsafe { let mut out_account_id_bytes = FfiBytes32::default(); - wallet_ffi_account_id_from_base58( - account_id_c_str.as_ptr(), - (&mut out_account_id_bytes) as *mut FfiBytes32, - ); + wallet_ffi_account_id_from_base58(account_id_c_str.as_ptr(), &raw mut out_account_id_bytes); out_account_id_bytes.into() }; - let expected_account_id = account_id_str.parse().unwrap(); + let expected_account_id = account_id_str.parse()?; assert_eq!(account_id, expected_account_id); + + Ok(()) } #[test] fn test_wallet_ffi_init_public_account_auth_transfer() -> Result<()> { - let ctx = BlockingTestContext::new().unwrap(); - let home = tempfile::tempdir().unwrap(); - let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path()); + let ctx = BlockingTestContext::new()?; + let home = tempfile::tempdir()?; + let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; // Create a new uninitialized public account let mut out_account_id = FfiBytes32::from_bytes([0; 32]); unsafe { - wallet_ffi_create_account_public( - wallet_ffi_handle, - (&mut out_account_id) as *mut FfiBytes32, - ); + wallet_ffi_create_account_public(wallet_ffi_handle, &raw mut out_account_id); } // Check its program owner is the default program id let account: Account = unsafe { let mut out_account = FfiAccount::default(); - let _result = wallet_ffi_get_account_public( + wallet_ffi_get_account_public( wallet_ffi_handle, - (&out_account_id) as *const FfiBytes32, - (&mut out_account) as *mut FfiAccount, - ); + &raw const out_account_id, + &raw mut out_account, + ) + .unwrap(); (&out_account).try_into().unwrap() }; assert_eq!(account.program_owner, DEFAULT_PROGRAM_ID); @@ -685,8 +684,8 @@ fn test_wallet_ffi_init_public_account_auth_transfer() -> Result<()> { unsafe { wallet_ffi_register_public_account( wallet_ffi_handle, - (&out_account_id) as *const FfiBytes32, - (&mut transfer_result) as *mut FfiTransferResult, + &raw const out_account_id, + &raw mut transfer_result, ); } @@ -696,11 +695,12 @@ fn test_wallet_ffi_init_public_account_auth_transfer() -> Result<()> { // Check that the program owner is now the authenticated transfer program let account: Account = unsafe { let mut out_account = FfiAccount::default(); - let _result = wallet_ffi_get_account_public( + wallet_ffi_get_account_public( wallet_ffi_handle, - (&out_account_id) as *const FfiBytes32, - (&mut out_account) as *mut FfiAccount, - ); + &raw const out_account_id, + &raw mut out_account, + ) + .unwrap(); (&out_account).try_into().unwrap() }; assert_eq!( @@ -709,7 +709,7 @@ fn test_wallet_ffi_init_public_account_auth_transfer() -> Result<()> { ); unsafe { - wallet_ffi_free_transfer_result((&mut transfer_result) as *mut FfiTransferResult); + wallet_ffi_free_transfer_result(&raw mut transfer_result); wallet_ffi_destroy(wallet_ffi_handle); } @@ -718,17 +718,14 @@ fn test_wallet_ffi_init_public_account_auth_transfer() -> Result<()> { #[test] fn test_wallet_ffi_init_private_account_auth_transfer() -> Result<()> { - let ctx = BlockingTestContext::new().unwrap(); - let home = tempfile::tempdir().unwrap(); - let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path()); + let ctx = BlockingTestContext::new()?; + let home = tempfile::tempdir()?; + let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; // Create a new uninitialized public account let mut out_account_id = FfiBytes32::from_bytes([0; 32]); unsafe { - wallet_ffi_create_account_private( - wallet_ffi_handle, - (&mut out_account_id) as *mut FfiBytes32, - ); + wallet_ffi_create_account_private(wallet_ffi_handle, &raw mut out_account_id); } // Check its program owner is the default program id @@ -736,8 +733,8 @@ fn test_wallet_ffi_init_private_account_auth_transfer() -> Result<()> { let mut out_account = FfiAccount::default(); wallet_ffi_get_account_private( wallet_ffi_handle, - (&out_account_id) as *const FfiBytes32, - (&mut out_account) as *mut FfiAccount, + &raw const out_account_id, + &raw mut out_account, ); (&out_account).try_into().unwrap() }; @@ -748,8 +745,8 @@ fn test_wallet_ffi_init_private_account_auth_transfer() -> Result<()> { unsafe { wallet_ffi_register_private_account( wallet_ffi_handle, - (&out_account_id) as *const FfiBytes32, - (&mut transfer_result) as *mut FfiTransferResult, + &raw const out_account_id, + &raw mut transfer_result, ); } @@ -759,18 +756,19 @@ fn test_wallet_ffi_init_private_account_auth_transfer() -> Result<()> { // Sync private account local storage with onchain encrypted state unsafe { let mut current_height = 0; - wallet_ffi_get_current_block_height(wallet_ffi_handle, (&mut current_height) as *mut u64); + wallet_ffi_get_current_block_height(wallet_ffi_handle, &raw mut current_height); wallet_ffi_sync_to_block(wallet_ffi_handle, current_height); }; // Check that the program owner is now the authenticated transfer program let account: Account = unsafe { let mut out_account = FfiAccount::default(); - let _result = wallet_ffi_get_account_private( + wallet_ffi_get_account_private( wallet_ffi_handle, - (&out_account_id) as *const FfiBytes32, - (&mut out_account) as *mut FfiAccount, - ); + &raw const out_account_id, + &raw mut out_account, + ) + .unwrap(); (&out_account).try_into().unwrap() }; assert_eq!( @@ -779,7 +777,7 @@ fn test_wallet_ffi_init_private_account_auth_transfer() -> Result<()> { ); unsafe { - wallet_ffi_free_transfer_result((&mut transfer_result) as *mut FfiTransferResult); + wallet_ffi_free_transfer_result(&raw mut transfer_result); wallet_ffi_destroy(wallet_ffi_handle); } @@ -788,9 +786,9 @@ fn test_wallet_ffi_init_private_account_auth_transfer() -> Result<()> { #[test] fn test_wallet_ffi_transfer_public() -> Result<()> { - let ctx = BlockingTestContext::new().unwrap(); - let home = tempfile::tempdir().unwrap(); - let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path()); + let ctx = BlockingTestContext::new()?; + let home = tempfile::tempdir()?; + let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; let from: FfiBytes32 = (&ctx.ctx().existing_public_accounts()[0]).into(); let to: FfiBytes32 = (&ctx.ctx().existing_public_accounts()[1]).into(); let amount: [u8; 16] = 100u128.to_le_bytes(); @@ -799,10 +797,10 @@ fn test_wallet_ffi_transfer_public() -> Result<()> { unsafe { wallet_ffi_transfer_public( wallet_ffi_handle, - (&from) as *const FfiBytes32, - (&to) as *const FfiBytes32, - (&amount) as *const [u8; 16], - (&mut transfer_result) as *mut FfiTransferResult, + &raw const from, + &raw const to, + &raw const amount, + &raw mut transfer_result, ); } @@ -811,23 +809,20 @@ fn test_wallet_ffi_transfer_public() -> Result<()> { let from_balance = unsafe { let mut out_balance: [u8; 16] = [0; 16]; - let _result = wallet_ffi_get_balance( + wallet_ffi_get_balance( wallet_ffi_handle, - (&from) as *const FfiBytes32, + &raw const from, true, - (&mut out_balance) as *mut [u8; 16], - ); + &raw mut out_balance, + ) + .unwrap(); u128::from_le_bytes(out_balance) }; let to_balance = unsafe { let mut out_balance: [u8; 16] = [0; 16]; - let _result = wallet_ffi_get_balance( - wallet_ffi_handle, - (&to) as *const FfiBytes32, - true, - (&mut out_balance) as *mut [u8; 16], - ); + wallet_ffi_get_balance(wallet_ffi_handle, &raw const to, true, &raw mut out_balance) + .unwrap(); u128::from_le_bytes(out_balance) }; @@ -835,7 +830,7 @@ fn test_wallet_ffi_transfer_public() -> Result<()> { assert_eq!(to_balance, 20100); unsafe { - wallet_ffi_free_transfer_result((&mut transfer_result) as *mut FfiTransferResult); + wallet_ffi_free_transfer_result(&raw mut transfer_result); wallet_ffi_destroy(wallet_ffi_handle); } @@ -844,21 +839,18 @@ fn test_wallet_ffi_transfer_public() -> Result<()> { #[test] fn test_wallet_ffi_transfer_shielded() -> Result<()> { - let ctx = BlockingTestContext::new().unwrap(); - let home = tempfile::tempdir().unwrap(); - let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path()); + let ctx = BlockingTestContext::new()?; + let home = tempfile::tempdir()?; + let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; let from: FfiBytes32 = (&ctx.ctx().existing_public_accounts()[0]).into(); let (to, to_keys) = unsafe { let mut out_account_id = FfiBytes32::default(); let mut out_keys = FfiPrivateAccountKeys::default(); - wallet_ffi_create_account_private( - wallet_ffi_handle, - (&mut out_account_id) as *mut FfiBytes32, - ); + wallet_ffi_create_account_private(wallet_ffi_handle, &raw mut out_account_id); wallet_ffi_get_private_account_keys( wallet_ffi_handle, - (&out_account_id) as *const FfiBytes32, - (&mut out_keys) as *mut FfiPrivateAccountKeys, + &raw const out_account_id, + &raw mut out_keys, ); (out_account_id, out_keys) }; @@ -868,10 +860,10 @@ fn test_wallet_ffi_transfer_shielded() -> Result<()> { unsafe { wallet_ffi_transfer_shielded( wallet_ffi_handle, - (&from) as *const FfiBytes32, - (&to_keys) as *const FfiPrivateAccountKeys, - (&amount) as *const [u8; 16], - (&mut transfer_result) as *mut FfiTransferResult, + &raw const from, + &raw const to_keys, + &raw const amount, + &raw mut transfer_result, ); } @@ -881,18 +873,19 @@ fn test_wallet_ffi_transfer_shielded() -> Result<()> { // Sync private account local storage with onchain encrypted state unsafe { let mut current_height = 0; - wallet_ffi_get_current_block_height(wallet_ffi_handle, (&mut current_height) as *mut u64); + wallet_ffi_get_current_block_height(wallet_ffi_handle, &raw mut current_height); wallet_ffi_sync_to_block(wallet_ffi_handle, current_height); }; let from_balance = unsafe { let mut out_balance: [u8; 16] = [0; 16]; - let _result = wallet_ffi_get_balance( + wallet_ffi_get_balance( wallet_ffi_handle, - (&from) as *const FfiBytes32, + &raw const from, true, - (&mut out_balance) as *mut [u8; 16], - ); + &raw mut out_balance, + ) + .unwrap(); u128::from_le_bytes(out_balance) }; @@ -900,9 +893,9 @@ fn test_wallet_ffi_transfer_shielded() -> Result<()> { let mut out_balance: [u8; 16] = [0; 16]; let _result = wallet_ffi_get_balance( wallet_ffi_handle, - (&to) as *const FfiBytes32, + &raw const to, false, - (&mut out_balance) as *mut [u8; 16], + &raw mut out_balance, ); u128::from_le_bytes(out_balance) }; @@ -911,7 +904,7 @@ fn test_wallet_ffi_transfer_shielded() -> Result<()> { assert_eq!(to_balance, 100); unsafe { - wallet_ffi_free_transfer_result((&mut transfer_result) as *mut FfiTransferResult); + wallet_ffi_free_transfer_result(&raw mut transfer_result); wallet_ffi_destroy(wallet_ffi_handle); } @@ -920,9 +913,9 @@ fn test_wallet_ffi_transfer_shielded() -> Result<()> { #[test] fn test_wallet_ffi_transfer_deshielded() -> Result<()> { - let ctx = BlockingTestContext::new().unwrap(); - let home = tempfile::tempdir().unwrap(); - let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path()); + let ctx = BlockingTestContext::new()?; + let home = tempfile::tempdir()?; + let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; let from: FfiBytes32 = (&ctx.ctx().existing_private_accounts()[0]).into(); let to = FfiBytes32::from_bytes([37; 32]); let amount: [u8; 16] = 100u128.to_le_bytes(); @@ -931,10 +924,10 @@ fn test_wallet_ffi_transfer_deshielded() -> Result<()> { unsafe { wallet_ffi_transfer_deshielded( wallet_ffi_handle, - (&from) as *const FfiBytes32, - (&to) as *const FfiBytes32, - (&amount) as *const [u8; 16], - (&mut transfer_result) as *mut FfiTransferResult, + &raw const from, + &raw const to, + &raw const amount, + &raw mut transfer_result, ); } @@ -944,7 +937,7 @@ fn test_wallet_ffi_transfer_deshielded() -> Result<()> { // Sync private account local storage with onchain encrypted state unsafe { let mut current_height = 0; - wallet_ffi_get_current_block_height(wallet_ffi_handle, (&mut current_height) as *mut u64); + wallet_ffi_get_current_block_height(wallet_ffi_handle, &raw mut current_height); wallet_ffi_sync_to_block(wallet_ffi_handle, current_height); }; @@ -952,21 +945,17 @@ fn test_wallet_ffi_transfer_deshielded() -> Result<()> { let mut out_balance: [u8; 16] = [0; 16]; let _result = wallet_ffi_get_balance( wallet_ffi_handle, - (&from) as *const FfiBytes32, + &raw const from, false, - (&mut out_balance) as *mut [u8; 16], + &raw mut out_balance, ); u128::from_le_bytes(out_balance) }; let to_balance = unsafe { let mut out_balance: [u8; 16] = [0; 16]; - let _result = wallet_ffi_get_balance( - wallet_ffi_handle, - (&to) as *const FfiBytes32, - true, - (&mut out_balance) as *mut [u8; 16], - ); + let _result = + wallet_ffi_get_balance(wallet_ffi_handle, &raw const to, true, &raw mut out_balance); u128::from_le_bytes(out_balance) }; @@ -974,7 +963,7 @@ fn test_wallet_ffi_transfer_deshielded() -> Result<()> { assert_eq!(to_balance, 100); unsafe { - wallet_ffi_free_transfer_result((&mut transfer_result) as *mut FfiTransferResult); + wallet_ffi_free_transfer_result(&raw mut transfer_result); wallet_ffi_destroy(wallet_ffi_handle); } @@ -983,22 +972,19 @@ fn test_wallet_ffi_transfer_deshielded() -> Result<()> { #[test] fn test_wallet_ffi_transfer_private() -> Result<()> { - let ctx = BlockingTestContext::new().unwrap(); - let home = tempfile::tempdir().unwrap(); - let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path()); + let ctx = BlockingTestContext::new()?; + let home = tempfile::tempdir()?; + let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; let from: FfiBytes32 = (&ctx.ctx().existing_private_accounts()[0]).into(); let (to, to_keys) = unsafe { let mut out_account_id = FfiBytes32::default(); let mut out_keys = FfiPrivateAccountKeys::default(); - wallet_ffi_create_account_private( - wallet_ffi_handle, - (&mut out_account_id) as *mut FfiBytes32, - ); + wallet_ffi_create_account_private(wallet_ffi_handle, &raw mut out_account_id); wallet_ffi_get_private_account_keys( wallet_ffi_handle, - (&out_account_id) as *const FfiBytes32, - (&mut out_keys) as *mut FfiPrivateAccountKeys, + &raw const out_account_id, + &raw mut out_keys, ); (out_account_id, out_keys) }; @@ -1009,10 +995,10 @@ fn test_wallet_ffi_transfer_private() -> Result<()> { unsafe { wallet_ffi_transfer_private( wallet_ffi_handle, - (&from) as *const FfiBytes32, - (&to_keys) as *const FfiPrivateAccountKeys, - (&amount) as *const [u8; 16], - (&mut transfer_result) as *mut FfiTransferResult, + &raw const from, + &raw const to_keys, + &raw const amount, + &raw mut transfer_result, ); } @@ -1022,7 +1008,7 @@ fn test_wallet_ffi_transfer_private() -> Result<()> { // Sync private account local storage with onchain encrypted state unsafe { let mut current_height = 0; - wallet_ffi_get_current_block_height(wallet_ffi_handle, (&mut current_height) as *mut u64); + wallet_ffi_get_current_block_height(wallet_ffi_handle, &raw mut current_height); wallet_ffi_sync_to_block(wallet_ffi_handle, current_height); }; @@ -1030,9 +1016,9 @@ fn test_wallet_ffi_transfer_private() -> Result<()> { let mut out_balance: [u8; 16] = [0; 16]; let _result = wallet_ffi_get_balance( wallet_ffi_handle, - (&from) as *const FfiBytes32, + &raw const from, false, - (&mut out_balance) as *mut [u8; 16], + &raw mut out_balance, ); u128::from_le_bytes(out_balance) }; @@ -1041,9 +1027,9 @@ fn test_wallet_ffi_transfer_private() -> Result<()> { let mut out_balance: [u8; 16] = [0; 16]; let _result = wallet_ffi_get_balance( wallet_ffi_handle, - (&to) as *const FfiBytes32, + &raw const to, false, - (&mut out_balance) as *mut [u8; 16], + &raw mut out_balance, ); u128::from_le_bytes(out_balance) }; @@ -1052,7 +1038,7 @@ fn test_wallet_ffi_transfer_private() -> Result<()> { assert_eq!(to_balance, 100); unsafe { - wallet_ffi_free_transfer_result((&mut transfer_result) as *mut FfiTransferResult); + wallet_ffi_free_transfer_result(&raw mut transfer_result); wallet_ffi_destroy(wallet_ffi_handle); } diff --git a/key_protocol/src/key_management/ephemeral_key_holder.rs b/key_protocol/src/key_management/ephemeral_key_holder.rs index 4aaea58c..a10a5191 100644 --- a/key_protocol/src/key_management/ephemeral_key_holder.rs +++ b/key_protocol/src/key_management/ephemeral_key_holder.rs @@ -12,6 +12,7 @@ pub struct EphemeralKeyHolder { ephemeral_secret_key: EphemeralSecretKey, } +#[must_use] pub fn produce_one_sided_shared_secret_receiver( vpk: &ViewingPublicKey, ) -> (SharedSecretKey, EphemeralPublicKey) { @@ -24,6 +25,7 @@ pub fn produce_one_sided_shared_secret_receiver( } impl EphemeralKeyHolder { + #[must_use] pub fn new(receiver_nullifier_public_key: &NullifierPublicKey) -> Self { let mut nonce_bytes = [0; 16]; OsRng.fill_bytes(&mut nonce_bytes); @@ -36,10 +38,12 @@ impl EphemeralKeyHolder { } } + #[must_use] pub fn generate_ephemeral_public_key(&self) -> EphemeralPublicKey { EphemeralPublicKey::from_scalar(self.ephemeral_secret_key) } + #[must_use] pub fn calculate_shared_secret_sender( &self, receiver_viewing_public_key: &ViewingPublicKey, diff --git a/key_protocol/src/key_management/key_tree/chain_index.rs b/key_protocol/src/key_management/key_tree/chain_index.rs index d5fbf401..80dced3b 100644 --- a/key_protocol/src/key_management/key_tree/chain_index.rs +++ b/key_protocol/src/key_management/key_tree/chain_index.rs @@ -28,7 +28,7 @@ impl FromStr for ChainIndex { let uprooted_substring = s.strip_prefix("/").unwrap(); - let splitted_chain: Vec<&str> = uprooted_substring.split("/").collect(); + let splitted_chain: Vec<&str> = uprooted_substring.split('/').collect(); let mut res = vec![]; for split_ch in splitted_chain { @@ -47,7 +47,7 @@ impl Display for ChainIndex { write!(f, "{cci}/")?; } if let Some(last) = self.0.last() { - write!(f, "{}", last)?; + write!(f, "{last}")?; } Ok(()) } @@ -60,28 +60,33 @@ impl Default for ChainIndex { } impl ChainIndex { + #[must_use] pub fn root() -> Self { ChainIndex::default() } + #[must_use] pub fn chain(&self) -> &[u32] { &self.0 } + #[must_use] pub fn index(&self) -> Option { self.chain().last().copied() } + #[must_use] pub fn next_in_line(&self) -> ChainIndex { let mut chain = self.0.clone(); // ToDo: Add overflow check if let Some(last_p) = chain.last_mut() { - *last_p += 1 + *last_p += 1; } ChainIndex(chain) } + #[must_use] pub fn previous_in_line(&self) -> Option { let mut chain = self.0.clone(); if let Some(last_p) = chain.last_mut() { @@ -91,6 +96,7 @@ impl ChainIndex { Some(ChainIndex(chain)) } + #[must_use] pub fn parent(&self) -> Option { if self.0.is_empty() { None @@ -99,6 +105,7 @@ impl ChainIndex { } } + #[must_use] pub fn nth_child(&self, child_id: u32) -> ChainIndex { let mut chain = self.0.clone(); chain.push(child_id); @@ -106,6 +113,7 @@ impl ChainIndex { ChainIndex(chain) } + #[must_use] pub fn depth(&self) -> u32 { self.0.iter().map(|cci| cci + 1).sum() } @@ -124,7 +132,7 @@ impl ChainIndex { .iter() .permutations(self.0.len()) .unique() - .map(|item| ChainIndex(item.into_iter().cloned().collect())) + .map(|item| ChainIndex(item.into_iter().copied().collect())) } pub fn chain_ids_at_depth(depth: usize) -> impl Iterator { @@ -227,7 +235,7 @@ mod tests { let prev_chain_id = chain_id.previous_in_line().unwrap(); - assert_eq!(prev_chain_id, ChainIndex(vec![1, 7, 2])) + assert_eq!(prev_chain_id, ChainIndex(vec![1, 7, 2])); } #[test] @@ -236,7 +244,7 @@ mod tests { let prev_chain_id = chain_id.previous_in_line(); - assert_eq!(prev_chain_id, None) + assert_eq!(prev_chain_id, None); } #[test] @@ -245,7 +253,7 @@ mod tests { let parent_chain_id = chain_id.parent().unwrap(); - assert_eq!(parent_chain_id, ChainIndex(vec![1, 7])) + assert_eq!(parent_chain_id, ChainIndex(vec![1, 7])); } #[test] @@ -254,7 +262,7 @@ mod tests { let parent_chain_id = chain_id.parent(); - assert_eq!(parent_chain_id, None) + assert_eq!(parent_chain_id, None); } #[test] @@ -263,7 +271,7 @@ mod tests { let parent_chain_id = chain_id.parent().unwrap(); - assert_eq!(parent_chain_id, ChainIndex::root()) + assert_eq!(parent_chain_id, ChainIndex::root()); } #[test] @@ -272,7 +280,7 @@ mod tests { let collapsed = chain_id.collapse_back().unwrap(); - assert_eq!(collapsed, ChainIndex(vec![3])) + assert_eq!(collapsed, ChainIndex(vec![3])); } #[test] @@ -281,7 +289,7 @@ mod tests { let collapsed = chain_id.collapse_back(); - assert_eq!(collapsed, None) + assert_eq!(collapsed, None); } #[test] @@ -290,7 +298,7 @@ mod tests { let collapsed = chain_id.collapse_back(); - assert_eq!(collapsed, None) + assert_eq!(collapsed, None); } #[test] diff --git a/key_protocol/src/key_management/key_tree/keys_public.rs b/key_protocol/src/key_management/key_tree/keys_public.rs index 7c5d6e38..7e041c3f 100644 --- a/key_protocol/src/key_management/key_tree/keys_public.rs +++ b/key_protocol/src/key_management/key_tree/keys_public.rs @@ -16,21 +16,18 @@ impl ChildKeysPublic { fn compute_hash_value(&self, cci: u32) -> [u8; 64] { let mut hash_input = vec![]; - match ((2u32).pow(31)).cmp(&cci) { + if 2u32.pow(31) > cci { // Non-harden - std::cmp::Ordering::Greater => { - hash_input.extend_from_slice(self.cpk.value()); - hash_input.extend_from_slice(&cci.to_le_bytes()); + hash_input.extend_from_slice(self.cpk.value()); + hash_input.extend_from_slice(&cci.to_le_bytes()); - hmac_sha512::HMAC::mac(hash_input, self.ccc) - } + hmac_sha512::HMAC::mac(hash_input, self.ccc) + } else { // Harden - _ => { - hash_input.extend_from_slice(self.csk.value()); - hash_input.extend_from_slice(&(cci).to_le_bytes()); + hash_input.extend_from_slice(self.csk.value()); + hash_input.extend_from_slice(&(cci).to_le_bytes()); - hmac_sha512::HMAC::mac(hash_input, self.ccc) - } + hmac_sha512::HMAC::mac(hash_input, self.ccc) } } } @@ -68,9 +65,10 @@ impl KeyNode for ChildKeysPublic { ) .unwrap(); - if secp256k1::constants::CURVE_ORDER < *csk.value() { - panic!("Secret key cannot exceed curve order"); - } + assert!( + secp256k1::constants::CURVE_ORDER >= *csk.value(), + "Secret key cannot exceed curve order" + ); let ccc = *hash_value .last_chunk::<32>() diff --git a/key_protocol/src/key_management/key_tree/mod.rs b/key_protocol/src/key_management/key_tree/mod.rs index ead60595..bae44fbd 100644 --- a/key_protocol/src/key_management/key_tree/mod.rs +++ b/key_protocol/src/key_management/key_tree/mod.rs @@ -32,6 +32,7 @@ pub type KeyTreePublic = KeyTree; pub type KeyTreePrivate = KeyTree; impl KeyTree { + #[must_use] pub fn new(seed: &SeedHolder) -> Self { let seed_fit: [u8; 64] = seed .seed @@ -63,6 +64,7 @@ impl KeyTree { // ToDo: Add function to create a tree from list of nodes with consistency check. + #[must_use] pub fn find_next_last_child_of_id(&self, parent_id: &ChainIndex) -> Option { if !self.key_map.contains_key(parent_id) { return None; @@ -87,14 +89,14 @@ impl KeyTree { match (&rightmost_ref, &rightmost_ref_next) { (Some(_), Some(_)) => { left_border = right; - right = (right + right_border) / 2; + right = u32::midpoint(right, right_border); } (Some(_), None) => { break Some(right + 1); } (None, None) => { right_border = right; - right = (left_border + right) / 2; + right = u32::midpoint(left_border, right); } (None, Some(_)) => { unreachable!(); @@ -152,6 +154,7 @@ impl KeyTree { self.fill_node(&self.find_next_slot_layered()) } + #[must_use] pub fn get_node(&self, account_id: nssa::AccountId) -> Option<&N> { self.account_id_map .get(&account_id) diff --git a/key_protocol/src/key_management/key_tree/traits.rs b/key_protocol/src/key_management/key_tree/traits.rs index 5770c47d..b57eec64 100644 --- a/key_protocol/src/key_management/key_tree/traits.rs +++ b/key_protocol/src/key_management/key_tree/traits.rs @@ -4,6 +4,7 @@ pub trait KeyNode { fn root(seed: [u8; 64]) -> Self; /// `cci`'s child of node + #[must_use] fn nth_child(&self, cci: u32) -> Self; fn chain_code(&self) -> &[u8; 32]; diff --git a/key_protocol/src/key_management/mod.rs b/key_protocol/src/key_management/mod.rs index 6e2891ce..b8e3c261 100644 --- a/key_protocol/src/key_management/mod.rs +++ b/key_protocol/src/key_management/mod.rs @@ -21,6 +21,7 @@ pub struct KeyChain { } impl KeyChain { + #[must_use] pub fn new_os_random() -> Self { // Currently dropping SeedHolder at the end of initialization. // Now entirely sure if we need it in the future. @@ -40,6 +41,7 @@ impl KeyChain { } } + #[must_use] pub fn new_mnemonic(passphrase: String) -> Self { // Currently dropping SeedHolder at the end of initialization. // Not entirely sure if we need it in the future. @@ -59,14 +61,15 @@ impl KeyChain { } } + #[must_use] pub fn calculate_shared_secret_receiver( &self, - ephemeral_public_key_sender: EphemeralPublicKey, + ephemeral_public_key_sender: &EphemeralPublicKey, index: Option, ) -> SharedSecretKey { SharedSecretKey::new( &self.secret_spending_key.generate_viewing_secret_key(index), - &ephemeral_public_key_sender, + ephemeral_public_key_sender, ) } } @@ -106,7 +109,7 @@ mod tests { // Calculate shared secret let _shared_secret = account_id_key_holder - .calculate_shared_secret_receiver(ephemeral_public_key_sender, None); + .calculate_shared_secret_receiver(&ephemeral_public_key_sender, None); } #[test] @@ -184,7 +187,7 @@ mod tests { let key_sender = eph_key_holder.calculate_shared_secret_sender(&keys.viewing_public_key); let key_receiver = keys.calculate_shared_secret_receiver( - eph_key_holder.generate_ephemeral_public_key(), + &eph_key_holder.generate_ephemeral_public_key(), Some(2), ); diff --git a/key_protocol/src/key_management/secret_holders.rs b/key_protocol/src/key_management/secret_holders.rs index d5aac258..0c096be4 100644 --- a/key_protocol/src/key_management/secret_holders.rs +++ b/key_protocol/src/key_management/secret_holders.rs @@ -25,14 +25,15 @@ pub struct SecretSpendingKey(pub(crate) [u8; 32]); pub type ViewingSecretKey = Scalar; #[derive(Serialize, Deserialize, Debug, Clone)] -/// Private key holder. Produces public keys. Can produce account_id. Can produce shared secret for -/// recepient. +/// Private key holder. Produces public keys. Can produce `account_id`. Can produce shared secret +/// for recepient. pub struct PrivateKeyHolder { pub nullifier_secret_key: NullifierSecretKey, pub(crate) viewing_secret_key: ViewingSecretKey, } impl SeedHolder { + #[must_use] pub fn new_os_random() -> Self { let mut enthopy_bytes: [u8; 32] = [0; 32]; OsRng.fill_bytes(&mut enthopy_bytes); @@ -46,6 +47,7 @@ impl SeedHolder { } } + #[must_use] pub fn new_mnemonic(passphrase: String) -> Self { let mnemonic = Mnemonic::from_entropy(&NSSA_ENTROPY_BYTES) .expect("Enthropy must be a multiple of 32 bytes"); @@ -56,6 +58,7 @@ impl SeedHolder { } } + #[must_use] pub fn generate_secret_spending_key_hash(&self) -> HashType { let mut hash = hmac_sha512::HMAC::mac(&self.seed, "NSSA_seed"); @@ -67,22 +70,24 @@ impl SeedHolder { HashType(*hash.first_chunk::<32>().unwrap()) } + #[must_use] pub fn produce_top_secret_key_holder(&self) -> SecretSpendingKey { SecretSpendingKey(self.generate_secret_spending_key_hash().into()) } } impl SecretSpendingKey { + #[must_use] pub fn generate_nullifier_secret_key(&self, index: Option) -> NullifierSecretKey { + const PREFIX: &[u8; 8] = b"LEE/keys"; + const SUFFIX_1: &[u8; 1] = &[1]; + const SUFFIX_2: &[u8; 19] = &[0; 19]; + let index = match index { None => 0u32, _ => index.expect("Expect a valid u32"), }; - const PREFIX: &[u8; 8] = b"LEE/keys"; - const SUFFIX_1: &[u8; 1] = &[1]; - const SUFFIX_2: &[u8; 19] = &[0; 19]; - let mut hasher = sha2::Sha256::new(); hasher.update(PREFIX); hasher.update(self.0); @@ -93,14 +98,16 @@ impl SecretSpendingKey { ::from(hasher.finalize_fixed()) } + #[must_use] pub fn generate_viewing_secret_key(&self, index: Option) -> ViewingSecretKey { + const PREFIX: &[u8; 8] = b"LEE/keys"; + const SUFFIX_1: &[u8; 1] = &[2]; + const SUFFIX_2: &[u8; 19] = &[0; 19]; + let index = match index { None => 0u32, _ => index.expect("Expect a valid u32"), }; - const PREFIX: &[u8; 8] = b"LEE/keys"; - const SUFFIX_1: &[u8; 1] = &[2]; - const SUFFIX_2: &[u8; 19] = &[0; 19]; let mut hasher = sha2::Sha256::new(); hasher.update(PREFIX); @@ -112,6 +119,7 @@ impl SecretSpendingKey { hasher.finalize_fixed().into() } + #[must_use] pub fn produce_private_key_holder(&self, index: Option) -> PrivateKeyHolder { PrivateKeyHolder { nullifier_secret_key: self.generate_nullifier_secret_key(index), @@ -121,10 +129,12 @@ impl SecretSpendingKey { } impl PrivateKeyHolder { + #[must_use] pub fn generate_nullifier_public_key(&self) -> NullifierPublicKey { (&self.nullifier_secret_key).into() } + #[must_use] pub fn generate_viewing_public_key(&self) -> ViewingPublicKey { ViewingPublicKey::from_scalar(self.viewing_secret_key) } diff --git a/key_protocol/src/key_protocol_core/mod.rs b/key_protocol/src/key_protocol_core/mod.rs index 42e4b672..f0ce49fa 100644 --- a/key_protocol/src/key_protocol_core/mod.rs +++ b/key_protocol/src/key_protocol_core/mod.rs @@ -34,7 +34,7 @@ impl NSSAUserData { let expected_account_id = nssa::AccountId::from(&nssa::PublicKey::new_from_private_key(key)); if &expected_account_id != account_id { - println!("{}, {}", expected_account_id, account_id); + println!("{expected_account_id}, {account_id}"); check_res = false; } } @@ -48,7 +48,7 @@ impl NSSAUserData { for (account_id, (key, _)) in accounts_keys_map { let expected_account_id = nssa::AccountId::from(&key.nullifer_public_key); if expected_account_id != *account_id { - println!("{}, {}", expected_account_id, account_id); + println!("{expected_account_id}, {account_id}"); check_res = false; } } @@ -86,7 +86,7 @@ impl NSSAUserData { /// Generated new private key for public transaction signatures /// - /// Returns the account_id of new account + /// Returns the `account_id` of new account pub fn generate_new_public_transaction_private_key( &mut self, parent_cci: Option, @@ -119,7 +119,7 @@ impl NSSAUserData { /// Generated new private key for privacy preserving transactions /// - /// Returns the account_id of new account + /// Returns the `account_id` of new account pub fn generate_new_privacy_preserving_transaction_key_chain( &mut self, parent_cci: Option, diff --git a/mempool/src/lib.rs b/mempool/src/lib.rs index fae52b3e..874a2fa3 100644 --- a/mempool/src/lib.rs +++ b/mempool/src/lib.rs @@ -6,6 +6,7 @@ pub struct MemPool { } impl MemPool { + #[must_use] pub fn new(max_size: usize) -> (Self, MemPoolHandle) { let (sender, receiver) = tokio::sync::mpsc::channel(max_size); @@ -17,6 +18,7 @@ impl MemPool { (mem_pool, sender) } + /// Pop an item from the mempool first checking the front buffer (LIFO) then the channel (FIFO). pub fn pop(&mut self) -> Option { use tokio::sync::mpsc::error::TryRecvError; diff --git a/nssa/build.rs b/nssa/build.rs index 020b838c..ce39df93 100644 --- a/nssa/build.rs +++ b/nssa/build.rs @@ -1,4 +1,4 @@ -use std::{env, fs, path::PathBuf}; +use std::{env, fmt::Write as _, fs, path::PathBuf}; fn main() -> Result<(), Box> { let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR")?); @@ -15,7 +15,7 @@ fn main() -> Result<(), Box> { .collect::>(); if bins.is_empty() { - return Err(format!("No .bin files found in {:?}", program_methods_dir).into()); + return Err(format!("No .bin files found in {}", program_methods_dir.display()).into()); } fs::create_dir_all(&mod_dir)?; @@ -25,14 +25,16 @@ fn main() -> Result<(), Box> { let name = path.file_stem().unwrap().to_string_lossy(); let bytecode = fs::read(&path)?; let image_id: [u32; 8] = risc0_binfmt::compute_image_id(&bytecode)?.into(); - src.push_str(&format!( + write!( + src, "pub const {}_ELF: &[u8] = include_bytes!(r#\"{}\"#);\n\ + #[expect(clippy::unreadable_literal, reason = \"Generated image IDs from risc0 are cryptographic hashes represented as u32 arrays\")]\n\ pub const {}_ID: [u32; 8] = {:?};\n", name.to_uppercase(), path.display(), name.to_uppercase(), image_id - )); + )?; } fs::write(&mod_file, src)?; println!("cargo:warning=Generated module at {}", mod_file.display()); diff --git a/nssa/core/src/account.rs b/nssa/core/src/account.rs index 9de3df5e..59c8a203 100644 --- a/nssa/core/src/account.rs +++ b/nssa/core/src/account.rs @@ -1,4 +1,7 @@ -use std::{fmt::Display, str::FromStr}; +use std::{ + fmt::{Display, Write as _}, + str::FromStr, +}; use base58::{FromBase58, ToBase58}; use borsh::{BorshDeserialize, BorshSerialize}; @@ -25,12 +28,14 @@ pub struct Account { impl std::fmt::Debug for Account { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let program_owner_hex: String = self + let program_owner_hex = self .program_owner .iter() .flat_map(|n| n.to_le_bytes()) - .map(|b| format!("{b:02x}")) - .collect(); + .fold(String::new(), |mut acc, bytes| { + write!(acc, "{bytes:02x}").expect("writing to string should not fail"); + acc + }); f.debug_struct("Account") .field("program_owner", &program_owner_hex) .field("balance", &self.balance) @@ -82,14 +87,17 @@ impl std::fmt::Debug for AccountId { } impl AccountId { + #[must_use] pub fn new(value: [u8; 32]) -> Self { Self { value } } + #[must_use] pub fn value(&self) -> &[u8; 32] { &self.value } + #[must_use] pub fn into_value(self) -> [u8; 32] { self.value } @@ -172,7 +180,7 @@ mod tests { .to_vec() .try_into() .unwrap(), - nonce: 0xdeadbeef, + nonce: 0xdead_beef, }; let fingerprint = AccountId::new([8; 32]); let new_acc_with_metadata = AccountWithMetadata::new(account.clone(), true, fingerprint); diff --git a/nssa/core/src/account/data.rs b/nssa/core/src/account/data.rs index 91c58516..d244ee47 100644 --- a/nssa/core/src/account/data.rs +++ b/nssa/core/src/account/data.rs @@ -10,10 +10,12 @@ pub const DATA_MAX_LENGTH: ByteSize = ByteSize::kib(100); pub struct Data(Vec); impl Data { + #[must_use] pub fn into_inner(self) -> Vec { self.0 } + /// Reads data from a cursor. #[cfg(feature = "host")] pub fn from_cursor( cursor: &mut std::io::Cursor<&[u8]>, @@ -23,7 +25,9 @@ impl Data { let mut u32_bytes = [0u8; 4]; cursor.read_exact(&mut u32_bytes)?; let data_length = u32::from_le_bytes(u32_bytes); - if data_length as usize > DATA_MAX_LENGTH.as_u64() as usize { + if data_length as usize + > usize::try_from(DATA_MAX_LENGTH.as_u64()).expect("DATA_MAX_LENGTH fits in usize") + { return Err( std::io::Error::new(std::io::ErrorKind::InvalidData, DataTooBigError).into(), ); @@ -49,7 +53,9 @@ impl TryFrom> for Data { type Error = DataTooBigError; fn try_from(value: Vec) -> Result { - if value.len() > DATA_MAX_LENGTH.as_u64() as usize { + if value.len() + > usize::try_from(DATA_MAX_LENGTH.as_u64()).expect("DATA_MAX_LENGTH fits in usize") + { Err(DataTooBigError) } else { Ok(Self(value)) @@ -98,13 +104,17 @@ impl<'de> Deserialize<'de> for Data { A: serde::de::SeqAccess<'de>, { let mut vec = Vec::with_capacity( - seq.size_hint() - .unwrap_or(0) - .min(DATA_MAX_LENGTH.as_u64() as usize), + seq.size_hint().unwrap_or(0).min( + usize::try_from(DATA_MAX_LENGTH.as_u64()) + .expect("DATA_MAX_LENGTH fits in usize"), + ), ); while let Some(value) = seq.next_element()? { - if vec.len() >= DATA_MAX_LENGTH.as_u64() as usize { + if vec.len() + >= usize::try_from(DATA_MAX_LENGTH.as_u64()) + .expect("DATA_MAX_LENGTH fits in usize") + { return Err(serde::de::Error::custom(DataTooBigError)); } vec.push(value); @@ -125,10 +135,15 @@ impl BorshDeserialize for Data { let len = u32::deserialize_reader(reader)?; match len { 0 => Ok(Self::default()), - len if len as usize > DATA_MAX_LENGTH.as_u64() as usize => Err(std::io::Error::new( - std::io::ErrorKind::InvalidData, - DataTooBigError, - )), + len if len as usize + > usize::try_from(DATA_MAX_LENGTH.as_u64()) + .expect("DATA_MAX_LENGTH fits in usize") => + { + Err(std::io::Error::new( + std::io::ErrorKind::InvalidData, + DataTooBigError, + )) + } len => { let vec_bytes = u8::vec_from_reader(len, reader)? .expect("can't be None in current borsh crate implementation"); @@ -144,21 +159,35 @@ mod tests { #[test] fn test_data_max_length_allowed() { - let max_vec = vec![0u8; DATA_MAX_LENGTH.as_u64() as usize]; + let max_vec = vec![ + 0u8; + usize::try_from(DATA_MAX_LENGTH.as_u64()) + .expect("DATA_MAX_LENGTH fits in usize") + ]; let result = Data::try_from(max_vec); assert!(result.is_ok()); } #[test] fn test_data_too_big_error() { - let big_vec = vec![0u8; DATA_MAX_LENGTH.as_u64() as usize + 1]; + let big_vec = vec![ + 0u8; + usize::try_from(DATA_MAX_LENGTH.as_u64()) + .expect("DATA_MAX_LENGTH fits in usize") + + 1 + ]; let result = Data::try_from(big_vec); assert!(matches!(result, Err(DataTooBigError))); } #[test] fn test_borsh_deserialize_exceeding_limit_error() { - let too_big_data = vec![0u8; DATA_MAX_LENGTH.as_u64() as usize + 1]; + let too_big_data = vec![ + 0u8; + usize::try_from(DATA_MAX_LENGTH.as_u64()) + .expect("DATA_MAX_LENGTH fits in usize") + + 1 + ]; let mut serialized = Vec::new(); <_ as BorshSerialize>::serialize(&too_big_data, &mut serialized).unwrap(); @@ -168,7 +197,12 @@ mod tests { #[test] fn test_json_deserialize_exceeding_limit_error() { - let data = vec![0u8; DATA_MAX_LENGTH.as_u64() as usize + 1]; + let data = vec![ + 0u8; + usize::try_from(DATA_MAX_LENGTH.as_u64()) + .expect("DATA_MAX_LENGTH fits in usize") + + 1 + ]; let json = serde_json::to_string(&data).unwrap(); let result: Result = serde_json::from_str(&json); diff --git a/nssa/core/src/circuit_io.rs b/nssa/core/src/circuit_io.rs index dedcf780..fd65491a 100644 --- a/nssa/core/src/circuit_io.rs +++ b/nssa/core/src/circuit_io.rs @@ -42,6 +42,8 @@ pub struct PrivacyPreservingCircuitOutput { #[cfg(feature = "host")] impl PrivacyPreservingCircuitOutput { + /// Serializes the circuit output to a byte vector. + #[must_use] pub fn to_bytes(&self) -> Vec { bytemuck::cast_slice(&risc0_zkvm::serde::to_vec(&self).unwrap()).to_vec() } @@ -65,9 +67,9 @@ mod tests { AccountWithMetadata::new( Account { program_owner: [1, 2, 3, 4, 5, 6, 7, 8], - balance: 12345678901234567890, + balance: 12_345_678_901_234_567_890, data: b"test data".to_vec().try_into().unwrap(), - nonce: 18446744073709551614, + nonce: 18_446_744_073_709_551_614, }, true, AccountId::new([0; 32]), @@ -75,9 +77,9 @@ mod tests { AccountWithMetadata::new( Account { program_owner: [9, 9, 9, 8, 8, 8, 7, 7], - balance: 123123123456456567112, + balance: 123_123_123_456_456_567_112, data: b"test data".to_vec().try_into().unwrap(), - nonce: 9999999999999999999999, + nonce: 9_999_999_999_999_999_999_999, }, false, AccountId::new([1; 32]), @@ -87,7 +89,7 @@ mod tests { program_owner: [1, 2, 3, 4, 5, 6, 7, 8], balance: 100, data: b"post state data".to_vec().try_into().unwrap(), - nonce: 18446744073709551615, + nonce: 18_446_744_073_709_551_615, }], ciphertexts: vec![Ciphertext(vec![255, 255, 1, 1, 2, 2])], new_commitments: vec![Commitment::new( diff --git a/nssa/core/src/commitment.rs b/nssa/core/src/commitment.rs index 0040db03..58bd838c 100644 --- a/nssa/core/src/commitment.rs +++ b/nssa/core/src/commitment.rs @@ -14,7 +14,12 @@ pub struct Commitment(pub(super) [u8; 32]); #[cfg(any(feature = "host", test))] impl std::fmt::Debug for Commitment { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let hex: String = self.0.iter().map(|b| format!("{b:02x}")).collect(); + use std::fmt::Write as _; + + let hex: String = self.0.iter().fold(String::new(), |mut acc, b| { + write!(acc, "{b:02x}").expect("writing to string should not fail"); + acc + }); write!(f, "Commitment({hex})") } } @@ -45,7 +50,8 @@ pub const DUMMY_COMMITMENT_HASH: [u8; 32] = [ impl Commitment { /// Generates the commitment to a private account owned by user for npk: - /// SHA256(npk || program_owner || balance || nonce || SHA256(data)) + /// SHA256(npk || `program_owner` || balance || nonce || SHA256(data)) + #[must_use] pub fn new(npk: &NullifierPublicKey, account: &Account) -> Self { let mut bytes = Vec::new(); bytes.extend_from_slice(&npk.to_byte_array()); @@ -73,6 +79,7 @@ pub type CommitmentSetDigest = [u8; 32]; pub type MembershipProof = (usize, Vec<[u8; 32]>); /// Computes the resulting digest for the given membership proof and corresponding commitment +#[must_use] pub fn compute_digest_for_path( commitment: &Commitment, proof: &MembershipProof, diff --git a/nssa/core/src/encoding.rs b/nssa/core/src/encoding.rs index 34be3782..6050a234 100644 --- a/nssa/core/src/encoding.rs +++ b/nssa/core/src/encoding.rs @@ -17,6 +17,8 @@ use crate::{ }; impl Account { + /// Serializes the account to bytes. + #[must_use] pub fn to_bytes(&self) -> Vec { let mut bytes = Vec::new(); for word in &self.program_owner { @@ -24,12 +26,13 @@ impl Account { } bytes.extend_from_slice(&self.balance.to_le_bytes()); bytes.extend_from_slice(&self.nonce.to_le_bytes()); - let data_length: u32 = self.data.len() as u32; + let data_length: u32 = u32::try_from(self.data.len()).expect("data length fits in u32"); bytes.extend_from_slice(&data_length.to_le_bytes()); bytes.extend_from_slice(self.data.as_ref()); bytes } + /// Deserializes an account from a cursor. #[cfg(feature = "host")] pub fn from_cursor(cursor: &mut Cursor<&[u8]>) -> Result { use crate::account::data::Data; @@ -65,15 +68,18 @@ impl Account { } impl Commitment { + #[must_use] pub fn to_byte_array(&self) -> [u8; 32] { self.0 } #[cfg(feature = "host")] + #[must_use] pub fn from_byte_array(bytes: [u8; 32]) -> Self { Self(bytes) } + /// Deserializes a commitment from a cursor. #[cfg(feature = "host")] pub fn from_cursor(cursor: &mut Cursor<&[u8]>) -> Result { let mut bytes = [0u8; 32]; @@ -83,6 +89,7 @@ impl Commitment { } impl NullifierPublicKey { + #[must_use] pub fn to_byte_array(&self) -> [u8; 32] { self.0 } @@ -90,15 +97,18 @@ impl NullifierPublicKey { #[cfg(feature = "host")] impl Nullifier { + #[must_use] pub fn to_byte_array(&self) -> [u8; 32] { self.0 } #[cfg(feature = "host")] + #[must_use] pub fn from_byte_array(bytes: [u8; 32]) -> Self { Self(bytes) } + /// Deserializes a nullifier from a cursor. pub fn from_cursor(cursor: &mut Cursor<&[u8]>) -> Result { let mut bytes = [0u8; 32]; cursor.read_exact(&mut bytes)?; @@ -107,9 +117,12 @@ impl Nullifier { } impl Ciphertext { + /// Serializes the ciphertext to bytes. + #[must_use] pub fn to_bytes(&self) -> Vec { let mut bytes = Vec::new(); - let ciphertext_length: u32 = self.0.len() as u32; + let ciphertext_length: u32 = + u32::try_from(self.0.len()).expect("ciphertext length fits in u32"); bytes.extend_from_slice(&ciphertext_length.to_le_bytes()); bytes.extend_from_slice(&self.0); @@ -117,16 +130,19 @@ impl Ciphertext { } #[cfg(feature = "host")] + #[must_use] pub fn into_inner(self) -> Vec { self.0 } #[cfg(feature = "host")] + #[must_use] pub fn from_inner(inner: Vec) -> Self { Self(inner) } #[cfg(feature = "host")] + /// Deserializes ciphertext from a cursor. pub fn from_cursor(cursor: &mut Cursor<&[u8]>) -> Result { let mut u32_bytes = [0; 4]; @@ -141,10 +157,13 @@ impl Ciphertext { #[cfg(feature = "host")] impl Secp256k1Point { + /// Converts the point to bytes. + #[must_use] pub fn to_bytes(&self) -> [u8; 33] { self.0.clone().try_into().unwrap() } + /// Deserializes a secp256k1 point from a cursor. pub fn from_cursor(cursor: &mut Cursor<&[u8]>) -> Result { let mut value = vec![0; 33]; cursor.read_exact(&mut value)?; @@ -153,6 +172,7 @@ impl Secp256k1Point { } impl AccountId { + #[must_use] pub fn to_bytes(&self) -> [u8; 32] { *self.value() } @@ -166,7 +186,7 @@ mod tests { fn test_enconding() { let account = Account { program_owner: [1, 2, 3, 4, 5, 6, 7, 8], - balance: 123456789012345678901234567890123456, + balance: 123_456_789_012_345_678_901_234_567_890_123_456, nonce: 42, data: b"hola mundo".to_vec().try_into().unwrap(), }; @@ -227,7 +247,7 @@ mod tests { fn test_account_to_bytes_roundtrip() { let account = Account { program_owner: [1, 2, 3, 4, 5, 6, 7, 8], - balance: 123456789012345678901234567890123456, + balance: 123_456_789_012_345_678_901_234_567_890_123_456, nonce: 42, data: b"hola mundo".to_vec().try_into().unwrap(), }; diff --git a/nssa/core/src/encryption/mod.rs b/nssa/core/src/encryption/mod.rs index 8c2ff154..4b07428b 100644 --- a/nssa/core/src/encryption/mod.rs +++ b/nssa/core/src/encryption/mod.rs @@ -28,19 +28,25 @@ pub struct Ciphertext(pub(crate) Vec); #[cfg(any(feature = "host", test))] impl std::fmt::Debug for Ciphertext { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let hex: String = self.0.iter().map(|b| format!("{b:02x}")).collect(); + use std::fmt::Write as _; + + let hex: String = self.0.iter().fold(String::new(), |mut acc, b| { + write!(acc, "{b:02x}").expect("writing to string should not fail"); + acc + }); write!(f, "Ciphertext({hex})") } } impl EncryptionScheme { + #[must_use] pub fn encrypt( account: &Account, shared_secret: &SharedSecretKey, commitment: &Commitment, output_index: u32, ) -> Ciphertext { - let mut buffer = account.to_bytes().to_vec(); + let mut buffer = account.to_bytes().clone(); Self::symmetric_transform(&mut buffer, shared_secret, commitment, output_index); Ciphertext(buffer) } @@ -72,6 +78,7 @@ impl EncryptionScheme { } #[cfg(feature = "host")] + #[must_use] pub fn decrypt( ciphertext: &Ciphertext, shared_secret: &SharedSecretKey, @@ -79,7 +86,7 @@ impl EncryptionScheme { output_index: u32, ) -> Option { use std::io::Cursor; - let mut buffer = ciphertext.0.to_owned(); + let mut buffer = ciphertext.0.clone(); Self::symmetric_transform(&mut buffer, shared_secret, commitment, output_index); let mut cursor = Cursor::new(buffer.as_slice()); @@ -87,12 +94,12 @@ impl EncryptionScheme { .inspect_err(|err| { println!( "Failed to decode {ciphertext:?} \n - with secret {:?} ,\n + with secret {:?} ,\n commitment {commitment:?} ,\n and output_index {output_index} ,\n with error {err:?}", shared_secret.0 - ) + ); }) .ok() } diff --git a/nssa/core/src/encryption/shared_key_derivation.rs b/nssa/core/src/encryption/shared_key_derivation.rs index 6a6636b2..9e37668f 100644 --- a/nssa/core/src/encryption/shared_key_derivation.rs +++ b/nssa/core/src/encryption/shared_key_derivation.rs @@ -1,3 +1,5 @@ +use std::fmt::Write as _; + use borsh::{BorshDeserialize, BorshSerialize}; use k256::{ AffinePoint, EncodedPoint, FieldBytes, ProjectivePoint, @@ -15,12 +17,16 @@ pub struct Secp256k1Point(pub Vec); impl std::fmt::Debug for Secp256k1Point { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let hex: String = self.0.iter().map(|b| format!("{b:02x}")).collect(); + let hex: String = self.0.iter().fold(String::new(), |mut acc, b| { + write!(acc, "{b:02x}").expect("writing to string should not fail"); + acc + }); write!(f, "Secp256k1Point({hex})") } } impl Secp256k1Point { + #[must_use] pub fn from_scalar(value: Scalar) -> Secp256k1Point { let x_bytes: FieldBytes = value.into(); let x = k256::Scalar::from_repr(x_bytes).unwrap(); @@ -43,6 +49,8 @@ impl From<&EphemeralSecretKey> for EphemeralPublicKey { } impl SharedSecretKey { + /// Creates a new shared secret key from a scalar and a point. + #[must_use] pub fn new(scalar: &Scalar, point: &Secp256k1Point) -> Self { let scalar = k256::Scalar::from_repr((*scalar).into()).unwrap(); let point: [u8; 33] = point.0.clone().try_into().unwrap(); diff --git a/nssa/core/src/nullifier.rs b/nssa/core/src/nullifier.rs index 95006600..5038138f 100644 --- a/nssa/core/src/nullifier.rs +++ b/nssa/core/src/nullifier.rs @@ -28,10 +28,10 @@ impl AsRef<[u8]> for NullifierPublicKey { impl From<&NullifierSecretKey> for NullifierPublicKey { fn from(value: &NullifierSecretKey) -> Self { - let mut bytes = Vec::new(); const PREFIX: &[u8; 8] = b"LEE/keys"; const SUFFIX_1: &[u8; 1] = &[7]; const SUFFIX_2: &[u8; 23] = &[0; 23]; + let mut bytes = Vec::new(); bytes.extend_from_slice(PREFIX); bytes.extend_from_slice(value); bytes.extend_from_slice(SUFFIX_1); @@ -52,12 +52,19 @@ pub struct Nullifier(pub(super) [u8; 32]); #[cfg(any(feature = "host", test))] impl std::fmt::Debug for Nullifier { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let hex: String = self.0.iter().map(|b| format!("{b:02x}")).collect(); + use std::fmt::Write as _; + + let hex: String = self.0.iter().fold(String::new(), |mut acc, b| { + write!(acc, "{b:02x}").expect("writing to string should not fail"); + acc + }); write!(f, "Nullifier({hex})") } } impl Nullifier { + /// Computes a nullifier for an account update. + #[must_use] pub fn for_account_update(commitment: &Commitment, nsk: &NullifierSecretKey) -> Self { const UPDATE_PREFIX: &[u8; 32] = b"/NSSA/v0.2/Nullifier/Update/\x00\x00\x00\x00"; let mut bytes = UPDATE_PREFIX.to_vec(); @@ -66,6 +73,8 @@ impl Nullifier { Self(Impl::hash_bytes(&bytes).as_bytes().try_into().unwrap()) } + /// Computes a nullifier for an account initialization. + #[must_use] pub fn for_account_initialization(npk: &NullifierPublicKey) -> Self { const INIT_PREFIX: &[u8; 32] = b"/NSSA/v0.2/Nullifier/Initialize/"; let mut bytes = INIT_PREFIX.to_vec(); diff --git a/nssa/core/src/program.rs b/nssa/core/src/program.rs index a6a04425..1b97b117 100644 --- a/nssa/core/src/program.rs +++ b/nssa/core/src/program.rs @@ -15,7 +15,7 @@ pub struct ProgramInput { pub instruction: T, } -/// A 32-byte seed used to compute a *Program-Derived AccountId* (PDA). +/// A 32-byte seed used to compute a *Program-Derived `AccountId`* (PDA). /// /// Each program can derive up to `2^256` unique account IDs by choosing different /// seeds. PDAs allow programs to control namespaced account identifiers without @@ -24,11 +24,13 @@ pub struct ProgramInput { pub struct PdaSeed([u8; 32]); impl PdaSeed { + #[must_use] pub const fn new(value: [u8; 32]) -> Self { Self(value) } } +#[must_use] pub fn compute_authorized_pdas( caller_program_id: Option, pda_seeds: &[PdaSeed], @@ -90,6 +92,7 @@ impl ChainedCall { } } + #[must_use] pub fn with_pda_seeds(mut self, pda_seeds: Vec) -> Self { self.pda_seeds = pda_seeds; self @@ -110,6 +113,7 @@ pub struct AccountPostState { impl AccountPostState { /// Creates a post state without a claim request. /// The executing program is not requesting ownership of the account. + #[must_use] pub fn new(account: Account) -> Self { Self { account, @@ -120,6 +124,7 @@ impl AccountPostState { /// Creates a post state that requests ownership of the account. /// This indicates that the executing program intends to claim the /// account as its own and is allowed to mutate it. + #[must_use] pub fn new_claimed(account: Account) -> Self { Self { account, @@ -129,6 +134,7 @@ impl AccountPostState { /// Creates a post state that requests ownership of the account /// if the account's program owner is the default program ID. + #[must_use] pub fn new_claimed_if_default(account: Account) -> Self { let claim = account.program_owner == DEFAULT_PROGRAM_ID; Self { account, claim } @@ -136,11 +142,13 @@ impl AccountPostState { /// Returns `true` if this post state requests that the account /// be claimed (owned) by the executing program. + #[must_use] pub fn requires_claim(&self) -> bool { self.claim } /// Returns the underlying account + #[must_use] pub fn account(&self) -> &Account { &self.account } @@ -151,6 +159,7 @@ impl AccountPostState { } /// Consumes the post state and returns the underlying account + #[must_use] pub fn into_account(self) -> Account { self.account } @@ -167,6 +176,8 @@ pub struct ProgramOutput { pub chained_calls: Vec, } +/// Reads the NSSA inputs from the guest environment. +#[must_use] pub fn read_nssa_inputs() -> (ProgramInput, InstructionData) { let pre_states: Vec = env::read(); let instruction_words: InstructionData = env::read(); @@ -215,6 +226,7 @@ pub fn write_nssa_outputs_with_chained_call( /// - `pre_states`: The list of input accounts, each annotated with authorization metadata. /// - `post_states`: The list of resulting accounts after executing the program logic. /// - `executing_program_id`: The identifier of the program that was executed. +#[must_use] pub fn validate_execution( pre_states: &[AccountWithMetadata], post_states: &[AccountPostState], diff --git a/nssa/src/encoding/privacy_preserving_transaction.rs b/nssa/src/encoding/privacy_preserving_transaction.rs index fcb6c943..6fe5c443 100644 --- a/nssa/src/encoding/privacy_preserving_transaction.rs +++ b/nssa/src/encoding/privacy_preserving_transaction.rs @@ -4,6 +4,7 @@ use crate::{ }; impl Message { + #[must_use] pub fn to_bytes(&self) -> Vec { borsh::to_vec(&self).expect("Autoderived borsh serialization failure") } @@ -14,6 +15,7 @@ impl Message { } impl PrivacyPreservingTransaction { + #[must_use] pub fn to_bytes(&self) -> Vec { borsh::to_vec(&self).expect("Autoderived borsh serialization failure") } diff --git a/nssa/src/encoding/program_deployment_transaction.rs b/nssa/src/encoding/program_deployment_transaction.rs index ee66863d..9b1b9406 100644 --- a/nssa/src/encoding/program_deployment_transaction.rs +++ b/nssa/src/encoding/program_deployment_transaction.rs @@ -1,6 +1,7 @@ use crate::{ProgramDeploymentTransaction, error::NssaError}; impl ProgramDeploymentTransaction { + #[must_use] pub fn to_bytes(&self) -> Vec { borsh::to_vec(&self).expect("Autoderived borsh serialization failure") } diff --git a/nssa/src/encoding/public_transaction.rs b/nssa/src/encoding/public_transaction.rs index ea0988c7..2549cf27 100644 --- a/nssa/src/encoding/public_transaction.rs +++ b/nssa/src/encoding/public_transaction.rs @@ -7,6 +7,7 @@ impl Message { } impl PublicTransaction { + #[must_use] pub fn to_bytes(&self) -> Vec { borsh::to_vec(&self).expect("Autoderived borsh serialization failure") } diff --git a/nssa/src/merkle_tree/mod.rs b/nssa/src/merkle_tree/mod.rs index 9c981b62..b15891b7 100644 --- a/nssa/src/merkle_tree/mod.rs +++ b/nssa/src/merkle_tree/mod.rs @@ -64,12 +64,12 @@ impl MerkleTree { let capacity = capacity.next_power_of_two(); let total_depth = capacity.trailing_zeros() as usize; - let nodes = default_values::DEFAULT_VALUES[..(total_depth + 1)] + let nodes = default_values::DEFAULT_VALUES[..=total_depth] .iter() .rev() .enumerate() .flat_map(|(level, default_value)| std::iter::repeat_n(default_value, 1 << level)) - .cloned() + .copied() .collect(); Self { @@ -164,7 +164,7 @@ mod tests { impl MerkleTree { pub fn new(values: &[Value]) -> Self { let mut this = Self::with_capacity(values.len()); - for value in values.iter().cloned() { + for value in values.iter().copied() { this.insert(value); } this @@ -201,7 +201,7 @@ mod tests { hex!("48c73f7821a58a8d2a703e5b39c571c0aa20cf14abcd0af8f2b955bc202998de"); assert_eq!(tree.root(), expected_root); assert_eq!(tree.capacity, 4); - assert_eq!(tree.length, 4) + assert_eq!(tree.length, 4); } #[test] @@ -283,15 +283,15 @@ mod tests { assert_eq!(tree.length, 0); assert_eq!(tree.nodes.len(), 15); for i in 7..15 { - assert_eq!(*tree.get_node(i), default_values::DEFAULT_VALUES[0]) + assert_eq!(*tree.get_node(i), default_values::DEFAULT_VALUES[0]); } for i in 3..7 { - assert_eq!(*tree.get_node(i), default_values::DEFAULT_VALUES[1]) + assert_eq!(*tree.get_node(i), default_values::DEFAULT_VALUES[1]); } for i in 1..3 { - assert_eq!(*tree.get_node(i), default_values::DEFAULT_VALUES[2]) + assert_eq!(*tree.get_node(i), default_values::DEFAULT_VALUES[2]); } - assert_eq!(*tree.get_node(0), default_values::DEFAULT_VALUES[3]) + assert_eq!(*tree.get_node(0), default_values::DEFAULT_VALUES[3]); } #[test] diff --git a/nssa/src/privacy_preserving_transaction/circuit.rs b/nssa/src/privacy_preserving_transaction/circuit.rs index 98e0be24..25542aee 100644 --- a/nssa/src/privacy_preserving_transaction/circuit.rs +++ b/nssa/src/privacy_preserving_transaction/circuit.rs @@ -21,10 +21,12 @@ use crate::{ pub struct Proof(pub(crate) Vec); impl Proof { + #[must_use] pub fn into_inner(self) -> Vec { self.0 } + #[must_use] pub fn from_inner(inner: Vec) -> Self { Self(inner) } @@ -38,6 +40,7 @@ pub struct ProgramWithDependencies { } impl ProgramWithDependencies { + #[must_use] pub fn new(program: Program, dependencies: HashMap) -> Self { Self { program, @@ -74,7 +77,7 @@ pub fn execute_and_prove( let initial_call = ChainedCall { program_id: program.id(), - instruction_data: instruction_data.clone(), + instruction_data, pre_states, pda_seeds: vec![], }; @@ -217,7 +220,7 @@ mod tests { let expected_recipient_post = Account { program_owner: program.id(), balance: balance_to_move, - nonce: 0xdeadbeef, + nonce: 0xdead_beef, data: Data::default(), }; @@ -230,7 +233,7 @@ mod tests { vec![sender, recipient], Program::serialize_instruction(balance_to_move).unwrap(), vec![0, 2], - vec![0xdeadbeef], + vec![0xdead_beef], vec![(recipient_keys.npk(), shared_secret)], vec![], vec![None], @@ -267,7 +270,7 @@ mod tests { let sender_pre = AccountWithMetadata::new( Account { balance: 100, - nonce: 0xdeadbeef, + nonce: 0xdead_beef, program_owner: program.id(), data: Data::default(), }, @@ -302,13 +305,13 @@ mod tests { let expected_private_account_1 = Account { program_owner: program.id(), balance: 100 - balance_to_move, - nonce: 0xdeadbeef1, + nonce: 0xdead_beef1, ..Default::default() }; let expected_private_account_2 = Account { program_owner: program.id(), balance: balance_to_move, - nonce: 0xdeadbeef2, + nonce: 0xdead_beef2, ..Default::default() }; let expected_new_commitments = vec![ @@ -326,7 +329,7 @@ mod tests { vec![sender_pre.clone(), recipient], Program::serialize_instruction(balance_to_move).unwrap(), vec![1, 2], - vec![0xdeadbeef1, 0xdeadbeef2], + vec![0xdead_beef1, 0xdead_beef2], vec![ (sender_keys.npk(), shared_secret_1), (recipient_keys.npk(), shared_secret_2), diff --git a/nssa/src/privacy_preserving_transaction/message.rs b/nssa/src/privacy_preserving_transaction/message.rs index 844e746a..a0b9379c 100644 --- a/nssa/src/privacy_preserving_transaction/message.rs +++ b/nssa/src/privacy_preserving_transaction/message.rs @@ -20,8 +20,8 @@ pub struct EncryptedAccountData { impl EncryptedAccountData { fn new( ciphertext: Ciphertext, - npk: NullifierPublicKey, - vpk: ViewingPublicKey, + npk: &NullifierPublicKey, + vpk: &ViewingPublicKey, epk: EphemeralPublicKey, ) -> Self { let view_tag = Self::compute_view_tag(npk, vpk); @@ -33,7 +33,8 @@ impl EncryptedAccountData { } /// Computes the tag as the first byte of SHA256("/NSSA/v0.2/ViewTag/" || Npk || vpk) - pub fn compute_view_tag(npk: NullifierPublicKey, vpk: ViewingPublicKey) -> ViewTag { + #[must_use] + pub fn compute_view_tag(npk: &NullifierPublicKey, vpk: &ViewingPublicKey) -> ViewTag { let mut hasher = Sha256::new(); hasher.update(b"/NSSA/v0.2/ViewTag/"); hasher.update(npk.to_byte_array()); @@ -98,7 +99,7 @@ impl Message { .into_iter() .zip(public_keys) .map(|(ciphertext, (npk, vpk, epk))| { - EncryptedAccountData::new(ciphertext, npk, vpk, epk) + EncryptedAccountData::new(ciphertext, &npk, &vpk, epk) }) .collect(); Ok(Self { @@ -126,6 +127,7 @@ pub mod tests { privacy_preserving_transaction::message::{EncryptedAccountData, Message}, }; + #[must_use] pub fn message_for_tests() -> Message { let account1 = Account::default(); let account2 = Account::default(); @@ -173,7 +175,7 @@ pub mod tests { let epk = EphemeralPublicKey::from_scalar(esk); let ciphertext = EncryptionScheme::encrypt(&account, &shared_secret, &commitment, 2); let encrypted_account_data = - EncryptedAccountData::new(ciphertext.clone(), npk.clone(), vpk.clone(), epk.clone()); + EncryptedAccountData::new(ciphertext.clone(), &npk, &vpk, epk.clone()); let expected_view_tag = { let mut hasher = Sha256::new(); @@ -188,7 +190,7 @@ pub mod tests { assert_eq!(encrypted_account_data.epk, epk); assert_eq!( encrypted_account_data.view_tag, - EncryptedAccountData::compute_view_tag(npk, vpk) + EncryptedAccountData::compute_view_tag(&npk, &vpk) ); assert_eq!(encrypted_account_data.view_tag, expected_view_tag); } diff --git a/nssa/src/privacy_preserving_transaction/transaction.rs b/nssa/src/privacy_preserving_transaction/transaction.rs index 9e0ca30a..1b89ea19 100644 --- a/nssa/src/privacy_preserving_transaction/transaction.rs +++ b/nssa/src/privacy_preserving_transaction/transaction.rs @@ -21,6 +21,7 @@ pub struct PrivacyPreservingTransaction { } impl PrivacyPreservingTransaction { + #[must_use] pub fn new(message: Message, witness_set: WitnessSet) -> Self { Self { message, @@ -119,19 +120,22 @@ impl PrivacyPreservingTransaction { Ok(message .public_account_ids .iter() - .cloned() + .copied() .zip(message.public_post_states.clone()) .collect()) } + #[must_use] pub fn message(&self) -> &Message { &self.message } + #[must_use] pub fn witness_set(&self) -> &WitnessSet { &self.witness_set } + #[must_use] pub fn hash(&self) -> [u8; 32] { let bytes = self.to_bytes(); let mut hasher = sha2::Sha256::new(); @@ -147,6 +151,7 @@ impl PrivacyPreservingTransaction { .collect() } + #[must_use] pub fn affected_public_account_ids(&self) -> Vec { let mut acc_set = self .signer_account_ids() diff --git a/nssa/src/privacy_preserving_transaction/witness_set.rs b/nssa/src/privacy_preserving_transaction/witness_set.rs index 365b61b9..df80c420 100644 --- a/nssa/src/privacy_preserving_transaction/witness_set.rs +++ b/nssa/src/privacy_preserving_transaction/witness_set.rs @@ -12,6 +12,7 @@ pub struct WitnessSet { } impl WitnessSet { + #[must_use] pub fn for_message(message: &Message, proof: Proof, private_keys: &[&PrivateKey]) -> Self { let message_bytes = message.to_bytes(); let signatures_and_public_keys = private_keys @@ -24,11 +25,12 @@ impl WitnessSet { }) .collect(); Self { - proof, signatures_and_public_keys, + proof, } } + #[must_use] pub fn signatures_are_valid_for(&self, message: &Message) -> bool { let message_bytes = message.to_bytes(); for (signature, public_key) in self.signatures_and_public_keys() { @@ -39,18 +41,22 @@ impl WitnessSet { true } + #[must_use] pub fn signatures_and_public_keys(&self) -> &[(Signature, PublicKey)] { &self.signatures_and_public_keys } + #[must_use] pub fn proof(&self) -> &Proof { &self.proof } + #[must_use] pub fn into_raw_parts(self) -> (Vec<(Signature, PublicKey)>, Proof) { (self.signatures_and_public_keys, self.proof) } + #[must_use] pub fn from_raw_parts( signatures_and_public_keys: Vec<(Signature, PublicKey)>, proof: Proof, diff --git a/nssa/src/program.rs b/nssa/src/program.rs index 06c7ad29..29033a50 100644 --- a/nssa/src/program.rs +++ b/nssa/src/program.rs @@ -32,10 +32,12 @@ impl Program { Ok(Self { elf: bytecode, id }) } + #[must_use] pub fn id(&self) -> ProgramId { self.id } + #[must_use] pub fn elf(&self) -> &[u8] { &self.elf } @@ -85,18 +87,21 @@ impl Program { Ok(()) } + #[must_use] pub fn authenticated_transfer_program() -> Self { // This unwrap won't panic since the `AUTHENTICATED_TRANSFER_ELF` comes from risc0 build of // `program_methods` Self::new(AUTHENTICATED_TRANSFER_ELF.to_vec()).unwrap() } + #[must_use] pub fn token() -> Self { // This unwrap won't panic since the `TOKEN_ELF` comes from risc0 build of // `program_methods` Self::new(TOKEN_ELF.to_vec()).unwrap() } + #[must_use] pub fn amm() -> Self { Self::new(AMM_ELF.to_vec()).expect("The AMM program must be a valid Risc0 program") } @@ -104,12 +109,14 @@ impl Program { // TODO: Testnet only. Refactor to prevent compilation on mainnet. impl Program { + #[must_use] pub fn pinata() -> Self { // This unwrap won't panic since the `PINATA_ELF` comes from risc0 build of // `program_methods` Self::new(PINATA_ELF.to_vec()).unwrap() } + #[must_use] pub fn pinata_token() -> Self { use crate::program_methods::PINATA_TOKEN_ELF; Self::new(PINATA_TOKEN_ELF.to_vec()).expect("Piñata program must be a valid R0BF file") @@ -130,6 +137,7 @@ mod tests { impl Program { /// A program that changes the nonce of an account + #[must_use] pub fn nonce_changer_program() -> Self { use test_program_methods::{NONCE_CHANGER_ELF, NONCE_CHANGER_ID}; @@ -140,6 +148,7 @@ mod tests { } /// A program that produces more output accounts than the inputs it received + #[must_use] pub fn extra_output_program() -> Self { use test_program_methods::{EXTRA_OUTPUT_ELF, EXTRA_OUTPUT_ID}; @@ -150,6 +159,7 @@ mod tests { } /// A program that produces less output accounts than the inputs it received + #[must_use] pub fn missing_output_program() -> Self { use test_program_methods::{MISSING_OUTPUT_ELF, MISSING_OUTPUT_ID}; @@ -160,6 +170,7 @@ mod tests { } /// A program that changes the program owner of an account to [0, 1, 2, 3, 4, 5, 6, 7] + #[must_use] pub fn program_owner_changer() -> Self { use test_program_methods::{PROGRAM_OWNER_CHANGER_ELF, PROGRAM_OWNER_CHANGER_ID}; @@ -170,6 +181,7 @@ mod tests { } /// A program that transfers balance without caring about authorizations + #[must_use] pub fn simple_balance_transfer() -> Self { use test_program_methods::{SIMPLE_BALANCE_TRANSFER_ELF, SIMPLE_BALANCE_TRANSFER_ID}; @@ -180,6 +192,7 @@ mod tests { } /// A program that modifies the data of an account + #[must_use] pub fn data_changer() -> Self { use test_program_methods::{DATA_CHANGER_ELF, DATA_CHANGER_ID}; @@ -190,6 +203,7 @@ mod tests { } /// A program that mints balance + #[must_use] pub fn minter() -> Self { use test_program_methods::{MINTER_ELF, MINTER_ID}; @@ -200,6 +214,7 @@ mod tests { } /// A program that burns balance + #[must_use] pub fn burner() -> Self { use test_program_methods::{BURNER_ELF, BURNER_ID}; @@ -209,6 +224,7 @@ mod tests { } } + #[must_use] pub fn chain_caller() -> Self { use test_program_methods::{CHAIN_CALLER_ELF, CHAIN_CALLER_ID}; @@ -218,6 +234,7 @@ mod tests { } } + #[must_use] pub fn claimer() -> Self { use test_program_methods::{CLAIMER_ELF, CLAIMER_ID}; @@ -227,6 +244,7 @@ mod tests { } } + #[must_use] pub fn changer_claimer() -> Self { use test_program_methods::{CHANGER_CLAIMER_ELF, CHANGER_CLAIMER_ID}; @@ -236,6 +254,7 @@ mod tests { } } + #[must_use] pub fn noop() -> Self { use test_program_methods::{NOOP_ELF, NOOP_ID}; @@ -245,6 +264,7 @@ mod tests { } } + #[must_use] pub fn malicious_authorization_changer() -> Self { use test_program_methods::{ MALICIOUS_AUTHORIZATION_CHANGER_ELF, MALICIOUS_AUTHORIZATION_CHANGER_ID, @@ -256,6 +276,7 @@ mod tests { } } + #[must_use] pub fn modified_transfer_program() -> Self { use test_program_methods::MODIFIED_TRANSFER_ELF; // This unwrap won't panic since the `MODIFIED_TRANSFER_ELF` comes from risc0 build of @@ -267,11 +288,11 @@ mod tests { #[test] fn test_program_execution() { let program = Program::simple_balance_transfer(); - let balance_to_move: u128 = 11223344556677; + let balance_to_move: u128 = 11_223_344_556_677; let instruction_data = Program::serialize_instruction(balance_to_move).unwrap(); let sender = AccountWithMetadata::new( Account { - balance: 77665544332211, + balance: 77_665_544_332_211, ..Account::default() }, true, @@ -281,7 +302,7 @@ mod tests { AccountWithMetadata::new(Account::default(), false, AccountId::new([1; 32])); let expected_sender_post = Account { - balance: 77665544332211 - balance_to_move, + balance: 77_665_544_332_211 - balance_to_move, ..Account::default() }; let expected_recipient_post = Account { diff --git a/nssa/src/program_deployment_transaction/message.rs b/nssa/src/program_deployment_transaction/message.rs index 41c4e10a..1f8b7500 100644 --- a/nssa/src/program_deployment_transaction/message.rs +++ b/nssa/src/program_deployment_transaction/message.rs @@ -6,10 +6,12 @@ pub struct Message { } impl Message { + #[must_use] pub fn new(bytecode: Vec) -> Self { Self { bytecode } } + #[must_use] pub fn into_bytecode(self) -> Vec { self.bytecode } diff --git a/nssa/src/program_deployment_transaction/transaction.rs b/nssa/src/program_deployment_transaction/transaction.rs index 8e77bfe0..1cdb238a 100644 --- a/nssa/src/program_deployment_transaction/transaction.rs +++ b/nssa/src/program_deployment_transaction/transaction.rs @@ -12,10 +12,12 @@ pub struct ProgramDeploymentTransaction { } impl ProgramDeploymentTransaction { + #[must_use] pub fn new(message: Message) -> Self { Self { message } } + #[must_use] pub fn into_message(self) -> Message { self.message } @@ -33,6 +35,7 @@ impl ProgramDeploymentTransaction { } } + #[must_use] pub fn hash(&self) -> [u8; 32] { let bytes = self.to_bytes(); let mut hasher = sha2::Sha256::new(); @@ -40,6 +43,7 @@ impl ProgramDeploymentTransaction { hasher.finalize_fixed().into() } + #[must_use] pub fn affected_public_account_ids(&self) -> Vec { vec![] } diff --git a/nssa/src/public_transaction/message.rs b/nssa/src/public_transaction/message.rs index 776151cf..15eba285 100644 --- a/nssa/src/public_transaction/message.rs +++ b/nssa/src/public_transaction/message.rs @@ -49,6 +49,7 @@ impl Message { }) } + #[must_use] pub fn new_preserialized( program_id: ProgramId, account_ids: Vec, diff --git a/nssa/src/public_transaction/transaction.rs b/nssa/src/public_transaction/transaction.rs index 06c61987..fdd55510 100644 --- a/nssa/src/public_transaction/transaction.rs +++ b/nssa/src/public_transaction/transaction.rs @@ -22,6 +22,7 @@ pub struct PublicTransaction { } impl PublicTransaction { + #[must_use] pub fn new(message: Message, witness_set: WitnessSet) -> Self { Self { message, @@ -29,10 +30,12 @@ impl PublicTransaction { } } + #[must_use] pub fn message(&self) -> &Message { &self.message } + #[must_use] pub fn witness_set(&self) -> &WitnessSet { &self.witness_set } @@ -45,6 +48,7 @@ impl PublicTransaction { .collect() } + #[must_use] pub fn affected_public_account_ids(&self) -> Vec { let mut acc_set = self .signer_account_ids() @@ -55,6 +59,7 @@ impl PublicTransaction { acc_set.into_iter().collect() } + #[must_use] pub fn hash(&self) -> [u8; 32] { let bytes = self.to_bytes(); let mut hasher = sha2::Sha256::new(); @@ -353,7 +358,7 @@ pub mod tests { let witness_set = WitnessSet::for_message(&message, &[&key1, &key1]); let tx = PublicTransaction::new(message, witness_set); let result = tx.validate_and_produce_public_state_diff(&state); - assert!(matches!(result, Err(NssaError::InvalidInput(_)))) + assert!(matches!(result, Err(NssaError::InvalidInput(_)))); } #[test] @@ -373,7 +378,7 @@ pub mod tests { let witness_set = WitnessSet::for_message(&message, &[&key1, &key2]); let tx = PublicTransaction::new(message, witness_set); let result = tx.validate_and_produce_public_state_diff(&state); - assert!(matches!(result, Err(NssaError::InvalidInput(_)))) + assert!(matches!(result, Err(NssaError::InvalidInput(_)))); } #[test] @@ -394,7 +399,7 @@ pub mod tests { witness_set.signatures_and_public_keys[0].0 = Signature::new_for_tests([1; 64]); let tx = PublicTransaction::new(message, witness_set); let result = tx.validate_and_produce_public_state_diff(&state); - assert!(matches!(result, Err(NssaError::InvalidInput(_)))) + assert!(matches!(result, Err(NssaError::InvalidInput(_)))); } #[test] @@ -414,7 +419,7 @@ pub mod tests { let witness_set = WitnessSet::for_message(&message, &[&key1, &key2]); let tx = PublicTransaction::new(message, witness_set); let result = tx.validate_and_produce_public_state_diff(&state); - assert!(matches!(result, Err(NssaError::InvalidInput(_)))) + assert!(matches!(result, Err(NssaError::InvalidInput(_)))); } #[test] @@ -423,13 +428,13 @@ pub mod tests { let state = state_for_tests(); let nonces = vec![0, 0]; let instruction = 1337; - let unknown_program_id = [0xdeadbeef; 8]; + let unknown_program_id = [0xdead_beef; 8]; let message = Message::try_new(unknown_program_id, vec![addr1, addr2], nonces, instruction).unwrap(); let witness_set = WitnessSet::for_message(&message, &[&key1, &key2]); let tx = PublicTransaction::new(message, witness_set); let result = tx.validate_and_produce_public_state_diff(&state); - assert!(matches!(result, Err(NssaError::InvalidInput(_)))) + assert!(matches!(result, Err(NssaError::InvalidInput(_)))); } } diff --git a/nssa/src/public_transaction/witness_set.rs b/nssa/src/public_transaction/witness_set.rs index 9b9cd290..db139d86 100644 --- a/nssa/src/public_transaction/witness_set.rs +++ b/nssa/src/public_transaction/witness_set.rs @@ -8,6 +8,7 @@ pub struct WitnessSet { } impl WitnessSet { + #[must_use] pub fn for_message(message: &Message, private_keys: &[&PrivateKey]) -> Self { let message_bytes = message.to_bytes(); let signatures_and_public_keys = private_keys @@ -24,6 +25,7 @@ impl WitnessSet { } } + #[must_use] pub fn is_valid_for(&self, message: &Message) -> bool { let message_bytes = message.to_bytes(); for (signature, public_key) in self.signatures_and_public_keys() { @@ -34,14 +36,17 @@ impl WitnessSet { true } + #[must_use] pub fn signatures_and_public_keys(&self) -> &[(Signature, PublicKey)] { &self.signatures_and_public_keys } + #[must_use] pub fn into_raw_parts(self) -> Vec<(Signature, PublicKey)> { self.signatures_and_public_keys } + #[must_use] pub fn from_raw_parts(signatures_and_public_keys: Vec<(Signature, PublicKey)>) -> Self { Self { signatures_and_public_keys, diff --git a/nssa/src/signature/bip340_test_vectors.rs b/nssa/src/signature/bip340_test_vectors.rs index 0e91bcb4..ae473b9c 100644 --- a/nssa/src/signature/bip340_test_vectors.rs +++ b/nssa/src/signature/bip340_test_vectors.rs @@ -14,7 +14,7 @@ pub struct TestVector { } /// Test vectors from -/// https://github.com/bitcoin/bips/blob/master/bip-0340/test-vectors.csv +/// // pub fn test_vectors() -> Vec { vec![ diff --git a/nssa/src/signature/mod.rs b/nssa/src/signature/mod.rs index 24094c5d..7e2928ea 100644 --- a/nssa/src/signature/mod.rs +++ b/nssa/src/signature/mod.rs @@ -18,6 +18,7 @@ impl std::fmt::Debug for Signature { } impl Signature { + #[must_use] pub fn new(key: &PrivateKey, message: &[u8]) -> Self { let mut aux_random = [0u8; 32]; OsRng.fill_bytes(&mut aux_random); @@ -39,6 +40,7 @@ impl Signature { Self { value } } + #[must_use] pub fn is_valid_for(&self, bytes: &[u8], public_key: &PublicKey) -> bool { let pk = secp256k1::XOnlyPublicKey::from_byte_array(*public_key.value()).unwrap(); let secp = secp256k1::Secp256k1::new(); diff --git a/nssa/src/signature/private_key.rs b/nssa/src/signature/private_key.rs index 667fc306..03121a90 100644 --- a/nssa/src/signature/private_key.rs +++ b/nssa/src/signature/private_key.rs @@ -9,14 +9,14 @@ use crate::error::NssaError; pub struct PrivateKey([u8; 32]); impl PrivateKey { + #[must_use] pub fn new_os_random() -> Self { let mut rng = OsRng; loop { - match Self::try_new(rng.r#gen()) { - Ok(key) => break key, - Err(_) => continue, - }; + if let Ok(key) = Self::try_new(rng.r#gen()) { + break key; + } } } @@ -32,6 +32,7 @@ impl PrivateKey { } } + #[must_use] pub fn value(&self) -> &[u8; 32] { &self.0 } diff --git a/nssa/src/signature/public_key.rs b/nssa/src/signature/public_key.rs index 83fbf0cb..d916db23 100644 --- a/nssa/src/signature/public_key.rs +++ b/nssa/src/signature/public_key.rs @@ -29,6 +29,7 @@ impl BorshDeserialize for PublicKey { } impl PublicKey { + #[must_use] pub fn new_from_private_key(key: &PrivateKey) -> Self { let value = { let secret_key = secp256k1::SecretKey::from_byte_array(*key.value()).unwrap(); @@ -47,6 +48,7 @@ impl PublicKey { Ok(Self(value)) } + #[must_use] pub fn value(&self) -> &[u8; 32] { &self.0 } diff --git a/nssa/src/state.rs b/nssa/src/state.rs index c8599d97..2c99556f 100644 --- a/nssa/src/state.rs +++ b/nssa/src/state.rs @@ -52,8 +52,8 @@ impl CommitmentSet { } /// Initializes an empty `CommitmentSet` with a given capacity. - /// If the capacity is not a power_of_two, then capacity is taken - /// to be the next power_of_two. + /// If the capacity is not a `power_of_two`, then capacity is taken + /// to be the next `power_of_two`. pub(crate) fn with_capacity(capacity: usize) -> CommitmentSet { Self { merkle_tree: MerkleTree::with_capacity(capacity), @@ -114,6 +114,7 @@ pub struct V02State { } impl V02State { + #[must_use] pub fn new_with_genesis_accounts( initial_data: &[(AccountId, u128)], initial_commitments: &[nssa_core::Commitment], @@ -159,7 +160,7 @@ impl V02State { ) -> Result<(), NssaError> { let state_diff = tx.validate_and_produce_public_state_diff(self)?; - for (account_id, post) in state_diff.into_iter() { + for (account_id, post) in state_diff { let current_account = self.get_account_by_id_mut(account_id); *current_account = post; @@ -195,7 +196,7 @@ impl V02State { self.private_state.1.extend(new_nullifiers); // 4. Update public accounts - for (account_id, post) in public_state_diff.into_iter() { + for (account_id, post) in public_state_diff { let current_account = self.get_account_by_id_mut(account_id); *current_account = post; } @@ -222,6 +223,7 @@ impl V02State { self.public_state.entry(account_id).or_default() } + #[must_use] pub fn get_account_by_id(&self, account_id: AccountId) -> Account { self.public_state .get(&account_id) @@ -229,6 +231,7 @@ impl V02State { .unwrap_or(Account::default()) } + #[must_use] pub fn get_proof_for_commitment(&self, commitment: &Commitment) -> Option { self.private_state.0.get_proof_for(commitment) } @@ -237,6 +240,7 @@ impl V02State { &self.programs } + #[must_use] pub fn commitment_set_digest(&self) -> CommitmentSetDigest { self.private_state.0.digest() } @@ -245,7 +249,7 @@ impl V02State { &self, new_commitments: &[Commitment], ) -> Result<(), NssaError> { - for commitment in new_commitments.iter() { + for commitment in new_commitments { if self.private_state.0.contains(commitment) { return Err(NssaError::InvalidInput( "Commitment already seen".to_string(), @@ -259,7 +263,7 @@ impl V02State { &self, new_nullifiers: &[(Nullifier, CommitmentSetDigest)], ) -> Result<(), NssaError> { - for (nullifier, digest) in new_nullifiers.iter() { + for (nullifier, digest) in new_nullifiers { if self.private_state.1.contains(nullifier) { return Err(NssaError::InvalidInput( "Nullifier already seen".to_string(), @@ -284,7 +288,7 @@ impl V02State { account_id, Account { program_owner: Program::pinata().id(), - balance: 1500000, + balance: 1_500_000, // Difficulty: 3 data: vec![3; 33].try_into().expect("should fit"), nonce: 0, @@ -339,7 +343,7 @@ pub mod tests { fn transfer_transaction( from: AccountId, - from_key: PrivateKey, + from_key: &PrivateKey, nonce: u128, to: AccountId, balance: u128, @@ -349,7 +353,7 @@ pub mod tests { let program_id = Program::authenticated_transfer_program().id(); let message = public_transaction::Message::try_new(program_id, account_ids, nonces, balance).unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[&from_key]); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[from_key]); PublicTransaction::new(message, witness_set) } @@ -454,7 +458,7 @@ pub mod tests { assert_eq!(state.get_account_by_id(to), Account::default()); let balance_to_move = 5; - let tx = transfer_transaction(from, key, 0, to, balance_to_move); + let tx = transfer_transaction(from, &key, 0, to, balance_to_move); state.transition_from_public_transaction(&tx).unwrap(); assert_eq!(state.get_account_by_id(from).balance, 95); @@ -475,7 +479,7 @@ pub mod tests { let balance_to_move = 101; assert!(state.get_account_by_id(from).balance < balance_to_move); - let tx = transfer_transaction(from, from_key, 0, to, balance_to_move); + let tx = transfer_transaction(from, &from_key, 0, to, balance_to_move); let result = state.transition_from_public_transaction(&tx); assert!(matches!(result, Err(NssaError::ProgramExecutionFailed(_)))); @@ -499,7 +503,7 @@ pub mod tests { assert_ne!(state.get_account_by_id(to), Account::default()); let balance_to_move = 8; - let tx = transfer_transaction(from, from_key, 0, to, balance_to_move); + let tx = transfer_transaction(from, &from_key, 0, to, balance_to_move); state.transition_from_public_transaction(&tx).unwrap(); assert_eq!(state.get_account_by_id(from).balance, 192); @@ -519,10 +523,10 @@ pub mod tests { let account_id3 = AccountId::new([3; 32]); let balance_to_move = 5; - let tx = transfer_transaction(account_id1, key1, 0, account_id2, balance_to_move); + let tx = transfer_transaction(account_id1, &key1, 0, account_id2, balance_to_move); state.transition_from_public_transaction(&tx).unwrap(); let balance_to_move = 3; - let tx = transfer_transaction(account_id2, key2, 0, account_id3, balance_to_move); + let tx = transfer_transaction(account_id2, &key2, 0, account_id3, balance_to_move); state.transition_from_public_transaction(&tx).unwrap(); assert_eq!(state.get_account_by_id(account_id1).balance, 95); @@ -539,6 +543,7 @@ pub mod tests { } /// Include test programs in the builtin programs map + #[must_use] pub fn with_test_programs(mut self) -> Self { self.insert_program(Program::nonce_changer_program()); self.insert_program(Program::extra_output_program()); @@ -555,6 +560,7 @@ pub mod tests { self } + #[must_use] pub fn with_non_default_accounts_but_default_program_owners(mut self) -> Self { let account_with_default_values_except_balance = Account { balance: 100, @@ -583,6 +589,7 @@ pub mod tests { self } + #[must_use] pub fn with_account_owned_by_burner_program(mut self) -> Self { let account = Account { program_owner: Program::burner().id(), @@ -593,6 +600,7 @@ pub mod tests { self } + #[must_use] pub fn with_private_account(mut self, keys: &TestPrivateKeys, account: &Account) -> Self { let commitment = Commitment::new(&keys.npk(), account); self.private_state.0.extend(&[commitment]); @@ -916,7 +924,7 @@ pub mod tests { vec![sender, recipient], Program::serialize_instruction(balance_to_move).unwrap(), vec![0, 2], - vec![0xdeadbeef], + vec![0xdead_beef], vec![(recipient_keys.npk(), shared_secret)], vec![], vec![None], @@ -1084,7 +1092,7 @@ pub mod tests { let sender_private_account = Account { program_owner: Program::authenticated_transfer_program().id(), balance: 100, - nonce: 0xdeadbeef, + nonce: 0xdead_beef, data: Data::default(), }; let recipient_keys = test_private_account_keys_2(); @@ -1099,7 +1107,7 @@ pub mod tests { &sender_private_account, &recipient_keys, balance_to_move, - [0xcafecafe, 0xfecafeca], + [0xcafe_cafe, 0xfeca_feca], &state, ); @@ -1107,7 +1115,7 @@ pub mod tests { &sender_keys.npk(), &Account { program_owner: Program::authenticated_transfer_program().id(), - nonce: 0xcafecafe, + nonce: 0xcafe_cafe, balance: sender_private_account.balance - balance_to_move, data: Data::default(), }, @@ -1121,7 +1129,7 @@ pub mod tests { &recipient_keys.npk(), &Account { program_owner: Program::authenticated_transfer_program().id(), - nonce: 0xfecafeca, + nonce: 0xfeca_feca, balance: balance_to_move, ..Account::default() }, @@ -1150,7 +1158,7 @@ pub mod tests { let sender_private_account = Account { program_owner: Program::authenticated_transfer_program().id(), balance: 100, - nonce: 0xdeadbeef, + nonce: 0xdead_beef, data: Data::default(), }; let recipient_keys = test_public_account_keys_1(); @@ -1174,7 +1182,7 @@ pub mod tests { &sender_private_account, &recipient_keys.account_id(), balance_to_move, - 0xcafecafe, + 0xcafe_cafe, &state, ); @@ -1182,7 +1190,7 @@ pub mod tests { &sender_keys.npk(), &Account { program_owner: Program::authenticated_transfer_program().id(), - nonce: 0xcafecafe, + nonce: 0xcafe_cafe, balance: sender_private_account.balance - balance_to_move, data: Data::default(), }, @@ -1333,7 +1341,12 @@ pub mod tests { ); let large_data: Vec = - vec![0; nssa_core::account::data::DATA_MAX_LENGTH.as_u64() as usize + 1]; + vec![ + 0; + usize::try_from(nssa_core::account::data::DATA_MAX_LENGTH.as_u64()) + .expect("DATA_MAX_LENGTH fits in usize") + + 1 + ]; let result = execute_and_prove( vec![public_account], @@ -1343,7 +1356,7 @@ pub mod tests { vec![], vec![], vec![], - &program.to_owned().into(), + &program.clone().into(), ); assert!(matches!(result, Err(NssaError::ProgramProveFailed(_)))); @@ -1531,7 +1544,7 @@ pub mod tests { AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); // Setting only one nonce for an execution with two private accounts. - let private_account_nonces = [0xdeadbeef1]; + let private_account_nonces = [0xdead_beef1]; let result = execute_and_prove( vec![private_account_1, private_account_2], Program::serialize_instruction(10u128).unwrap(), @@ -1580,7 +1593,7 @@ pub mod tests { vec![private_account_1, private_account_2], Program::serialize_instruction(10u128).unwrap(), vec![1, 2], - vec![0xdeadbeef1, 0xdeadbeef2], + vec![0xdead_beef1, 0xdead_beef2], private_account_keys.to_vec(), vec![sender_keys.nsk], vec![Some((0, vec![]))], @@ -1613,7 +1626,7 @@ pub mod tests { vec![private_account_1, private_account_2], Program::serialize_instruction(10u128).unwrap(), vec![1, 2], - vec![0xdeadbeef1, 0xdeadbeef2], + vec![0xdead_beef1, 0xdead_beef2], vec![ ( sender_keys.npk(), @@ -1655,7 +1668,7 @@ pub mod tests { vec![private_account_1, private_account_2], Program::serialize_instruction(10u128).unwrap(), vec![1, 2], - vec![0xdeadbeef1, 0xdeadbeef2], + vec![0xdead_beef1, 0xdead_beef2], vec![ ( sender_keys.npk(), @@ -1713,7 +1726,7 @@ pub mod tests { vec![private_account_1, private_account_2], Program::serialize_instruction(10u128).unwrap(), vec![1, 2], - vec![0xdeadbeef1, 0xdeadbeef2], + vec![0xdead_beef1, 0xdead_beef2], private_account_keys.to_vec(), private_account_nsks.to_vec(), private_account_membership_proofs.to_vec(), @@ -1751,7 +1764,7 @@ pub mod tests { vec![private_account_1, private_account_2], Program::serialize_instruction(10u128).unwrap(), vec![1, 2], - vec![0xdeadbeef1, 0xdeadbeef2], + vec![0xdead_beef1, 0xdead_beef2], vec![ ( sender_keys.npk(), @@ -1799,7 +1812,7 @@ pub mod tests { vec![private_account_1, private_account_2], Program::serialize_instruction(10u128).unwrap(), vec![1, 2], - vec![0xdeadbeef1, 0xdeadbeef2], + vec![0xdead_beef1, 0xdead_beef2], vec![ ( sender_keys.npk(), @@ -1846,7 +1859,7 @@ pub mod tests { vec![private_account_1, private_account_2], Program::serialize_instruction(10u128).unwrap(), vec![1, 2], - vec![0xdeadbeef1, 0xdeadbeef2], + vec![0xdead_beef1, 0xdead_beef2], vec![ ( sender_keys.npk(), @@ -1882,7 +1895,7 @@ pub mod tests { let private_account_2 = AccountWithMetadata::new( Account { // Non default nonce - nonce: 0xdeadbeef, + nonce: 0xdead_beef, ..Account::default() }, false, @@ -1893,7 +1906,7 @@ pub mod tests { vec![private_account_1, private_account_2], Program::serialize_instruction(10u128).unwrap(), vec![1, 2], - vec![0xdeadbeef1, 0xdeadbeef2], + vec![0xdead_beef1, 0xdead_beef2], vec![ ( sender_keys.npk(), @@ -1938,7 +1951,7 @@ pub mod tests { vec![private_account_1, private_account_2], Program::serialize_instruction(10u128).unwrap(), vec![1, 2], - vec![0xdeadbeef1, 0xdeadbeef2], + vec![0xdead_beef1, 0xdead_beef2], vec![ ( sender_keys.npk(), @@ -2006,7 +2019,7 @@ pub mod tests { // Setting three new private account nonces for a circuit execution with only two private // accounts. - let private_account_nonces = [0xdeadbeef1, 0xdeadbeef2, 0xdeadbeef3]; + let private_account_nonces = [0xdead_beef1, 0xdead_beef2, 0xdead_beef3]; let result = execute_and_prove( vec![private_account_1, private_account_2], Program::serialize_instruction(10u128).unwrap(), @@ -2067,7 +2080,7 @@ pub mod tests { vec![private_account_1, private_account_2], Program::serialize_instruction(10u128).unwrap(), vec![1, 2], - vec![0xdeadbeef1, 0xdeadbeef2], + vec![0xdead_beef1, 0xdead_beef2], private_account_keys.to_vec(), vec![sender_keys.nsk], vec![Some((0, vec![]))], @@ -2103,7 +2116,7 @@ pub mod tests { vec![private_account_1, private_account_2], Program::serialize_instruction(10u128).unwrap(), visibility_mask.to_vec(), - vec![0xdeadbeef1, 0xdeadbeef2], + vec![0xdead_beef1, 0xdead_beef2], vec![ ( sender_keys.npk(), @@ -2128,7 +2141,7 @@ pub mod tests { let sender_private_account = Account { program_owner: Program::authenticated_transfer_program().id(), balance: 100, - nonce: 0xdeadbeef, + nonce: 0xdead_beef, data: Data::default(), }; let recipient_keys = test_private_account_keys_2(); @@ -2143,7 +2156,7 @@ pub mod tests { &sender_private_account, &recipient_keys, balance_to_move, - [0xcafecafe, 0xfecafeca], + [0xcafe_cafe, 0xfeca_feca], &state, ); @@ -2154,7 +2167,7 @@ pub mod tests { let sender_private_account = Account { program_owner: Program::authenticated_transfer_program().id(), balance: 100 - balance_to_move, - nonce: 0xcafecafe, + nonce: 0xcafe_cafe, data: Data::default(), }; @@ -2199,7 +2212,7 @@ pub mod tests { vec![private_account_1.clone(), private_account_1], Program::serialize_instruction(100u128).unwrap(), visibility_mask.to_vec(), - vec![0xdeadbeef1, 0xdeadbeef2], + vec![0xdead_beef1, 0xdead_beef2], vec![ (sender_keys.npk(), shared_secret), (sender_keys.npk(), shared_secret), @@ -2308,7 +2321,8 @@ pub mod tests { let instruction: (u128, ProgramId, u32, Option) = ( amount, Program::authenticated_transfer_program().id(), - MAX_NUMBER_CHAINED_CALLS as u32 + 1, + u32::try_from(MAX_NUMBER_CHAINED_CALLS).expect("MAX_NUMBER_CHAINED_CALLS fits in u32") + + 1, None, ); @@ -3829,18 +3843,18 @@ pub mod tests { dependencies.insert(auth_transfers.id(), auth_transfers); let program_with_deps = ProgramWithDependencies::new(chain_caller, dependencies); - let from_new_nonce = 0xdeadbeef1; - let to_new_nonce = 0xdeadbeef2; + let from_new_nonce = 0xdead_beef1; + let to_new_nonce = 0xdead_beef2; let from_expected_post = Account { - balance: initial_balance - number_of_calls as u128 * amount, + balance: initial_balance - u128::from(number_of_calls) * amount, nonce: from_new_nonce, ..from_account.account.clone() }; let from_expected_commitment = Commitment::new(&from_keys.npk(), &from_expected_post); let to_expected_post = Account { - balance: number_of_calls as u128 * amount, + balance: u128::from(number_of_calls) * amount, nonce: to_new_nonce, ..to_account.account.clone() }; @@ -3948,7 +3962,7 @@ pub mod tests { state.transition_from_public_transaction(&tx).unwrap(); // Submit a solution to the pinata program to claim the prize - let solution: u128 = 989106; + let solution: u128 = 989_106; let message = public_transaction::Message::try_new( pinata_token.id(), vec![ @@ -3994,7 +4008,7 @@ pub mod tests { let result = state.transition_from_public_transaction(&tx); - assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))) + assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); } /// This test ensures that even if a malicious program tries to perform overflow of balances @@ -4083,7 +4097,7 @@ pub mod tests { // Balance to initialize the account with (0 for a new account) let balance: u128 = 0; - let nonce = 0xdeadbeef1; + let nonce = 0xdead_beef1; // Execute and prove the circuit with the authorized account but no commitment proof let (output, proof) = execute_and_prove( @@ -4136,7 +4150,7 @@ pub mod tests { let epk = EphemeralPublicKey::from_scalar(esk); let balance: u128 = 0; - let nonce = 0xdeadbeef1; + let nonce = 0xdead_beef1; // Step 2: Execute claimer program to claim the account with authentication let (output, proof) = execute_and_prove( @@ -4184,7 +4198,7 @@ pub mod tests { let esk2 = [4; 32]; let shared_secret2 = SharedSecretKey::new(&esk2, &private_keys.vpk()); - let nonce2 = 0xdeadbeef2; + let nonce2 = 0xdead_beef2; // Step 3: Try to execute noop program with authentication but without initialization let res = execute_and_prove( @@ -4341,7 +4355,7 @@ pub mod tests { dependencies.insert(auth_transfers.id(), auth_transfers); let program_with_deps = ProgramWithDependencies::new(malicious_program, dependencies); - let recipient_new_nonce = 0xdeadbeef1; + let recipient_new_nonce = 0xdead_beef1; // Act - execute the malicious program - this should fail during proving let result = execute_and_prove( diff --git a/program_methods/guest/src/bin/authenticated_transfer.rs b/program_methods/guest/src/bin/authenticated_transfer.rs index 8a13173a..43f06c56 100644 --- a/program_methods/guest/src/bin/authenticated_transfer.rs +++ b/program_methods/guest/src/bin/authenticated_transfer.rs @@ -7,18 +7,17 @@ use nssa_core::{ /// Initializes a default account under the ownership of this program. fn initialize_account(pre_state: AccountWithMetadata) -> AccountPostState { - let account_to_claim = AccountPostState::new_claimed(pre_state.account.clone()); + let account_to_claim = AccountPostState::new_claimed(pre_state.account); let is_authorized = pre_state.is_authorized; // Continue only if the account to claim has default values - if account_to_claim.account() != &Account::default() { - panic!("Account must be uninitialized"); - } + assert!( + account_to_claim.account() == &Account::default(), + "Account must be uninitialized" + ); // Continue only if the owner authorized this operation - if !is_authorized { - panic!("Account must be authorized"); - } + assert!(is_authorized, "Account must be authorized"); account_to_claim } @@ -30,26 +29,25 @@ fn transfer( balance_to_move: u128, ) -> Vec { // Continue only if the sender has authorized this operation - if !sender.is_authorized { - panic!("Sender must be authorized"); - } + assert!(sender.is_authorized, "Sender must be authorized"); // Continue only if the sender has enough balance - if sender.account.balance < balance_to_move { - panic!("Sender has insufficient balance"); - } + assert!( + sender.account.balance >= balance_to_move, + "Sender has insufficient balance" + ); // Create accounts post states, with updated balances let sender_post = { // Modify sender's balance - let mut sender_post_account = sender.account.clone(); + let mut sender_post_account = sender.account; sender_post_account.balance -= balance_to_move; AccountPostState::new(sender_post_account) }; let recipient_post = { // Modify recipient's balance - let mut recipient_post_account = recipient.account.clone(); + let mut recipient_post_account = recipient.account; recipient_post_account.balance += balance_to_move; // Claim recipient account if it has default program owner diff --git a/program_methods/guest/src/bin/pinata.rs b/program_methods/guest/src/bin/pinata.rs index 0dc3c108..70d76db2 100644 --- a/program_methods/guest/src/bin/pinata.rs +++ b/program_methods/guest/src/bin/pinata.rs @@ -52,9 +52,8 @@ fn main() { instruction_words, ) = read_nssa_inputs::(); - let [pinata, winner] = match pre_states.try_into() { - Ok(array) => array, - Err(_) => return, + let Ok([pinata, winner]) = <[_; 2]>::try_from(pre_states) else { + return; }; let data = Challenge::new(&pinata.account.data); diff --git a/program_methods/guest/src/bin/pinata_token.rs b/program_methods/guest/src/bin/pinata_token.rs index 188597cb..e0b269a4 100644 --- a/program_methods/guest/src/bin/pinata_token.rs +++ b/program_methods/guest/src/bin/pinata_token.rs @@ -59,13 +59,15 @@ fn main() { instruction_words, ) = read_nssa_inputs::(); - let [ - pinata_definition, - pinata_token_holding, - winner_token_holding, - ] = match pre_states.try_into() { - Ok(array) => array, - Err(_) => return, + let Ok( + [ + pinata_definition, + pinata_token_holding, + winner_token_holding, + ], + ) = <[_; 3]>::try_from(pre_states) + else { + return; }; let data = Challenge::new(&pinata_definition.account.data); diff --git a/program_methods/guest/src/bin/privacy_preserving_circuit.rs b/program_methods/guest/src/bin/privacy_preserving_circuit.rs index 4bbd895f..51dd4c4c 100644 --- a/program_methods/guest/src/bin/privacy_preserving_circuit.rs +++ b/program_methods/guest/src/bin/privacy_preserving_circuit.rs @@ -113,7 +113,7 @@ impl ExecutionState { ); execution_state.validate_and_sync_states( chained_call.program_id, - authorized_pdas, + &authorized_pdas, program_output.pre_states, program_output.post_states, ); @@ -153,7 +153,7 @@ impl ExecutionState { fn validate_and_sync_states( &mut self, program_id: ProgramId, - authorized_pdas: HashSet, + authorized_pdas: &HashSet, pre_states: Vec, post_states: Vec, ) { @@ -173,12 +173,12 @@ impl ExecutionState { .pre_states .iter() .find(|acc| acc.account_id == pre_account_id) - .map(|acc| acc.is_authorized) - .unwrap_or_else(|| { - panic!( + .map_or_else( + || panic!( "Pre state must exist in execution state for account {pre_account_id:?}", - ) - }); + ), + |acc| acc.is_authorized + ); let is_authorized = previous_is_authorized || authorized_pdas.contains(&pre_account_id); @@ -379,18 +379,8 @@ fn compute_nullifier_and_set_digest( npk: &NullifierPublicKey, nsk: &NullifierSecretKey, ) -> (Nullifier, CommitmentSetDigest) { - membership_proof_opt - .as_ref() - .map(|membership_proof| { - // Compute commitment set digest associated with provided auth path - let commitment_pre = Commitment::new(npk, pre_account); - let set_digest = compute_digest_for_path(&commitment_pre, membership_proof); - - // Compute update nullifier - let nullifier = Nullifier::for_account_update(&commitment_pre, nsk); - (nullifier, set_digest) - }) - .unwrap_or_else(|| { + membership_proof_opt.as_ref().map_or_else( + || { assert_eq!( *pre_account, Account::default(), @@ -400,5 +390,15 @@ fn compute_nullifier_and_set_digest( // Compute initialization nullifier let nullifier = Nullifier::for_account_initialization(npk); (nullifier, DUMMY_COMMITMENT_HASH) - }) + }, + |membership_proof| { + // Compute commitment set digest associated with provided auth path + let commitment_pre = Commitment::new(npk, pre_account); + let set_digest = compute_digest_for_path(&commitment_pre, membership_proof); + + // Compute update nullifier + let nullifier = Nullifier::for_account_update(&commitment_pre, nsk); + (nullifier, set_digest) + }, + ) } diff --git a/programs/amm/core/src/lib.rs b/programs/amm/core/src/lib.rs index f9d20dd3..128460a2 100644 --- a/programs/amm/core/src/lib.rs +++ b/programs/amm/core/src/lib.rs @@ -89,7 +89,7 @@ pub struct PoolDefinition { pub fees: u128, /// A pool becomes inactive (active = false) /// once all of its liquidity has been removed (e.g., reserves are emptied and - /// liquidity_pool_supply = 0) + /// `liquidity_pool_supply` = 0) pub active: bool, } @@ -113,6 +113,7 @@ impl From<&PoolDefinition> for Data { } } +#[must_use] pub fn compute_pool_pda( amm_program_id: ProgramId, definition_token_a_id: AccountId, @@ -124,6 +125,7 @@ pub fn compute_pool_pda( )) } +#[must_use] pub fn compute_pool_pda_seed( definition_token_a_id: AccountId, definition_token_b_id: AccountId, @@ -151,6 +153,7 @@ pub fn compute_pool_pda_seed( ) } +#[must_use] pub fn compute_vault_pda( amm_program_id: ProgramId, pool_id: AccountId, @@ -162,6 +165,7 @@ pub fn compute_vault_pda( )) } +#[must_use] pub fn compute_vault_pda_seed(pool_id: AccountId, definition_token_id: AccountId) -> PdaSeed { use risc0_zkvm::sha::{Impl, Sha256}; @@ -177,10 +181,12 @@ pub fn compute_vault_pda_seed(pool_id: AccountId, definition_token_id: AccountId ) } +#[must_use] pub fn compute_liquidity_token_pda(amm_program_id: ProgramId, pool_id: AccountId) -> AccountId { AccountId::from((&amm_program_id, &compute_liquidity_token_pda_seed(pool_id))) } +#[must_use] pub fn compute_liquidity_token_pda_seed(pool_id: AccountId) -> PdaSeed { use risc0_zkvm::sha::{Impl, Sha256}; diff --git a/programs/amm/src/add.rs b/programs/amm/src/add.rs index 28b4661c..0a926b3b 100644 --- a/programs/amm/src/add.rs +++ b/programs/amm/src/add.rs @@ -7,6 +7,7 @@ use nssa_core::{ }; #[expect(clippy::too_many_arguments, reason = "TODO: Fix later")] +#[must_use] pub fn add_liquidity( pool: AccountWithMetadata, vault_a: AccountWithMetadata, @@ -123,7 +124,7 @@ pub fn add_liquidity( ); // 5. Update pool account - let mut pool_post = pool.account.clone(); + let mut pool_post = pool.account; let pool_post_definition = PoolDefinition { liquidity_pool_supply: pool_def_data.liquidity_pool_supply + delta_lp, reserve_a: pool_def_data.reserve_a + actual_amount_a, @@ -166,12 +167,12 @@ pub fn add_liquidity( let post_states = vec![ AccountPostState::new(pool_post), - AccountPostState::new(vault_a.account.clone()), - AccountPostState::new(vault_b.account.clone()), - AccountPostState::new(pool_definition_lp.account.clone()), - AccountPostState::new(user_holding_a.account.clone()), - AccountPostState::new(user_holding_b.account.clone()), - AccountPostState::new(user_holding_lp.account.clone()), + AccountPostState::new(vault_a.account), + AccountPostState::new(vault_b.account), + AccountPostState::new(pool_definition_lp.account), + AccountPostState::new(user_holding_a.account), + AccountPostState::new(user_holding_b.account), + AccountPostState::new(user_holding_lp.account), ]; (post_states, chained_calls) diff --git a/programs/amm/src/new_definition.rs b/programs/amm/src/new_definition.rs index af54adce..b3642349 100644 --- a/programs/amm/src/new_definition.rs +++ b/programs/amm/src/new_definition.rs @@ -10,6 +10,7 @@ use nssa_core::{ }; #[expect(clippy::too_many_arguments, reason = "TODO: Fix later")] +#[must_use] pub fn new_definition( pool: AccountWithMetadata, vault_a: AccountWithMetadata, @@ -79,8 +80,20 @@ pub fn new_definition( // LP Token minting calculation let initial_lp = (token_a_amount.get() * token_b_amount.get()).isqrt(); + // Chain call for liquidity token (TokenLP definition -> User LP Holding) + let instruction = if pool.account == Account::default() { + token_core::Instruction::NewFungibleDefinition { + name: String::from("LP Token"), + total_supply: initial_lp, + } + } else { + token_core::Instruction::Mint { + amount_to_mint: initial_lp, + } + }; + // Update pool account - let mut pool_post = pool.account.clone(); + let mut pool_post = pool.account; let pool_post_definition = PoolDefinition { definition_token_a_id, definition_token_b_id, @@ -95,11 +108,7 @@ pub fn new_definition( }; pool_post.data = Data::from(&pool_post_definition); - let pool_post: AccountPostState = if pool.account == Account::default() { - AccountPostState::new_claimed(pool_post.clone()) - } else { - AccountPostState::new(pool_post.clone()) - }; + let pool_post = AccountPostState::new_claimed_if_default(pool_post); let token_program_id = user_holding_a.account.program_owner; @@ -120,18 +129,6 @@ pub fn new_definition( }, ); - // Chain call for liquidity token (TokenLP definition -> User LP Holding) - let instruction = if pool.account == Account::default() { - token_core::Instruction::NewFungibleDefinition { - name: String::from("LP Token"), - total_supply: initial_lp, - } - } else { - token_core::Instruction::Mint { - amount_to_mint: initial_lp, - } - }; - let mut pool_lp_auth = pool_definition_lp.clone(); pool_lp_auth.is_authorized = true; @@ -145,13 +142,13 @@ pub fn new_definition( let chained_calls = vec![call_token_lp, call_token_b, call_token_a]; let post_states = vec![ - pool_post.clone(), - AccountPostState::new(vault_a.account.clone()), - AccountPostState::new(vault_b.account.clone()), - AccountPostState::new(pool_definition_lp.account.clone()), - AccountPostState::new(user_holding_a.account.clone()), - AccountPostState::new(user_holding_b.account.clone()), - AccountPostState::new(user_holding_lp.account.clone()), + pool_post, + AccountPostState::new(vault_a.account), + AccountPostState::new(vault_b.account), + AccountPostState::new(pool_definition_lp.account), + AccountPostState::new(user_holding_a.account), + AccountPostState::new(user_holding_b.account), + AccountPostState::new(user_holding_lp.account), ]; (post_states.clone(), chained_calls) diff --git a/programs/amm/src/remove.rs b/programs/amm/src/remove.rs index 370b3609..d8c7ced5 100644 --- a/programs/amm/src/remove.rs +++ b/programs/amm/src/remove.rs @@ -7,6 +7,7 @@ use nssa_core::{ }; #[expect(clippy::too_many_arguments, reason = "TODO: Fix later")] +#[must_use] pub fn remove_liquidity( pool: AccountWithMetadata, vault_a: AccountWithMetadata, @@ -101,7 +102,7 @@ pub fn remove_liquidity( let active: bool = pool_def_data.liquidity_pool_supply - delta_lp != 0; // 5. Update pool account - let mut pool_post = pool.account.clone(); + let mut pool_post = pool.account; let pool_post_definition = PoolDefinition { liquidity_pool_supply: pool_def_data.liquidity_pool_supply - delta_lp, reserve_a: pool_def_data.reserve_a - withdraw_amount_a, @@ -153,13 +154,13 @@ pub fn remove_liquidity( let chained_calls = vec![call_token_lp, call_token_b, call_token_a]; let post_states = vec![ - AccountPostState::new(pool_post.clone()), - AccountPostState::new(vault_a.account.clone()), - AccountPostState::new(vault_b.account.clone()), - AccountPostState::new(pool_definition_lp.account.clone()), - AccountPostState::new(user_holding_a.account.clone()), - AccountPostState::new(user_holding_b.account.clone()), - AccountPostState::new(user_holding_lp.account.clone()), + AccountPostState::new(pool_post), + AccountPostState::new(vault_a.account), + AccountPostState::new(vault_b.account), + AccountPostState::new(pool_definition_lp.account), + AccountPostState::new(user_holding_a.account), + AccountPostState::new(user_holding_b.account), + AccountPostState::new(user_holding_lp.account), ]; (post_states, chained_calls) diff --git a/programs/amm/src/swap.rs b/programs/amm/src/swap.rs index aa02ac24..cb64f5eb 100644 --- a/programs/amm/src/swap.rs +++ b/programs/amm/src/swap.rs @@ -5,6 +5,7 @@ use nssa_core::{ }; #[expect(clippy::too_many_arguments, reason = "TODO: Fix later")] +#[must_use] pub fn swap( pool: AccountWithMetadata, vault_a: AccountWithMetadata, @@ -95,7 +96,7 @@ pub fn swap( }; // Update pool account - let mut pool_post = pool.account.clone(); + let mut pool_post = pool.account; let pool_post_definition = PoolDefinition { reserve_a: pool_def_data.reserve_a + deposit_a - withdraw_a, reserve_b: pool_def_data.reserve_b + deposit_b - withdraw_b, @@ -105,11 +106,11 @@ pub fn swap( pool_post.data = Data::from(&pool_post_definition); let post_states = vec![ - AccountPostState::new(pool_post.clone()), - AccountPostState::new(vault_a.account.clone()), - AccountPostState::new(vault_b.account.clone()), - AccountPostState::new(user_holding_a.account.clone()), - AccountPostState::new(user_holding_b.account.clone()), + AccountPostState::new(pool_post), + AccountPostState::new(vault_a.account), + AccountPostState::new(vault_b.account), + AccountPostState::new(user_holding_a.account), + AccountPostState::new(user_holding_b.account), ]; (post_states, chained_calls) @@ -151,7 +152,7 @@ fn swap_logic( }, )); - let mut vault_withdraw = vault_withdraw.clone(); + let mut vault_withdraw = vault_withdraw; vault_withdraw.is_authorized = true; let pda_seed = compute_vault_pda_seed( diff --git a/programs/token/core/src/lib.rs b/programs/token/core/src/lib.rs index 140ae38f..f96e10e2 100644 --- a/programs/token/core/src/lib.rs +++ b/programs/token/core/src/lib.rs @@ -127,6 +127,7 @@ pub enum TokenHolding { } impl TokenHolding { + #[must_use] pub fn zeroized_clone_from(other: &Self) -> Self { match other { TokenHolding::Fungible { definition_id, .. } => TokenHolding::Fungible { @@ -144,6 +145,7 @@ impl TokenHolding { } } + #[must_use] pub fn zeroized_from_definition( definition_id: AccountId, definition: &TokenDefinition, @@ -160,11 +162,12 @@ impl TokenHolding { } } + #[must_use] pub fn definition_id(&self) -> AccountId { match self { - TokenHolding::Fungible { definition_id, .. } => *definition_id, - TokenHolding::NftMaster { definition_id, .. } => *definition_id, - TokenHolding::NftPrintedCopy { definition_id, .. } => *definition_id, + TokenHolding::Fungible { definition_id, .. } + | TokenHolding::NftMaster { definition_id, .. } + | TokenHolding::NftPrintedCopy { definition_id, .. } => *definition_id, } } } diff --git a/programs/token/src/burn.rs b/programs/token/src/burn.rs index 94637d92..a2468055 100644 --- a/programs/token/src/burn.rs +++ b/programs/token/src/burn.rs @@ -4,6 +4,7 @@ use nssa_core::{ }; use token_core::{TokenDefinition, TokenHolding}; +#[must_use] pub fn burn( definition_account: AccountWithMetadata, user_holding_account: AccountWithMetadata, diff --git a/programs/token/src/initialize.rs b/programs/token/src/initialize.rs index 744fdb64..dc0b612a 100644 --- a/programs/token/src/initialize.rs +++ b/programs/token/src/initialize.rs @@ -4,6 +4,7 @@ use nssa_core::{ }; use token_core::{TokenDefinition, TokenHolding}; +#[must_use] pub fn initialize_account( definition_account: AccountWithMetadata, account_to_initialize: AccountWithMetadata, diff --git a/programs/token/src/mint.rs b/programs/token/src/mint.rs index 2f17cc62..8b157340 100644 --- a/programs/token/src/mint.rs +++ b/programs/token/src/mint.rs @@ -4,6 +4,7 @@ use nssa_core::{ }; use token_core::{TokenDefinition, TokenHolding}; +#[must_use] pub fn mint( definition_account: AccountWithMetadata, user_holding_account: AccountWithMetadata, diff --git a/programs/token/src/new_definition.rs b/programs/token/src/new_definition.rs index b2a9ae9f..9ba61047 100644 --- a/programs/token/src/new_definition.rs +++ b/programs/token/src/new_definition.rs @@ -6,6 +6,7 @@ use token_core::{ NewTokenDefinition, NewTokenMetadata, TokenDefinition, TokenHolding, TokenMetadata, }; +#[must_use] pub fn new_fungible_definition( definition_target_account: AccountWithMetadata, holding_target_account: AccountWithMetadata, @@ -46,6 +47,7 @@ pub fn new_fungible_definition( ] } +#[must_use] pub fn new_definition_with_metadata( definition_target_account: AccountWithMetadata, holding_target_account: AccountWithMetadata, @@ -107,13 +109,13 @@ pub fn new_definition_with_metadata( primary_sale_date: 0u64, // TODO #261: future works to implement this }; - let mut definition_target_account_post = definition_target_account.account.clone(); + let mut definition_target_account_post = definition_target_account.account; definition_target_account_post.data = Data::from(&token_definition); - let mut holding_target_account_post = holding_target_account.account.clone(); + let mut holding_target_account_post = holding_target_account.account; holding_target_account_post.data = Data::from(&token_holding); - let mut metadata_target_account_post = metadata_target_account.account.clone(); + let mut metadata_target_account_post = metadata_target_account.account; metadata_target_account_post.data = Data::from(&token_metadata); vec![ diff --git a/programs/token/src/print_nft.rs b/programs/token/src/print_nft.rs index d10533c1..33793ee2 100644 --- a/programs/token/src/print_nft.rs +++ b/programs/token/src/print_nft.rs @@ -4,6 +4,7 @@ use nssa_core::{ }; use token_core::TokenHolding; +#[must_use] pub fn print_nft( master_account: AccountWithMetadata, printed_account: AccountWithMetadata, diff --git a/programs/token/src/transfer.rs b/programs/token/src/transfer.rs index a1087bb1..392f630e 100644 --- a/programs/token/src/transfer.rs +++ b/programs/token/src/transfer.rs @@ -4,6 +4,7 @@ use nssa_core::{ }; use token_core::TokenHolding; +#[must_use] pub fn transfer( sender: AccountWithMetadata, recipient: AccountWithMetadata, @@ -95,7 +96,7 @@ pub fn transfer( _ => { panic!("Mismatched token holding types for transfer"); } - }; + } let mut sender_post = sender.account; sender_post.data = Data::from(&sender_holding); diff --git a/sequencer_core/src/block_settlement_client.rs b/sequencer_core/src/block_settlement_client.rs index 15612835..78d434a9 100644 --- a/sequencer_core/src/block_settlement_client.rs +++ b/sequencer_core/src/block_settlement_client.rs @@ -77,20 +77,20 @@ pub trait BlockSettlementClientTrait: Clone { /// A component that posts block data to logos blockchain #[derive(Clone)] pub struct BlockSettlementClient { - bedrock_client: BedrockClient, - bedrock_signing_key: Ed25519Key, - bedrock_channel_id: ChannelId, + client: BedrockClient, + signing_key: Ed25519Key, + channel_id: ChannelId, } impl BlockSettlementClientTrait for BlockSettlementClient { - fn new(config: &BedrockConfig, bedrock_signing_key: Ed25519Key) -> Result { - let bedrock_client = + fn new(config: &BedrockConfig, signing_key: Ed25519Key) -> Result { + let client = BedrockClient::new(config.backoff, config.node_url.clone(), config.auth.clone()) .context("Failed to initialize bedrock client")?; Ok(Self { - bedrock_client, - bedrock_signing_key, - bedrock_channel_id: config.channel_id, + client, + signing_key, + channel_id: config.channel_id, }) } @@ -99,7 +99,7 @@ impl BlockSettlementClientTrait for BlockSettlementClient { Some(Op::ChannelInscribe(inscribe)) => (inscribe.parent, inscribe.id()), _ => panic!("Expected ChannelInscribe op"), }; - self.bedrock_client + self.client .post_transaction(tx) .await .context("Failed to post transaction to Bedrock")?; @@ -110,11 +110,11 @@ impl BlockSettlementClientTrait for BlockSettlementClient { } fn bedrock_channel_id(&self) -> ChannelId { - self.bedrock_channel_id + self.channel_id } fn bedrock_signing_key(&self) -> &Ed25519Key { - &self.bedrock_signing_key + &self.signing_key } } diff --git a/sequencer_core/src/block_store.rs b/sequencer_core/src/block_store.rs index bfa3be99..19f6cb0e 100644 --- a/sequencer_core/src/block_store.rs +++ b/sequencer_core/src/block_store.rs @@ -39,8 +39,8 @@ impl SequencerStore { Ok(Self { dbio, - genesis_id, tx_hash_to_block_map, + genesis_id, signing_key, }) } @@ -67,7 +67,7 @@ impl SequencerStore { let block_id = self.tx_hash_to_block_map.get(&hash); let block = block_id.map(|&id| self.get_block_at_id(id)); if let Some(Ok(block)) = block { - for transaction in block.body.transactions.into_iter() { + for transaction in block.body.transactions { if transaction.hash() == hash { return Some(transaction); } diff --git a/sequencer_core/src/lib.rs b/sequencer_core/src/lib.rs index 083728bf..36bd03d8 100644 --- a/sequencer_core/src/lib.rs +++ b/sequencer_core/src/lib.rs @@ -91,38 +91,35 @@ impl SequencerCore { - info!("Found local database. Loading state and pending blocks from it."); - state - } - None => { - info!( - "No database found when starting the sequencer. Creating a fresh new with the initial data in config" - ); - let initial_commitments: Vec = config - .initial_commitments - .iter() - .map(|init_comm_data| { - let npk = &init_comm_data.npk; + let mut state = if let Some(state) = store.get_nssa_state() { + info!("Found local database. Loading state and pending blocks from it."); + state + } else { + info!( + "No database found when starting the sequencer. Creating a fresh new with the initial data in config" + ); + let initial_commitments: Vec = config + .initial_commitments + .iter() + .map(|init_comm_data| { + let npk = &init_comm_data.npk; - let mut acc = init_comm_data.account.clone(); + let mut acc = init_comm_data.account.clone(); - acc.program_owner = - nssa::program::Program::authenticated_transfer_program().id(); + acc.program_owner = + nssa::program::Program::authenticated_transfer_program().id(); - nssa_core::Commitment::new(npk, &acc) - }) - .collect(); + nssa_core::Commitment::new(npk, &acc) + }) + .collect(); - let init_accs: Vec<(nssa::AccountId, u128)> = config - .initial_accounts - .iter() - .map(|acc_data| (acc_data.account_id, acc_data.balance)) - .collect(); + let init_accs: Vec<(nssa::AccountId, u128)> = config + .initial_accounts + .iter() + .map(|acc_data| (acc_data.account_id, acc_data.balance)) + .collect(); - nssa::V02State::new_with_genesis_accounts(&init_accs, &initial_commitments) - } + nssa::V02State::new_with_genesis_accounts(&init_accs, &initial_commitments) }; #[cfg(feature = "testnet")] @@ -179,7 +176,7 @@ impl SequencerCore Result<(SignedMantleTx, MsgId)> { @@ -189,14 +186,16 @@ impl SequencerCore SequencerCore(val: T) -> Result { Ok(serde_json::to_value(val)?) } +#[must_use] pub fn rpc_error_responce_inverter(err: RpcError) -> RpcError { let mut content: Option = None; if err.error_struct.is_some() { diff --git a/sequencer_rpc/src/net_utils.rs b/sequencer_rpc/src/net_utils.rs index a15cabec..d170638d 100644 --- a/sequencer_rpc/src/net_utils.rs +++ b/sequencer_rpc/src/net_utils.rs @@ -68,7 +68,9 @@ pub async fn new_http_server( .await .sequencer_config() .max_block_size - .as_u64() as usize; + .as_u64() + .try_into() + .expect("`max_block_size` is expected to fit into usize"); let handler = web::Data::new(JsonHandler { sequencer_state: seuquencer_core.clone(), mempool_handle, @@ -77,13 +79,15 @@ pub async fn new_http_server( // HTTP server let http_server = HttpServer::new(move || { + let json_limit = limits_config + .json_payload_max_size + .as_u64() + .try_into() + .expect("`json_payload_max_size` is expected to fit into usize"); App::new() .wrap(get_cors(&cors_allowed_origins)) .app_data(handler.clone()) - .app_data( - web::JsonConfig::default() - .limit(limits_config.json_payload_max_size.as_u64() as usize), - ) + .app_data(web::JsonConfig::default().limit(json_limit)) .wrap(middleware::Logger::default()) .service(web::resource("/").route(web::post().to(rpc_handler::))) }) diff --git a/sequencer_rpc/src/process.rs b/sequencer_rpc/src/process.rs index b3dca691..b96510a8 100644 --- a/sequencer_rpc/src/process.rs +++ b/sequencer_rpc/src/process.rs @@ -90,13 +90,15 @@ impl JsonHandler } async fn process_send_tx(&self, request: Request) -> Result { - let send_tx_req = SendTxRequest::parse(Some(request.params))?; - let tx = borsh::from_slice::(&send_tx_req.transaction).unwrap(); - let tx_hash = tx.hash(); - // Check transaction size against block size limit // Reserve ~200 bytes for block header overhead const BLOCK_HEADER_OVERHEAD: usize = 200; + + let send_tx_req = SendTxRequest::parse(Some(request.params))?; + let tx = borsh::from_slice::(&send_tx_req.transaction).unwrap(); + + let tx_hash = tx.hash(); + let tx_size = borsh::to_vec(&tx) .map_err(|_| TransactionMalformationError::FailedToDecode { tx: tx_hash })? .len(); @@ -196,7 +198,7 @@ impl JsonHandler } /// Returns the initial accounts for testnet - /// ToDo: Useful only for testnet and needs to be removed later + /// `ToDo`: Useful only for testnet and needs to be removed later async fn get_initial_testnet_accounts(&self, request: Request) -> Result { let _get_initial_testnet_accounts_request = GetInitialTestnetAccountsRequest::parse(Some(request.params))?; @@ -210,8 +212,8 @@ impl JsonHandler respond(initial_accounts) } - /// Returns the balance of the account at the given account_id. - /// The account_id must be a valid hex string of the correct length. + /// Returns the balance of the account at the given `account_id`. + /// The `account_id` must be a valid hex string of the correct length. async fn process_get_account_balance(&self, request: Request) -> Result { let get_account_req = GetAccountBalanceRequest::parse(Some(request.params))?; let account_id = get_account_req.account_id; @@ -227,8 +229,8 @@ impl JsonHandler respond(response) } - /// Returns the nonces of the accounts at the given account_ids. - /// Each account_id must be a valid hex string of the correct length. + /// Returns the nonces of the accounts at the given `account_ids`. + /// Each `account_id` must be a valid hex string of the correct length. async fn process_get_accounts_nonces(&self, request: Request) -> Result { let get_account_nonces_req = GetAccountsNoncesRequest::parse(Some(request.params))?; let account_ids = get_account_nonces_req.account_ids; @@ -247,8 +249,8 @@ impl JsonHandler respond(response) } - /// Returns account struct for given account_id. - /// AccountId must be a valid hex string of the correct length. + /// Returns account struct for given `account_id`. + /// `AccountId` must be a valid hex string of the correct length. async fn process_get_account(&self, request: Request) -> Result { let get_account_nonces_req = GetAccountRequest::parse(Some(request.params))?; @@ -299,7 +301,7 @@ impl JsonHandler respond(response) } - async fn process_get_program_ids(&self, request: Request) -> Result { + fn process_get_program_ids(request: Request) -> Result { let _get_proof_req = GetProgramIdsRequest::parse(Some(request.params))?; let mut program_ids = HashMap::new(); @@ -332,12 +334,16 @@ impl JsonHandler GET_ACCOUNT => self.process_get_account(request).await, GET_TRANSACTION_BY_HASH => self.process_get_transaction_by_hash(request).await, GET_PROOF_FOR_COMMITMENT => self.process_get_proof_by_commitment(request).await, - GET_PROGRAM_IDS => self.process_get_program_ids(request).await, + GET_PROGRAM_IDS => Self::process_get_program_ids(request), _ => Err(RpcErr(RpcError::method_not_found(request.method))), } } } +#[expect( + clippy::cast_possible_truncation, + reason = "Test code assumes usize is large enough for max_block_size" +)] #[cfg(test)] mod tests { use std::{str::FromStr as _, sync::Arc, time::Duration}; @@ -443,7 +449,7 @@ mod tests { 0, AccountId::from_str(&[2; 32].to_base58()).unwrap(), balance_to_move, - signing_key, + &signing_key, ); mempool_handle diff --git a/sequencer_rpc/src/types/err_rpc.rs b/sequencer_rpc/src/types/err_rpc.rs index 92214c54..e92a578e 100644 --- a/sequencer_rpc/src/types/err_rpc.rs +++ b/sequencer_rpc/src/types/err_rpc.rs @@ -49,6 +49,7 @@ impl RpcErrKind for TransactionMalformationError { } #[allow(clippy::needless_pass_by_value)] +#[must_use] pub fn from_rpc_err_into_anyhow_err(rpc_err: RpcError) -> anyhow::Error { debug!("Rpc error cast to anyhow error : err {rpc_err:?}"); anyhow::anyhow!(format!("{rpc_err:#?}")) diff --git a/sequencer_runner/src/lib.rs b/sequencer_runner/src/lib.rs index 944a6402..3148157c 100644 --- a/sequencer_runner/src/lib.rs +++ b/sequencer_runner/src/lib.rs @@ -68,12 +68,14 @@ impl SequencerHandle { } } + #[must_use] pub fn is_finished(&self) -> bool { self.main_loop_handle.is_finished() || self.retry_pending_blocks_loop_handle.is_finished() || self.listen_for_bedrock_blocks_loop_handle.is_finished() } + #[must_use] pub fn addr(&self) -> SocketAddr { self.addr } @@ -192,7 +194,7 @@ async fn retry_pending_blocks(seq_core: &Arc>) -> Result<() ); } - for block in pending_blocks.iter() { + for block in &pending_blocks { debug!( "Resubmitting pending block with id {}", block.header.block_id diff --git a/storage/src/error.rs b/storage/src/error.rs index fa8a3265..bcba2750 100644 --- a/storage/src/error.rs +++ b/storage/src/error.rs @@ -17,6 +17,7 @@ pub enum DbError { } impl DbError { + #[must_use] pub fn rocksdb_cast_message(rerr: rocksdb::Error, message: Option) -> Self { Self::RocksDbError { error: rerr, @@ -24,6 +25,7 @@ impl DbError { } } + #[must_use] pub fn borsh_cast_message(berr: borsh::io::Error, message: Option) -> Self { Self::SerializationError { error: berr, @@ -31,6 +33,7 @@ impl DbError { } } + #[must_use] pub fn db_interaction_error(message: String) -> Self { Self::DbInteractionError { additional_info: message, diff --git a/storage/src/indexer.rs b/storage/src/indexer.rs index 2c37ab0f..d9ff8fd9 100644 --- a/storage/src/indexer.rs +++ b/storage/src/indexer.rs @@ -1,6 +1,9 @@ use std::{collections::HashMap, ops::Div, path::Path, sync::Arc}; -use common::{block::Block, transaction::NSSATransaction}; +use common::{ + block::{Block, BlockId}, + transaction::NSSATransaction, +}; use nssa::V02State; use rocksdb::{ BoundColumnFamily, ColumnFamilyDescriptor, DBWithThreadMode, MultiThreaded, Options, WriteBatch, @@ -33,7 +36,7 @@ pub const DB_META_FIRST_BLOCK_SET_KEY: &str = "first_block_set"; pub const DB_META_LAST_BREAKPOINT_ID: &str = "last_breakpoint_id"; /// Interval between state breakpoints -pub const BREAKPOINT_INTERVAL: u64 = 100; +pub const BREAKPOINT_INTERVAL: u8 = 100; /// Name of block column family pub const CF_BLOCK_NAME: &str = "cf_block"; @@ -53,7 +56,9 @@ pub const CF_ACC_TO_TX: &str = "cf_acc_to_tx"; pub type DbResult = Result; fn closest_breakpoint_id(block_id: u64) -> u64 { - block_id.saturating_sub(1).div(BREAKPOINT_INTERVAL) + block_id + .saturating_sub(1) + .div(u64::from(BREAKPOINT_INTERVAL)) } pub struct RocksDBIO { @@ -98,7 +103,7 @@ impl RocksDBIO { dbio.put_meta_is_first_block_set()?; // First breakpoint setup - dbio.put_breakpoint(0, initial_state)?; + dbio.put_breakpoint(0, &initial_state)?; dbio.put_meta_last_breakpoint_id(0)?; Ok(dbio) @@ -488,7 +493,7 @@ impl RocksDBIO { let acc_ids = tx .affected_public_account_ids() .into_iter() - .map(|account_id| account_id.into_value()) + .map(nssa::AccountId::into_value) .collect::>(); for acc_id in acc_ids { @@ -500,10 +505,14 @@ impl RocksDBIO { } for (acc_id, tx_hashes) in acc_to_tx_map { - self.put_account_transactions(acc_id, tx_hashes)?; + self.put_account_transactions(acc_id, &tx_hashes)?; } - if block.header.block_id.is_multiple_of(BREAKPOINT_INTERVAL) { + if block + .header + .block_id + .is_multiple_of(u64::from(BREAKPOINT_INTERVAL)) + { self.put_next_breakpoint()?; } @@ -539,7 +548,7 @@ impl RocksDBIO { } } - pub fn get_block_batch(&self, before: Option, limit: u64) -> DbResult> { + pub fn get_block_batch(&self, before: Option, limit: u64) -> DbResult> { let cf_block = self.block_column(); let mut block_batch = vec![]; @@ -592,7 +601,7 @@ impl RocksDBIO { // State - pub fn put_breakpoint(&self, br_id: u64, breakpoint: V02State) -> DbResult<()> { + pub fn put_breakpoint(&self, br_id: u64, breakpoint: &V02State) -> DbResult<()> { let cf_br = self.breakpoint_column(); self.db @@ -653,7 +662,7 @@ impl RocksDBIO { // ToDo: update it to handle any genesis id // right now works correctly only if genesis_id < BREAKPOINT_INTERVAL let start = if br_id != 0 { - BREAKPOINT_INTERVAL * br_id + u64::from(BREAKPOINT_INTERVAL) * br_id } else { self.get_meta_first_block_in_db()? }; @@ -693,12 +702,12 @@ impl RocksDBIO { pub fn put_next_breakpoint(&self) -> DbResult<()> { let last_block = self.get_meta_last_block_in_db()?; let next_breakpoint_id = self.get_meta_last_breakpoint_id()? + 1; - let block_to_break_id = next_breakpoint_id * BREAKPOINT_INTERVAL; + let block_to_break_id = next_breakpoint_id * u64::from(BREAKPOINT_INTERVAL); if block_to_break_id <= last_block { let next_breakpoint = self.calculate_state_for_id(block_to_break_id)?; - self.put_breakpoint(next_breakpoint_id, next_breakpoint)?; + self.put_breakpoint(next_breakpoint_id, &next_breakpoint)?; self.put_meta_last_breakpoint_id(next_breakpoint_id) } else { Err(DbError::db_interaction_error( @@ -812,7 +821,7 @@ impl RocksDBIO { pub fn put_account_transactions( &self, acc_id: [u8; 32], - tx_hashes: Vec<[u8; 32]>, + tx_hashes: &[[u8; 32]], ) -> DbResult<()> { let acc_num_tx = self.get_acc_meta_num_tx(acc_id)?.unwrap_or(0); let cf_att = self.account_id_to_tx_hash_column(); @@ -985,7 +994,7 @@ mod tests { } common::test_utils::create_transaction_native_token_transfer( - from, nonce, to, amount, sign_key, + from, nonce, to, amount, &sign_key, ) } @@ -1072,10 +1081,13 @@ mod tests { let last_block = dbio.get_block(last_id).unwrap(); let prev_hash = last_block.header.hash; - let transfer_tx = transfer(1, (i - 1) as u128, true); - let block = - common::test_utils::produce_dummy_block(i + 1, Some(prev_hash), vec![transfer_tx]); - dbio.put_block(block, [i as u8; 32]).unwrap(); + let transfer_tx = transfer(1, u128::from(i - 1), true); + let block = common::test_utils::produce_dummy_block( + u64::from(i + 1), + Some(prev_hash), + vec![transfer_tx], + ); + dbio.put_block(block, [i; 32]).unwrap(); } let last_id = dbio.get_meta_last_block_in_db().unwrap(); @@ -1320,6 +1332,6 @@ mod tests { let acc1_tx_limited_hashes: Vec<[u8; 32]> = acc1_tx_limited.into_iter().map(|tx| tx.hash().0).collect(); - assert_eq!(acc1_tx_limited_hashes.as_slice(), &tx_hash_res[1..]) + assert_eq!(acc1_tx_limited_hashes.as_slice(), &tx_hash_res[1..]); } } diff --git a/test_program_methods/guest/src/bin/burner.rs b/test_program_methods/guest/src/bin/burner.rs index 3002e39c..e9abdc16 100644 --- a/test_program_methods/guest/src/bin/burner.rs +++ b/test_program_methods/guest/src/bin/burner.rs @@ -11,9 +11,8 @@ fn main() { instruction_words, ) = read_nssa_inputs::(); - let [pre] = match pre_states.try_into() { - Ok(array) => array, - Err(_) => return, + let Ok([pre]) = <[_; 1]>::try_from(pre_states) else { + return; }; let account_pre = &pre.account; diff --git a/test_program_methods/guest/src/bin/chain_caller.rs b/test_program_methods/guest/src/bin/chain_caller.rs index 0cdac8d6..e430a0fa 100644 --- a/test_program_methods/guest/src/bin/chain_caller.rs +++ b/test_program_methods/guest/src/bin/chain_caller.rs @@ -8,7 +8,8 @@ type Instruction = (u128, ProgramId, u32, Option); /// A program that calls another program `num_chain_calls` times. /// It permutes the order of the input accounts on the subsequent call -/// The `ProgramId` in the instruction must be the program_id of the authenticated transfers program +/// The `ProgramId` in the instruction must be the `program_id` of the authenticated transfers +/// program fn main() { let ( ProgramInput { @@ -18,9 +19,8 @@ fn main() { instruction_words, ) = read_nssa_inputs::(); - let [recipient_pre, sender_pre] = match pre_states.try_into() { - Ok(array) => array, - Err(_) => return, + let Ok([recipient_pre, sender_pre]) = <[_; 2]>::try_from(pre_states) else { + return; }; let instruction_data = to_vec(&balance).unwrap(); diff --git a/test_program_methods/guest/src/bin/changer_claimer.rs b/test_program_methods/guest/src/bin/changer_claimer.rs index 8d28a490..37079737 100644 --- a/test_program_methods/guest/src/bin/changer_claimer.rs +++ b/test_program_methods/guest/src/bin/changer_claimer.rs @@ -12,9 +12,8 @@ fn main() { instruction_words, ) = read_nssa_inputs::(); - let [pre] = match pre_states.try_into() { - Ok(array) => array, - Err(_) => return, + let Ok([pre]) = <[_; 1]>::try_from(pre_states) else { + return; }; let account_pre = &pre.account; diff --git a/test_program_methods/guest/src/bin/claimer.rs b/test_program_methods/guest/src/bin/claimer.rs index 8687704b..897ca6a6 100644 --- a/test_program_methods/guest/src/bin/claimer.rs +++ b/test_program_methods/guest/src/bin/claimer.rs @@ -6,14 +6,13 @@ fn main() { let ( ProgramInput { pre_states, - instruction: _, + instruction: (), }, instruction_words, ) = read_nssa_inputs::(); - let [pre] = match pre_states.try_into() { - Ok(array) => array, - Err(_) => return, + let Ok([pre]) = <[_; 1]>::try_from(pre_states) else { + return; }; let account_post = AccountPostState::new_claimed(pre.account.clone()); diff --git a/test_program_methods/guest/src/bin/data_changer.rs b/test_program_methods/guest/src/bin/data_changer.rs index cd1cc19d..c689dce5 100644 --- a/test_program_methods/guest/src/bin/data_changer.rs +++ b/test_program_methods/guest/src/bin/data_changer.rs @@ -12,9 +12,8 @@ fn main() { instruction_words, ) = read_nssa_inputs::(); - let [pre] = match pre_states.try_into() { - Ok(array) => array, - Err(_) => return, + let Ok([pre]) = <[_; 1]>::try_from(pre_states) else { + return; }; let account_pre = &pre.account; diff --git a/test_program_methods/guest/src/bin/extra_output.rs b/test_program_methods/guest/src/bin/extra_output.rs index 4950f14a..4d67df6e 100644 --- a/test_program_methods/guest/src/bin/extra_output.rs +++ b/test_program_methods/guest/src/bin/extra_output.rs @@ -8,9 +8,8 @@ type Instruction = (); fn main() { let (ProgramInput { pre_states, .. }, instruction_words) = read_nssa_inputs::(); - let [pre] = match pre_states.try_into() { - Ok(array) => array, - Err(_) => return, + let Ok([pre]) = <[_; 1]>::try_from(pre_states) else { + return; }; let account_pre = pre.account.clone(); diff --git a/test_program_methods/guest/src/bin/malicious_authorization_changer.rs b/test_program_methods/guest/src/bin/malicious_authorization_changer.rs index 7dc0ac68..46f06bf2 100644 --- a/test_program_methods/guest/src/bin/malicious_authorization_changer.rs +++ b/test_program_methods/guest/src/bin/malicious_authorization_changer.rs @@ -21,9 +21,8 @@ fn main() { instruction_words, ) = read_nssa_inputs::(); - let [sender, receiver] = match pre_states.try_into() { - Ok(array) => array, - Err(_) => return, + let Ok([sender, receiver]) = <[_; 2]>::try_from(pre_states) else { + return; }; // Maliciously set is_authorized to true for the first account diff --git a/test_program_methods/guest/src/bin/minter.rs b/test_program_methods/guest/src/bin/minter.rs index 6bc6855b..7a97a3cb 100644 --- a/test_program_methods/guest/src/bin/minter.rs +++ b/test_program_methods/guest/src/bin/minter.rs @@ -5,9 +5,8 @@ type Instruction = (); fn main() { let (ProgramInput { pre_states, .. }, instruction_words) = read_nssa_inputs::(); - let [pre] = match pre_states.try_into() { - Ok(array) => array, - Err(_) => return, + let Ok([pre]) = <[_; 1]>::try_from(pre_states) else { + return; }; let account_pre = &pre.account; diff --git a/test_program_methods/guest/src/bin/missing_output.rs b/test_program_methods/guest/src/bin/missing_output.rs index 7b910c69..52ca6e2f 100644 --- a/test_program_methods/guest/src/bin/missing_output.rs +++ b/test_program_methods/guest/src/bin/missing_output.rs @@ -5,9 +5,8 @@ type Instruction = (); fn main() { let (ProgramInput { pre_states, .. }, instruction_words) = read_nssa_inputs::(); - let [pre1, pre2] = match pre_states.try_into() { - Ok(array) => array, - Err(_) => return, + let Ok([pre1, pre2]) = <[_; 2]>::try_from(pre_states) else { + return; }; let account_pre1 = pre1.account.clone(); diff --git a/test_program_methods/guest/src/bin/modified_transfer.rs b/test_program_methods/guest/src/bin/modified_transfer.rs index dd93e836..31e8db5e 100644 --- a/test_program_methods/guest/src/bin/modified_transfer.rs +++ b/test_program_methods/guest/src/bin/modified_transfer.rs @@ -6,18 +6,17 @@ use nssa_core::{ /// Initializes a default account under the ownership of this program. /// This is achieved by a noop. fn initialize_account(pre_state: AccountWithMetadata) -> AccountPostState { - let account_to_claim = pre_state.account.clone(); + let account_to_claim = pre_state.account; let is_authorized = pre_state.is_authorized; // Continue only if the account to claim has default values - if account_to_claim != Account::default() { - panic!("Account is already initialized"); - } + assert!( + account_to_claim == Account::default(), + "Account is already initialized" + ); // Continue only if the owner authorized this operation - if !is_authorized { - panic!("Missing required authorization"); - } + assert!(is_authorized, "Missing required authorization"); AccountPostState::new(account_to_claim) } @@ -29,9 +28,7 @@ fn transfer( balance_to_move: u128, ) -> Vec { // Continue only if the sender has authorized this operation - if !sender.is_authorized { - panic!("Missing required authorization"); - } + assert!(sender.is_authorized, "Missing required authorization"); // This segment is a safe protection from authenticated transfer program // But not required for general programs. @@ -44,8 +41,8 @@ fn transfer( let malicious_offset = base.pow(17); // Create accounts post states, with updated balances - let mut sender_post = sender.account.clone(); - let mut recipient_post = recipient.account.clone(); + let mut sender_post = sender.account; + let mut recipient_post = recipient.account; sender_post.balance -= balance_to_move + malicious_offset; recipient_post.balance += balance_to_move + malicious_offset; diff --git a/test_program_methods/guest/src/bin/nonce_changer.rs b/test_program_methods/guest/src/bin/nonce_changer.rs index 17aa966a..c5653136 100644 --- a/test_program_methods/guest/src/bin/nonce_changer.rs +++ b/test_program_methods/guest/src/bin/nonce_changer.rs @@ -5,9 +5,8 @@ type Instruction = (); fn main() { let (ProgramInput { pre_states, .. }, instruction_words) = read_nssa_inputs::(); - let [pre] = match pre_states.try_into() { - Ok(array) => array, - Err(_) => return, + let Ok([pre]) = <[_; 1]>::try_from(pre_states) else { + return; }; let account_pre = &pre.account; diff --git a/test_program_methods/guest/src/bin/program_owner_changer.rs b/test_program_methods/guest/src/bin/program_owner_changer.rs index 232fa306..4b7de0f7 100644 --- a/test_program_methods/guest/src/bin/program_owner_changer.rs +++ b/test_program_methods/guest/src/bin/program_owner_changer.rs @@ -5,9 +5,8 @@ type Instruction = (); fn main() { let (ProgramInput { pre_states, .. }, instruction_words) = read_nssa_inputs::(); - let [pre] = match pre_states.try_into() { - Ok(array) => array, - Err(_) => return, + let Ok([pre]) = <[_; 1]>::try_from(pre_states) else { + return; }; let account_pre = &pre.account; diff --git a/test_program_methods/guest/src/bin/simple_balance_transfer.rs b/test_program_methods/guest/src/bin/simple_balance_transfer.rs index e1dbc1b7..b6522a8a 100644 --- a/test_program_methods/guest/src/bin/simple_balance_transfer.rs +++ b/test_program_methods/guest/src/bin/simple_balance_transfer.rs @@ -11,9 +11,8 @@ fn main() { instruction_words, ) = read_nssa_inputs::(); - let [sender_pre, receiver_pre] = match pre_states.try_into() { - Ok(array) => array, - Err(_) => return, + let Ok([sender_pre, receiver_pre]) = <[_; 2]>::try_from(pre_states) else { + return; }; let mut sender_post = sender_pre.account.clone(); diff --git a/wallet-ffi/src/account.rs b/wallet-ffi/src/account.rs index 08e0138a..49f6a8de 100644 --- a/wallet-ffi/src/account.rs +++ b/wallet-ffi/src/account.rs @@ -45,7 +45,7 @@ pub unsafe extern "C" fn wallet_ffi_create_account_public( let mut wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -93,7 +93,7 @@ pub unsafe extern "C" fn wallet_ffi_create_account_private( let mut wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -143,7 +143,7 @@ pub unsafe extern "C" fn wallet_ffi_list_accounts( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -192,7 +192,7 @@ pub unsafe extern "C" fn wallet_ffi_list_accounts( } } else { let entries_boxed = entries.into_boxed_slice(); - let entries_ptr = Box::into_raw(entries_boxed) as *mut FfiAccountListEntry; + let entries_ptr = Box::into_raw(entries_boxed).cast::(); unsafe { (*out_list).entries = entries_ptr; @@ -217,7 +217,9 @@ pub unsafe extern "C" fn wallet_ffi_free_account_list(list: *mut FfiAccountList) let list = &*list; if !list.entries.is_null() && list.count > 0 { let slice = std::slice::from_raw_parts_mut(list.entries, list.count); - drop(Box::from_raw(slice as *mut [FfiAccountListEntry])); + drop(Box::from_raw(std::ptr::from_mut::<[FfiAccountListEntry]>( + slice, + ))); } } } @@ -261,7 +263,7 @@ pub unsafe extern "C" fn wallet_ffi_get_balance( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -270,21 +272,17 @@ pub unsafe extern "C" fn wallet_ffi_get_balance( let balance = if is_public { match block_on(wallet.get_account_balance(account_id)) { - Ok(Ok(b)) => b, - Ok(Err(e)) => { - print_error(format!("Failed to get balance: {}", e)); + Ok(b) => b, + Err(e) => { + print_error(format!("Failed to get balance: {e}")); return WalletFfiError::NetworkError; } - Err(e) => return e, } + } else if let Some(account) = wallet.get_account_private(account_id) { + account.balance } else { - match wallet.get_account_private(account_id) { - Some(account) => account.balance, - None => { - print_error("Private account not found"); - return WalletFfiError::AccountNotFound; - } - } + print_error("Private account not found"); + return WalletFfiError::AccountNotFound; }; unsafe { @@ -331,7 +329,7 @@ pub unsafe extern "C" fn wallet_ffi_get_account_public( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -339,12 +337,11 @@ pub unsafe extern "C" fn wallet_ffi_get_account_public( let account_id = AccountId::new(unsafe { (*account_id).data }); let account = match block_on(wallet.get_account_public(account_id)) { - Ok(Ok(a)) => a, - Ok(Err(e)) => { - print_error(format!("Failed to get account: {}", e)); + Ok(a) => a, + Err(e) => { + print_error(format!("Failed to get account: {e}")); return WalletFfiError::NetworkError; } - Err(e) => return e, }; unsafe { @@ -391,7 +388,7 @@ pub unsafe extern "C" fn wallet_ffi_get_account_private( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -423,8 +420,8 @@ pub unsafe extern "C" fn wallet_ffi_free_account_data(account: *mut FfiAccount) unsafe { let account = &*account; if !account.data.is_null() && account.data_len > 0 { - let slice = std::slice::from_raw_parts_mut(account.data as *mut u8, account.data_len); - drop(Box::from_raw(slice as *mut [u8])); + let slice = std::slice::from_raw_parts_mut(account.data.cast_mut(), account.data_len); + drop(Box::from_raw(std::ptr::from_mut::<[u8]>(slice))); } } } diff --git a/wallet-ffi/src/error.rs b/wallet-ffi/src/error.rs index ab9ce6dd..81c52daa 100644 --- a/wallet-ffi/src/error.rs +++ b/wallet-ffi/src/error.rs @@ -44,6 +44,15 @@ pub enum WalletFfiError { InternalError = 99, } +impl WalletFfiError { + /// Check if it's [`WalletFfiError::Success`] or panic. + pub fn unwrap(self) { + let WalletFfiError::Success = self else { + panic!("Called `unwrap()` on error value `{self:#?}`"); + }; + } +} + /// Log an error message to stderr. pub fn print_error(msg: impl Into) { eprintln!("[wallet-ffi] {}", msg.into()); diff --git a/wallet-ffi/src/keys.rs b/wallet-ffi/src/keys.rs index bd26fa8c..ab6982c0 100644 --- a/wallet-ffi/src/keys.rs +++ b/wallet-ffi/src/keys.rs @@ -47,19 +47,16 @@ pub unsafe extern "C" fn wallet_ffi_get_public_account_key( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; let account_id = AccountId::new(unsafe { (*account_id).data }); - let private_key = match wallet.get_account_public_signing_key(account_id) { - Some(k) => k, - None => { - print_error("Public account key not found in wallet"); - return WalletFfiError::KeyNotFound; - } + let Some(private_key) = wallet.get_account_public_signing_key(account_id) else { + print_error("Public account key not found in wallet"); + return WalletFfiError::KeyNotFound; }; let public_key = PublicKey::new_from_private_key(private_key); @@ -112,19 +109,17 @@ pub unsafe extern "C" fn wallet_ffi_get_private_account_keys( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; let account_id = AccountId::new(unsafe { (*account_id).data }); - let (key_chain, _account) = match wallet.storage().user_data.get_private_account(account_id) { - Some(k) => k, - None => { - print_error("Private account not found in wallet"); - return WalletFfiError::AccountNotFound; - } + let Some((key_chain, _account)) = wallet.storage().user_data.get_private_account(account_id) + else { + print_error("Private account not found in wallet"); + return WalletFfiError::AccountNotFound; }; // NPK is a 32-byte array @@ -161,10 +156,10 @@ pub unsafe extern "C" fn wallet_ffi_free_private_account_keys(keys: *mut FfiPriv let keys = &*keys; if !keys.viewing_public_key.is_null() && keys.viewing_public_key_len > 0 { let slice = std::slice::from_raw_parts_mut( - keys.viewing_public_key as *mut u8, + keys.viewing_public_key.cast_mut(), keys.viewing_public_key_len, ); - drop(Box::from_raw(slice as *mut [u8])); + drop(Box::from_raw(std::ptr::from_mut::<[u8]>(slice))); } } } @@ -198,7 +193,7 @@ pub unsafe extern "C" fn wallet_ffi_account_id_to_base58( match std::ffi::CString::new(base58_str) { Ok(s) => s.into_raw(), Err(e) => { - print_error(format!("Failed to create C string: {}", e)); + print_error(format!("Failed to create C string: {e}")); ptr::null_mut() } } @@ -232,7 +227,7 @@ pub unsafe extern "C" fn wallet_ffi_account_id_from_base58( let str_slice = match c_str.to_str() { Ok(s) => s, Err(e) => { - print_error(format!("Invalid UTF-8: {}", e)); + print_error(format!("Invalid UTF-8: {e}")); return WalletFfiError::InvalidUtf8; } }; @@ -240,7 +235,7 @@ pub unsafe extern "C" fn wallet_ffi_account_id_from_base58( let account_id: AccountId = match str_slice.parse() { Ok(id) => id, Err(e) => { - print_error(format!("Invalid Base58 account ID: {}", e)); + print_error(format!("Invalid Base58 account ID: {e}")); return WalletFfiError::InvalidAccountId; } }; diff --git a/wallet-ffi/src/lib.rs b/wallet-ffi/src/lib.rs index 99a0ee98..9069fece 100644 --- a/wallet-ffi/src/lib.rs +++ b/wallet-ffi/src/lib.rs @@ -36,12 +36,12 @@ pub use error::WalletFfiError as FfiError; use tokio::runtime::Handle; pub use types::*; -use crate::error::{print_error, WalletFfiError}; +use crate::error::print_error; static TOKIO_RUNTIME: OnceLock = OnceLock::new(); /// Get a reference to the global runtime. -pub(crate) fn get_runtime() -> Result<&'static Handle, WalletFfiError> { +pub(crate) fn get_runtime() -> &'static Handle { let runtime = TOKIO_RUNTIME.get_or_init(|| { match tokio::runtime::Builder::new_multi_thread() .enable_all() @@ -54,11 +54,11 @@ pub(crate) fn get_runtime() -> Result<&'static Handle, WalletFfiError> { } } }); - Ok(runtime.handle()) + runtime.handle() } /// Run an async future on the global runtime, blocking until completion. -pub(crate) fn block_on(future: F) -> Result { - let runtime = get_runtime()?; - Ok(runtime.block_on(future)) +pub(crate) fn block_on(future: F) -> F::Output { + let runtime = get_runtime(); + runtime.block_on(future) } diff --git a/wallet-ffi/src/pinata.rs b/wallet-ffi/src/pinata.rs index 2cf2fc84..ad15a4d6 100644 --- a/wallet-ffi/src/pinata.rs +++ b/wallet-ffi/src/pinata.rs @@ -63,7 +63,7 @@ pub unsafe extern "C" fn wallet_ffi_claim_pinata( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -75,9 +75,9 @@ pub unsafe extern "C" fn wallet_ffi_claim_pinata( let pinata = Pinata(&wallet); match block_on(pinata.claim(pinata_id, winner_id, solution)) { - Ok(Ok(response)) => { + Ok(response) => { let tx_hash = CString::new(response.tx_hash.to_string()) - .map(|s| s.into_raw()) + .map(std::ffi::CString::into_raw) .unwrap_or(ptr::null_mut()); unsafe { @@ -86,15 +86,14 @@ pub unsafe extern "C" fn wallet_ffi_claim_pinata( } WalletFfiError::Success } - Ok(Err(e)) => { - print_error(format!("Pinata claim failed: {:?}", e)); + Err(e) => { + print_error(format!("Pinata claim failed: {e:?}")); unsafe { (*out_result).tx_hash = ptr::null_mut(); (*out_result).success = false; } - map_execution_error(e) + map_execution_error(&e) } - Err(e) => e, } } @@ -161,7 +160,7 @@ pub unsafe extern "C" fn wallet_ffi_claim_pinata_private_owned_already_initializ let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -183,9 +182,9 @@ pub unsafe extern "C" fn wallet_ffi_claim_pinata_private_owned_already_initializ pinata .claim_private_owned_account_already_initialized(pinata_id, winner_id, solution, proof), ) { - Ok(Ok((response, _shared_key))) => { + Ok((response, _shared_key)) => { let tx_hash = CString::new(response.tx_hash.to_string()) - .map(|s| s.into_raw()) + .map(std::ffi::CString::into_raw) .unwrap_or(ptr::null_mut()); unsafe { @@ -194,18 +193,16 @@ pub unsafe extern "C" fn wallet_ffi_claim_pinata_private_owned_already_initializ } WalletFfiError::Success } - Ok(Err(e)) => { + Err(e) => { print_error(format!( - "Pinata private claim (already initialized) failed: {:?}", - e + "Pinata private claim (already initialized) failed: {e:?}" )); unsafe { (*out_result).tx_hash = ptr::null_mut(); (*out_result).success = false; } - map_execution_error(e) + map_execution_error(&e) } - Err(e) => e, } } @@ -259,7 +256,7 @@ pub unsafe extern "C" fn wallet_ffi_claim_pinata_private_owned_not_initialized( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -271,9 +268,9 @@ pub unsafe extern "C" fn wallet_ffi_claim_pinata_private_owned_not_initialized( let pinata = Pinata(&wallet); match block_on(pinata.claim_private_owned_account(pinata_id, winner_id, solution)) { - Ok(Ok((response, _shared_key))) => { + Ok((response, _shared_key)) => { let tx_hash = CString::new(response.tx_hash.to_string()) - .map(|s| s.into_raw()) + .map(std::ffi::CString::into_raw) .unwrap_or(ptr::null_mut()); unsafe { @@ -282,27 +279,26 @@ pub unsafe extern "C" fn wallet_ffi_claim_pinata_private_owned_not_initialized( } WalletFfiError::Success } - Ok(Err(e)) => { + Err(e) => { print_error(format!( - "Pinata private claim (not initialized) failed: {:?}", - e + "Pinata private claim (not initialized) failed: {e:?}" )); unsafe { (*out_result).tx_hash = ptr::null_mut(); (*out_result).success = false; } - map_execution_error(e) + map_execution_error(&e) } - Err(e) => e, } } -fn map_execution_error(e: ExecutionFailureKind) -> WalletFfiError { +fn map_execution_error(e: &ExecutionFailureKind) -> WalletFfiError { match e { ExecutionFailureKind::InsufficientFundsError => WalletFfiError::InsufficientFunds, ExecutionFailureKind::KeyNotFoundError => WalletFfiError::KeyNotFound, - ExecutionFailureKind::SequencerError => WalletFfiError::NetworkError, - ExecutionFailureKind::SequencerClientError(_) => WalletFfiError::NetworkError, + ExecutionFailureKind::SequencerError | ExecutionFailureKind::SequencerClientError(_) => { + WalletFfiError::NetworkError + } _ => WalletFfiError::InternalError, } } diff --git a/wallet-ffi/src/sync.rs b/wallet-ffi/src/sync.rs index 3979f935..c321feb0 100644 --- a/wallet-ffi/src/sync.rs +++ b/wallet-ffi/src/sync.rs @@ -40,18 +40,17 @@ pub unsafe extern "C" fn wallet_ffi_sync_to_block( let mut wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; match block_on(wallet.sync_to_block(block_id)) { - Ok(Ok(())) => WalletFfiError::Success, - Ok(Err(e)) => { - print_error(format!("Sync failed: {}", e)); + Ok(()) => WalletFfiError::Success, + Err(e) => { + print_error(format!("Sync failed: {e}")); WalletFfiError::SyncError } - Err(e) => e, } } @@ -86,7 +85,7 @@ pub unsafe extern "C" fn wallet_ffi_get_last_synced_block( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -130,22 +129,21 @@ pub unsafe extern "C" fn wallet_ffi_get_current_block_height( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; match block_on(wallet.sequencer_client.get_last_block()) { - Ok(Ok(response)) => { + Ok(response) => { unsafe { *out_block_height = response.last_block; } WalletFfiError::Success } - Ok(Err(e)) => { - print_error(format!("Failed to get block height: {:?}", e)); + Err(e) => { + print_error(format!("Failed to get block height: {e:?}")); WalletFfiError::NetworkError } - Err(e) => e, } } diff --git a/wallet-ffi/src/transfer.rs b/wallet-ffi/src/transfer.rs index c609529d..5bee3420 100644 --- a/wallet-ffi/src/transfer.rs +++ b/wallet-ffi/src/transfer.rs @@ -61,7 +61,7 @@ pub unsafe extern "C" fn wallet_ffi_transfer_public( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -73,9 +73,9 @@ pub unsafe extern "C" fn wallet_ffi_transfer_public( let transfer = NativeTokenTransfer(&wallet); match block_on(transfer.send_public_transfer(from_id, to_id, amount)) { - Ok(Ok(response)) => { + Ok(response) => { let tx_hash = CString::new(response.tx_hash.to_string()) - .map(|s| s.into_raw()) + .map(std::ffi::CString::into_raw) .unwrap_or(ptr::null_mut()); unsafe { @@ -84,15 +84,14 @@ pub unsafe extern "C" fn wallet_ffi_transfer_public( } WalletFfiError::Success } - Ok(Err(e)) => { - print_error(format!("Transfer failed: {:?}", e)); + Err(e) => { + print_error(format!("Transfer failed: {e:?}")); unsafe { (*out_result).tx_hash = ptr::null_mut(); (*out_result).success = false; } map_execution_error(e) } - Err(e) => e, } } @@ -143,7 +142,7 @@ pub unsafe extern "C" fn wallet_ffi_transfer_shielded( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -164,9 +163,9 @@ pub unsafe extern "C" fn wallet_ffi_transfer_shielded( match block_on( transfer.send_shielded_transfer_to_outer_account(from_id, to_npk, to_vpk, amount), ) { - Ok(Ok((response, _shared_key))) => { + Ok((response, _shared_key)) => { let tx_hash = CString::new(response.tx_hash) - .map(|s| s.into_raw()) + .map(std::ffi::CString::into_raw) .unwrap_or(ptr::null_mut()); unsafe { @@ -175,15 +174,14 @@ pub unsafe extern "C" fn wallet_ffi_transfer_shielded( } WalletFfiError::Success } - Ok(Err(e)) => { - print_error(format!("Transfer failed: {:?}", e)); + Err(e) => { + print_error(format!("Transfer failed: {e:?}")); unsafe { (*out_result).tx_hash = ptr::null_mut(); (*out_result).success = false; } map_execution_error(e) } - Err(e) => e, } } @@ -234,7 +232,7 @@ pub unsafe extern "C" fn wallet_ffi_transfer_deshielded( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -246,9 +244,9 @@ pub unsafe extern "C" fn wallet_ffi_transfer_deshielded( let transfer = NativeTokenTransfer(&wallet); match block_on(transfer.send_deshielded_transfer(from_id, to_id, amount)) { - Ok(Ok((response, _shared_key))) => { + Ok((response, _shared_key)) => { let tx_hash = CString::new(response.tx_hash) - .map(|s| s.into_raw()) + .map(std::ffi::CString::into_raw) .unwrap_or(ptr::null_mut()); unsafe { @@ -257,15 +255,14 @@ pub unsafe extern "C" fn wallet_ffi_transfer_deshielded( } WalletFfiError::Success } - Ok(Err(e)) => { - print_error(format!("Transfer failed: {:?}", e)); + Err(e) => { + print_error(format!("Transfer failed: {e:?}")); unsafe { (*out_result).tx_hash = ptr::null_mut(); (*out_result).success = false; } map_execution_error(e) } - Err(e) => e, } } @@ -316,7 +313,7 @@ pub unsafe extern "C" fn wallet_ffi_transfer_private( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -336,9 +333,9 @@ pub unsafe extern "C" fn wallet_ffi_transfer_private( match block_on(transfer.send_private_transfer_to_outer_account(from_id, to_npk, to_vpk, amount)) { - Ok(Ok((response, _shared_key))) => { + Ok((response, _shared_key)) => { let tx_hash = CString::new(response.tx_hash) - .map(|s| s.into_raw()) + .map(std::ffi::CString::into_raw) .unwrap_or(ptr::null_mut()); unsafe { @@ -347,15 +344,14 @@ pub unsafe extern "C" fn wallet_ffi_transfer_private( } WalletFfiError::Success } - Ok(Err(e)) => { - print_error(format!("Transfer failed: {:?}", e)); + Err(e) => { + print_error(format!("Transfer failed: {e:?}")); unsafe { (*out_result).tx_hash = ptr::null_mut(); (*out_result).success = false; } map_execution_error(e) } - Err(e) => e, } } @@ -409,7 +405,7 @@ pub unsafe extern "C" fn wallet_ffi_transfer_shielded_owned( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -421,9 +417,9 @@ pub unsafe extern "C" fn wallet_ffi_transfer_shielded_owned( let transfer = NativeTokenTransfer(&wallet); match block_on(transfer.send_shielded_transfer(from_id, to_id, amount)) { - Ok(Ok((response, _shared_key))) => { + Ok((response, _shared_key)) => { let tx_hash = CString::new(response.tx_hash) - .map(|s| s.into_raw()) + .map(std::ffi::CString::into_raw) .unwrap_or(ptr::null_mut()); unsafe { @@ -432,15 +428,14 @@ pub unsafe extern "C" fn wallet_ffi_transfer_shielded_owned( } WalletFfiError::Success } - Ok(Err(e)) => { - print_error(format!("Transfer failed: {:?}", e)); + Err(e) => { + print_error(format!("Transfer failed: {e:?}")); unsafe { (*out_result).tx_hash = ptr::null_mut(); (*out_result).success = false; } map_execution_error(e) } - Err(e) => e, } } @@ -494,7 +489,7 @@ pub unsafe extern "C" fn wallet_ffi_transfer_private_owned( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -506,9 +501,9 @@ pub unsafe extern "C" fn wallet_ffi_transfer_private_owned( let transfer = NativeTokenTransfer(&wallet); match block_on(transfer.send_private_transfer_to_owned_account(from_id, to_id, amount)) { - Ok(Ok((response, _shared_keys))) => { + Ok((response, _shared_keys)) => { let tx_hash = CString::new(response.tx_hash) - .map(|s| s.into_raw()) + .map(std::ffi::CString::into_raw) .unwrap_or(ptr::null_mut()); unsafe { @@ -517,15 +512,14 @@ pub unsafe extern "C" fn wallet_ffi_transfer_private_owned( } WalletFfiError::Success } - Ok(Err(e)) => { - print_error(format!("Transfer failed: {:?}", e)); + Err(e) => { + print_error(format!("Transfer failed: {e:?}")); unsafe { (*out_result).tx_hash = ptr::null_mut(); (*out_result).success = false; } map_execution_error(e) } - Err(e) => e, } } @@ -569,7 +563,7 @@ pub unsafe extern "C" fn wallet_ffi_register_public_account( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -579,9 +573,9 @@ pub unsafe extern "C" fn wallet_ffi_register_public_account( let transfer = NativeTokenTransfer(&wallet); match block_on(transfer.register_account(account_id)) { - Ok(Ok(response)) => { + Ok(response) => { let tx_hash = CString::new(response.tx_hash.to_string()) - .map(|s| s.into_raw()) + .map(std::ffi::CString::into_raw) .unwrap_or(ptr::null_mut()); unsafe { @@ -590,15 +584,14 @@ pub unsafe extern "C" fn wallet_ffi_register_public_account( } WalletFfiError::Success } - Ok(Err(e)) => { - print_error(format!("Registration failed: {:?}", e)); + Err(e) => { + print_error(format!("Registration failed: {e:?}")); unsafe { (*out_result).tx_hash = ptr::null_mut(); (*out_result).success = false; } map_execution_error(e) } - Err(e) => e, } } @@ -642,7 +635,7 @@ pub unsafe extern "C" fn wallet_ffi_register_private_account( let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; @@ -652,9 +645,9 @@ pub unsafe extern "C" fn wallet_ffi_register_private_account( let transfer = NativeTokenTransfer(&wallet); match block_on(transfer.register_account_private(account_id)) { - Ok(Ok((res, _secret))) => { + Ok((res, _secret)) => { let tx_hash = CString::new(res.tx_hash) - .map(|s| s.into_raw()) + .map(std::ffi::CString::into_raw) .unwrap_or(ptr::null_mut()); unsafe { @@ -663,15 +656,14 @@ pub unsafe extern "C" fn wallet_ffi_register_private_account( } WalletFfiError::Success } - Ok(Err(e)) => { - print_error(format!("Registration failed: {:?}", e)); + Err(e) => { + print_error(format!("Registration failed: {e:?}")); unsafe { (*out_result).tx_hash = ptr::null_mut(); (*out_result).success = false; } map_execution_error(e) } - Err(e) => e, } } @@ -694,12 +686,17 @@ pub unsafe extern "C" fn wallet_ffi_free_transfer_result(result: *mut FfiTransfe } } +#[expect( + clippy::needless_pass_by_value, + reason = "Error is consumed to create FFI error response" +)] fn map_execution_error(e: ExecutionFailureKind) -> WalletFfiError { match e { ExecutionFailureKind::InsufficientFundsError => WalletFfiError::InsufficientFunds, ExecutionFailureKind::KeyNotFoundError => WalletFfiError::KeyNotFound, - ExecutionFailureKind::SequencerError => WalletFfiError::NetworkError, - ExecutionFailureKind::SequencerClientError(_) => WalletFfiError::NetworkError, + ExecutionFailureKind::SequencerError | ExecutionFailureKind::SequencerClientError(_) => { + WalletFfiError::NetworkError + } _ => WalletFfiError::InternalError, } } diff --git a/wallet-ffi/src/types.rs b/wallet-ffi/src/types.rs index e99286c7..2922e5d1 100644 --- a/wallet-ffi/src/types.rs +++ b/wallet-ffi/src/types.rs @@ -17,7 +17,7 @@ pub struct WalletHandle { _private: [u8; 0], } -/// 32-byte array type for AccountId, keys, hashes, etc. +/// 32-byte array type for `AccountId`, keys, hashes, etc. #[repr(C)] #[derive(Clone, Copy, Default)] pub struct FfiBytes32 { @@ -103,7 +103,7 @@ pub struct FfiAccountListEntry { pub is_public: bool, } -/// List of accounts returned by wallet_ffi_list_accounts. +/// List of accounts returned by `wallet_ffi_list_accounts`. #[repr(C)] pub struct FfiAccountList { pub entries: *mut FfiAccountListEntry, @@ -142,17 +142,20 @@ impl Default for FfiTransferResult { impl FfiBytes32 { /// Create from a 32-byte array. + #[must_use] pub fn from_bytes(bytes: [u8; 32]) -> Self { Self { data: bytes } } - /// Create from an AccountId. + /// Create from an `AccountId`. + #[must_use] pub fn from_account_id(id: &nssa::AccountId) -> Self { Self { data: *id.value() } } } impl FfiPrivateAccountKeys { + #[must_use] pub fn npk(&self) -> nssa_core::NullifierPublicKey { nssa_core::NullifierPublicKey(self.nullifier_public_key.data) } diff --git a/wallet-ffi/src/wallet.rs b/wallet-ffi/src/wallet.rs index 7dd76d4e..26a31c20 100644 --- a/wallet-ffi/src/wallet.rs +++ b/wallet-ffi/src/wallet.rs @@ -15,7 +15,7 @@ use crate::{ types::WalletHandle, }; -/// Internal wrapper around WalletCore with mutex for thread safety. +/// Internal wrapper around `WalletCore` with mutex for thread safety. pub(crate) struct WalletWrapper { pub core: Mutex, } @@ -28,7 +28,7 @@ pub(crate) fn get_wallet( print_error("Null wallet handle"); return Err(WalletFfiError::NullPointer); } - Ok(unsafe { &*(handle as *mut WalletWrapper) }) + Ok(unsafe { &*handle.cast::() }) } /// Helper to get a mutable reference to the wallet wrapper. @@ -40,13 +40,13 @@ pub(crate) fn get_wallet_mut( print_error("Null wallet handle"); return Err(WalletFfiError::NullPointer); } - Ok(unsafe { &mut *(handle as *mut WalletWrapper) }) + Ok(unsafe { &mut *handle.cast::() }) } -/// Helper to convert a C string to a Rust PathBuf. +/// Helper to convert a C string to a Rust `PathBuf`. fn c_str_to_path(ptr: *const c_char, name: &str) -> Result { if ptr.is_null() { - print_error(format!("Null pointer for {}", name)); + print_error(format!("Null pointer for {name}")); return Err(WalletFfiError::NullPointer); } @@ -54,7 +54,7 @@ fn c_str_to_path(ptr: *const c_char, name: &str) -> Result Ok(PathBuf::from(s)), Err(e) => { - print_error(format!("Invalid UTF-8 in {}: {}", name, e)); + print_error(format!("Invalid UTF-8 in {name}: {e}")); Err(WalletFfiError::InvalidUtf8) } } @@ -63,7 +63,7 @@ fn c_str_to_path(ptr: *const c_char, name: &str) -> Result Result { if ptr.is_null() { - print_error(format!("Null pointer for {}", name)); + print_error(format!("Null pointer for {name}")); return Err(WalletFfiError::NullPointer); } @@ -71,7 +71,7 @@ fn c_str_to_string(ptr: *const c_char, name: &str) -> Result Ok(s.to_string()), Err(e) => { - print_error(format!("Invalid UTF-8 in {}: {}", name, e)); + print_error(format!("Invalid UTF-8 in {name}: {e}")); Err(WalletFfiError::InvalidUtf8) } } @@ -99,19 +99,16 @@ pub unsafe extern "C" fn wallet_ffi_create_new( storage_path: *const c_char, password: *const c_char, ) -> *mut WalletHandle { - let config_path = match c_str_to_path(config_path, "config_path") { - Ok(p) => p, - Err(_) => return ptr::null_mut(), + let Ok(config_path) = c_str_to_path(config_path, "config_path") else { + return ptr::null_mut(); }; - let storage_path = match c_str_to_path(storage_path, "storage_path") { - Ok(p) => p, - Err(_) => return ptr::null_mut(), + let Ok(storage_path) = c_str_to_path(storage_path, "storage_path") else { + return ptr::null_mut(); }; - let password = match c_str_to_string(password, "password") { - Ok(s) => s, - Err(_) => return ptr::null_mut(), + let Ok(password) = c_str_to_string(password, "password") else { + return ptr::null_mut(); }; match WalletCore::new_init_storage(config_path, storage_path, None, password) { @@ -119,10 +116,10 @@ pub unsafe extern "C" fn wallet_ffi_create_new( let wrapper = Box::new(WalletWrapper { core: Mutex::new(core), }); - Box::into_raw(wrapper) as *mut WalletHandle + Box::into_raw(wrapper).cast::() } Err(e) => { - print_error(format!("Failed to create wallet: {}", e)); + print_error(format!("Failed to create wallet: {e}")); ptr::null_mut() } } @@ -147,14 +144,12 @@ pub unsafe extern "C" fn wallet_ffi_open( config_path: *const c_char, storage_path: *const c_char, ) -> *mut WalletHandle { - let config_path = match c_str_to_path(config_path, "config_path") { - Ok(p) => p, - Err(_) => return ptr::null_mut(), + let Ok(config_path) = c_str_to_path(config_path, "config_path") else { + return ptr::null_mut(); }; - let storage_path = match c_str_to_path(storage_path, "storage_path") { - Ok(p) => p, - Err(_) => return ptr::null_mut(), + let Ok(storage_path) = c_str_to_path(storage_path, "storage_path") else { + return ptr::null_mut(); }; match WalletCore::new_update_chain(config_path, storage_path, None) { @@ -162,10 +157,10 @@ pub unsafe extern "C" fn wallet_ffi_open( let wrapper = Box::new(WalletWrapper { core: Mutex::new(core), }); - Box::into_raw(wrapper) as *mut WalletHandle + Box::into_raw(wrapper).cast::() } Err(e) => { - print_error(format!("Failed to open wallet: {}", e)); + print_error(format!("Failed to open wallet: {e}")); ptr::null_mut() } } @@ -183,7 +178,7 @@ pub unsafe extern "C" fn wallet_ffi_open( pub unsafe extern "C" fn wallet_ffi_destroy(handle: *mut WalletHandle) { if !handle.is_null() { unsafe { - drop(Box::from_raw(handle as *mut WalletWrapper)); + drop(Box::from_raw(handle.cast::())); } } } @@ -212,18 +207,17 @@ pub unsafe extern "C" fn wallet_ffi_save(handle: *mut WalletHandle) -> WalletFfi let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return WalletFfiError::InternalError; } }; match block_on(wallet.store_persistent_data()) { - Ok(Ok(())) => WalletFfiError::Success, - Ok(Err(e)) => { - print_error(format!("Failed to save wallet: {}", e)); + Ok(()) => WalletFfiError::Success, + Err(e) => { + print_error(format!("Failed to save wallet: {e}")); WalletFfiError::StorageError } - Err(e) => e, } } @@ -241,15 +235,14 @@ pub unsafe extern "C" fn wallet_ffi_save(handle: *mut WalletHandle) -> WalletFfi /// - `handle` must be a valid wallet handle from `wallet_ffi_create_new` or `wallet_ffi_open` #[no_mangle] pub unsafe extern "C" fn wallet_ffi_get_sequencer_addr(handle: *mut WalletHandle) -> *mut c_char { - let wrapper = match get_wallet(handle) { - Ok(w) => w, - Err(_) => return ptr::null_mut(), + let Ok(wrapper) = get_wallet(handle) else { + return ptr::null_mut(); }; let wallet = match wrapper.core.lock() { Ok(w) => w, Err(e) => { - print_error(format!("Failed to lock wallet: {}", e)); + print_error(format!("Failed to lock wallet: {e}")); return ptr::null_mut(); } }; @@ -259,7 +252,7 @@ pub unsafe extern "C" fn wallet_ffi_get_sequencer_addr(handle: *mut WalletHandle match std::ffi::CString::new(addr) { Ok(s) => s.into_raw(), Err(e) => { - print_error(format!("Invalid sequencer address: {}", e)); + print_error(format!("Invalid sequencer address: {e}")); ptr::null_mut() } } diff --git a/wallet-ffi/wallet_ffi.h b/wallet-ffi/wallet_ffi.h index 6b191506..810feeb5 100644 --- a/wallet-ffi/wallet_ffi.h +++ b/wallet-ffi/wallet_ffi.h @@ -120,7 +120,7 @@ typedef struct WalletHandle { } WalletHandle; /** - * 32-byte array type for AccountId, keys, hashes, etc. + * 32-byte array type for `AccountId`, keys, hashes, etc. */ typedef struct FfiBytes32 { uint8_t data[32]; @@ -135,7 +135,7 @@ typedef struct FfiAccountListEntry { } FfiAccountListEntry; /** - * List of accounts returned by wallet_ffi_list_accounts. + * List of accounts returned by `wallet_ffi_list_accounts`. */ typedef struct FfiAccountList { struct FfiAccountListEntry *entries; diff --git a/wallet/src/cli/account.rs b/wallet/src/cli/account.rs index 387a8c1c..bd028794 100644 --- a/wallet/src/cli/account.rs +++ b/wallet/src/cli/account.rs @@ -159,7 +159,7 @@ impl WalletSubcommand for NewSubcommand { } } -/// Formats account details for display, returning (description, json_view) +/// Formats account details for display, returning (description, `json_view`) fn format_account_details(account: &Account) -> (String, String) { let auth_tr_prog_id = Program::authenticated_transfer_program().id(); let token_prog_id = Program::token().id(); @@ -384,7 +384,7 @@ impl WalletSubcommand for AccountSubcommand { } // Public key tree accounts - for (id, chain_index) in user_data.public_key_tree.account_id_map.iter() { + for (id, chain_index) in &user_data.public_key_tree.account_id_map { println!( "{}", format_with_label(&format!("{chain_index} Public/{id}"), *id) @@ -401,7 +401,7 @@ impl WalletSubcommand for AccountSubcommand { } // Private key tree accounts - for (id, chain_index) in user_data.private_key_tree.account_id_map.iter() { + for (id, chain_index) in &user_data.private_key_tree.account_id_map { println!( "{}", format_with_label(&format!("{chain_index} Private/{id}"), *id) diff --git a/wallet/src/cli/config.rs b/wallet/src/cli/config.rs index bc0e3662..99339132 100644 --- a/wallet/src/cli/config.rs +++ b/wallet/src/cli/config.rs @@ -97,7 +97,7 @@ impl WalletSubcommand for ConfigSubcommand { "seq_poll_timeout" => { wallet_core.storage.wallet_config.seq_poll_timeout = humantime::parse_duration(&value) - .map_err(|e| anyhow::anyhow!("Invalid duration: {}", e))?; + .map_err(|e| anyhow::anyhow!("Invalid duration: {e}"))?; } "seq_tx_poll_max_blocks" => { wallet_core.storage.wallet_config.seq_tx_poll_max_blocks = value.parse()?; @@ -120,7 +120,7 @@ impl WalletSubcommand for ConfigSubcommand { } } - wallet_core.store_config_changes().await? + wallet_core.store_config_changes().await?; } ConfigSubcommand::Description { key } => match key.as_str() { "override_rust_log" => { diff --git a/wallet/src/cli/mod.rs b/wallet/src/cli/mod.rs index 87c2bb31..42e2b4b2 100644 --- a/wallet/src/cli/mod.rs +++ b/wallet/src/cli/mod.rs @@ -68,11 +68,11 @@ pub enum Command { DeployProgram { binary_filepath: PathBuf }, } -/// To execute commands, env var NSSA_WALLET_HOME_DIR must be set into directory with config +/// To execute commands, env var `NSSA_WALLET_HOME_DIR` must be set into directory with config /// /// All account addresses must be valid 32 byte base58 strings. /// -/// All account account_ids must be provided as {privacy_prefix}/{account_id}, +/// All account `account_ids` must be provided as {`privacy_prefix}/{account_id`}, /// where valid options for `privacy_prefix` is `Public` and `Private` #[derive(Parser, Debug)] #[clap(version, about)] @@ -124,27 +124,31 @@ pub async fn execute_subcommand( else { panic!("Missing authenticated transfer ID from remote"); }; - if authenticated_transfer_id != &Program::authenticated_transfer_program().id() { - panic!("Local ID for authenticated transfer program is different from remote"); - } + assert!( + authenticated_transfer_id == &Program::authenticated_transfer_program().id(), + "Local ID for authenticated transfer program is different from remote" + ); let Some(token_id) = remote_program_ids.get("token") else { panic!("Missing token program ID from remote"); }; - if token_id != &Program::token().id() { - panic!("Local ID for token program is different from remote"); - } + assert!( + token_id == &Program::token().id(), + "Local ID for token program is different from remote" + ); let Some(circuit_id) = remote_program_ids.get("privacy_preserving_circuit") else { panic!("Missing privacy preserving circuit ID from remote"); }; - if circuit_id != &nssa::PRIVACY_PRESERVING_CIRCUIT_ID { - panic!("Local ID for privacy preserving circuit is different from remote"); - } + assert!( + circuit_id == &nssa::PRIVACY_PRESERVING_CIRCUIT_ID, + "Local ID for privacy preserving circuit is different from remote" + ); let Some(amm_id) = remote_program_ids.get("amm") else { panic!("Missing AMM program ID from remote"); }; - if amm_id != &Program::amm().id() { - panic!("Local ID for AMM program is different from remote"); - } + assert!( + amm_id == &Program::amm().id(), + "Local ID for AMM program is different from remote" + ); println!("✅All looks good!"); diff --git a/wallet/src/cli/programs/amm.rs b/wallet/src/cli/programs/amm.rs index ce919b7c..5da445d6 100644 --- a/wallet/src/cli/programs/amm.rs +++ b/wallet/src/cli/programs/amm.rs @@ -14,17 +14,17 @@ use crate::{ pub enum AmmProgramAgnosticSubcommand { /// Produce a new pool /// - /// user_holding_a and user_holding_b must be owned. + /// `user_holding_a` and `user_holding_b` must be owned. /// /// Only public execution allowed New { - /// user_holding_a - valid 32 byte base58 string with privacy prefix + /// `user_holding_a` - valid 32 byte base58 string with privacy prefix #[arg(long)] user_holding_a: String, - /// user_holding_b - valid 32 byte base58 string with privacy prefix + /// `user_holding_b` - valid 32 byte base58 string with privacy prefix #[arg(long)] user_holding_b: String, - /// user_holding_lp - valid 32 byte base58 string with privacy prefix + /// `user_holding_lp` - valid 32 byte base58 string with privacy prefix #[arg(long)] user_holding_lp: String, #[arg(long)] @@ -38,33 +38,33 @@ pub enum AmmProgramAgnosticSubcommand { /// /// Only public execution allowed Swap { - /// user_holding_a - valid 32 byte base58 string with privacy prefix + /// `user_holding_a` - valid 32 byte base58 string with privacy prefix #[arg(long)] user_holding_a: String, - /// user_holding_b - valid 32 byte base58 string with privacy prefix + /// `user_holding_b` - valid 32 byte base58 string with privacy prefix #[arg(long)] user_holding_b: String, #[arg(long)] amount_in: u128, #[arg(long)] min_amount_out: u128, - /// token_definition - valid 32 byte base58 string WITHOUT privacy prefix + /// `token_definition` - valid 32 byte base58 string WITHOUT privacy prefix #[arg(long)] token_definition: String, }, /// Add liquidity /// - /// user_holding_a and user_holding_b must be owned. + /// `user_holding_a` and `user_holding_b` must be owned. /// /// Only public execution allowed AddLiquidity { - /// user_holding_a - valid 32 byte base58 string with privacy prefix + /// `user_holding_a` - valid 32 byte base58 string with privacy prefix #[arg(long)] user_holding_a: String, - /// user_holding_b - valid 32 byte base58 string with privacy prefix + /// `user_holding_b` - valid 32 byte base58 string with privacy prefix #[arg(long)] user_holding_b: String, - /// user_holding_lp - valid 32 byte base58 string with privacy prefix + /// `user_holding_lp` - valid 32 byte base58 string with privacy prefix #[arg(long)] user_holding_lp: String, #[arg(long)] @@ -76,17 +76,17 @@ pub enum AmmProgramAgnosticSubcommand { }, /// Remove liquidity /// - /// user_holding_lp must be owned. + /// `user_holding_lp` must be owned. /// /// Only public execution allowed RemoveLiquidity { - /// user_holding_a - valid 32 byte base58 string with privacy prefix + /// `user_holding_a` - valid 32 byte base58 string with privacy prefix #[arg(long)] user_holding_a: String, - /// user_holding_b - valid 32 byte base58 string with privacy prefix + /// `user_holding_b` - valid 32 byte base58 string with privacy prefix #[arg(long)] user_holding_b: String, - /// user_holding_lp - valid 32 byte base58 string with privacy prefix + /// `user_holding_lp` - valid 32 byte base58 string with privacy prefix #[arg(long)] user_holding_lp: String, #[arg(long)] diff --git a/wallet/src/cli/programs/native_token_transfer.rs b/wallet/src/cli/programs/native_token_transfer.rs index 9dd4fca6..f03194ca 100644 --- a/wallet/src/cli/programs/native_token_transfer.rs +++ b/wallet/src/cli/programs/native_token_transfer.rs @@ -16,7 +16,7 @@ use crate::{ pub enum AuthTransferSubcommand { /// Initialize account under authenticated transfer program Init { - /// account_id - valid 32 byte base58 string with privacy prefix + /// `account_id` - valid 32 byte base58 string with privacy prefix #[arg(long)] account_id: String, }, @@ -33,10 +33,10 @@ pub enum AuthTransferSubcommand { /// to - valid 32 byte base58 string with privacy prefix #[arg(long)] to: Option, - /// to_npk - valid 32 byte hex string + /// `to_npk` - valid 32 byte hex string #[arg(long)] to_npk: Option, - /// to_vpk - valid 33 byte hex string + /// `to_vpk` - valid 33 byte hex string #[arg(long)] to_vpk: Option, /// amount - amount of balance to move @@ -87,7 +87,7 @@ impl WalletSubcommand for AuthTransferSubcommand { let acc_decode_data = vec![Decode(secret, account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -252,10 +252,10 @@ pub enum NativeTokenTransferProgramSubcommandShielded { /// from - valid 32 byte hex string #[arg(long)] from: String, - /// to_npk - valid 32 byte hex string + /// `to_npk` - valid 32 byte hex string #[arg(long)] to_npk: String, - /// to_vpk - valid 33 byte hex string + /// `to_vpk` - valid 33 byte hex string #[arg(long)] to_vpk: String, /// amount - amount of balance to move @@ -289,10 +289,10 @@ pub enum NativeTokenTransferProgramSubcommandPrivate { /// from - valid 32 byte hex string #[arg(long)] from: String, - /// to_npk - valid 32 byte hex string + /// `to_npk` - valid 32 byte hex string #[arg(long)] to_npk: String, - /// to_vpk - valid 33 byte hex string + /// `to_vpk` - valid 33 byte hex string #[arg(long)] to_vpk: String, /// amount - amount of balance to move @@ -324,7 +324,7 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommandPrivate { let acc_decode_data = vec![Decode(secret_from, from), Decode(secret_to, to)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -364,7 +364,7 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommandPrivate { let acc_decode_data = vec![Decode(secret_from, from)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -400,7 +400,7 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommandShielded { let acc_decode_data = vec![Decode(secret, to)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -473,7 +473,7 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommand { let acc_decode_data = vec![Decode(secret, from)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } diff --git a/wallet/src/cli/programs/pinata.rs b/wallet/src/cli/programs/pinata.rs index d7e28528..1fec8058 100644 --- a/wallet/src/cli/programs/pinata.rs +++ b/wallet/src/cli/programs/pinata.rs @@ -69,10 +69,10 @@ pub enum PinataProgramSubcommandPublic { // TODO: Testnet only. Refactor to prevent compilation on mainnet. // Claim piñata prize Claim { - /// pinata_account_id - valid 32 byte hex string + /// `pinata_account_id` - valid 32 byte hex string #[arg(long)] pinata_account_id: String, - /// winner_account_id - valid 32 byte hex string + /// `winner_account_id` - valid 32 byte hex string #[arg(long)] winner_account_id: String, }, @@ -84,10 +84,10 @@ pub enum PinataProgramSubcommandPrivate { // TODO: Testnet only. Refactor to prevent compilation on mainnet. // Claim piñata prize ClaimPrivateOwned { - /// pinata_account_id - valid 32 byte hex string + /// `pinata_account_id` - valid 32 byte hex string #[arg(long)] pinata_account_id: String, - /// winner_account_id - valid 32 byte hex string + /// `winner_account_id` - valid 32 byte hex string #[arg(long)] winner_account_id: String, }, @@ -163,7 +163,7 @@ impl WalletSubcommand for PinataProgramSubcommandPrivate { let acc_decode_data = vec![Decode(secret_winner, winner_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } diff --git a/wallet/src/cli/programs/token.rs b/wallet/src/cli/programs/token.rs index 2f83d4ce..805cbbd4 100644 --- a/wallet/src/cli/programs/token.rs +++ b/wallet/src/cli/programs/token.rs @@ -16,10 +16,10 @@ use crate::{ pub enum TokenProgramAgnosticSubcommand { /// Produce a new token New { - /// definition_account_id - valid 32 byte base58 string with privacy prefix + /// `definition_account_id` - valid 32 byte base58 string with privacy prefix #[arg(long)] definition_account_id: String, - /// supply_account_id - valid 32 byte base58 string with privacy prefix + /// `supply_account_id` - valid 32 byte base58 string with privacy prefix #[arg(long)] supply_account_id: String, #[arg(short, long)] @@ -40,10 +40,10 @@ pub enum TokenProgramAgnosticSubcommand { /// to - valid 32 byte base58 string with privacy prefix #[arg(long)] to: Option, - /// to_npk - valid 32 byte hex string + /// `to_npk` - valid 32 byte hex string #[arg(long)] to_npk: Option, - /// to_vpk - valid 33 byte hex string + /// `to_vpk` - valid 33 byte hex string #[arg(long)] to_vpk: Option, /// amount - amount of balance to move @@ -82,10 +82,10 @@ pub enum TokenProgramAgnosticSubcommand { /// holder - valid 32 byte base58 string with privacy prefix #[arg(long)] holder: Option, - /// holder_npk - valid 32 byte hex string + /// `holder_npk` - valid 32 byte hex string #[arg(long)] holder_npk: Option, - /// to_vpk - valid 33 byte hex string + /// `to_vpk` - valid 33 byte hex string #[arg(long)] holder_vpk: Option, /// amount - amount of balance to mint @@ -394,7 +394,7 @@ impl WalletSubcommand for TokenProgramAgnosticSubcommand { } } -/// Represents generic CLI subcommand for a wallet working with token_program +/// Represents generic CLI subcommand for a wallet working with `token_program` #[derive(Subcommand, Debug, Clone)] pub enum TokenProgramSubcommand { /// Creation of new token @@ -414,7 +414,7 @@ pub enum TokenProgramSubcommand { Shielded(TokenProgramSubcommandShielded), } -/// Represents generic public CLI subcommand for a wallet working with token_program +/// Represents generic public CLI subcommand for a wallet working with `token_program` #[derive(Subcommand, Debug, Clone)] pub enum TokenProgramSubcommandPublic { // Transfer tokens using the token program @@ -446,7 +446,7 @@ pub enum TokenProgramSubcommandPublic { }, } -/// Represents generic private CLI subcommand for a wallet working with token_program +/// Represents generic private CLI subcommand for a wallet working with `token_program` #[derive(Subcommand, Debug, Clone)] pub enum TokenProgramSubcommandPrivate { // Transfer tokens using the token program @@ -462,10 +462,10 @@ pub enum TokenProgramSubcommandPrivate { TransferTokenPrivateForeign { #[arg(short, long)] sender_account_id: String, - /// recipient_npk - valid 32 byte hex string + /// `recipient_npk` - valid 32 byte hex string #[arg(long)] recipient_npk: String, - /// recipient_vpk - valid 33 byte hex string + /// `recipient_vpk` - valid 33 byte hex string #[arg(long)] recipient_vpk: String, #[arg(short, long)] @@ -502,7 +502,7 @@ pub enum TokenProgramSubcommandPrivate { }, } -/// Represents deshielded public CLI subcommand for a wallet working with token_program +/// Represents deshielded public CLI subcommand for a wallet working with `token_program` #[derive(Subcommand, Debug, Clone)] pub enum TokenProgramSubcommandDeshielded { // Transfer tokens using the token program @@ -534,7 +534,7 @@ pub enum TokenProgramSubcommandDeshielded { }, } -/// Represents generic shielded CLI subcommand for a wallet working with token_program +/// Represents generic shielded CLI subcommand for a wallet working with `token_program` #[derive(Subcommand, Debug, Clone)] pub enum TokenProgramSubcommandShielded { // Transfer tokens using the token program @@ -550,10 +550,10 @@ pub enum TokenProgramSubcommandShielded { TransferTokenShieldedForeign { #[arg(short, long)] sender_account_id: String, - /// recipient_npk - valid 32 byte hex string + /// `recipient_npk` - valid 32 byte hex string #[arg(long)] recipient_npk: String, - /// recipient_vpk - valid 33 byte hex string + /// `recipient_vpk` - valid 33 byte hex string #[arg(long)] recipient_vpk: String, #[arg(short, long)] @@ -590,7 +590,7 @@ pub enum TokenProgramSubcommandShielded { }, } -/// Represents generic initialization subcommand for a wallet working with token_program +/// Represents generic initialization subcommand for a wallet working with `token_program` #[derive(Subcommand, Debug, Clone)] pub enum CreateNewTokenProgramSubcommand { /// Create a new token using the token program @@ -733,7 +733,7 @@ impl WalletSubcommand for TokenProgramSubcommandPrivate { ]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -779,7 +779,7 @@ impl WalletSubcommand for TokenProgramSubcommandPrivate { let acc_decode_data = vec![Decode(secret_sender, sender_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -816,7 +816,7 @@ impl WalletSubcommand for TokenProgramSubcommandPrivate { ]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -853,7 +853,7 @@ impl WalletSubcommand for TokenProgramSubcommandPrivate { ]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -900,7 +900,7 @@ impl WalletSubcommand for TokenProgramSubcommandPrivate { let acc_decode_data = vec![Decode(secret_definition, definition_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -944,7 +944,7 @@ impl WalletSubcommand for TokenProgramSubcommandDeshielded { let acc_decode_data = vec![Decode(secret_sender, sender_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -978,7 +978,7 @@ impl WalletSubcommand for TokenProgramSubcommandDeshielded { let acc_decode_data = vec![Decode(secret_definition, definition_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -1012,7 +1012,7 @@ impl WalletSubcommand for TokenProgramSubcommandDeshielded { let acc_decode_data = vec![Decode(secret_definition, definition_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -1097,7 +1097,7 @@ impl WalletSubcommand for TokenProgramSubcommandShielded { let acc_decode_data = vec![Decode(secret_recipient, recipient_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -1131,7 +1131,7 @@ impl WalletSubcommand for TokenProgramSubcommandShielded { let acc_decode_data = vec![Decode(secret_holder, holder_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -1165,7 +1165,7 @@ impl WalletSubcommand for TokenProgramSubcommandShielded { let acc_decode_data = vec![Decode(secret_holder, holder_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -1256,7 +1256,7 @@ impl WalletSubcommand for CreateNewTokenProgramSubcommand { ]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -1292,7 +1292,7 @@ impl WalletSubcommand for CreateNewTokenProgramSubcommand { let acc_decode_data = vec![Decode(secret_definition, definition_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } @@ -1328,7 +1328,7 @@ impl WalletSubcommand for CreateNewTokenProgramSubcommand { let acc_decode_data = vec![Decode(secret_supply, supply_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, + &tx, &acc_decode_data, )?; } diff --git a/wallet/src/config.rs b/wallet/src/config.rs index 3780a065..c555e4ed 100644 --- a/wallet/src/config.rs +++ b/wallet/src/config.rs @@ -71,6 +71,7 @@ pub enum PersistentAccountData { pub struct Label(String); impl Label { + #[must_use] pub fn new(label: String) -> Self { Self(label) } @@ -112,6 +113,7 @@ impl PersistentStorage { } impl InitialAccountData { + #[must_use] pub fn account_id(&self) -> nssa::AccountId { match &self { Self::Public(acc) => acc.account_id, @@ -121,6 +123,7 @@ impl InitialAccountData { } impl PersistentAccountData { + #[must_use] pub fn account_id(&self) -> nssa::AccountId { match &self { Self::Public(acc) => acc.account_id, @@ -513,12 +516,13 @@ impl WalletConfig { let config_home = config_path.parent().ok_or_else(|| { anyhow::anyhow!( - "Could not get parent directory of config file at {config_path:#?}" + "Could not get parent directory of config file at {}", + config_path.display() ) })?; std::fs::create_dir_all(config_home)?; - println!("Created configs dir at path {config_home:#?}"); + println!("Created configs dir at path {}", config_home.display()); let mut file = std::fs::OpenOptions::new() .write(true) diff --git a/wallet/src/helperfunctions.rs b/wallet/src/helperfunctions.rs index ce2b3a57..fb3f8f8f 100644 --- a/wallet/src/helperfunctions.rs +++ b/wallet/src/helperfunctions.rs @@ -54,6 +54,7 @@ pub fn fetch_persistent_storage_path() -> Result { } /// Produces data for storage +#[must_use] pub fn produce_data_for_storage( user_data: &NSSAUserData, last_synced_block: u64, @@ -94,7 +95,7 @@ pub fn produce_data_for_storage( pub_sign_key: key.clone(), }) .into(), - ) + ); } for (account_id, (key_chain, account)) in &user_data.default_user_private_accounts { @@ -105,7 +106,7 @@ pub fn produce_data_for_storage( key_chain: key_chain.clone(), }) .into(), - ) + ); } PersistentStorage { @@ -117,7 +118,9 @@ pub fn produce_data_for_storage( pub(crate) fn produce_random_nonces(size: usize) -> Vec { let mut result = vec![[0; 16]; size]; - result.iter_mut().for_each(|bytes| OsRng.fill_bytes(bytes)); + for bytes in &mut result { + OsRng.fill_bytes(bytes); + } result.into_iter().map(Nonce::from_le_bytes).collect() } diff --git a/wallet/src/lib.rs b/wallet/src/lib.rs index 8d8924cf..f7f0d62c 100644 --- a/wallet/src/lib.rs +++ b/wallet/src/lib.rs @@ -70,8 +70,12 @@ impl WalletCore { accounts: persistent_accounts, last_synced_block, labels, - } = PersistentStorage::from_path(&storage_path) - .with_context(|| format!("Failed to read persistent storage at {storage_path:#?}"))?; + } = PersistentStorage::from_path(&storage_path).with_context(|| { + format!( + "Failed to read persistent storage at {}", + storage_path.display() + ) + })?; Self::new( config_path, @@ -104,8 +108,13 @@ impl WalletCore { storage_ctor: impl FnOnce(WalletConfig) -> Result, last_synced_block: u64, ) -> Result { - let mut config = WalletConfig::from_path_or_initialize_default(&config_path) - .with_context(|| format!("Failed to deserialize wallet config at {config_path:#?}"))?; + let mut config = + WalletConfig::from_path_or_initialize_default(&config_path).with_context(|| { + format!( + "Failed to deserialize wallet config at {}", + config_path.display() + ) + })?; if let Some(config_overrides) = config_overrides.clone() { config.apply_overrides(config_overrides); } @@ -114,7 +123,7 @@ impl WalletCore { config.sequencer_addr.clone(), config.basic_auth.clone(), )?); - let tx_poller = TxPoller::new(config.clone(), Arc::clone(&sequencer_client)); + let tx_poller = TxPoller::new(&config, Arc::clone(&sequencer_client)); let storage = storage_ctor(config)?; @@ -130,11 +139,13 @@ impl WalletCore { } /// Get configuration with applied overrides + #[must_use] pub fn config(&self) -> &WalletConfig { &self.storage.wallet_config } /// Get storage + #[must_use] pub fn storage(&self) -> &WalletChainStore { &self.storage } @@ -159,7 +170,10 @@ impl WalletCore { // Ensure data is flushed to disk before returning to prevent race conditions storage_file.sync_all().await?; - println!("Stored persistent accounts at {:#?}", self.storage_path); + println!( + "Stored persistent accounts at {}", + self.storage_path.display() + ); Ok(()) } @@ -173,7 +187,7 @@ impl WalletCore { // Ensure data is flushed to disk before returning to prevent race conditions config_file.sync_all().await?; - info!("Stored data at {:#?}", self.config_path); + info!("Stored data at {}", self.config_path.display()); Ok(()) } @@ -220,6 +234,7 @@ impl WalletCore { Ok(response.account) } + #[must_use] pub fn get_account_public_signing_key( &self, account_id: AccountId, @@ -229,6 +244,7 @@ impl WalletCore { .get_pub_account_signing_key(account_id) } + #[must_use] pub fn get_account_private(&self, account_id: AccountId) -> Option { self.storage .user_data @@ -236,6 +252,7 @@ impl WalletCore { .map(|value| value.1.clone()) } + #[must_use] pub fn get_private_account_commitment(&self, account_id: AccountId) -> Option { let (keys, account) = self.storage.user_data.get_private_account(account_id)?; Some(Commitment::new(&keys.nullifer_public_key, account)) @@ -266,7 +283,7 @@ impl WalletCore { pub fn decode_insert_privacy_preserving_transaction_results( &mut self, - tx: nssa::privacy_preserving_transaction::PrivacyPreservingTransaction, + tx: &nssa::privacy_preserving_transaction::PrivacyPreservingTransaction, acc_decode_mask: &[AccDecodeData], ) -> Result<()> { for (output_index, acc_decode_data) in acc_decode_mask.iter().enumerate() { @@ -279,7 +296,9 @@ impl WalletCore { &acc_ead.ciphertext, secret, &acc_comm, - output_index as u32, + output_index + .try_into() + .expect("Output index is expected to fit in u32"), ) .unwrap(); @@ -433,8 +452,8 @@ impl WalletCore { let affected_accounts = private_account_key_chains .flat_map(|(acc_account_id, key_chain, index)| { let view_tag = EncryptedAccountData::compute_view_tag( - key_chain.nullifer_public_key.clone(), - key_chain.viewing_public_key.clone(), + &key_chain.nullifer_public_key, + &key_chain.viewing_public_key, ); tx.message() @@ -445,14 +464,16 @@ impl WalletCore { .filter_map(|(ciph_id, encrypted_data)| { let ciphertext = &encrypted_data.ciphertext; let commitment = &tx.message.new_commitments[ciph_id]; - let shared_secret = key_chain - .calculate_shared_secret_receiver(encrypted_data.epk.clone(), index); + let shared_secret = + key_chain.calculate_shared_secret_receiver(&encrypted_data.epk, index); nssa_core::EncryptionScheme::decrypt( ciphertext, &shared_secret, commitment, - ciph_id as u32, + ciph_id + .try_into() + .expect("Ciphertext ID is expected to fit in u32"), ) }) .map(move |res_acc| (acc_account_id, res_acc)) @@ -469,14 +490,17 @@ impl WalletCore { } } + #[must_use] pub fn config_path(&self) -> &PathBuf { &self.config_path } + #[must_use] pub fn storage_path(&self) -> &PathBuf { &self.storage_path } + #[must_use] pub fn config_overrides(&self) -> &Option { &self.config_overrides } diff --git a/wallet/src/main.rs b/wallet/src/main.rs index 045b1b83..b2057296 100644 --- a/wallet/src/main.rs +++ b/wallet/src/main.rs @@ -33,7 +33,9 @@ async fn main() -> Result<()> { }; if let Some(command) = command { - let mut wallet = if !storage_path.exists() { + let mut wallet = if storage_path.exists() { + WalletCore::new_update_chain(config_path, storage_path, Some(config_overrides))? + } else { // TODO: Maybe move to `WalletCore::from_env()` or similar? println!("Persistent storage not found, need to execute setup"); @@ -48,8 +50,6 @@ async fn main() -> Result<()> { wallet.store_persistent_data().await?; wallet - } else { - WalletCore::new_update_chain(config_path, storage_path, Some(config_overrides))? }; let _output = execute_subcommand(&mut wallet, command).await?; Ok(()) diff --git a/wallet/src/poller.rs b/wallet/src/poller.rs index c037a36a..7f0d4e7f 100644 --- a/wallet/src/poller.rs +++ b/wallet/src/poller.rs @@ -17,13 +17,14 @@ pub struct TxPoller { } impl TxPoller { - pub fn new(config: WalletConfig, client: Arc) -> Self { + #[must_use] + pub fn new(config: &WalletConfig, client: Arc) -> Self { Self { polling_delay: config.seq_poll_timeout, polling_max_blocks_to_query: config.seq_tx_poll_max_blocks, polling_max_error_attempts: config.seq_poll_max_retries, block_poll_max_amount: config.seq_block_poll_max_amount, - client: client.clone(), + client, } } @@ -43,14 +44,13 @@ impl TxPoller { .get_transaction_by_hash(tx_hash) .await .inspect_err(|err| { - warn!("Failed to get transaction by hash {tx_hash} with error: {err:#?}") + warn!("Failed to get transaction by hash {tx_hash} with error: {err:#?}"); }); if let Ok(tx_obj) = tx_obj { break tx_obj; - } else { - try_error_counter += 1; } + try_error_counter += 1; if try_error_counter > self.polling_max_error_attempts { anyhow::bail!("Number of retries exceeded"); diff --git a/wallet/src/privacy_preserving_tx.rs b/wallet/src/privacy_preserving_tx.rs index e43966d4..8726fc51 100644 --- a/wallet/src/privacy_preserving_tx.rs +++ b/wallet/src/privacy_preserving_tx.rs @@ -21,10 +21,12 @@ pub enum PrivacyPreservingAccount { } impl PrivacyPreservingAccount { + #[must_use] pub fn is_public(&self) -> bool { matches!(&self, Self::Public(_)) } + #[must_use] pub fn is_private(&self) -> bool { matches!( &self, @@ -124,7 +126,7 @@ impl AccountManager { .iter() .filter_map(|state| match state { State::Public { account, sk } => sk.as_ref().map(|_| account.account.nonce), - _ => None, + State::Private(_) => None, }) .collect() } @@ -143,7 +145,7 @@ impl AccountManager { epk: eph_holder.generate_ephemeral_public_key(), }) } - _ => None, + State::Public { .. } => None, }) .collect() } @@ -153,7 +155,7 @@ impl AccountManager { .iter() .filter_map(|state| match state { State::Private(pre) => pre.nsk, - _ => None, + State::Public { .. } => None, }) .collect() } @@ -163,7 +165,7 @@ impl AccountManager { .iter() .filter_map(|state| match state { State::Private(pre) => Some(pre.proof.clone()), - _ => None, + State::Public { .. } => None, }) .collect() } @@ -173,7 +175,7 @@ impl AccountManager { .iter() .filter_map(|state| match state { State::Public { account, .. } => Some(account.account_id), - _ => None, + State::Private(_) => None, }) .collect() } @@ -183,7 +185,7 @@ impl AccountManager { .iter() .filter_map(|state| match state { State::Public { sk, .. } => sk.as_ref(), - _ => None, + State::Private(_) => None, }) .collect() } From e3b93b6e9a9b802a01dbe52232064ad86b165dd1 Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Wed, 4 Mar 2026 18:42:33 +0300 Subject: [PATCH 07/18] feat: add restriction clippy lints --- Cargo.lock | 1 + Cargo.toml | 91 +- bedrock_client/src/lib.rs | 2 +- clippy.toml | 54 + common/src/block.rs | 6 +- common/src/config.rs | 2 +- common/src/error.rs | 4 +- common/src/lib.rs | 4 +- common/src/rpc_primitives/errors.rs | 7 +- common/src/rpc_primitives/message.rs | 94 +- common/src/rpc_primitives/parser.rs | 21 +- common/src/rpc_primitives/requests.rs | 118 +- common/src/sequencer_client.rs | 9 +- common/src/test_utils.rs | 2 +- .../src/bin/hello_world_with_move_function.rs | 3 +- ...uthorization_through_tail_call_with_pda.rs | 5 + .../bin/run_hello_world_with_move_function.rs | 3 +- explorer_service/src/components/mod.rs | 8 +- explorer_service/src/format_utils.rs | 5 + explorer_service/src/lib.rs | 1 + explorer_service/src/main.rs | 6 +- explorer_service/src/pages/account_page.rs | 191 +- explorer_service/src/pages/block_page.rs | 2 +- explorer_service/src/pages/mod.rs | 10 +- .../src/pages/transaction_page.rs | 18 +- indexer/core/src/block_store.rs | 12 +- indexer/core/src/lib.rs | 12 +- indexer/service/protocol/src/lib.rs | 104 +- indexer/service/src/main.rs | 4 + indexer/service/src/mock_service.rs | 19 +- indexer/service/src/service.rs | 14 +- integration_tests/src/config.rs | 176 +- integration_tests/src/lib.rs | 18 +- integration_tests/tests/account.rs | 9 +- integration_tests/tests/amm.rs | 10 +- integration_tests/tests/auth_transfer/main.rs | 6 + integration_tests/tests/block_size_limit.rs | 10 +- integration_tests/tests/config.rs | 12 +- integration_tests/tests/indexer.rs | 10 +- integration_tests/tests/keys_restoration.rs | 10 +- integration_tests/tests/pinata.rs | 6 + integration_tests/tests/program_deployment.rs | 5 + integration_tests/tests/token.rs | 20 +- integration_tests/tests/tps.rs | 203 +- integration_tests/tests/wallet_ffi.rs | 36 +- .../key_management/ephemeral_key_holder.rs | 28 +- .../key_management/key_tree/chain_index.rs | 62 +- .../key_management/key_tree/keys_private.rs | 28 +- .../key_management/key_tree/keys_public.rs | 18 +- .../src/key_management/key_tree/mod.rs | 100 +- key_protocol/src/key_management/mod.rs | 18 +- .../src/key_management/secret_holders.rs | 17 +- key_protocol/src/key_protocol_core/mod.rs | 6 +- key_protocol/src/lib.rs | 2 + mempool/src/lib.rs | 12 +- nssa/Cargo.toml | 1 + nssa/core/src/account.rs | 16 +- nssa/core/src/account/data.rs | 38 +- nssa/core/src/circuit_io.rs | 6 +- nssa/core/src/commitment.rs | 52 +- nssa/core/src/encoding.rs | 28 +- nssa/core/src/encryption/mod.rs | 14 +- .../src/encryption/shared_key_derivation.rs | 15 +- nssa/core/src/lib.rs | 19 +- nssa/core/src/nullifier.rs | 12 +- nssa/core/src/program.rs | 96 +- .../program_deployment_transaction.rs | 2 +- nssa/src/error.rs | 9 +- nssa/src/lib.rs | 31 +- nssa/src/merkle_tree/mod.rs | 93 +- .../privacy_preserving_transaction/circuit.rs | 26 +- .../privacy_preserving_transaction/message.rs | 8 +- .../src/privacy_preserving_transaction/mod.rs | 8 +- .../transaction.rs | 8 +- nssa/src/program.rs | 9 +- .../src/program_deployment_transaction/mod.rs | 6 +- nssa/src/public_transaction/mod.rs | 8 +- nssa/src/public_transaction/transaction.rs | 30 +- nssa/src/public_transaction/witness_set.rs | 2 +- nssa/src/signature/bip340_test_vectors.rs | 8 +- nssa/src/signature/mod.rs | 14 +- nssa/src/signature/private_key.rs | 6 +- nssa/src/signature/public_key.rs | 27 +- nssa/src/state.rs | 3990 +++++++++-------- .../guest/src/bin/authenticated_transfer.rs | 16 +- program_methods/guest/src/bin/pinata.rs | 14 +- program_methods/guest/src/bin/pinata_token.rs | 4 +- .../src/bin/privacy_preserving_circuit.rs | 65 +- programs/amm/core/src/lib.rs | 6 +- programs/amm/src/lib.rs | 7 + programs/amm/src/new_definition.rs | 2 +- programs/amm/src/tests.rs | 174 +- programs/token/src/new_definition.rs | 2 +- programs/token/src/print_nft.rs | 2 +- programs/token/src/tests.rs | 191 +- sequencer_core/src/block_settlement_client.rs | 6 +- sequencer_core/src/block_store.rs | 62 +- sequencer_core/src/lib.rs | 61 +- sequencer_core/src/mock.rs | 8 +- sequencer_rpc/src/lib.rs | 19 +- sequencer_rpc/src/net_utils.rs | 22 +- sequencer_rpc/src/process.rs | 65 +- sequencer_rpc/src/types/err_rpc.rs | 27 +- sequencer_runner/src/lib.rs | 7 +- storage/src/indexer.rs | 276 +- storage/src/sequencer.rs | 111 +- test_program_methods/guest/src/bin/burner.rs | 2 +- .../guest/src/bin/chain_caller.rs | 12 +- test_program_methods/guest/src/bin/minter.rs | 5 +- .../guest/src/bin/modified_transfer.rs | 5 + .../guest/src/bin/nonce_changer.rs | 2 +- .../guest/src/bin/simple_balance_transfer.rs | 10 +- wallet-ffi/src/error.rs | 4 + wallet-ffi/src/keys.rs | 4 + wallet-ffi/src/lib.rs | 44 +- wallet-ffi/src/pinata.rs | 19 +- wallet-ffi/src/transfer.rs | 17 +- wallet-ffi/src/types.rs | 9 +- wallet-ffi/src/wallet.rs | 4 +- wallet/src/chain_storage.rs | 12 +- wallet/src/cli/account.rs | 95 +- wallet/src/cli/chain.rs | 4 +- wallet/src/cli/mod.rs | 14 +- .../src/cli/programs/native_token_transfer.rs | 4 +- wallet/src/cli/programs/pinata.rs | 12 +- wallet/src/cli/programs/token.rs | 8 +- wallet/src/config.rs | 14 +- wallet/src/helperfunctions.rs | 99 +- wallet/src/lib.rs | 34 +- wallet/src/main.rs | 5 + wallet/src/poller.rs | 10 +- wallet/src/privacy_preserving_tx.rs | 2 +- wallet/src/program_facades/amm.rs | 50 +- .../native_token_transfer/mod.rs | 3 +- .../native_token_transfer/public.rs | 24 +- wallet/src/program_facades/pinata.rs | 2 +- wallet/src/program_facades/token.rs | 24 +- 137 files changed, 4171 insertions(+), 3765 deletions(-) create mode 100644 clippy.toml diff --git a/Cargo.lock b/Cargo.lock index 74fa334b..48f65395 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5561,6 +5561,7 @@ name = "nssa" version = "0.1.0" dependencies = [ "amm_core", + "anyhow", "borsh", "env_logger", "hex", diff --git a/Cargo.toml b/Cargo.toml index 0e7d0cbc..8be7cb96 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -147,6 +147,8 @@ warnings = "deny" [workspace.lints] clippy.all = { level = "deny", priority = -1 } + +# Pedantic clippy.pedantic = { level = "deny", priority = -1 } # Reason: documenting every function returning Result is too verbose and doesn't add much value when you have good error types. @@ -157,5 +159,92 @@ clippy.missing-panics-doc = "allow" clippy.similar-names = "allow" # Reason: this lint is too strict and hard to fix. clippy.too-many-lines = "allow" -# Reason: std hasher is fine for us in public functions +# Reason: std hasher is fine for us in public functions. clippy.implicit-hasher = "allow" + +# Restriction +clippy.restriction = { level = "deny", priority = -1 } + +# Reason: we deny the whole `restriction` group but we allow things that don't make sense for us. +# That way we can still benefit from new lints added to the `restriction` group without having to +# explicitly allow them. +# As a downside our contributors don't know if some lint was enabled intentionally or just no one +# else faced it before to allow it but we can handle this during code reviews. +clippy.blanket-clippy-restriction-lints = "allow" +# Reason: we can't avoid using unwrap for now. +clippy.unwrap-used = "allow" +# Reason: we can't avoid using expect for now. +clippy.expect-used = "allow" +# Reason: unreachable is good in many cases. +clippy.unreachable = "allow" +# Reason: this is ridiculous strict in our codebase and doesn't add any value. +clippy.single-call-fn = "allow" +# Reason: we use panic in some places and it's okay. +clippy.panic = "allow" +# Reason: shadowing is good most of the times. +clippy.shadow-reuse = "allow" +# Reason: implicit return is good. +clippy.implicit-return = "allow" +# Reason: std is fine for us, we don't need to use core. +clippy.std-instead-of-core = "allow" +# Reason: std is fine for us, we don't need to use alloc. +clippy.std-instead-of-alloc = "allow" +# Reason: default methods are good most of the time. +clippy.missing-trait-methods = "allow" +# Reason: this is too verbose and doesn't help much if you have rust analyzer. +clippy.pattern-type-mismatch = "allow" +# Reason: decreases readability. +clippy.assertions-on-result-states = "allow" +# Reason: documenting every assert is too verbose. +clippy.missing-assert-message = "allow" +# Reason: documenting private items is too verbose and doesn't add much value. +clippy.missing-docs-in-private-items = "allow" +# Reason: we use separated suffix style. +clippy.separated_literal_suffix = "allow" +# Reason: sometimes absolute paths are more readable. +clippy.absolute-paths = "allow" +# Reason: sometimes it's as readable as full variable naming. +clippy.min-ident-chars = "allow" +# Reason: it's very common and handy. +clippy.indexing-slicing = "allow" +# Reason: we use little endian style. +clippy.little-endian-bytes = "allow" +# Reason: we use this style of pub visibility. +clippy.pub-with-shorthand = "allow" +# Reason: question mark operator is very cool. +clippy.question-mark-used = "allow" +# Reason: it's fine to panic in tests and some functions where it makes sense. +clippy.panic-in-result-fn = "allow" +# Reason: we don't care that much about inlining and LTO should take care of it. +clippy.missing_inline_in_public_items = "allow" +# Reason: it's okay for us. +clippy.default-numeric-fallback = "allow" +# Reason: this is fine for us. +clippy.exhaustive-enums = "allow" +# Reason: this is fine for us. +clippy.exhaustive-structs = "allow" +# Reason: this helps readability when item is imported in other modules. +clippy.module-name-repetitions = "allow" +# Reason: mostly historical reasons, maybe we'll address this in future. +clippy.mod-module-files = "allow" +# Reason: named module files is our preferred way. +clippy.self-named-module-files = "allow" +# Reason: this is actually quite handy. +clippy.impl-trait-in-params = "allow" +# Reason: this is often useful. +clippy.use-debug = "allow" +# Reason: this is sometimes useful. +clippy.field-scoped-visibility-modifiers = "allow" +# Reason: `pub use` is good for re-exports and hiding unnecessary details. +clippy.pub-use = "allow" +# Reason: we prefer semicolons inside blocks. +clippy.semicolon-outside-block = "allow" +# Reason: we don't do it blindly, this is mostly internal constraints checks. +clippy.unwrap-in-result = "allow" +# Reason: we don't see any problems with that. +clippy.shadow-same = "allow" +# Reason: this lint is too verbose. +clippy.let-underscore-untyped = "allow" +# Reason: this lint is actually bad as it forces to use wildcard `..` instead of +# field-by-field `_` which may lead to subtle bugs when new fields are added to the struct. +clippy.unneeded-field-pattern = "allow" diff --git a/bedrock_client/src/lib.rs b/bedrock_client/src/lib.rs index 227cc47a..bf65bfbb 100644 --- a/bedrock_client/src/lib.rs +++ b/bedrock_client/src/lib.rs @@ -2,7 +2,7 @@ use std::time::Duration; use anyhow::{Context as _, Result}; use common::config::BasicAuth; -use futures::{Stream, TryFutureExt}; +use futures::{Stream, TryFutureExt as _}; #[expect(clippy::single_component_path_imports, reason = "Satisfy machete")] use humantime_serde; use log::{info, warn}; diff --git a/clippy.toml b/clippy.toml new file mode 100644 index 00000000..aa90e0d6 --- /dev/null +++ b/clippy.toml @@ -0,0 +1,54 @@ +module-item-order-groupings = [ + [ + "use", + [ + "use", + ], + ], + [ + "modules", + [ + "extern_crate", + "mod", + "foreign_mod", + ], + ], + [ + "macros", + [ + "macro", + ], + ], + [ + "global_asm", + [ + "global_asm", + ], + ], + [ + "UPPER_SNAKE_CASE", + [ + "static", + "const", + ], + ], + [ + "PascalCase", + [ + "ty_alias", + "enum", + "struct", + "union", + "trait", + "trait_alias", + "impl", + ], + ], + [ + "lower_snake_case", + [ + "fn", + ], + ], +] +source-item-ordering = ["module"] diff --git a/common/src/block.rs b/common/src/block.rs index e5a58aed..3731a6c2 100644 --- a/common/src/block.rs +++ b/common/src/block.rs @@ -1,7 +1,7 @@ use borsh::{BorshDeserialize, BorshSerialize}; use nssa::AccountId; use serde::{Deserialize, Serialize}; -use sha2::{Digest, Sha256, digest::FixedOutput}; +use sha2::{Digest as _, Sha256, digest::FixedOutput as _}; use crate::{HashType, transaction::NSSATransaction}; @@ -20,7 +20,7 @@ pub struct BlockMeta { #[derive(Debug, Clone)] /// Our own hasher. /// Currently it is SHA256 hasher wrapper. May change in a future. -pub struct OwnHasher {} +pub struct OwnHasher; impl OwnHasher { fn hash(data: &[u8]) -> HashType { @@ -130,7 +130,7 @@ mod tests { use crate::{HashType, block::HashableBlockData, test_utils}; #[test] - fn test_encoding_roundtrip() { + fn encoding_roundtrip() { let transactions = vec![test_utils::produce_dummy_empty_transaction()]; let block = test_utils::produce_dummy_block(1, Some(HashType([1; 32])), transactions); let hashable = HashableBlockData::from(block); diff --git a/common/src/config.rs b/common/src/config.rs index 537c35bd..94d00ff5 100644 --- a/common/src/config.rs +++ b/common/src/config.rs @@ -42,7 +42,7 @@ impl FromStr for BasicAuth { })?; Ok(Self { - username: username.to_string(), + username: username.to_owned(), password: password.map(std::string::ToString::to_string), }) } diff --git a/common/src/error.rs b/common/src/error.rs index 3301bc87..bc037a60 100644 --- a/common/src/error.rs +++ b/common/src/error.rs @@ -28,8 +28,8 @@ impl From for SequencerClientError { #[derive(Debug, thiserror::Error)] pub enum ExecutionFailureKind { - #[error("Failed to get account data from sequencer")] - SequencerError, + #[error("Failed to get data from sequencer")] + SequencerError(#[source] anyhow::Error), #[error("Inputs amounts does not match outputs")] AmountMismatchError, #[error("Accounts key not found")] diff --git a/common/src/lib.rs b/common/src/lib.rs index 972aeadc..11c450f6 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -46,7 +46,7 @@ impl FromStr for HashType { type Err = hex::FromHexError; fn from_str(s: &str) -> Result { - let mut bytes = [0u8; 32]; + let mut bytes = [0_u8; 32]; hex::decode_to_slice(s, &mut bytes)?; Ok(HashType(bytes)) } @@ -90,7 +90,7 @@ mod tests { #[test] fn serialization_roundtrip() { - let original = HashType([1u8; 32]); + let original = HashType([1_u8; 32]); let serialized = original.to_string(); let deserialized = HashType::from_str(&serialized).unwrap(); assert_eq!(original, deserialized); diff --git a/common/src/rpc_primitives/errors.rs b/common/src/rpc_primitives/errors.rs index 1c376a53..03f7fc16 100644 --- a/common/src/rpc_primitives/errors.rs +++ b/common/src/rpc_primitives/errors.rs @@ -5,10 +5,10 @@ use serde_json::{Value, to_value}; #[derive(serde::Serialize)] pub struct RpcParseError(pub String); -#[allow(clippy::too_long_first_doc_paragraph)] -/// This struct may be returned from JSON RPC server in case of error +/// This struct may be returned from JSON RPC server in case of error. +/// /// It is expected that that this struct has impls From<_> all other RPC errors -/// like [`RpcBlockError`](crate::types::blocks::RpcBlockError) +/// like [`RpcBlockError`](crate::types::blocks::RpcBlockError). #[derive(Debug, serde::Serialize, serde::Deserialize, Clone, PartialEq)] #[serde(deny_unknown_fields)] pub struct RpcError { @@ -167,6 +167,7 @@ impl From for RpcError { impl From for RpcError { fn from(_: std::convert::Infallible) -> Self { + // SAFETY: Infallible error can never be constructed, so this code can never be reached. unsafe { core::hint::unreachable_unchecked() } } } diff --git a/common/src/rpc_primitives/message.rs b/common/src/rpc_primitives/message.rs index 5092dbc9..80948149 100644 --- a/common/src/rpc_primitives/message.rs +++ b/common/src/rpc_primitives/message.rs @@ -13,12 +13,14 @@ use std::fmt::{Formatter, Result as FmtResult}; use serde::{ de::{Deserializer, Error, Unexpected, Visitor}, - ser::{SerializeStruct, Serializer}, + ser::{SerializeStruct as _, Serializer}, }; use serde_json::{Result as JsonResult, Value}; use super::errors::RpcError; +pub type Parsed = Result; + #[derive(Debug, Clone, PartialEq, Eq, Hash)] struct Version; @@ -29,9 +31,12 @@ impl serde::Serialize for Version { } impl<'de> serde::Deserialize<'de> for Version { + #[expect( + clippy::renamed_function_params, + reason = "More readable than original serde parameter names" + )] fn deserialize>(deserializer: D) -> Result { struct VersionVisitor; - #[allow(clippy::needless_lifetimes)] impl Visitor<'_> for VersionVisitor { type Value = Version; @@ -53,6 +58,10 @@ impl<'de> serde::Deserialize<'de> for Version { /// An RPC request. #[derive(Debug, serde::Serialize, serde::Deserialize, Clone, PartialEq)] #[serde(deny_unknown_fields)] +#[expect( + clippy::partial_pub_fields, + reason = "We don't want to allow access to the version, but the others are public for ease of use" +)] pub struct Request { jsonrpc: Version, pub method: String, @@ -99,6 +108,10 @@ impl Request { /// A response to an RPC. /// /// It is created by the methods on [Request](struct.Request.html). +#[expect( + clippy::partial_pub_fields, + reason = "We don't want to allow access to the version, but the others are public for ease of use" +)] #[derive(Debug, Clone, PartialEq)] pub struct Response { jsonrpc: Version, @@ -110,30 +123,22 @@ impl serde::Serialize for Response { fn serialize(&self, serializer: S) -> Result { let mut sub = serializer.serialize_struct("Response", 3)?; sub.serialize_field("jsonrpc", &self.jsonrpc)?; - match self.result { - Ok(ref value) => sub.serialize_field("result", value), - Err(ref err) => sub.serialize_field("error", err), + match &self.result { + Ok(value) => sub.serialize_field("result", value), + Err(err) => sub.serialize_field("error", err), }?; sub.serialize_field("id", &self.id)?; sub.end() } } -/// Deserializer for `Option` that produces `Some(Value::Null)`. -/// -/// The usual one produces None in that case. But we need to know the difference between -/// `{x: null}` and `{}`. -fn some_value<'de, D: Deserializer<'de>>(deserializer: D) -> Result, D::Error> { - serde::Deserialize::deserialize(deserializer).map(Some) -} - /// A helper trick for deserialization. #[derive(serde::Deserialize)] #[serde(deny_unknown_fields)] struct WireResponse { // It is actually used to eat and sanity check the deserialized text - #[allow(dead_code)] - jsonrpc: Version, + #[serde(rename = "jsonrpc")] + _jsonrpc: Version, // Make sure we accept null as Some(Value::Null), instead of going to None #[serde(default, deserialize_with = "some_value")] result: Option, @@ -164,6 +169,10 @@ impl<'de> serde::Deserialize<'de> for Response { } /// A notification (doesn't expect an answer). +#[expect( + clippy::partial_pub_fields, + reason = "We don't want to allow access to the version, but the others are public for ease of use" +)] #[derive(Debug, serde::Serialize, serde::Deserialize, Clone, PartialEq)] #[serde(deny_unknown_fields)] pub struct Notification { @@ -261,11 +270,24 @@ impl Message { pub fn id(&self) -> Value { match self { Message::Request(req) => req.id.clone(), - _ => Value::Null, + Message::Response(response) => response.id.clone(), + Message::Notification(_) | Message::Batch(_) | Message::UnmatchedSub(_) => Value::Null, } } } +impl From for String { + fn from(val: Message) -> Self { + ::serde_json::ser::to_string(&val).unwrap() + } +} + +impl From for Vec { + fn from(val: Message) -> Self { + ::serde_json::ser::to_vec(&val).unwrap() + } +} + /// A broken message. /// /// Protocol-level errors. @@ -286,11 +308,11 @@ impl Broken { /// with the right values. #[must_use] pub fn reply(&self) -> Message { - match *self { + match self { Broken::Unmatched(_) => Message::error(RpcError::parse_error( "JSON RPC Request format was expected".to_owned(), )), - Broken::SyntaxError(ref e) => Message::error(RpcError::parse_error(e.clone())), + Broken::SyntaxError(e) => Message::error(RpcError::parse_error(e.clone())), } } } @@ -312,8 +334,6 @@ pub fn decoded_to_parsed(res: JsonResult) -> Parsed { } } -pub type Parsed = Result; - /// Read a [Message](enum.Message.html) from a slice. /// /// Invalid JSON or JSONRPC messages are reported as [Broken](enum.Broken.html). @@ -328,16 +348,12 @@ pub fn from_str(s: &str) -> Parsed { from_slice(s.as_bytes()) } -impl From for String { - fn from(val: Message) -> Self { - ::serde_json::ser::to_string(&val).unwrap() - } -} - -impl From for Vec { - fn from(val: Message) -> Self { - ::serde_json::ser::to_vec(&val).unwrap() - } +/// Deserializer for `Option` that produces `Some(Value::Null)`. +/// +/// The usual one produces None in that case. But we need to know the difference between +/// `{x: null}` and `{}`. +fn some_value<'de, D: Deserializer<'de>>(deserializer: D) -> Result, D::Error> { + serde::Deserialize::deserialize(deserializer).map(Some) } #[cfg(test)] @@ -475,7 +491,6 @@ mod tests { /// /// The reject is done by returning it as Unmatched. #[test] - #[allow(clippy::panic)] fn broken() { // A helper with one test fn one(input: &str) { @@ -499,7 +514,7 @@ mod tests { // Something completely different one(r#"{"x": [1, 2, 3]}"#); - match from_str(r"{]") { + match from_str("{]") { Err(Broken::SyntaxError(_)) => (), other => panic!("Something unexpected: {other:?}"), } @@ -510,7 +525,6 @@ mod tests { /// This doesn't have a full coverage, because there's not much to actually test there. /// Most of it is related to the ids. #[test] - #[allow(clippy::panic)] #[ignore = "Not a full coverage test"] fn constructors() { let msg1 = Message::request("call".to_owned(), json!([1, 2, 3])); @@ -528,9 +542,9 @@ mod tests { }; let id1 = req1.id.clone(); // When we answer a message, we get the same ID - if let Message::Response(ref resp) = req1.reply(json!([1, 2, 3])) { + if let Message::Response(resp) = req1.reply(json!([1, 2, 3])) { assert_eq!( - *resp, + resp, Response { jsonrpc: Version, result: Ok(json!([1, 2, 3])), @@ -542,11 +556,9 @@ mod tests { } let id2 = req2.id.clone(); // The same with an error - if let Message::Response(ref resp) = - req2.error(RpcError::new(42, "Wrong!".to_owned(), None)) - { + if let Message::Response(resp) = req2.error(RpcError::new(42, "Wrong!".to_owned(), None)) { assert_eq!( - *resp, + resp, Response { jsonrpc: Version, result: Err(RpcError::new(42, "Wrong!".to_owned(), None)), @@ -557,11 +569,11 @@ mod tests { panic!("Not a response"); } // When we have unmatched, we generate a top-level error with Null id. - if let Message::Response(ref resp) = + if let Message::Response(resp) = Message::error(RpcError::new(43, "Also wrong!".to_owned(), None)) { assert_eq!( - *resp, + resp, Response { jsonrpc: Version, result: Err(RpcError::new(43, "Also wrong!".to_owned(), None)), diff --git a/common/src/rpc_primitives/parser.rs b/common/src/rpc_primitives/parser.rs index 983e2f6c..933f8daf 100644 --- a/common/src/rpc_primitives/parser.rs +++ b/common/src/rpc_primitives/parser.rs @@ -3,6 +3,17 @@ use serde_json::Value; use super::errors::RpcParseError; +#[macro_export] +macro_rules! parse_request { + ($request_name:ty) => { + impl RpcRequest for $request_name { + fn parse(value: Option) -> Result { + parse_params::(value) + } + } + }; +} + pub trait RpcRequest: Sized { fn parse(value: Option) -> Result; } @@ -15,13 +26,3 @@ pub fn parse_params(value: Option) -> Result { - impl RpcRequest for $request_name { - fn parse(value: Option) -> Result { - parse_params::(value) - } - } - }; -} diff --git a/common/src/rpc_primitives/requests.rs b/common/src/rpc_primitives/requests.rs index 8c61ee32..2782bffa 100644 --- a/common/src/rpc_primitives/requests.rs +++ b/common/src/rpc_primitives/requests.rs @@ -11,8 +11,62 @@ use super::{ }; use crate::{HashType, parse_request}; +mod base64_deser { + use base64::{Engine as _, engine::general_purpose}; + use serde::{self, Deserialize, Deserializer, Serializer, ser::SerializeSeq as _}; + + pub mod vec { + use super::*; + + pub fn serialize(bytes_vec: &[Vec], serializer: S) -> Result + where + S: Serializer, + { + let mut seq = serializer.serialize_seq(Some(bytes_vec.len()))?; + for bytes in bytes_vec { + let s = general_purpose::STANDARD.encode(bytes); + seq.serialize_element(&s)?; + } + seq.end() + } + + pub fn deserialize<'de, D>(deserializer: D) -> Result>, D::Error> + where + D: Deserializer<'de>, + { + let base64_strings: Vec = Deserialize::deserialize(deserializer)?; + base64_strings + .into_iter() + .map(|s| { + general_purpose::STANDARD + .decode(&s) + .map_err(serde::de::Error::custom) + }) + .collect() + } + } + + pub fn serialize(bytes: &[u8], serializer: S) -> Result + where + S: Serializer, + { + let base64_string = general_purpose::STANDARD.encode(bytes); + serializer.serialize_str(&base64_string) + } + + pub fn deserialize<'de, D>(deserializer: D) -> Result, D::Error> + where + D: Deserializer<'de>, + { + let base64_string: String = Deserialize::deserialize(deserializer)?; + general_purpose::STANDARD + .decode(&base64_string) + .map_err(serde::de::Error::custom) + } +} + #[derive(Serialize, Deserialize, Debug)] -pub struct HelloRequest {} +pub struct HelloRequest; #[derive(Serialize, Deserialize, Debug)] pub struct RegisterAccountRequest { @@ -38,13 +92,13 @@ pub struct GetBlockRangeDataRequest { } #[derive(Serialize, Deserialize, Debug)] -pub struct GetGenesisIdRequest {} +pub struct GetGenesisIdRequest; #[derive(Serialize, Deserialize, Debug)] -pub struct GetLastBlockRequest {} +pub struct GetLastBlockRequest; #[derive(Serialize, Deserialize, Debug)] -pub struct GetInitialTestnetAccountsRequest {} +pub struct GetInitialTestnetAccountsRequest; #[derive(Serialize, Deserialize, Debug)] pub struct GetAccountBalanceRequest { @@ -72,7 +126,7 @@ pub struct GetProofForCommitmentRequest { } #[derive(Serialize, Deserialize, Debug)] -pub struct GetProgramIdsRequest {} +pub struct GetProgramIdsRequest; parse_request!(HelloRequest); parse_request!(RegisterAccountRequest); @@ -117,60 +171,6 @@ pub struct GetBlockRangeDataResponse { pub blocks: Vec>, } -mod base64_deser { - use base64::{Engine as _, engine::general_purpose}; - use serde::{self, Deserialize, Deserializer, Serializer, ser::SerializeSeq as _}; - - pub fn serialize(bytes: &[u8], serializer: S) -> Result - where - S: Serializer, - { - let base64_string = general_purpose::STANDARD.encode(bytes); - serializer.serialize_str(&base64_string) - } - - pub fn deserialize<'de, D>(deserializer: D) -> Result, D::Error> - where - D: Deserializer<'de>, - { - let base64_string: String = Deserialize::deserialize(deserializer)?; - general_purpose::STANDARD - .decode(&base64_string) - .map_err(serde::de::Error::custom) - } - - pub mod vec { - use super::*; - - pub fn serialize(bytes_vec: &[Vec], serializer: S) -> Result - where - S: Serializer, - { - let mut seq = serializer.serialize_seq(Some(bytes_vec.len()))?; - for bytes in bytes_vec { - let s = general_purpose::STANDARD.encode(bytes); - seq.serialize_element(&s)?; - } - seq.end() - } - - pub fn deserialize<'de, D>(deserializer: D) -> Result>, D::Error> - where - D: Deserializer<'de>, - { - let base64_strings: Vec = Deserialize::deserialize(deserializer)?; - base64_strings - .into_iter() - .map(|s| { - general_purpose::STANDARD - .decode(&s) - .map_err(serde::de::Error::custom) - }) - .collect() - } - } -} - #[derive(Serialize, Deserialize, Debug)] pub struct GetGenesisIdResponse { pub genesis_id: u64, diff --git a/common/src/sequencer_client.rs b/common/src/sequencer_client.rs index dc6c8ca7..1efa0992 100644 --- a/common/src/sequencer_client.rs +++ b/common/src/sequencer_client.rs @@ -31,11 +31,12 @@ use crate::{ }; #[derive(Debug, Clone, Deserialize)] -#[allow(dead_code)] struct SequencerRpcResponse { - jsonrpc: String, + #[serde(rename = "jsonrpc")] + _jsonrpc: String, result: serde_json::Value, - id: u64, + #[serde(rename = "id")] + _id: u64, } #[derive(Clone)] @@ -69,7 +70,7 @@ impl SequencerClient { payload: Value, ) -> Result { let request = - rpc_primitives::message::Request::from_payload_version_2_0(method.to_string(), payload); + rpc_primitives::message::Request::from_payload_version_2_0(method.to_owned(), payload); log::debug!( "Calling method {method} with payload {request:?} to sequencer at {}", diff --git a/common/src/test_utils.rs b/common/src/test_utils.rs index 1d166ade..e78f823f 100644 --- a/common/src/test_utils.rs +++ b/common/src/test_utils.rs @@ -31,7 +31,7 @@ pub fn produce_dummy_block( let block_data = HashableBlockData { block_id: id, prev_block_hash: prev_hash.unwrap_or_default(), - timestamp: id * 100, + timestamp: id.saturating_mul(100), transactions, }; diff --git a/examples/program_deployment/methods/guest/src/bin/hello_world_with_move_function.rs b/examples/program_deployment/methods/guest/src/bin/hello_world_with_move_function.rs index e278a732..65f0f9cd 100644 --- a/examples/program_deployment/methods/guest/src/bin/hello_world_with_move_function.rs +++ b/examples/program_deployment/methods/guest/src/bin/hello_world_with_move_function.rs @@ -21,10 +21,11 @@ use nssa_core::{ // In case an input account is uninitialized, the program will claim it when // producing the post-state. -type Instruction = (u8, Vec); const WRITE_FUNCTION_ID: u8 = 0; const MOVE_DATA_FUNCTION_ID: u8 = 1; +type Instruction = (u8, Vec); + fn build_post_state(post_account: Account) -> AccountPostState { if post_account.program_owner == DEFAULT_PROGRAM_ID { // This produces a claim request diff --git a/examples/program_deployment/src/bin/run_hello_world_with_authorization_through_tail_call_with_pda.rs b/examples/program_deployment/src/bin/run_hello_world_with_authorization_through_tail_call_with_pda.rs index 43839ba9..4371b000 100644 --- a/examples/program_deployment/src/bin/run_hello_world_with_authorization_through_tail_call_with_pda.rs +++ b/examples/program_deployment/src/bin/run_hello_world_with_authorization_through_tail_call_with_pda.rs @@ -1,3 +1,8 @@ +#![expect( + clippy::print_stdout, + reason = "This is an example program, it's fine to print to stdout" +)] + use nssa::{ AccountId, PublicTransaction, program::Program, diff --git a/examples/program_deployment/src/bin/run_hello_world_with_move_function.rs b/examples/program_deployment/src/bin/run_hello_world_with_move_function.rs index 85bd19c6..84cb6068 100644 --- a/examples/program_deployment/src/bin/run_hello_world_with_move_function.rs +++ b/examples/program_deployment/src/bin/run_hello_world_with_move_function.rs @@ -19,10 +19,11 @@ use wallet::{PrivacyPreservingAccount, WalletCore}; // methods/guest/target/riscv32im-risc0-zkvm-elf/docker/hello_world_with_move_function.bin \ // write-public Ds8q5PjLcKwwV97Zi7duhRVF9uwA2PuYMoLL7FwCzsXE Hola -type Instruction = (u8, Vec); const WRITE_FUNCTION_ID: u8 = 0; const MOVE_DATA_FUNCTION_ID: u8 = 1; +type Instruction = (u8, Vec); + #[derive(Parser, Debug)] struct Cli { /// Path to program binary diff --git a/explorer_service/src/components/mod.rs b/explorer_service/src/components/mod.rs index a0032b10..306c79a8 100644 --- a/explorer_service/src/components/mod.rs +++ b/explorer_service/src/components/mod.rs @@ -1,7 +1,7 @@ -pub mod account_preview; -pub mod block_preview; -pub mod transaction_preview; - pub use account_preview::AccountPreview; pub use block_preview::BlockPreview; pub use transaction_preview::TransactionPreview; + +pub mod account_preview; +pub mod block_preview; +pub mod transaction_preview; diff --git a/explorer_service/src/format_utils.rs b/explorer_service/src/format_utils.rs index 07d7e8ec..393e6f8e 100644 --- a/explorer_service/src/format_utils.rs +++ b/explorer_service/src/format_utils.rs @@ -1,6 +1,11 @@ //! Formatting utilities for the explorer /// Format timestamp to human-readable string +#[expect( + clippy::integer_division, + clippy::integer_division_remainder_used, + reason = "We need to convert milliseconds to seconds, and this is the most straightforward way to do it" +)] pub fn format_timestamp(timestamp: u64) -> String { let seconds = timestamp / 1000; let datetime = chrono::DateTime::from_timestamp( diff --git a/explorer_service/src/lib.rs b/explorer_service/src/lib.rs index fadc164b..edfe7df5 100644 --- a/explorer_service/src/lib.rs +++ b/explorer_service/src/lib.rs @@ -1,5 +1,6 @@ #![expect( clippy::must_use_candidate, + clippy::same_name_method, reason = "Warns on code generated by leptos macros" )] diff --git a/explorer_service/src/main.rs b/explorer_service/src/main.rs index 357219ef..06ddb4d6 100644 --- a/explorer_service/src/main.rs +++ b/explorer_service/src/main.rs @@ -1,3 +1,7 @@ +#[expect( + clippy::print_stdout, + reason = "This is just simple and handy for such a small server" +)] #[cfg(feature = "ssr")] #[tokio::main] async fn main() { @@ -5,7 +9,7 @@ async fn main() { use clap::Parser; use explorer_service::App; use leptos::prelude::*; - use leptos_axum::{LeptosRoutes, generate_route_list}; + use leptos_axum::{LeptosRoutes as _, generate_route_list}; use leptos_meta::MetaTags; /// LEZ Block Explorer Server CLI arguments. diff --git a/explorer_service/src/pages/account_page.rs b/explorer_service/src/pages/account_page.rs index 5f95d8e0..a02a8b7c 100644 --- a/explorer_service/src/pages/account_page.rs +++ b/explorer_service/src/pages/account_page.rs @@ -10,11 +10,11 @@ use crate::{api, components::TransactionPreview}; #[component] pub fn AccountPage() -> impl IntoView { let params = use_params_map(); - let (tx_offset, set_tx_offset) = signal(0u64); + let (tx_offset, set_tx_offset) = signal(0_u64); let (all_transactions, set_all_transactions) = signal(Vec::new()); let (is_loading, set_is_loading) = signal(false); let (has_more, set_has_more) = signal(true); - let tx_limit = 10u64; + let tx_limit = 10_u64; // Parse account ID from URL params let account_id = move || { @@ -27,7 +27,7 @@ pub fn AccountPage() -> impl IntoView { match acc_id_opt { Some(acc_id) => api::get_account(acc_id).await, None => Err(leptos::prelude::ServerFnError::ServerError( - "Invalid account ID".to_string(), + "Invalid account ID".to_owned(), )), } }); @@ -37,7 +37,7 @@ pub fn AccountPage() -> impl IntoView { match acc_id_opt { Some(acc_id) => api::get_transactions_by_account(acc_id, 0, tx_limit).await, None => Err(leptos::prelude::ServerFnError::ServerError( - "Invalid account ID".to_string(), + "Invalid account ID".to_owned(), )), } }); @@ -59,7 +59,7 @@ pub fn AccountPage() -> impl IntoView { }; set_is_loading.set(true); - let current_offset = tx_offset.get() + tx_limit; + let current_offset = tx_offset.get().saturating_add(tx_limit); set_tx_offset.set(current_offset); leptos::task::spawn_local(async move { @@ -111,101 +111,99 @@ pub fn AccountPage() -> impl IntoView {
"Account ID:" {account_id_str} -
-
- "Balance:" - {balance_str} -
-
- "Program Owner:" - {program_id} -
-
- "Nonce:" - {nonce_str} -
-
- "Data:" - {format!("{data_len} bytes")} -
- - + +
+ "Balance:" + {balance_str} +
+
+ "Program Owner:" + {program_id} +
+
+ "Nonce:" + {nonce_str} +
+
+ "Data:" + {format!("{data_len} bytes")} +
+ + - } - }> - - {move || { - transactions_resource - .get() - .map(|result| match result { - Ok(_) => { - let txs = all_transactions.get(); - if txs.is_empty() { - view! { -
- "No transactions found" -
- } - .into_any() - } else { - view! { -
-
- {txs - .into_iter() - .map(|tx| { - view! { } - }) - .collect::>()} -
- {move || { - if has_more.get() { - view! { - - } - .into_any() - } else { - ().into_any() + } + }> + {move || { + transactions_resource + .get() + .map(|load_tx_result| match load_tx_result { + Ok(_) => { + let txs = all_transactions.get(); + if txs.is_empty() { + view! { +
+ "No transactions found" +
} - }} + .into_any() + } else { + view! { +
+
+ {txs + .into_iter() + .map(|tx| { + view! { } + }) + .collect::>()} +
+ {move || { + if has_more.get() { + view! { +
- } - .into_any() - } - } - Err(e) => { - view! { -
- {format!("Failed to load transactions: {e}")} -
- } - .into_any() - } - }) - }} + + } + .into_any() + } else { + ().into_any() + } + }} - -
- - } - .into_any() + + } + .into_any() + } + } + Err(e) => { + view! { +
+ {format!("Failed to load transactions: {e}")} +
+ } + .into_any() + } + }) + }} + + + + } + .into_any() } Err(e) => { view! { @@ -218,7 +216,6 @@ pub fn AccountPage() -> impl IntoView { } }) }} - } diff --git a/explorer_service/src/pages/block_page.rs b/explorer_service/src/pages/block_page.rs index d63d9f8e..8f54fe18 100644 --- a/explorer_service/src/pages/block_page.rs +++ b/explorer_service/src/pages/block_page.rs @@ -38,7 +38,7 @@ pub fn BlockPage() -> impl IntoView { Some(BlockIdOrHash::BlockId(id)) => api::get_block_by_id(id).await, Some(BlockIdOrHash::Hash(hash)) => api::get_block_by_hash(hash).await, None => Err(leptos::prelude::ServerFnError::ServerError( - "Invalid block ID or hash".to_string(), + "Invalid block ID or hash".to_owned(), )), } }, diff --git a/explorer_service/src/pages/mod.rs b/explorer_service/src/pages/mod.rs index f4220145..92885150 100644 --- a/explorer_service/src/pages/mod.rs +++ b/explorer_service/src/pages/mod.rs @@ -1,9 +1,9 @@ -pub mod account_page; -pub mod block_page; -pub mod main_page; -pub mod transaction_page; - pub use account_page::AccountPage; pub use block_page::BlockPage; pub use main_page::MainPage; pub use transaction_page::TransactionPage; + +pub mod account_page; +pub mod block_page; +pub mod main_page; +pub mod transaction_page; diff --git a/explorer_service/src/pages/transaction_page.rs b/explorer_service/src/pages/transaction_page.rs index 266f3f80..211dc505 100644 --- a/explorer_service/src/pages/transaction_page.rs +++ b/explorer_service/src/pages/transaction_page.rs @@ -4,7 +4,7 @@ use indexer_service_protocol::{ HashType, PrivacyPreservingMessage, PrivacyPreservingTransaction, ProgramDeploymentMessage, ProgramDeploymentTransaction, PublicMessage, PublicTransaction, Transaction, WitnessSet, }; -use itertools::{EitherOrBoth, Itertools}; +use itertools::{EitherOrBoth, Itertools as _}; use leptos::prelude::*; use leptos_router::{components::A, hooks::use_params_map}; @@ -17,16 +17,14 @@ pub fn TransactionPage() -> impl IntoView { let transaction_resource = Resource::new( move || { - params - .read() - .get("hash") - .and_then(|s| HashType::from_str(&s).ok()) + let s = params.read().get("hash")?; + HashType::from_str(&s).ok() }, |hash_opt| async move { match hash_opt { Some(hash) => api::get_transaction(hash).await, None => Err(leptos::prelude::ServerFnError::ServerError( - "Invalid transaction hash".to_string(), + "Invalid transaction hash".to_owned(), )), } }, @@ -141,7 +139,7 @@ pub fn TransactionPage() -> impl IntoView { {account_id_str} - " (nonce: "{"Not affected by this transaction".to_string()}" )" + " (nonce: "{"Not affected by this transaction".to_owned()}" )" } @@ -153,7 +151,7 @@ pub fn TransactionPage() -> impl IntoView { {"Account not found"} - " (nonce: "{"Account not found".to_string()}" )" + " (nonce: "{"Account not found".to_owned()}" )" } @@ -244,7 +242,7 @@ pub fn TransactionPage() -> impl IntoView { {account_id_str} - " (nonce: "{"Not affected by this transaction".to_string()}" )" + " (nonce: "{"Not affected by this transaction".to_owned()}" )" } @@ -256,7 +254,7 @@ pub fn TransactionPage() -> impl IntoView { {"Account not found"} - " (nonce: "{"Account not found".to_string()}" )" + " (nonce: "{"Account not found".to_owned()}" )" } diff --git a/indexer/core/src/block_store.rs b/indexer/core/src/block_store.rs index f2fb2ce9..8742184f 100644 --- a/indexer/core/src/block_store.rs +++ b/indexer/core/src/block_store.rs @@ -21,20 +21,16 @@ impl IndexerStore { /// ATTENTION: Will overwrite genesis block. pub fn open_db_with_genesis( location: &Path, - start_data: Option<(Block, V02State)>, + genesis_block: &Block, + initial_state: &V02State, ) -> Result { - let dbio = RocksDBIO::open_or_create(location, start_data)?; + let dbio = RocksDBIO::open_or_create(location, genesis_block, initial_state)?; Ok(Self { dbio: Arc::new(dbio), }) } - /// Reopening existing database - pub fn open_db_restart(location: &Path) -> Result { - Self::open_db_with_genesis(location, None) - } - pub fn last_observed_l1_lib_header(&self) -> Result> { Ok(self .dbio @@ -120,6 +116,6 @@ impl IndexerStore { // to represent correct block finality block.bedrock_status = BedrockStatus::Finalized; - Ok(self.dbio.put_block(block, l1_header.into())?) + Ok(self.dbio.put_block(&block, l1_header.into())?) } } diff --git a/indexer/core/src/lib.rs b/indexer/core/src/lib.rs index 38fb5989..a6e4409b 100644 --- a/indexer/core/src/lib.rs +++ b/indexer/core/src/lib.rs @@ -52,7 +52,7 @@ impl IndexerCore { // ToDo: remove key from indexer config, use some default. let signing_key = nssa::PrivateKey::try_new(config.signing_key).unwrap(); let channel_genesis_msg_id = [0; 32]; - let start_block = hashable_data.into_pending_block(&signing_key, channel_genesis_msg_id); + let genesis_block = hashable_data.into_pending_block(&signing_key, channel_genesis_msg_id); // This is a troubling moment, because changes in key protocol can // affect this. And indexer can not reliably ask this data from sequencer @@ -94,7 +94,7 @@ impl IndexerCore { config.bedrock_client_config.auth.clone(), )?, config, - store: IndexerStore::open_db_with_genesis(&home, Some((start_block, state)))?, + store: IndexerStore::open_db_with_genesis(&home, &genesis_block, &state)?, }) } @@ -102,9 +102,9 @@ impl IndexerCore { async_stream::stream! { info!("Searching for initial header"); - let last_l1_lib_header = self.store.last_observed_l1_lib_header()?; + let last_stored_l1_lib_header = self.store.last_observed_l1_lib_header()?; - let mut prev_last_l1_lib_header = if let Some(last_l1_lib_header) = last_l1_lib_header { + let mut prev_last_l1_lib_header = if let Some(last_l1_lib_header) = last_stored_l1_lib_header { info!("Last l1 lib header found: {last_l1_lib_header}"); last_l1_lib_header } else { @@ -318,6 +318,10 @@ fn parse_block_owned( decoded_channel_id: &ChannelId, ) -> (Vec, HeaderId) { ( + #[expect( + clippy::wildcard_enum_match_arm, + reason = "We are only interested in channel inscription ops, so it's fine to ignore the rest" + )] l1_block .transactions() .flat_map(|tx| { diff --git a/indexer/service/protocol/src/lib.rs b/indexer/service/protocol/src/lib.rs index 3a47e095..42c513a2 100644 --- a/indexer/service/protocol/src/lib.rs +++ b/indexer/service/protocol/src/lib.rs @@ -14,6 +14,40 @@ use serde_with::{DeserializeFromStr, SerializeDisplay}; #[cfg(feature = "convert")] mod convert; +mod base64 { + use base64::prelude::{BASE64_STANDARD, Engine as _}; + use serde::{Deserialize as _, Deserializer, Serialize as _, Serializer}; + + pub mod arr { + use super::{Deserializer, Serializer}; + + pub fn serialize(v: &[u8], s: S) -> Result { + super::serialize(v, s) + } + + pub fn deserialize<'de, const N: usize, D: Deserializer<'de>>( + d: D, + ) -> Result<[u8; N], D::Error> { + let vec = super::deserialize(d)?; + vec.try_into().map_err(|_bytes| { + serde::de::Error::custom(format!("Invalid length, expected {N} bytes")) + }) + } + } + + pub fn serialize(v: &[u8], s: S) -> Result { + let base64 = BASE64_STANDARD.encode(v); + String::serialize(&base64, s) + } + + pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result, D::Error> { + let base64 = String::deserialize(d)?; + BASE64_STANDARD + .decode(base64.as_bytes()) + .map_err(serde::de::Error::custom) + } +} + pub type Nonce = u128; #[derive( @@ -23,24 +57,41 @@ pub struct ProgramId(pub [u32; 8]); impl Display for ProgramId { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let bytes: Vec = self.0.iter().flat_map(|n| n.to_be_bytes()).collect(); + let bytes: Vec = self.0.iter().flat_map(|n| n.to_le_bytes()).collect(); write!(f, "{}", bytes.to_base58()) } } +#[derive(Debug)] +pub enum ProgramIdParseError { + InvalidBase58(base58::FromBase58Error), + InvalidLength(usize), +} + +impl Display for ProgramIdParseError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + ProgramIdParseError::InvalidBase58(err) => write!(f, "invalid base58: {err:?}"), + ProgramIdParseError::InvalidLength(len) => { + write!(f, "invalid length: expected 32 bytes, got {len}") + } + } + } +} + impl FromStr for ProgramId { - type Err = hex::FromHexError; + type Err = ProgramIdParseError; fn from_str(s: &str) -> Result { let bytes = s .from_base58() - .map_err(|_| hex::FromHexError::InvalidStringLength)?; + .map_err(ProgramIdParseError::InvalidBase58)?; if bytes.len() != 32 { - return Err(hex::FromHexError::InvalidStringLength); + return Err(ProgramIdParseError::InvalidLength(bytes.len())); } - let mut arr = [0u32; 8]; + let mut arr = [0_u32; 8]; for (i, chunk) in bytes.chunks_exact(4).enumerate() { - arr[i] = u32::from_be_bytes(chunk.try_into().unwrap()); + arr[i] = u32::from_le_bytes(chunk.try_into().unwrap()); } Ok(ProgramId(arr)) } @@ -72,7 +123,7 @@ impl FromStr for AccountId { bytes.len() )); } - let mut value = [0u8; 32]; + let mut value = [0_u8; 32]; value.copy_from_slice(&bytes); Ok(AccountId { value }) } @@ -121,7 +172,7 @@ impl FromStr for Signature { type Err = hex::FromHexError; fn from_str(s: &str) -> Result { - let mut bytes = [0u8; 64]; + let mut bytes = [0_u8; 64]; hex::decode_to_slice(s, &mut bytes)?; Ok(Signature(bytes)) } @@ -141,6 +192,7 @@ pub enum Transaction { impl Transaction { /// Get the hash of the transaction + #[expect(clippy::same_name_method, reason = "This is handy")] #[must_use] pub fn hash(&self) -> &self::HashType { match self { @@ -284,7 +336,7 @@ impl FromStr for HashType { type Err = hex::FromHexError; fn from_str(s: &str) -> Result { - let mut bytes = [0u8; 32]; + let mut bytes = [0_u8; 32]; hex::decode_to_slice(s, &mut bytes)?; Ok(HashType(bytes)) } @@ -303,37 +355,3 @@ pub enum BedrockStatus { Safe, Finalized, } - -mod base64 { - use base64::prelude::{BASE64_STANDARD, Engine as _}; - use serde::{Deserialize, Deserializer, Serialize, Serializer}; - - pub mod arr { - use super::{Deserializer, Serializer}; - - pub fn serialize(v: &[u8], s: S) -> Result { - super::serialize(v, s) - } - - pub fn deserialize<'de, const N: usize, D: Deserializer<'de>>( - d: D, - ) -> Result<[u8; N], D::Error> { - let vec = super::deserialize(d)?; - vec.try_into().map_err(|_| { - serde::de::Error::custom(format!("Invalid length, expected {N} bytes")) - }) - } - } - - pub fn serialize(v: &[u8], s: S) -> Result { - let base64 = BASE64_STANDARD.encode(v); - String::serialize(&base64, s) - } - - pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result, D::Error> { - let base64 = String::deserialize(d)?; - BASE64_STANDARD - .decode(base64.as_bytes()) - .map_err(serde::de::Error::custom) - } -} diff --git a/indexer/service/src/main.rs b/indexer/service/src/main.rs index e66fe401..b34777b4 100644 --- a/indexer/service/src/main.rs +++ b/indexer/service/src/main.rs @@ -15,6 +15,10 @@ struct Args { } #[tokio::main] +#[expect( + clippy::integer_division_remainder_used, + reason = "Generated by select! macro, can't be easily rewritten to avoid this lint" +)] async fn main() -> Result<()> { env_logger::init(); diff --git a/indexer/service/src/mock_service.rs b/indexer/service/src/mock_service.rs index ac052a18..bc131740 100644 --- a/indexer/service/src/mock_service.rs +++ b/indexer/service/src/mock_service.rs @@ -1,6 +1,9 @@ #![expect( + clippy::as_conversions, + clippy::arithmetic_side_effects, clippy::cast_possible_truncation, clippy::cast_lossless, + clippy::integer_division_remainder_used, reason = "Mock service uses intentional casts and format patterns for test data generation" )] use std::collections::HashMap; @@ -31,7 +34,7 @@ impl MockIndexerService { // Create some mock accounts let account_ids: Vec = (0..5) .map(|i| { - let mut value = [0u8; 32]; + let mut value = [0_u8; 32]; value[0] = i; AccountId { value } }) @@ -50,11 +53,11 @@ impl MockIndexerService { } // Create 100 blocks with transactions - let mut prev_hash = HashType([0u8; 32]); + let mut prev_hash = HashType([0_u8; 32]); for block_id in 1..=100 { let block_hash = { - let mut hash = [0u8; 32]; + let mut hash = [0_u8; 32]; hash[0] = block_id as u8; hash[1] = 0xff; HashType(hash) @@ -67,7 +70,7 @@ impl MockIndexerService { for tx_idx in 0..num_txs { let tx_hash = { - let mut hash = [0u8; 32]; + let mut hash = [0_u8; 32]; hash[0] = block_id as u8; hash[1] = tx_idx as u8; HashType(hash) @@ -79,7 +82,7 @@ impl MockIndexerService { 0 | 1 => Transaction::Public(PublicTransaction { hash: tx_hash, message: PublicMessage { - program_id: ProgramId([1u32; 8]), + program_id: ProgramId([1_u32; 8]), account_ids: vec![ account_ids[tx_idx as usize % account_ids.len()], account_ids[(tx_idx as usize + 1) % account_ids.len()], @@ -101,7 +104,7 @@ impl MockIndexerService { ], nonces: vec![block_id as u128], public_post_states: vec![Account { - program_owner: ProgramId([1u32; 8]), + program_owner: ProgramId([1_u32; 8]), balance: 500, data: Data(vec![0xdd, 0xee]), nonce: block_id as u128, @@ -143,7 +146,7 @@ impl MockIndexerService { prev_block_hash: prev_hash, hash: block_hash, timestamp: 1_704_067_200_000 + (block_id * 12_000), // ~12 seconds per block - signature: Signature([0u8; 64]), + signature: Signature([0_u8; 64]), }, body: BlockBody { transactions: block_transactions, @@ -191,7 +194,7 @@ impl indexer_service_rpc::RpcServer for MockIndexerService { .last() .map(|bl| bl.header.block_id) .ok_or_else(|| { - ErrorObjectOwned::owned(-32001, "Last block not found".to_string(), None::<()>) + ErrorObjectOwned::owned(-32001, "Last block not found".to_owned(), None::<()>) }) } diff --git a/indexer/service/src/service.rs b/indexer/service/src/service.rs index 838e1403..85d4f32f 100644 --- a/indexer/service/src/service.rs +++ b/indexer/service/src/service.rs @@ -154,8 +154,10 @@ impl SubscriptionService { pub async fn add_subscription(&self, subscription: Subscription) -> Result<()> { let guard = self.parts.load(); - if let Err(err) = guard.new_subscription_sender.send(subscription) { - error!("Failed to send new subscription to subscription service with error: {err:#?}"); + if let Err(send_err) = guard.new_subscription_sender.send(subscription) { + error!( + "Failed to send new subscription to subscription service with error: {send_err:#?}" + ); // Respawn the subscription service loop if it has finished (either with error or panic) if guard.handle.is_finished() { @@ -177,7 +179,7 @@ impl SubscriptionService { } } - bail!(err) + bail!(send_err) } Ok(()) @@ -192,6 +194,10 @@ impl SubscriptionService { let mut block_stream = pin!(indexer.subscribe_parse_block_stream()); + #[expect( + clippy::integer_division_remainder_used, + reason = "Generated by select! macro, can't be easily rewritten to avoid this lint" + )] loop { tokio::select! { sub = sub_receiver.recv() => { @@ -289,7 +295,7 @@ pub fn not_yet_implemented_error() -> ErrorObjectOwned { fn db_error(err: anyhow::Error) -> ErrorObjectOwned { ErrorObjectOwned::owned( ErrorCode::InternalError.code(), - "DBError".to_string(), + "DBError".to_owned(), Some(format!("{err:#?}")), ) } diff --git a/integration_tests/src/config.rs b/integration_tests/src/config.rs index 062fa442..e20179eb 100644 --- a/integration_tests/src/config.rs +++ b/integration_tests/src/config.rs @@ -1,6 +1,6 @@ use std::{net::SocketAddr, path::PathBuf, time::Duration}; -use anyhow::{Context, Result}; +use anyhow::{Context as _, Result}; use bytesize::ByteSize; use common::block::{AccountInitialData, CommitmentsInitialData}; use indexer_service::{BackoffConfig, ChannelId, ClientConfig, IndexerConfig}; @@ -13,30 +13,6 @@ use wallet::config::{ InitialAccountData, InitialAccountDataPrivate, InitialAccountDataPublic, WalletConfig, }; -pub fn indexer_config( - bedrock_addr: SocketAddr, - home: PathBuf, - initial_data: &InitialData, -) -> Result { - Ok(IndexerConfig { - home, - consensus_info_polling_interval: Duration::from_secs(1), - bedrock_client_config: ClientConfig { - addr: addr_to_url(UrlProtocol::Http, bedrock_addr) - .context("Failed to convert bedrock addr to URL")?, - auth: None, - backoff: BackoffConfig { - start_delay: Duration::from_millis(100), - max_retries: 10, - }, - }, - initial_accounts: initial_data.sequencer_initial_accounts(), - initial_commitments: initial_data.sequencer_initial_commitments(), - signing_key: [37; 32], - channel_id: bedrock_channel_id(), - }) -} - /// Sequencer config options available for custom changes in integration tests. #[derive(Debug, Clone, Copy)] pub struct SequencerPartialConfig { @@ -57,66 +33,6 @@ impl Default for SequencerPartialConfig { } } -pub fn sequencer_config( - partial: SequencerPartialConfig, - home: PathBuf, - bedrock_addr: SocketAddr, - indexer_addr: SocketAddr, - initial_data: &InitialData, -) -> Result { - let SequencerPartialConfig { - max_num_tx_in_block, - max_block_size, - mempool_max_size, - block_create_timeout, - } = partial; - - Ok(SequencerConfig { - home, - override_rust_log: None, - genesis_id: 1, - is_genesis_random: true, - max_num_tx_in_block, - max_block_size, - mempool_max_size, - block_create_timeout, - retry_pending_blocks_timeout: Duration::from_secs(120), - port: 0, - initial_accounts: initial_data.sequencer_initial_accounts(), - initial_commitments: initial_data.sequencer_initial_commitments(), - signing_key: [37; 32], - bedrock_config: BedrockConfig { - backoff: BackoffConfig { - start_delay: Duration::from_millis(100), - max_retries: 5, - }, - channel_id: bedrock_channel_id(), - node_url: addr_to_url(UrlProtocol::Http, bedrock_addr) - .context("Failed to convert bedrock addr to URL")?, - auth: None, - }, - indexer_rpc_url: addr_to_url(UrlProtocol::Ws, indexer_addr) - .context("Failed to convert indexer addr to URL")?, - }) -} - -pub fn wallet_config( - sequencer_addr: SocketAddr, - initial_data: &InitialData, -) -> Result { - Ok(WalletConfig { - override_rust_log: None, - sequencer_addr: addr_to_url(UrlProtocol::Http, sequencer_addr) - .context("Failed to convert sequencer addr to URL")?, - seq_poll_timeout: Duration::from_secs(30), - seq_tx_poll_max_blocks: 15, - seq_poll_max_retries: 10, - seq_block_poll_max_amount: 100, - initial_accounts: initial_data.wallet_initial_accounts(), - basic_auth: None, - }) -} - pub struct InitialData { pub public_accounts: Vec<(PrivateKey, u128)>, pub private_accounts: Vec<(KeyChain, Account)>, @@ -223,11 +139,11 @@ impl InitialData { }) .chain(self.private_accounts.iter().map(|(key_chain, account)| { let account_id = AccountId::from(&key_chain.nullifer_public_key); - InitialAccountData::Private(InitialAccountDataPrivate { + InitialAccountData::Private(Box::new(InitialAccountDataPrivate { account_id, account: account.clone(), key_chain: key_chain.clone(), - }) + })) })) .collect() } @@ -248,6 +164,90 @@ impl std::fmt::Display for UrlProtocol { } } +pub fn indexer_config( + bedrock_addr: SocketAddr, + home: PathBuf, + initial_data: &InitialData, +) -> Result { + Ok(IndexerConfig { + home, + consensus_info_polling_interval: Duration::from_secs(1), + bedrock_client_config: ClientConfig { + addr: addr_to_url(UrlProtocol::Http, bedrock_addr) + .context("Failed to convert bedrock addr to URL")?, + auth: None, + backoff: BackoffConfig { + start_delay: Duration::from_millis(100), + max_retries: 10, + }, + }, + initial_accounts: initial_data.sequencer_initial_accounts(), + initial_commitments: initial_data.sequencer_initial_commitments(), + signing_key: [37; 32], + channel_id: bedrock_channel_id(), + }) +} + +pub fn sequencer_config( + partial: SequencerPartialConfig, + home: PathBuf, + bedrock_addr: SocketAddr, + indexer_addr: SocketAddr, + initial_data: &InitialData, +) -> Result { + let SequencerPartialConfig { + max_num_tx_in_block, + max_block_size, + mempool_max_size, + block_create_timeout, + } = partial; + + Ok(SequencerConfig { + home, + override_rust_log: None, + genesis_id: 1, + is_genesis_random: true, + max_num_tx_in_block, + max_block_size, + mempool_max_size, + block_create_timeout, + retry_pending_blocks_timeout: Duration::from_secs(120), + port: 0, + initial_accounts: initial_data.sequencer_initial_accounts(), + initial_commitments: initial_data.sequencer_initial_commitments(), + signing_key: [37; 32], + bedrock_config: BedrockConfig { + backoff: BackoffConfig { + start_delay: Duration::from_millis(100), + max_retries: 5, + }, + channel_id: bedrock_channel_id(), + node_url: addr_to_url(UrlProtocol::Http, bedrock_addr) + .context("Failed to convert bedrock addr to URL")?, + auth: None, + }, + indexer_rpc_url: addr_to_url(UrlProtocol::Ws, indexer_addr) + .context("Failed to convert indexer addr to URL")?, + }) +} + +pub fn wallet_config( + sequencer_addr: SocketAddr, + initial_data: &InitialData, +) -> Result { + Ok(WalletConfig { + override_rust_log: None, + sequencer_addr: addr_to_url(UrlProtocol::Http, sequencer_addr) + .context("Failed to convert sequencer addr to URL")?, + seq_poll_timeout: Duration::from_secs(30), + seq_tx_poll_max_blocks: 15, + seq_poll_max_retries: 10, + seq_block_poll_max_amount: 100, + initial_accounts: initial_data.wallet_initial_accounts(), + basic_auth: None, + }) +} + pub fn addr_to_url(protocol: UrlProtocol, addr: SocketAddr) -> Result { // Convert 0.0.0.0 to 127.0.0.1 for client connections // When binding to port 0, the server binds to 0.0.0.0: @@ -262,7 +262,7 @@ pub fn addr_to_url(protocol: UrlProtocol, addr: SocketAddr) -> Result { } fn bedrock_channel_id() -> ChannelId { - let channel_id: [u8; 32] = [0u8, 1] + let channel_id: [u8; 32] = [0_u8, 1] .repeat(16) .try_into() .unwrap_or_else(|_| unreachable!()); diff --git a/integration_tests/src/lib.rs b/integration_tests/src/lib.rs index b2263b5e..2492d939 100644 --- a/integration_tests/src/lib.rs +++ b/integration_tests/src/lib.rs @@ -2,15 +2,15 @@ use std::{net::SocketAddr, path::PathBuf, sync::LazyLock}; -use anyhow::{Context, Result, bail}; -use base64::{Engine, engine::general_purpose::STANDARD as BASE64}; +use anyhow::{Context as _, Result, bail}; +use base64::{Engine as _, engine::general_purpose::STANDARD as BASE64}; use common::{HashType, sequencer_client::SequencerClient, transaction::NSSATransaction}; use futures::FutureExt as _; use indexer_service::IndexerHandle; use log::{debug, error, warn}; use nssa::{AccountId, PrivacyPreservingTransaction}; use nssa_core::Commitment; -use sequencer_core::indexer_client::{IndexerClient, IndexerClientTrait}; +use sequencer_core::indexer_client::{IndexerClient, IndexerClientTrait as _}; use sequencer_runner::SequencerHandle; use tempfile::TempDir; use testcontainers::compose::DockerCompose; @@ -156,10 +156,12 @@ impl TestContext { } let mut port = None; - let mut attempt = 0; - let max_attempts = 5; + let mut attempt = 0_u32; + let max_attempts = 5_u32; while port.is_none() && attempt < max_attempts { - attempt += 1; + attempt = attempt + .checked_add(1) + .expect("We check that attempt < max_attempts, so this won't overflow"); match up_and_retrieve_port(&mut compose).await { Ok(p) => { port = Some(p); @@ -449,6 +451,10 @@ pub fn format_private_account_id(account_id: AccountId) -> String { format!("Private/{account_id}") } +#[expect( + clippy::wildcard_enum_match_arm, + reason = "We want the code to panic if the transaction type is not PrivacyPreserving" +)] pub async fn fetch_privacy_preserving_tx( seq_client: &SequencerClient, tx_hash: HashType, diff --git a/integration_tests/tests/account.rs b/integration_tests/tests/account.rs index 5a700707..02813b4c 100644 --- a/integration_tests/tests/account.rs +++ b/integration_tests/tests/account.rs @@ -1,3 +1,8 @@ +#![expect( + clippy::tests_outside_test_module, + reason = "We don't care about these in tests" +)] + use anyhow::Result; use integration_tests::TestContext; use log::info; @@ -36,7 +41,7 @@ async fn get_existing_account() -> Result<()> { async fn new_public_account_with_label() -> Result<()> { let mut ctx = TestContext::new().await?; - let label = "my-test-public-account".to_string(); + let label = "my-test-public-account".to_owned(); let command = Command::Account(AccountSubcommand::New(NewSubcommand::Public { cci: None, label: Some(label.clone()), @@ -68,7 +73,7 @@ async fn new_public_account_with_label() -> Result<()> { async fn new_private_account_with_label() -> Result<()> { let mut ctx = TestContext::new().await?; - let label = "my-test-private-account".to_string(); + let label = "my-test-private-account".to_owned(); let command = Command::Account(AccountSubcommand::New(NewSubcommand::Private { cci: None, label: Some(label.clone()), diff --git a/integration_tests/tests/amm.rs b/integration_tests/tests/amm.rs index ecea91b3..bdb2da72 100644 --- a/integration_tests/tests/amm.rs +++ b/integration_tests/tests/amm.rs @@ -1,3 +1,9 @@ +#![expect( + clippy::shadow_unrelated, + clippy::tests_outside_test_module, + reason = "We don't care about these in tests" +)] + use std::time::Duration; use anyhow::Result; @@ -108,7 +114,7 @@ async fn amm_public() -> Result<()> { let subcommand = TokenProgramAgnosticSubcommand::New { definition_account_id: format_public_account_id(definition_account_id_1), supply_account_id: format_public_account_id(supply_account_id_1), - name: "A NAM1".to_string(), + name: "A NAM1".to_owned(), total_supply: 37, }; wallet::cli::execute_subcommand(ctx.wallet_mut(), Command::Token(subcommand)).await?; @@ -132,7 +138,7 @@ async fn amm_public() -> Result<()> { let subcommand = TokenProgramAgnosticSubcommand::New { definition_account_id: format_public_account_id(definition_account_id_2), supply_account_id: format_public_account_id(supply_account_id_2), - name: "A NAM2".to_string(), + name: "A NAM2".to_owned(), total_supply: 37, }; wallet::cli::execute_subcommand(ctx.wallet_mut(), Command::Token(subcommand)).await?; diff --git a/integration_tests/tests/auth_transfer/main.rs b/integration_tests/tests/auth_transfer/main.rs index c97008bd..62b8b836 100644 --- a/integration_tests/tests/auth_transfer/main.rs +++ b/integration_tests/tests/auth_transfer/main.rs @@ -1,2 +1,8 @@ +#![expect( + clippy::shadow_unrelated, + clippy::tests_outside_test_module, + reason = "We don't care about these in tests" +)] + mod private; mod public; diff --git a/integration_tests/tests/block_size_limit.rs b/integration_tests/tests/block_size_limit.rs index 47fabdc0..41c9fc76 100644 --- a/integration_tests/tests/block_size_limit.rs +++ b/integration_tests/tests/block_size_limit.rs @@ -1,3 +1,9 @@ +#![expect( + clippy::as_conversions, + clippy::tests_outside_test_module, + reason = "We don't care about these in tests" +)] + use std::time::Duration; use anyhow::Result; @@ -24,7 +30,7 @@ async fn reject_oversized_transaction() -> Result<()> { // Create a transaction that's definitely too large // Block size is 1 MiB (1,048,576 bytes), minus ~200 bytes for header = ~1,048,376 bytes max tx // Create a 1.1 MiB binary to ensure it exceeds the limit - let oversized_binary = vec![0u8; 1100 * 1024]; // 1.1 MiB binary + let oversized_binary = vec![0_u8; 1100 * 1024]; // 1.1 MiB binary let message = nssa::program_deployment_transaction::Message::new(oversized_binary); let tx = nssa::ProgramDeploymentTransaction::new(message); @@ -62,7 +68,7 @@ async fn accept_transaction_within_limit() -> Result<()> { .await?; // Create a small program deployment that should fit - let small_binary = vec![0u8; 1024]; // 1 KiB binary + let small_binary = vec![0_u8; 1024]; // 1 KiB binary let message = nssa::program_deployment_transaction::Message::new(small_binary); let tx = nssa::ProgramDeploymentTransaction::new(message); diff --git a/integration_tests/tests/config.rs b/integration_tests/tests/config.rs index 5443edc9..09105833 100644 --- a/integration_tests/tests/config.rs +++ b/integration_tests/tests/config.rs @@ -1,3 +1,9 @@ +#![expect( + clippy::shadow_unrelated, + clippy::tests_outside_test_module, + reason = "We don't care about these in tests" +)] + use anyhow::Result; use integration_tests::TestContext; use log::info; @@ -12,8 +18,8 @@ async fn modify_config_field() -> Result<()> { // Change config field let command = Command::Config(ConfigSubcommand::Set { - key: "seq_poll_timeout".to_string(), - value: "1s".to_string(), + key: "seq_poll_timeout".to_owned(), + value: "1s".to_owned(), }); wallet::cli::execute_subcommand(ctx.wallet_mut(), command).await?; @@ -22,7 +28,7 @@ async fn modify_config_field() -> Result<()> { // Return how it was at the beginning let command = Command::Config(ConfigSubcommand::Set { - key: "seq_poll_timeout".to_string(), + key: "seq_poll_timeout".to_owned(), value: format!("{old_seq_poll_timeout:?}"), }); wallet::cli::execute_subcommand(ctx.wallet_mut(), command).await?; diff --git a/integration_tests/tests/indexer.rs b/integration_tests/tests/indexer.rs index f12ae600..55c6757d 100644 --- a/integration_tests/tests/indexer.rs +++ b/integration_tests/tests/indexer.rs @@ -1,7 +1,13 @@ +#![expect( + clippy::shadow_unrelated, + clippy::tests_outside_test_module, + reason = "We don't care about these in tests" +)] + use std::time::Duration; -use anyhow::{Context, Result}; -use indexer_service_rpc::RpcClient; +use anyhow::{Context as _, Result}; +use indexer_service_rpc::RpcClient as _; use integration_tests::{ TIME_TO_WAIT_FOR_BLOCK_SECONDS, TestContext, format_private_account_id, format_public_account_id, verify_commitment_is_in_state, diff --git a/integration_tests/tests/keys_restoration.rs b/integration_tests/tests/keys_restoration.rs index 8806fdab..f438ef70 100644 --- a/integration_tests/tests/keys_restoration.rs +++ b/integration_tests/tests/keys_restoration.rs @@ -1,6 +1,12 @@ -use std::{str::FromStr, time::Duration}; +#![expect( + clippy::shadow_unrelated, + clippy::tests_outside_test_module, + reason = "We don't care about these in tests" +)] -use anyhow::{Context, Result}; +use std::{str::FromStr as _, time::Duration}; + +use anyhow::{Context as _, Result}; use integration_tests::{ TIME_TO_WAIT_FOR_BLOCK_SECONDS, TestContext, fetch_privacy_preserving_tx, format_private_account_id, format_public_account_id, verify_commitment_is_in_state, diff --git a/integration_tests/tests/pinata.rs b/integration_tests/tests/pinata.rs index da5f13c3..38cfeac3 100644 --- a/integration_tests/tests/pinata.rs +++ b/integration_tests/tests/pinata.rs @@ -1,3 +1,9 @@ +#![expect( + clippy::shadow_unrelated, + clippy::tests_outside_test_module, + reason = "We don't care about these in tests" +)] + use std::time::Duration; use anyhow::{Context as _, Result}; diff --git a/integration_tests/tests/program_deployment.rs b/integration_tests/tests/program_deployment.rs index 098083d2..76837576 100644 --- a/integration_tests/tests/program_deployment.rs +++ b/integration_tests/tests/program_deployment.rs @@ -1,3 +1,8 @@ +#![expect( + clippy::tests_outside_test_module, + reason = "We don't care about these in tests" +)] + use std::{path::PathBuf, time::Duration}; use anyhow::Result; diff --git a/integration_tests/tests/token.rs b/integration_tests/tests/token.rs index 0ff6eee5..d3fbfdc1 100644 --- a/integration_tests/tests/token.rs +++ b/integration_tests/tests/token.rs @@ -1,3 +1,9 @@ +#![expect( + clippy::shadow_unrelated, + clippy::tests_outside_test_module, + reason = "We don't care about these in tests" +)] + use std::time::Duration; use anyhow::{Context as _, Result}; @@ -69,7 +75,7 @@ async fn create_and_transfer_public_token() -> Result<()> { }; // Create new token - let name = "A NAME".to_string(); + let name = "A NAME".to_owned(); let total_supply = 37; let subcommand = TokenProgramAgnosticSubcommand::New { definition_account_id: format_public_account_id(definition_account_id), @@ -317,7 +323,7 @@ async fn create_and_transfer_token_with_private_supply() -> Result<()> { }; // Create new token - let name = "A NAME".to_string(); + let name = "A NAME".to_owned(); let total_supply = 37; let subcommand = TokenProgramAgnosticSubcommand::New { definition_account_id: format_public_account_id(definition_account_id), @@ -475,7 +481,7 @@ async fn create_token_with_private_definition() -> Result<()> { }; // Create token with private definition - let name = "A NAME".to_string(); + let name = "A NAME".to_owned(); let total_supply = 37; let subcommand = TokenProgramAgnosticSubcommand::New { definition_account_id: format_private_account_id(definition_account_id), @@ -671,7 +677,7 @@ async fn create_token_with_private_definition_and_supply() -> Result<()> { }; // Create token with both private definition and supply - let name = "A NAME".to_string(); + let name = "A NAME".to_owned(); let total_supply = 37; let subcommand = TokenProgramAgnosticSubcommand::New { definition_account_id: format_private_account_id(definition_account_id), @@ -843,7 +849,7 @@ async fn shielded_token_transfer() -> Result<()> { }; // Create token - let name = "A NAME".to_string(); + let name = "A NAME".to_owned(); let total_supply = 37; let subcommand = TokenProgramAgnosticSubcommand::New { definition_account_id: format_public_account_id(definition_account_id), @@ -966,7 +972,7 @@ async fn deshielded_token_transfer() -> Result<()> { }; // Create token with private supply - let name = "A NAME".to_string(); + let name = "A NAME".to_owned(); let total_supply = 37; let subcommand = TokenProgramAgnosticSubcommand::New { definition_account_id: format_public_account_id(definition_account_id), @@ -1073,7 +1079,7 @@ async fn token_claiming_path_with_private_accounts() -> Result<()> { }; // Create token - let name = "A NAME".to_string(); + let name = "A NAME".to_owned(); let total_supply = 37; let subcommand = TokenProgramAgnosticSubcommand::New { definition_account_id: format_private_account_id(definition_account_id), diff --git a/integration_tests/tests/tps.rs b/integration_tests/tests/tps.rs index 9f7dd16b..a1e67fe5 100644 --- a/integration_tests/tests/tps.rs +++ b/integration_tests/tests/tps.rs @@ -1,3 +1,14 @@ +#![expect( + clippy::arithmetic_side_effects, + clippy::float_arithmetic, + clippy::missing_asserts_for_indexing, + clippy::as_conversions, + clippy::tests_outside_test_module, + clippy::integer_division, + clippy::integer_division_remainder_used, + reason = "We don't care about these in tests" +)] + use std::time::{Duration, Instant}; use anyhow::Result; @@ -21,6 +32,102 @@ use nssa_core::{ }; use tokio::test; +pub(crate) struct TpsTestManager { + public_keypairs: Vec<(PrivateKey, AccountId)>, + target_tps: u64, +} + +impl TpsTestManager { + /// Generates public account keypairs. These are used to populate the config and to generate + /// valid public transactions for the tps test. + pub(crate) fn new(target_tps: u64, number_transactions: usize) -> Self { + let public_keypairs = (1..(number_transactions + 2)) + .map(|i| { + let mut private_key_bytes = [0_u8; 32]; + private_key_bytes[..8].copy_from_slice(&i.to_le_bytes()); + let private_key = PrivateKey::try_new(private_key_bytes).unwrap(); + let public_key = PublicKey::new_from_private_key(&private_key); + let account_id = AccountId::from(&public_key); + (private_key, account_id) + }) + .collect(); + Self { + public_keypairs, + target_tps, + } + } + + #[expect( + clippy::cast_precision_loss, + reason = "This is just for testing purposes, we don't care about precision loss here" + )] + pub(crate) fn target_time(&self) -> Duration { + let number_transactions = (self.public_keypairs.len() - 1) as u64; + Duration::from_secs_f64(number_transactions as f64 / self.target_tps as f64) + } + + /// Build a batch of public transactions to submit to the node. + pub fn build_public_txs(&self) -> Vec { + // Create valid public transactions + let program = Program::authenticated_transfer_program(); + let public_txs: Vec = self + .public_keypairs + .windows(2) + .map(|pair| { + let amount: u128 = 1; + let message = putx::Message::try_new( + program.id(), + [pair[0].1, pair[1].1].to_vec(), + [0_u128].to_vec(), + amount, + ) + .unwrap(); + let witness_set = + nssa::public_transaction::WitnessSet::for_message(&message, &[&pair[0].0]); + PublicTransaction::new(message, witness_set) + }) + .collect(); + + public_txs + } + + /// Generates a sequencer configuration with initial balance in a number of public accounts. + /// The transactions generated with the function `build_public_txs` will be valid in a node + /// started with the config from this method. + fn generate_initial_data(&self) -> InitialData { + // Create public public keypairs + let public_accounts = self + .public_keypairs + .iter() + .map(|(key, _)| (key.clone(), 10)) + .collect(); + + // Generate an initial commitment to be used with the privacy preserving transaction + // created with the `build_privacy_transaction` function. + let key_chain = KeyChain::new_os_random(); + let account = Account { + balance: 100, + nonce: 0xdead_beef, + program_owner: Program::authenticated_transfer_program().id(), + data: Data::default(), + }; + + InitialData { + public_accounts, + private_accounts: vec![(key_chain, account)], + } + } + + fn generate_sequencer_partial_config() -> SequencerPartialConfig { + SequencerPartialConfig { + max_num_tx_in_block: 300, + max_block_size: ByteSize::mb(500), + mempool_max_size: 10_000, + block_create_timeout: Duration::from_secs(12), + } + } +} + // TODO: Make a proper benchmark instead of an ad-hoc test #[test] pub async fn tps_test() -> Result<()> { @@ -95,102 +202,6 @@ pub async fn tps_test() -> Result<()> { Ok(()) } -pub(crate) struct TpsTestManager { - public_keypairs: Vec<(PrivateKey, AccountId)>, - target_tps: u64, -} - -impl TpsTestManager { - /// Generates public account keypairs. These are used to populate the config and to generate - /// valid public transactions for the tps test. - pub(crate) fn new(target_tps: u64, number_transactions: usize) -> Self { - let public_keypairs = (1..(number_transactions + 2)) - .map(|i| { - let mut private_key_bytes = [0u8; 32]; - private_key_bytes[..8].copy_from_slice(&i.to_le_bytes()); - let private_key = PrivateKey::try_new(private_key_bytes).unwrap(); - let public_key = PublicKey::new_from_private_key(&private_key); - let account_id = AccountId::from(&public_key); - (private_key, account_id) - }) - .collect(); - Self { - public_keypairs, - target_tps, - } - } - - #[expect( - clippy::cast_precision_loss, - reason = "This is just for testing purposes, we don't care about precision loss here" - )] - pub(crate) fn target_time(&self) -> Duration { - let number_transactions = (self.public_keypairs.len() - 1) as u64; - Duration::from_secs_f64(number_transactions as f64 / self.target_tps as f64) - } - - /// Build a batch of public transactions to submit to the node. - pub fn build_public_txs(&self) -> Vec { - // Create valid public transactions - let program = Program::authenticated_transfer_program(); - let public_txs: Vec = self - .public_keypairs - .windows(2) - .map(|pair| { - let amount: u128 = 1; - let message = putx::Message::try_new( - program.id(), - [pair[0].1, pair[1].1].to_vec(), - [0u128].to_vec(), - amount, - ) - .unwrap(); - let witness_set = - nssa::public_transaction::WitnessSet::for_message(&message, &[&pair[0].0]); - PublicTransaction::new(message, witness_set) - }) - .collect(); - - public_txs - } - - /// Generates a sequencer configuration with initial balance in a number of public accounts. - /// The transactions generated with the function `build_public_txs` will be valid in a node - /// started with the config from this method. - fn generate_initial_data(&self) -> InitialData { - // Create public public keypairs - let public_accounts = self - .public_keypairs - .iter() - .map(|(key, _)| (key.clone(), 10)) - .collect(); - - // Generate an initial commitment to be used with the privacy preserving transaction - // created with the `build_privacy_transaction` function. - let key_chain = KeyChain::new_os_random(); - let account = Account { - balance: 100, - nonce: 0xdead_beef, - program_owner: Program::authenticated_transfer_program().id(), - data: Data::default(), - }; - - InitialData { - public_accounts, - private_accounts: vec![(key_chain, account)], - } - } - - fn generate_sequencer_partial_config() -> SequencerPartialConfig { - SequencerPartialConfig { - max_num_tx_in_block: 300, - max_block_size: ByteSize::mb(500), - mempool_max_size: 10_000, - block_create_timeout: Duration::from_secs(12), - } - } -} - /// Builds a single privacy transaction to use in stress tests. This involves generating a proof so /// it may take a while to run. In normal execution of the node this transaction will be accepted /// only once. Disabling the node's nullifier uniqueness check allows to submit this transaction diff --git a/integration_tests/tests/wallet_ffi.rs b/integration_tests/tests/wallet_ffi.rs index 4355e5f1..380f8b7b 100644 --- a/integration_tests/tests/wallet_ffi.rs +++ b/integration_tests/tests/wallet_ffi.rs @@ -1,7 +1,19 @@ +#![expect( + clippy::redundant_test_prefix, + reason = "Otherwise names interfere with ffi bindings" +)] +#![expect( + clippy::tests_outside_test_module, + clippy::undocumented_unsafe_blocks, + clippy::multiple_unsafe_ops_per_block, + clippy::shadow_unrelated, + reason = "We don't care about these in tests" +)] + use std::{ collections::HashSet, ffi::{CStr, CString, c_char}, - io::Write, + io::Write as _, path::Path, time::Duration, }; @@ -208,7 +220,7 @@ fn new_wallet_rust_with_default_config(password: &str) -> Result { config_path.clone(), storage_path.clone(), None, - password.to_string(), + password.to_owned(), ) } @@ -222,7 +234,7 @@ fn load_existing_ffi_wallet(home: &Path) -> Result<*mut WalletHandle> { } #[test] -fn test_wallet_ffi_create_public_accounts() -> Result<()> { +fn wallet_ffi_create_public_accounts() -> Result<()> { let password = "password_for_tests"; let n_accounts = 10; // First `n_accounts` public accounts created with Rust wallet @@ -257,7 +269,7 @@ fn test_wallet_ffi_create_public_accounts() -> Result<()> { } #[test] -fn test_wallet_ffi_create_private_accounts() -> Result<()> { +fn wallet_ffi_create_private_accounts() -> Result<()> { let password = "password_for_tests"; let n_accounts = 10; // First `n_accounts` private accounts created with Rust wallet @@ -291,7 +303,7 @@ fn test_wallet_ffi_create_private_accounts() -> Result<()> { Ok(()) } #[test] -fn test_wallet_ffi_save_and_load_persistent_storage() -> Result<()> { +fn wallet_ffi_save_and_load_persistent_storage() -> Result<()> { let ctx = BlockingTestContext::new()?; let mut out_private_account_id = FfiBytes32::from_bytes([0; 32]); let home = tempfile::tempdir()?; @@ -635,7 +647,7 @@ fn test_wallet_ffi_account_id_to_base58() -> Result<()> { } #[test] -fn test_wallet_ffi_base58_to_account_id() -> Result<()> { +fn wallet_ffi_base58_to_account_id() -> Result<()> { let private_key = PrivateKey::new_os_random(); let public_key = PublicKey::new_from_private_key(&private_key); let account_id = AccountId::from(&public_key); @@ -655,7 +667,7 @@ fn test_wallet_ffi_base58_to_account_id() -> Result<()> { } #[test] -fn test_wallet_ffi_init_public_account_auth_transfer() -> Result<()> { +fn wallet_ffi_init_public_account_auth_transfer() -> Result<()> { let ctx = BlockingTestContext::new()?; let home = tempfile::tempdir()?; let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; @@ -717,7 +729,7 @@ fn test_wallet_ffi_init_public_account_auth_transfer() -> Result<()> { } #[test] -fn test_wallet_ffi_init_private_account_auth_transfer() -> Result<()> { +fn wallet_ffi_init_private_account_auth_transfer() -> Result<()> { let ctx = BlockingTestContext::new()?; let home = tempfile::tempdir()?; let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; @@ -791,7 +803,7 @@ fn test_wallet_ffi_transfer_public() -> Result<()> { let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; let from: FfiBytes32 = (&ctx.ctx().existing_public_accounts()[0]).into(); let to: FfiBytes32 = (&ctx.ctx().existing_public_accounts()[1]).into(); - let amount: [u8; 16] = 100u128.to_le_bytes(); + let amount: [u8; 16] = 100_u128.to_le_bytes(); let mut transfer_result = FfiTransferResult::default(); unsafe { @@ -854,7 +866,7 @@ fn test_wallet_ffi_transfer_shielded() -> Result<()> { ); (out_account_id, out_keys) }; - let amount: [u8; 16] = 100u128.to_le_bytes(); + let amount: [u8; 16] = 100_u128.to_le_bytes(); let mut transfer_result = FfiTransferResult::default(); unsafe { @@ -918,7 +930,7 @@ fn test_wallet_ffi_transfer_deshielded() -> Result<()> { let wallet_ffi_handle = new_wallet_ffi_with_test_context_config(&ctx, home.path())?; let from: FfiBytes32 = (&ctx.ctx().existing_private_accounts()[0]).into(); let to = FfiBytes32::from_bytes([37; 32]); - let amount: [u8; 16] = 100u128.to_le_bytes(); + let amount: [u8; 16] = 100_u128.to_le_bytes(); let mut transfer_result = FfiTransferResult::default(); unsafe { @@ -989,7 +1001,7 @@ fn test_wallet_ffi_transfer_private() -> Result<()> { (out_account_id, out_keys) }; - let amount: [u8; 16] = 100u128.to_le_bytes(); + let amount: [u8; 16] = 100_u128.to_le_bytes(); let mut transfer_result = FfiTransferResult::default(); unsafe { diff --git a/key_protocol/src/key_management/ephemeral_key_holder.rs b/key_protocol/src/key_management/ephemeral_key_holder.rs index a10a5191..6ef9e305 100644 --- a/key_protocol/src/key_management/ephemeral_key_holder.rs +++ b/key_protocol/src/key_management/ephemeral_key_holder.rs @@ -2,8 +2,8 @@ use nssa_core::{ NullifierPublicKey, SharedSecretKey, encryption::{EphemeralPublicKey, EphemeralSecretKey, ViewingPublicKey}, }; -use rand::{RngCore, rngs::OsRng}; -use sha2::Digest; +use rand::{RngCore as _, rngs::OsRng}; +use sha2::Digest as _; #[derive(Debug)] /// Ephemeral secret key holder. Non-clonable as intended for one-time use. Produces ephemeral @@ -12,18 +12,6 @@ pub struct EphemeralKeyHolder { ephemeral_secret_key: EphemeralSecretKey, } -#[must_use] -pub fn produce_one_sided_shared_secret_receiver( - vpk: &ViewingPublicKey, -) -> (SharedSecretKey, EphemeralPublicKey) { - let mut esk = [0; 32]; - OsRng.fill_bytes(&mut esk); - ( - SharedSecretKey::new(&esk, vpk), - EphemeralPublicKey::from_scalar(esk), - ) -} - impl EphemeralKeyHolder { #[must_use] pub fn new(receiver_nullifier_public_key: &NullifierPublicKey) -> Self { @@ -51,3 +39,15 @@ impl EphemeralKeyHolder { SharedSecretKey::new(&self.ephemeral_secret_key, receiver_viewing_public_key) } } + +#[must_use] +pub fn produce_one_sided_shared_secret_receiver( + vpk: &ViewingPublicKey, +) -> (SharedSecretKey, EphemeralPublicKey) { + let mut esk = [0; 32]; + OsRng.fill_bytes(&mut esk); + ( + SharedSecretKey::new(&esk, vpk), + EphemeralPublicKey::from_scalar(esk), + ) +} diff --git a/key_protocol/src/key_management/key_tree/chain_index.rs b/key_protocol/src/key_management/key_tree/chain_index.rs index 80dced3b..e3700393 100644 --- a/key_protocol/src/key_management/key_tree/chain_index.rs +++ b/key_protocol/src/key_management/key_tree/chain_index.rs @@ -1,6 +1,6 @@ use std::{fmt::Display, str::FromStr}; -use itertools::Itertools; +use itertools::Itertools as _; use serde::{Deserialize, Serialize}; #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Serialize, Deserialize, Hash)] @@ -76,14 +76,14 @@ impl ChainIndex { } #[must_use] - pub fn next_in_line(&self) -> ChainIndex { + pub fn next_in_line(&self) -> Option { let mut chain = self.0.clone(); // ToDo: Add overflow check if let Some(last_p) = chain.last_mut() { - *last_p += 1; + *last_p = last_p.checked_add(1)?; } - ChainIndex(chain) + Some(ChainIndex(chain)) } #[must_use] @@ -101,7 +101,8 @@ impl ChainIndex { if self.0.is_empty() { None } else { - Some(ChainIndex(self.0[..(self.0.len() - 1)].to_vec())) + let last = self.0.len().checked_sub(1)?; + Some(ChainIndex(self.0[..last].to_vec())) } } @@ -115,14 +116,17 @@ impl ChainIndex { #[must_use] pub fn depth(&self) -> u32 { - self.0.iter().map(|cci| cci + 1).sum() + self.0 + .iter() + .map(|cci| cci.checked_add(1).expect("Max cci reached")) + .sum() } fn collapse_back(&self) -> Option { let mut res = self.parent()?; let last_mut = res.0.last_mut()?; - *last_mut += *(self.0.last()?) + 1; + *last_mut = last_mut.checked_add(self.0.last()?.checked_add(1)?)?; Some(res) } @@ -139,8 +143,8 @@ impl ChainIndex { let mut stack = vec![ChainIndex(vec![0; depth])]; let mut cumulative_stack = vec![ChainIndex(vec![0; depth])]; - while let Some(id) = stack.pop() { - if let Some(collapsed_id) = id.collapse_back() { + while let Some(top_id) = stack.pop() { + if let Some(collapsed_id) = top_id.collapse_back() { for id in collapsed_id.shuffle_iter() { stack.push(id.clone()); cumulative_stack.push(id); @@ -155,8 +159,8 @@ impl ChainIndex { let mut stack = vec![ChainIndex(vec![0; depth])]; let mut cumulative_stack = vec![ChainIndex(vec![0; depth])]; - while let Some(id) = stack.pop() { - if let Some(collapsed_id) = id.collapse_back() { + while let Some(top_id) = stack.pop() { + if let Some(collapsed_id) = top_id.collapse_back() { for id in collapsed_id.shuffle_iter() { stack.push(id.clone()); cumulative_stack.push(id); @@ -173,7 +177,7 @@ mod tests { use super::*; #[test] - fn test_chain_id_root_correct() { + fn chain_id_root_correct() { let chain_id = ChainIndex::root(); let chain_id_2 = ChainIndex::from_str("/").unwrap(); @@ -181,21 +185,21 @@ mod tests { } #[test] - fn test_chain_id_deser_correct() { + fn chain_id_deser_correct() { let chain_id = ChainIndex::from_str("/257").unwrap(); assert_eq!(chain_id.chain(), &[257]); } #[test] - fn test_chain_id_deser_failure_no_root() { + fn chain_id_deser_failure_no_root() { let chain_index_error = ChainIndex::from_str("257").err().unwrap(); assert!(matches!(chain_index_error, ChainIndexError::NoRootFound)); } #[test] - fn test_chain_id_deser_failure_int_parsing_failure() { + fn chain_id_deser_failure_int_parsing_failure() { let chain_index_error = ChainIndex::from_str("/hello").err().unwrap(); assert!(matches!( @@ -205,15 +209,15 @@ mod tests { } #[test] - fn test_chain_id_next_in_line_correct() { + fn chain_id_next_in_line_correct() { let chain_id = ChainIndex::from_str("/257").unwrap(); - let next_in_line = chain_id.next_in_line(); + let next_in_line = chain_id.next_in_line().unwrap(); assert_eq!(next_in_line, ChainIndex::from_str("/258").unwrap()); } #[test] - fn test_chain_id_child_correct() { + fn chain_id_child_correct() { let chain_id = ChainIndex::from_str("/257").unwrap(); let child = chain_id.nth_child(3); @@ -221,16 +225,16 @@ mod tests { } #[test] - fn test_correct_display() { + fn correct_display() { let chainid = ChainIndex(vec![5, 7, 8]); let string_index = format!("{chainid}"); - assert_eq!(string_index, "/5/7/8".to_string()); + assert_eq!(string_index, "/5/7/8".to_owned()); } #[test] - fn test_prev_in_line() { + fn prev_in_line() { let chain_id = ChainIndex(vec![1, 7, 3]); let prev_chain_id = chain_id.previous_in_line().unwrap(); @@ -239,7 +243,7 @@ mod tests { } #[test] - fn test_prev_in_line_no_prev() { + fn prev_in_line_no_prev() { let chain_id = ChainIndex(vec![1, 7, 0]); let prev_chain_id = chain_id.previous_in_line(); @@ -248,7 +252,7 @@ mod tests { } #[test] - fn test_parent() { + fn parent() { let chain_id = ChainIndex(vec![1, 7, 3]); let parent_chain_id = chain_id.parent().unwrap(); @@ -257,7 +261,7 @@ mod tests { } #[test] - fn test_parent_no_parent() { + fn parent_no_parent() { let chain_id = ChainIndex(vec![]); let parent_chain_id = chain_id.parent(); @@ -266,7 +270,7 @@ mod tests { } #[test] - fn test_parent_root() { + fn parent_root() { let chain_id = ChainIndex(vec![1]); let parent_chain_id = chain_id.parent().unwrap(); @@ -275,7 +279,7 @@ mod tests { } #[test] - fn test_collapse_back() { + fn collapse_back() { let chain_id = ChainIndex(vec![1, 1]); let collapsed = chain_id.collapse_back().unwrap(); @@ -284,7 +288,7 @@ mod tests { } #[test] - fn test_collapse_back_one() { + fn collapse_back_one() { let chain_id = ChainIndex(vec![1]); let collapsed = chain_id.collapse_back(); @@ -293,7 +297,7 @@ mod tests { } #[test] - fn test_collapse_back_root() { + fn collapse_back_root() { let chain_id = ChainIndex(vec![]); let collapsed = chain_id.collapse_back(); @@ -302,7 +306,7 @@ mod tests { } #[test] - fn test_shuffle() { + fn shuffle() { for id in ChainIndex::chain_ids_at_depth(5) { println!("{id}"); } diff --git a/key_protocol/src/key_management/key_tree/keys_private.rs b/key_protocol/src/key_management/key_tree/keys_private.rs index 1ff7095e..0f8b423b 100644 --- a/key_protocol/src/key_management/key_tree/keys_private.rs +++ b/key_protocol/src/key_management/key_tree/keys_private.rs @@ -1,4 +1,4 @@ -use k256::{Scalar, elliptic_curve::PrimeField}; +use k256::{Scalar, elliptic_curve::PrimeField as _}; use nssa_core::{NullifierPublicKey, encryption::ViewingPublicKey}; use serde::{Deserialize, Serialize}; @@ -54,6 +54,10 @@ impl KeyNode for ChildKeysPrivate { } fn nth_child(&self, cci: u32) -> Self { + #[expect( + clippy::arithmetic_side_effects, + reason = "Multiplying finite field scalars gives no unexpected side effects" + )] let parent_pt = Scalar::from_repr(self.value.0.private_key_holder.nullifier_secret_key.into()) .expect("Key generated as scalar, must be valid representation") @@ -113,27 +117,27 @@ impl KeyNode for ChildKeysPrivate { } } -impl<'a> From<&'a ChildKeysPrivate> for &'a (KeyChain, nssa::Account) { - fn from(value: &'a ChildKeysPrivate) -> Self { +impl<'keys> From<&'keys ChildKeysPrivate> for &'keys (KeyChain, nssa::Account) { + fn from(value: &'keys ChildKeysPrivate) -> Self { &value.value } } -impl<'a> From<&'a mut ChildKeysPrivate> for &'a mut (KeyChain, nssa::Account) { - fn from(value: &'a mut ChildKeysPrivate) -> Self { +impl<'keys> From<&'keys mut ChildKeysPrivate> for &'keys mut (KeyChain, nssa::Account) { + fn from(value: &'keys mut ChildKeysPrivate) -> Self { &mut value.value } } #[cfg(test)] mod tests { - use nssa_core::{NullifierPublicKey, NullifierSecretKey}; + use nssa_core::NullifierSecretKey; use super::*; use crate::key_management::{self, secret_holders::ViewingSecretKey}; #[test] - fn test_master_key_generation() { + fn master_key_generation() { let seed: [u8; 64] = [ 252, 56, 204, 83, 232, 123, 209, 188, 187, 167, 39, 213, 71, 39, 58, 65, 125, 134, 255, 49, 43, 108, 92, 53, 173, 164, 94, 142, 150, 74, 21, 163, 43, 144, 226, 87, 199, 18, @@ -143,7 +147,7 @@ mod tests { let keys = ChildKeysPrivate::root(seed); - let expected_ssk: SecretSpendingKey = key_management::secret_holders::SecretSpendingKey([ + let expected_ssk = key_management::secret_holders::SecretSpendingKey([ 246, 79, 26, 124, 135, 95, 52, 51, 201, 27, 48, 194, 2, 144, 51, 219, 245, 128, 139, 222, 42, 195, 105, 33, 115, 97, 186, 0, 97, 14, 218, 191, ]); @@ -158,7 +162,7 @@ mod tests { 34, 234, 19, 222, 2, 22, 12, 163, 252, 88, 11, 0, 163, ]; - let expected_npk: NullifierPublicKey = nssa_core::NullifierPublicKey([ + let expected_npk = nssa_core::NullifierPublicKey([ 7, 123, 125, 191, 233, 183, 201, 4, 20, 214, 155, 210, 45, 234, 27, 240, 194, 111, 97, 247, 155, 113, 122, 246, 192, 0, 70, 61, 76, 71, 70, 2, ]); @@ -181,7 +185,7 @@ mod tests { } #[test] - fn test_child_keys_generation() { + fn child_keys_generation() { let seed: [u8; 64] = [ 252, 56, 204, 83, 232, 123, 209, 188, 187, 167, 39, 213, 71, 39, 58, 65, 125, 134, 255, 49, 43, 108, 92, 53, 173, 164, 94, 142, 150, 74, 21, 163, 43, 144, 226, 87, 199, 18, @@ -190,7 +194,7 @@ mod tests { ]; let root_node = ChildKeysPrivate::root(seed); - let child_node = ChildKeysPrivate::nth_child(&root_node, 42u32); + let child_node = ChildKeysPrivate::nth_child(&root_node, 42_u32); let expected_ccc: [u8; 32] = [ 145, 59, 225, 32, 54, 168, 14, 45, 60, 253, 57, 202, 31, 86, 142, 234, 51, 57, 154, 88, @@ -201,7 +205,7 @@ mod tests { 19, 100, 119, 73, 191, 225, 234, 219, 129, 88, 40, 229, 63, 225, 189, 136, 69, 172, 221, 186, 147, 83, 150, 207, 70, 17, 228, 70, 113, 87, 227, 31, ]; - let expected_npk: NullifierPublicKey = nssa_core::NullifierPublicKey([ + let expected_npk = nssa_core::NullifierPublicKey([ 133, 235, 223, 151, 12, 69, 26, 222, 60, 125, 235, 125, 167, 212, 201, 168, 101, 242, 111, 239, 1, 228, 12, 252, 146, 53, 75, 17, 187, 255, 122, 181, ]); diff --git a/key_protocol/src/key_management/key_tree/keys_public.rs b/key_protocol/src/key_management/key_tree/keys_public.rs index 7e041c3f..06c3de05 100644 --- a/key_protocol/src/key_management/key_tree/keys_public.rs +++ b/key_protocol/src/key_management/key_tree/keys_public.rs @@ -16,7 +16,7 @@ impl ChildKeysPublic { fn compute_hash_value(&self, cci: u32) -> [u8; 64] { let mut hash_input = vec![]; - if 2u32.pow(31) > cci { + if 2_u32.pow(31) > cci { // Non-harden hash_input.extend_from_slice(self.cpk.value()); hash_input.extend_from_slice(&cci.to_le_bytes()); @@ -97,8 +97,8 @@ impl KeyNode for ChildKeysPublic { } } -impl<'a> From<&'a ChildKeysPublic> for &'a nssa::PrivateKey { - fn from(value: &'a ChildKeysPublic) -> Self { +impl<'keys> From<&'keys ChildKeysPublic> for &'keys nssa::PrivateKey { + fn from(value: &'keys ChildKeysPublic) -> Self { &value.csk } } @@ -110,7 +110,7 @@ mod tests { use super::*; #[test] - fn test_master_keys_generation() { + fn master_keys_generation() { let seed = [ 88, 189, 37, 237, 199, 125, 151, 226, 69, 153, 165, 113, 191, 69, 188, 221, 9, 34, 173, 134, 61, 109, 34, 103, 121, 39, 237, 14, 107, 194, 24, 194, 191, 14, 237, 185, 12, 87, @@ -141,7 +141,7 @@ mod tests { } #[test] - fn test_harden_child_keys_generation() { + fn harden_child_keys_generation() { let seed = [ 88, 189, 37, 237, 199, 125, 151, 226, 69, 153, 165, 113, 191, 69, 188, 221, 9, 34, 173, 134, 61, 109, 34, 103, 121, 39, 237, 14, 107, 194, 24, 194, 191, 14, 237, 185, 12, 87, @@ -149,7 +149,7 @@ mod tests { 187, 148, 92, 44, 253, 210, 37, ]; let root_keys = ChildKeysPublic::root(seed); - let cci = (2u32).pow(31) + 13; + let cci = (2_u32).pow(31) + 13; let child_keys = ChildKeysPublic::nth_child(&root_keys, cci); print!( @@ -181,7 +181,7 @@ mod tests { } #[test] - fn test_nonharden_child_keys_generation() { + fn nonharden_child_keys_generation() { let seed = [ 88, 189, 37, 237, 199, 125, 151, 226, 69, 153, 165, 113, 191, 69, 188, 221, 9, 34, 173, 134, 61, 109, 34, 103, 121, 39, 237, 14, 107, 194, 24, 194, 191, 14, 237, 185, 12, 87, @@ -221,7 +221,7 @@ mod tests { } #[test] - fn test_edge_case_child_keys_generation_2_power_31() { + fn edge_case_child_keys_generation_2_power_31() { let seed = [ 88, 189, 37, 237, 199, 125, 151, 226, 69, 153, 165, 113, 191, 69, 188, 221, 9, 34, 173, 134, 61, 109, 34, 103, 121, 39, 237, 14, 107, 194, 24, 194, 191, 14, 237, 185, 12, 87, @@ -229,7 +229,7 @@ mod tests { 187, 148, 92, 44, 253, 210, 37, ]; let root_keys = ChildKeysPublic::root(seed); - let cci = (2u32).pow(31); //equivant to 0, thus non-harden. + let cci = (2_u32).pow(31); //equivant to 0, thus non-harden. let child_keys = ChildKeysPublic::nth_child(&root_keys, cci); let expected_ccc = [ diff --git a/key_protocol/src/key_management/key_tree/mod.rs b/key_protocol/src/key_management/key_tree/mod.rs index bae44fbd..bdd15cb0 100644 --- a/key_protocol/src/key_management/key_tree/mod.rs +++ b/key_protocol/src/key_management/key_tree/mod.rs @@ -1,7 +1,4 @@ -use std::{ - collections::{BTreeMap, HashMap}, - sync::Arc, -}; +use std::{collections::BTreeMap, sync::Arc}; use anyhow::Result; use common::sequencer_client::SequencerClient; @@ -25,7 +22,7 @@ pub const DEPTH_SOFT_CAP: u32 = 20; #[derive(Debug, Serialize, Deserialize, Clone)] pub struct KeyTree { pub key_map: BTreeMap, - pub account_id_map: HashMap, + pub account_id_map: BTreeMap, } pub type KeyTreePublic = KeyTree; @@ -44,7 +41,7 @@ impl KeyTree { let account_id = root_keys.account_id(); let key_map = BTreeMap::from_iter([(ChainIndex::root(), root_keys)]); - let account_id_map = HashMap::from_iter([(account_id, ChainIndex::root())]); + let account_id_map = BTreeMap::from_iter([(account_id, ChainIndex::root())]); Self { key_map, @@ -53,7 +50,7 @@ impl KeyTree { } pub fn new_from_root(root: N) -> Self { - let account_id_map = HashMap::from_iter([(root.account_id(), ChainIndex::root())]); + let account_id_map = BTreeMap::from_iter([(root.account_id(), ChainIndex::root())]); let key_map = BTreeMap::from_iter([(ChainIndex::root(), root)]); Self { @@ -84,7 +81,7 @@ impl KeyTree { let rightmost_child = parent_id.nth_child(right); let rightmost_ref = self.key_map.get(&rightmost_child); - let rightmost_ref_next = self.key_map.get(&rightmost_child.next_in_line()); + let rightmost_ref_next = self.key_map.get(&rightmost_child.next_in_line()?); match (&rightmost_ref, &rightmost_ref_next) { (Some(_), Some(_)) => { @@ -92,7 +89,7 @@ impl KeyTree { right = u32::midpoint(right, right_border); } (Some(_), None) => { - break Some(right + 1); + break Some(right.checked_add(1)?); } (None, None) => { right_border = right; @@ -133,7 +130,7 @@ impl KeyTree { break 'outer chain_id; } } - depth += 1; + depth = depth.checked_add(1).expect("Max depth reached"); } } @@ -156,15 +153,13 @@ impl KeyTree { #[must_use] pub fn get_node(&self, account_id: nssa::AccountId) -> Option<&N> { - self.account_id_map - .get(&account_id) - .and_then(|chain_id| self.key_map.get(chain_id)) + let chain_id = self.account_id_map.get(&account_id)?; + self.key_map.get(chain_id) } pub fn get_node_mut(&mut self, account_id: nssa::AccountId) -> Option<&mut N> { - self.account_id_map - .get(&account_id) - .and_then(|chain_id| self.key_map.get_mut(chain_id)) + let chain_id = self.account_id_map.get(&account_id)?; + self.key_map.get_mut(chain_id) } pub fn insert(&mut self, account_id: nssa::AccountId, chain_index: ChainIndex, node: N) { @@ -173,7 +168,7 @@ impl KeyTree { } pub fn remove(&mut self, addr: nssa::AccountId) -> Option { - let chain_index = self.account_id_map.remove(&addr).unwrap(); + let chain_index = self.account_id_map.remove(&addr)?; self.key_map.remove(&chain_index) } @@ -192,7 +187,10 @@ impl KeyTree { while (next_id.depth()) < depth { self.generate_new_node(&curr_id); id_stack.push(next_id.clone()); - next_id = next_id.next_in_line(); + next_id = match next_id.next_in_line() { + Some(id) => id, + None => break, + }; } } } @@ -225,7 +223,10 @@ impl KeyTree { while (next_id.depth()) < depth { id_stack.push(next_id.clone()); - next_id = next_id.next_in_line(); + next_id = match next_id.next_in_line() { + Some(id) => id, + None => break, + }; } } } @@ -240,7 +241,8 @@ impl KeyTree { /// /// Slow, maintains tree consistency. pub fn cleanup_tree_remove_uninit_layered(&mut self, depth: u32) { - 'outer: for i in (1..(depth as usize)).rev() { + let depth = usize::try_from(depth).expect("Depth is expected to fit in usize"); + 'outer: for i in (1..depth).rev() { println!("Cleanup of tree at depth {i}"); for id in ChainIndex::chain_ids_at_depth(i) { if let Some(node) = self.key_map.get(&id) { @@ -286,7 +288,10 @@ impl KeyTree { while (next_id.depth()) < depth { id_stack.push(next_id.clone()); - next_id = next_id.next_in_line(); + next_id = match next_id.next_in_line() { + Some(id) => id, + None => break, + }; } } @@ -305,7 +310,8 @@ impl KeyTree { depth: u32, client: Arc, ) -> Result<()> { - 'outer: for i in (1..(depth as usize)).rev() { + let depth = usize::try_from(depth).expect("Depth is expected to fit in usize"); + 'outer: for i in (1..depth).rev() { println!("Cleanup of tree at depth {i}"); for id in ChainIndex::chain_ids_at_depth(i) { if let Some(node) = self.key_map.get(&id) { @@ -328,7 +334,9 @@ impl KeyTree { #[cfg(test)] mod tests { - use std::{collections::HashSet, str::FromStr}; + #![expect(clippy::shadow_unrelated, reason = "We don't care about this in tests")] + + use std::{collections::HashSet, str::FromStr as _}; use nssa::AccountId; @@ -341,7 +349,7 @@ mod tests { } #[test] - fn test_simple_key_tree() { + fn simple_key_tree() { let seed_holder = seed_holder_for_tests(); let tree = KeyTreePublic::new(&seed_holder); @@ -354,7 +362,7 @@ mod tests { } #[test] - fn test_small_key_tree() { + fn small_key_tree() { let seed_holder = seed_holder_for_tests(); let mut tree = KeyTreePrivate::new(&seed_holder); @@ -393,7 +401,7 @@ mod tests { } #[test] - fn test_key_tree_can_not_make_child_keys() { + fn key_tree_can_not_make_child_keys() { let seed_holder = seed_holder_for_tests(); let mut tree = KeyTreePrivate::new(&seed_holder); @@ -423,7 +431,7 @@ mod tests { } #[test] - fn test_key_tree_complex_structure() { + fn key_tree_complex_structure() { let seed_holder = seed_holder_for_tests(); let mut tree = KeyTreePublic::new(&seed_holder); @@ -518,7 +526,7 @@ mod tests { } #[test] - fn test_tree_balancing_automatic() { + fn tree_balancing_automatic() { let seed_holder = seed_holder_for_tests(); let mut tree = KeyTreePublic::new(&seed_holder); @@ -533,7 +541,7 @@ mod tests { } #[test] - fn test_cleanup() { + fn cleanup() { let seed_holder = seed_holder_for_tests(); let mut tree = KeyTreePrivate::new(&seed_holder); @@ -566,13 +574,13 @@ mod tests { tree.cleanup_tree_remove_uninit_layered(10); let mut key_set_res = HashSet::new(); - key_set_res.insert("/0".to_string()); - key_set_res.insert("/1".to_string()); - key_set_res.insert("/2".to_string()); - key_set_res.insert("/".to_string()); - key_set_res.insert("/0/0".to_string()); - key_set_res.insert("/0/1".to_string()); - key_set_res.insert("/1/0".to_string()); + key_set_res.insert("/0".to_owned()); + key_set_res.insert("/1".to_owned()); + key_set_res.insert("/2".to_owned()); + key_set_res.insert("/".to_owned()); + key_set_res.insert("/0/0".to_owned()); + key_set_res.insert("/0/1".to_owned()); + key_set_res.insert("/1/0".to_owned()); let mut key_set = HashSet::new(); @@ -582,28 +590,16 @@ mod tests { assert_eq!(key_set, key_set_res); - let acc = tree - .key_map - .get(&ChainIndex::from_str("/1").unwrap()) - .unwrap(); + let acc = &tree.key_map[&ChainIndex::from_str("/1").unwrap()]; assert_eq!(acc.value.1.balance, 2); - let acc = tree - .key_map - .get(&ChainIndex::from_str("/2").unwrap()) - .unwrap(); + let acc = &tree.key_map[&ChainIndex::from_str("/2").unwrap()]; assert_eq!(acc.value.1.balance, 3); - let acc = tree - .key_map - .get(&ChainIndex::from_str("/0/1").unwrap()) - .unwrap(); + let acc = &tree.key_map[&ChainIndex::from_str("/0/1").unwrap()]; assert_eq!(acc.value.1.balance, 5); - let acc = tree - .key_map - .get(&ChainIndex::from_str("/1/0").unwrap()) - .unwrap(); + let acc = &tree.key_map[&ChainIndex::from_str("/1/0").unwrap()]; assert_eq!(acc.value.1.balance, 6); } } diff --git a/key_protocol/src/key_management/mod.rs b/key_protocol/src/key_management/mod.rs index b8e3c261..3b0a6139 100644 --- a/key_protocol/src/key_management/mod.rs +++ b/key_protocol/src/key_management/mod.rs @@ -5,12 +5,12 @@ use nssa_core::{ use secret_holders::{PrivateKeyHolder, SecretSpendingKey, SeedHolder}; use serde::{Deserialize, Serialize}; -pub type PublicAccountSigningKey = [u8; 32]; - pub mod ephemeral_key_holder; pub mod key_tree; pub mod secret_holders; +pub type PublicAccountSigningKey = [u8; 32]; + #[derive(Serialize, Deserialize, Clone, Debug)] /// Entrypoint to key management pub struct KeyChain { @@ -77,9 +77,9 @@ impl KeyChain { #[cfg(test)] mod tests { use aes_gcm::aead::OsRng; - use base58::ToBase58; - use k256::{AffinePoint, elliptic_curve::group::GroupEncoding}; - use rand::RngCore; + use base58::ToBase58 as _; + use k256::{AffinePoint, elliptic_curve::group::GroupEncoding as _}; + use rand::RngCore as _; use super::*; use crate::key_management::{ @@ -87,19 +87,19 @@ mod tests { }; #[test] - fn test_new_os_random() { + fn new_os_random() { // Ensure that a new KeyChain instance can be created without errors. let account_id_key_holder = KeyChain::new_os_random(); // Check that key holder fields are initialized with expected types assert_ne!( account_id_key_holder.nullifer_public_key.as_ref(), - &[0u8; 32] + &[0_u8; 32] ); } #[test] - fn test_calculate_shared_secret_receiver() { + fn calculate_shared_secret_receiver() { let account_id_key_holder = KeyChain::new_os_random(); // Generate a random ephemeral public key sender @@ -180,7 +180,7 @@ mod tests { } #[test] - fn test_non_trivial_chain_index() { + fn non_trivial_chain_index() { let keys = account_with_chain_index_2_for_tests(); let eph_key_holder = EphemeralKeyHolder::new(&keys.nullifer_public_key); diff --git a/key_protocol/src/key_management/secret_holders.rs b/key_protocol/src/key_management/secret_holders.rs index 0c096be4..db39757e 100644 --- a/key_protocol/src/key_management/secret_holders.rs +++ b/key_protocol/src/key_management/secret_holders.rs @@ -4,9 +4,9 @@ use nssa_core::{ NullifierPublicKey, NullifierSecretKey, encryption::{Scalar, ViewingPublicKey}, }; -use rand::{RngCore, rngs::OsRng}; +use rand::{RngCore as _, rngs::OsRng}; use serde::{Deserialize, Serialize}; -use sha2::{Digest, digest::FixedOutput}; +use sha2::{Digest as _, digest::FixedOutput as _}; const NSSA_ENTROPY_BYTES: [u8; 32] = [0; 32]; @@ -27,6 +27,7 @@ pub type ViewingSecretKey = Scalar; #[derive(Serialize, Deserialize, Debug, Clone)] /// Private key holder. Produces public keys. Can produce `account_id`. Can produce shared secret /// for recepient. +#[expect(clippy::partial_pub_fields, reason = "TODO: fix later")] pub struct PrivateKeyHolder { pub nullifier_secret_key: NullifierSecretKey, pub(crate) viewing_secret_key: ViewingSecretKey, @@ -84,7 +85,7 @@ impl SecretSpendingKey { const SUFFIX_2: &[u8; 19] = &[0; 19]; let index = match index { - None => 0u32, + None => 0_u32, _ => index.expect("Expect a valid u32"), }; @@ -105,7 +106,7 @@ impl SecretSpendingKey { const SUFFIX_2: &[u8; 19] = &[0; 19]; let index = match index { - None => 0u32, + None => 0_u32, _ => index.expect("Expect a valid u32"), }; @@ -158,7 +159,7 @@ mod tests { assert_eq!(seed_holder.seed.len(), 64); - let _ = seed_holder.generate_secret_spending_key_hash(); + let _hash = seed_holder.generate_secret_spending_key_hash(); } #[test] @@ -169,15 +170,15 @@ mod tests { let top_secret_key_holder = seed_holder.produce_top_secret_key_holder(); - let _ = top_secret_key_holder.generate_viewing_secret_key(None); + let _vsk = top_secret_key_holder.generate_viewing_secret_key(None); } #[test] fn two_seeds_generated_same_from_same_mnemonic() { let mnemonic = "test_pass"; - let seed_holder1 = SeedHolder::new_mnemonic(mnemonic.to_string()); - let seed_holder2 = SeedHolder::new_mnemonic(mnemonic.to_string()); + let seed_holder1 = SeedHolder::new_mnemonic(mnemonic.to_owned()); + let seed_holder2 = SeedHolder::new_mnemonic(mnemonic.to_owned()); assert_eq!(seed_holder1.seed, seed_holder2.seed); } diff --git a/key_protocol/src/key_protocol_core/mod.rs b/key_protocol/src/key_protocol_core/mod.rs index f0ce49fa..d870b902 100644 --- a/key_protocol/src/key_protocol_core/mod.rs +++ b/key_protocol/src/key_protocol_core/mod.rs @@ -190,8 +190,8 @@ impl Default for NSSAUserData { Self::new_with_accounts( BTreeMap::new(), BTreeMap::new(), - KeyTreePublic::new(&SeedHolder::new_mnemonic("default".to_string())), - KeyTreePrivate::new(&SeedHolder::new_mnemonic("default".to_string())), + KeyTreePublic::new(&SeedHolder::new_mnemonic("default".to_owned())), + KeyTreePrivate::new(&SeedHolder::new_mnemonic("default".to_owned())), ) .unwrap() } @@ -202,7 +202,7 @@ mod tests { use super::*; #[test] - fn test_new_account() { + fn new_account() { let mut user_data = NSSAUserData::default(); let (account_id_private, _) = user_data diff --git a/key_protocol/src/lib.rs b/key_protocol/src/lib.rs index 1a52c202..e3fe31cf 100644 --- a/key_protocol/src/lib.rs +++ b/key_protocol/src/lib.rs @@ -1,2 +1,4 @@ +#![expect(clippy::print_stdout, reason = "TODO: fix later")] + pub mod key_management; pub mod key_protocol_core; diff --git a/mempool/src/lib.rs b/mempool/src/lib.rs index 874a2fa3..fa844065 100644 --- a/mempool/src/lib.rs +++ b/mempool/src/lib.rs @@ -66,13 +66,13 @@ mod tests { use super::*; #[test] - async fn test_mempool_new() { + async fn mempool_new() { let (mut pool, _handle): (MemPool, _) = MemPool::new(10); assert_eq!(pool.pop(), None); } #[test] - async fn test_push_and_pop() { + async fn push_and_pop() { let (mut pool, handle) = MemPool::new(10); handle.push(1).await.unwrap(); @@ -83,7 +83,7 @@ mod tests { } #[test] - async fn test_multiple_push_pop() { + async fn multiple_push_pop() { let (mut pool, handle) = MemPool::new(10); handle.push(1).await.unwrap(); @@ -97,13 +97,13 @@ mod tests { } #[test] - async fn test_pop_empty() { + async fn pop_empty() { let (mut pool, _handle): (MemPool, _) = MemPool::new(10); assert_eq!(pool.pop(), None); } #[test] - async fn test_max_size() { + async fn max_size() { let (mut pool, handle) = MemPool::new(2); handle.push(1).await.unwrap(); @@ -116,7 +116,7 @@ mod tests { } #[test] - async fn test_push_front() { + async fn push_front() { let (mut pool, handle) = MemPool::new(10); handle.push(1).await.unwrap(); diff --git a/nssa/Cargo.toml b/nssa/Cargo.toml index 671ea853..d10ba78c 100644 --- a/nssa/Cargo.toml +++ b/nssa/Cargo.toml @@ -10,6 +10,7 @@ workspace = true [dependencies] nssa_core = { workspace = true, features = ["host"] } +anyhow.workspace = true thiserror.workspace = true risc0-zkvm.workspace = true serde.workspace = true diff --git a/nssa/core/src/account.rs b/nssa/core/src/account.rs index 59c8a203..98799c9f 100644 --- a/nssa/core/src/account.rs +++ b/nssa/core/src/account.rs @@ -3,7 +3,7 @@ use std::{ str::FromStr, }; -use base58::{FromBase58, ToBase58}; +use base58::{FromBase58 as _, ToBase58 as _}; use borsh::{BorshDeserialize, BorshSerialize}; pub use data::Data; use serde::{Deserialize, Serialize}; @@ -125,7 +125,7 @@ impl FromStr for AccountId { if bytes.len() != 32 { return Err(AccountIdError::InvalidLength(bytes.len())); } - let mut value = [0u8; 32]; + let mut value = [0_u8; 32]; value.copy_from_slice(&bytes); Ok(AccountId { value }) } @@ -143,28 +143,28 @@ mod tests { use crate::program::DEFAULT_PROGRAM_ID; #[test] - fn test_zero_balance_account_data_creation() { + fn zero_balance_account_data_creation() { let new_acc = Account::default(); assert_eq!(new_acc.balance, 0); } #[test] - fn test_zero_nonce_account_data_creation() { + fn zero_nonce_account_data_creation() { let new_acc = Account::default(); assert_eq!(new_acc.nonce, 0); } #[test] - fn test_empty_data_account_data_creation() { + fn empty_data_account_data_creation() { let new_acc = Account::default(); assert!(new_acc.data.is_empty()); } #[test] - fn test_default_program_owner_account_data_creation() { + fn default_program_owner_account_data_creation() { let new_acc = Account::default(); assert_eq!(new_acc.program_owner, DEFAULT_PROGRAM_ID); @@ -172,7 +172,7 @@ mod tests { #[cfg(feature = "host")] #[test] - fn test_account_with_metadata_constructor() { + fn account_with_metadata_constructor() { let account = Account { program_owner: [1, 2, 3, 4, 5, 6, 7, 8], balance: 1337, @@ -194,7 +194,7 @@ mod tests { fn parse_valid_account_id() { let base58_str = "11111111111111111111111111111111"; let account_id: AccountId = base58_str.parse().unwrap(); - assert_eq!(account_id.value, [0u8; 32]); + assert_eq!(account_id.value, [0_u8; 32]); } #[cfg(feature = "host")] diff --git a/nssa/core/src/account/data.rs b/nssa/core/src/account/data.rs index d244ee47..36f82653 100644 --- a/nssa/core/src/account/data.rs +++ b/nssa/core/src/account/data.rs @@ -22,18 +22,17 @@ impl Data { ) -> Result { use std::io::Read as _; - let mut u32_bytes = [0u8; 4]; + let mut u32_bytes = [0_u8; 4]; cursor.read_exact(&mut u32_bytes)?; let data_length = u32::from_le_bytes(u32_bytes); - if data_length as usize - > usize::try_from(DATA_MAX_LENGTH.as_u64()).expect("DATA_MAX_LENGTH fits in usize") - { + if u64::from(data_length) > DATA_MAX_LENGTH.as_u64() { return Err( std::io::Error::new(std::io::ErrorKind::InvalidData, DataTooBigError).into(), ); } - let mut data = vec![0; data_length as usize]; + let mut data = + vec![0; usize::try_from(data_length).expect("data length is expected to fit in usize")]; cursor.read_exact(&mut data)?; Ok(Self(data)) } @@ -135,15 +134,10 @@ impl BorshDeserialize for Data { let len = u32::deserialize_reader(reader)?; match len { 0 => Ok(Self::default()), - len if len as usize - > usize::try_from(DATA_MAX_LENGTH.as_u64()) - .expect("DATA_MAX_LENGTH fits in usize") => - { - Err(std::io::Error::new( - std::io::ErrorKind::InvalidData, - DataTooBigError, - )) - } + len if u64::from(len) > DATA_MAX_LENGTH.as_u64() => Err(std::io::Error::new( + std::io::ErrorKind::InvalidData, + DataTooBigError, + )), len => { let vec_bytes = u8::vec_from_reader(len, reader)? .expect("can't be None in current borsh crate implementation"); @@ -158,9 +152,9 @@ mod tests { use super::*; #[test] - fn test_data_max_length_allowed() { + fn data_max_length_allowed() { let max_vec = vec![ - 0u8; + 0_u8; usize::try_from(DATA_MAX_LENGTH.as_u64()) .expect("DATA_MAX_LENGTH fits in usize") ]; @@ -169,9 +163,9 @@ mod tests { } #[test] - fn test_data_too_big_error() { + fn data_too_big_error() { let big_vec = vec![ - 0u8; + 0_u8; usize::try_from(DATA_MAX_LENGTH.as_u64()) .expect("DATA_MAX_LENGTH fits in usize") + 1 @@ -181,9 +175,9 @@ mod tests { } #[test] - fn test_borsh_deserialize_exceeding_limit_error() { + fn borsh_deserialize_exceeding_limit_error() { let too_big_data = vec![ - 0u8; + 0_u8; usize::try_from(DATA_MAX_LENGTH.as_u64()) .expect("DATA_MAX_LENGTH fits in usize") + 1 @@ -196,9 +190,9 @@ mod tests { } #[test] - fn test_json_deserialize_exceeding_limit_error() { + fn json_deserialize_exceeding_limit_error() { let data = vec![ - 0u8; + 0_u8; usize::try_from(DATA_MAX_LENGTH.as_u64()) .expect("DATA_MAX_LENGTH fits in usize") + 1 diff --git a/nssa/core/src/circuit_io.rs b/nssa/core/src/circuit_io.rs index fd65491a..e4ff6e2d 100644 --- a/nssa/core/src/circuit_io.rs +++ b/nssa/core/src/circuit_io.rs @@ -61,7 +61,7 @@ mod tests { }; #[test] - fn test_privacy_preserving_circuit_output_to_bytes_is_compatible_with_from_slice() { + fn privacy_preserving_circuit_output_to_bytes_is_compatible_with_from_slice() { let output = PrivacyPreservingCircuitOutput { public_pre_states: vec![ AccountWithMetadata::new( @@ -69,7 +69,7 @@ mod tests { program_owner: [1, 2, 3, 4, 5, 6, 7, 8], balance: 12_345_678_901_234_567_890, data: b"test data".to_vec().try_into().unwrap(), - nonce: 18_446_744_073_709_551_614, + nonce: 0xFFFF_FFFF_FFFF_FFFE, }, true, AccountId::new([0; 32]), @@ -89,7 +89,7 @@ mod tests { program_owner: [1, 2, 3, 4, 5, 6, 7, 8], balance: 100, data: b"post state data".to_vec().try_into().unwrap(), - nonce: 18_446_744_073_709_551_615, + nonce: 0xFFFF_FFFF_FFFF_FFFF, }], ciphertexts: vec![Ciphertext(vec![255, 255, 1, 1, 2, 2])], new_commitments: vec![Commitment::new( diff --git a/nssa/core/src/commitment.rs b/nssa/core/src/commitment.rs index 58bd838c..87e1ac79 100644 --- a/nssa/core/src/commitment.rs +++ b/nssa/core/src/commitment.rs @@ -1,29 +1,9 @@ use borsh::{BorshDeserialize, BorshSerialize}; -use risc0_zkvm::sha::{Impl, Sha256}; +use risc0_zkvm::sha::{Impl, Sha256 as _}; use serde::{Deserialize, Serialize}; use crate::{NullifierPublicKey, account::Account}; -#[derive(Serialize, Deserialize, BorshSerialize, BorshDeserialize)] -#[cfg_attr( - any(feature = "host", test), - derive(Clone, PartialEq, Eq, Hash, PartialOrd, Ord) -)] -pub struct Commitment(pub(super) [u8; 32]); - -#[cfg(any(feature = "host", test))] -impl std::fmt::Debug for Commitment { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - use std::fmt::Write as _; - - let hex: String = self.0.iter().fold(String::new(), |mut acc, b| { - write!(acc, "{b:02x}").expect("writing to string should not fail"); - acc - }); - write!(f, "Commitment({hex})") - } -} - /// A commitment to all zero data. /// ```python /// from hashlib import sha256 @@ -48,6 +28,26 @@ pub const DUMMY_COMMITMENT_HASH: [u8; 32] = [ 194, 216, 67, 56, 251, 208, 226, 0, 117, 149, 39, ]; +#[derive(Serialize, Deserialize, BorshSerialize, BorshDeserialize)] +#[cfg_attr( + any(feature = "host", test), + derive(Clone, PartialEq, Eq, Hash, PartialOrd, Ord) +)] +pub struct Commitment(pub(super) [u8; 32]); + +#[cfg(any(feature = "host", test))] +impl std::fmt::Debug for Commitment { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + use std::fmt::Write as _; + + let hex: String = self.0.iter().fold(String::new(), |mut acc, b| { + write!(acc, "{b:02x}").expect("writing to string should not fail"); + acc + }); + write!(f, "Commitment({hex})") + } +} + impl Commitment { /// Generates the commitment to a private account owned by user for npk: /// SHA256(npk || `program_owner` || balance || nonce || SHA256(data)) @@ -93,12 +93,12 @@ pub fn compute_digest_for_path( for node in &proof.1 { let is_left_child = level_index & 1 == 0; if is_left_child { - let mut bytes = [0u8; 64]; + let mut bytes = [0_u8; 64]; bytes[..32].copy_from_slice(&result); bytes[32..].copy_from_slice(node); result = Impl::hash_bytes(&bytes).as_bytes().try_into().unwrap(); } else { - let mut bytes = [0u8; 64]; + let mut bytes = [0_u8; 64]; bytes[..32].copy_from_slice(node); bytes[32..].copy_from_slice(&result); result = Impl::hash_bytes(&bytes).as_bytes().try_into().unwrap(); @@ -110,14 +110,14 @@ pub fn compute_digest_for_path( #[cfg(test)] mod tests { - use risc0_zkvm::sha::{Impl, Sha256}; + use risc0_zkvm::sha::{Impl, Sha256 as _}; use crate::{ Commitment, DUMMY_COMMITMENT, DUMMY_COMMITMENT_HASH, NullifierPublicKey, account::Account, }; #[test] - fn test_nothing_up_my_sleeve_dummy_commitment() { + fn nothing_up_my_sleeve_dummy_commitment() { let default_account = Account::default(); let npk_null = NullifierPublicKey([0; 32]); let expected_dummy_commitment = Commitment::new(&npk_null, &default_account); @@ -125,7 +125,7 @@ mod tests { } #[test] - fn test_nothing_up_my_sleeve_dummy_commitment_hash() { + fn nothing_up_my_sleeve_dummy_commitment_hash() { let expected_dummy_commitment_hash: [u8; 32] = Impl::hash_bytes(&DUMMY_COMMITMENT.to_byte_array()) .as_bytes() diff --git a/nssa/core/src/encoding.rs b/nssa/core/src/encoding.rs index 6050a234..04e3ac88 100644 --- a/nssa/core/src/encoding.rs +++ b/nssa/core/src/encoding.rs @@ -2,7 +2,7 @@ #[cfg(feature = "host")] use std::io::Cursor; #[cfg(feature = "host")] -use std::io::Read; +use std::io::Read as _; #[cfg(feature = "host")] use crate::Nullifier; @@ -37,11 +37,11 @@ impl Account { pub fn from_cursor(cursor: &mut Cursor<&[u8]>) -> Result { use crate::account::data::Data; - let mut u32_bytes = [0u8; 4]; - let mut u128_bytes = [0u8; 16]; + let mut u32_bytes = [0_u8; 4]; + let mut u128_bytes = [0_u8; 16]; // program owner - let mut program_owner = [0u32; 8]; + let mut program_owner = [0_u32; 8]; for word in &mut program_owner { cursor.read_exact(&mut u32_bytes)?; *word = u32::from_le_bytes(u32_bytes); @@ -82,7 +82,7 @@ impl Commitment { /// Deserializes a commitment from a cursor. #[cfg(feature = "host")] pub fn from_cursor(cursor: &mut Cursor<&[u8]>) -> Result { - let mut bytes = [0u8; 32]; + let mut bytes = [0_u8; 32]; cursor.read_exact(&mut bytes)?; Ok(Self(bytes)) } @@ -110,7 +110,7 @@ impl Nullifier { /// Deserializes a nullifier from a cursor. pub fn from_cursor(cursor: &mut Cursor<&[u8]>) -> Result { - let mut bytes = [0u8; 32]; + let mut bytes = [0_u8; 32]; cursor.read_exact(&mut bytes)?; Ok(Self(bytes)) } @@ -148,7 +148,9 @@ impl Ciphertext { cursor.read_exact(&mut u32_bytes)?; let ciphertext_lenght = u32::from_le_bytes(u32_bytes); - let mut ciphertext = vec![0; ciphertext_lenght as usize]; + let ciphertext_length = + usize::try_from(ciphertext_lenght).expect("ciphertext length fits in usize"); + let mut ciphertext = vec![0; ciphertext_length]; cursor.read_exact(&mut ciphertext)?; Ok(Self(ciphertext)) @@ -183,7 +185,7 @@ mod tests { use super::*; #[test] - fn test_enconding() { + fn enconding() { let account = Account { program_owner: [1, 2, 3, 4, 5, 6, 7, 8], balance: 123_456_789_012_345_678_901_234_567_890_123_456, @@ -204,7 +206,7 @@ mod tests { } #[test] - fn test_commitment_to_bytes() { + fn commitment_to_bytes() { let commitment = Commitment((0..32).collect::>().try_into().unwrap()); let expected_bytes: [u8; 32] = (0..32).collect::>().try_into().unwrap(); @@ -214,7 +216,7 @@ mod tests { #[cfg(feature = "host")] #[test] - fn test_nullifier_to_bytes() { + fn nullifier_to_bytes() { let nullifier = Nullifier((0..32).collect::>().try_into().unwrap()); let expected_bytes: [u8; 32] = (0..32).collect::>().try_into().unwrap(); @@ -224,7 +226,7 @@ mod tests { #[cfg(feature = "host")] #[test] - fn test_commitment_to_bytes_roundtrip() { + fn commitment_to_bytes_roundtrip() { let commitment = Commitment((0..32).collect::>().try_into().unwrap()); let bytes = commitment.to_byte_array(); let mut cursor = Cursor::new(bytes.as_ref()); @@ -234,7 +236,7 @@ mod tests { #[cfg(feature = "host")] #[test] - fn test_nullifier_to_bytes_roundtrip() { + fn nullifier_to_bytes_roundtrip() { let nullifier = Nullifier((0..32).collect::>().try_into().unwrap()); let bytes = nullifier.to_byte_array(); let mut cursor = Cursor::new(bytes.as_ref()); @@ -244,7 +246,7 @@ mod tests { #[cfg(feature = "host")] #[test] - fn test_account_to_bytes_roundtrip() { + fn account_to_bytes_roundtrip() { let account = Account { program_owner: [1, 2, 3, 4, 5, 6, 7, 8], balance: 123_456_789_012_345_678_901_234_567_890_123_456, diff --git a/nssa/core/src/encryption/mod.rs b/nssa/core/src/encryption/mod.rs index 4b07428b..1d722a5e 100644 --- a/nssa/core/src/encryption/mod.rs +++ b/nssa/core/src/encryption/mod.rs @@ -1,18 +1,16 @@ use borsh::{BorshDeserialize, BorshSerialize}; use chacha20::{ ChaCha20, - cipher::{KeyIvInit, StreamCipher}, + cipher::{KeyIvInit as _, StreamCipher as _}, }; -use risc0_zkvm::sha::{Impl, Sha256}; +use risc0_zkvm::sha::{Impl, Sha256 as _}; use serde::{Deserialize, Serialize}; - -#[cfg(feature = "host")] -pub mod shared_key_derivation; - #[cfg(feature = "host")] pub use shared_key_derivation::{EphemeralPublicKey, EphemeralSecretKey, ViewingPublicKey}; use crate::{Commitment, account::Account}; +#[cfg(feature = "host")] +pub mod shared_key_derivation; pub type Scalar = [u8; 32]; @@ -78,6 +76,10 @@ impl EncryptionScheme { } #[cfg(feature = "host")] + #[expect( + clippy::print_stdout, + reason = "This is the current way to debug things. TODO: fix later" + )] #[must_use] pub fn decrypt( ciphertext: &Ciphertext, diff --git a/nssa/core/src/encryption/shared_key_derivation.rs b/nssa/core/src/encryption/shared_key_derivation.rs index 9e37668f..c5890f49 100644 --- a/nssa/core/src/encryption/shared_key_derivation.rs +++ b/nssa/core/src/encryption/shared_key_derivation.rs @@ -1,11 +1,16 @@ +#![expect( + clippy::arithmetic_side_effects, + reason = "Multiplication of finite field elements can't overflow" +)] + use std::fmt::Write as _; use borsh::{BorshDeserialize, BorshSerialize}; use k256::{ AffinePoint, EncodedPoint, FieldBytes, ProjectivePoint, elliptic_curve::{ - PrimeField, - sec1::{FromEncodedPoint, ToEncodedPoint}, + PrimeField as _, + sec1::{FromEncodedPoint as _, ToEncodedPoint as _}, }, }; use serde::{Deserialize, Serialize}; @@ -61,9 +66,9 @@ impl SharedSecretKey { let shared = ProjectivePoint::from(pubkey_affine) * scalar; let shared_affine = shared.to_affine(); - let encoded = shared_affine.to_encoded_point(false); - let x_bytes_slice = encoded.x().unwrap(); - let mut x_bytes = [0u8; 32]; + let shared_affine_encoded = shared_affine.to_encoded_point(false); + let x_bytes_slice = shared_affine_encoded.x().unwrap(); + let mut x_bytes = [0_u8; 32]; x_bytes.copy_from_slice(x_bytes_slice); Self(x_bytes) diff --git a/nssa/core/src/lib.rs b/nssa/core/src/lib.rs index 8d4fce5f..8014c7ca 100644 --- a/nssa/core/src/lib.rs +++ b/nssa/core/src/lib.rs @@ -1,10 +1,7 @@ -pub mod account; -mod circuit_io; -mod commitment; -mod encoding; -pub mod encryption; -mod nullifier; -pub mod program; +#![expect( + clippy::multiple_inherent_impl, + reason = "We prefer to group methods by functionality rather than by type for encoding" +)] pub use circuit_io::{PrivacyPreservingCircuitInput, PrivacyPreservingCircuitOutput}; pub use commitment::{ @@ -14,5 +11,13 @@ pub use commitment::{ pub use encryption::{EncryptionScheme, SharedSecretKey}; pub use nullifier::{Nullifier, NullifierPublicKey, NullifierSecretKey}; +pub mod account; +mod circuit_io; +mod commitment; +mod encoding; +pub mod encryption; +mod nullifier; +pub mod program; + #[cfg(feature = "host")] pub mod error; diff --git a/nssa/core/src/nullifier.rs b/nssa/core/src/nullifier.rs index 5038138f..2ba9afc4 100644 --- a/nssa/core/src/nullifier.rs +++ b/nssa/core/src/nullifier.rs @@ -1,5 +1,5 @@ use borsh::{BorshDeserialize, BorshSerialize}; -use risc0_zkvm::sha::{Impl, Sha256}; +use risc0_zkvm::sha::{Impl, Sha256 as _}; use serde::{Deserialize, Serialize}; use crate::{Commitment, account::AccountId}; @@ -88,8 +88,8 @@ mod tests { use super::*; #[test] - fn test_constructor_for_account_update() { - let commitment = Commitment((0..32u8).collect::>().try_into().unwrap()); + fn constructor_for_account_update() { + let commitment = Commitment((0..32_u8).collect::>().try_into().unwrap()); let nsk = [0x42; 32]; let expected_nullifier = Nullifier([ 148, 243, 116, 209, 140, 231, 211, 61, 35, 62, 114, 110, 143, 224, 82, 201, 221, 34, @@ -100,7 +100,7 @@ mod tests { } #[test] - fn test_constructor_for_account_initialization() { + fn constructor_for_account_initialization() { let npk = NullifierPublicKey([ 112, 188, 193, 129, 150, 55, 228, 67, 88, 168, 29, 151, 5, 92, 23, 190, 17, 162, 164, 255, 29, 105, 42, 186, 43, 11, 157, 168, 132, 225, 17, 163, @@ -114,7 +114,7 @@ mod tests { } #[test] - fn test_from_secret_key() { + fn from_secret_key() { let nsk = [ 57, 5, 64, 115, 153, 56, 184, 51, 207, 238, 99, 165, 147, 214, 213, 151, 30, 251, 30, 196, 134, 22, 224, 211, 237, 120, 136, 225, 188, 220, 249, 28, @@ -128,7 +128,7 @@ mod tests { } #[test] - fn test_account_id_from_nullifier_public_key() { + fn account_id_from_nullifier_public_key() { let nsk = [ 57, 5, 64, 115, 153, 56, 184, 51, 207, 238, 99, 165, 147, 214, 213, 151, 30, 251, 30, 196, 134, 22, 224, 211, 237, 120, 136, 225, 188, 220, 249, 28, diff --git a/nssa/core/src/program.rs b/nssa/core/src/program.rs index 1b97b117..b541e5f0 100644 --- a/nssa/core/src/program.rs +++ b/nssa/core/src/program.rs @@ -5,11 +5,11 @@ use serde::{Deserialize, Serialize}; use crate::account::{Account, AccountId, AccountWithMetadata}; -pub type ProgramId = [u32; 8]; -pub type InstructionData = Vec; pub const DEFAULT_PROGRAM_ID: ProgramId = [0; 8]; pub const MAX_NUMBER_CHAINED_CALLS: usize = 10; +pub type ProgramId = [u32; 8]; +pub type InstructionData = Vec; pub struct ProgramInput { pub pre_states: Vec, pub instruction: T, @@ -30,24 +30,9 @@ impl PdaSeed { } } -#[must_use] -pub fn compute_authorized_pdas( - caller_program_id: Option, - pda_seeds: &[PdaSeed], -) -> HashSet { - caller_program_id - .map(|caller_program_id| { - pda_seeds - .iter() - .map(|pda_seed| AccountId::from((&caller_program_id, pda_seed))) - .collect() - }) - .unwrap_or_default() -} - impl From<(&ProgramId, &PdaSeed)> for AccountId { fn from(value: (&ProgramId, &PdaSeed)) -> Self { - use risc0_zkvm::sha::{Impl, Sha256}; + use risc0_zkvm::sha::{Impl, Sha256 as _}; const PROGRAM_DERIVED_ACCOUNT_ID_PREFIX: &[u8; 32] = b"/NSSA/v0.2/AccountId/PDA/\x00\x00\x00\x00\x00\x00\x00"; @@ -176,6 +161,48 @@ pub struct ProgramOutput { pub chained_calls: Vec, } +/// Representation of a number as `lo + hi * 2^128`. +#[derive(PartialEq, Eq)] +struct WrappedBalanceSum { + lo: u128, + hi: u128, +} + +impl WrappedBalanceSum { + /// Constructs a [`WrappedBalanceSum`] from an iterator of balances. + /// + /// Returns [`None`] if balance sum overflows `lo + hi * 2^128` representation, which is not + /// expected in practical scenarios. + fn from_balances(balances: impl Iterator) -> Option { + let mut wrapped = WrappedBalanceSum { lo: 0, hi: 0 }; + + for balance in balances { + let (new_sum, did_overflow) = wrapped.lo.overflowing_add(balance); + if did_overflow { + wrapped.hi = wrapped.hi.checked_add(1)?; + } + wrapped.lo = new_sum; + } + + Some(wrapped) + } +} + +#[must_use] +pub fn compute_authorized_pdas( + caller_program_id: Option, + pda_seeds: &[PdaSeed], +) -> HashSet { + caller_program_id + .map(|caller_program_id| { + pda_seeds + .iter() + .map(|pda_seed| AccountId::from((&caller_program_id, pda_seed))) + .collect() + }) + .unwrap_or_default() +} + /// Reads the NSSA inputs from the guest environment. #[must_use] pub fn read_nssa_inputs() -> (ProgramInput, InstructionData) { @@ -310,39 +337,12 @@ fn validate_uniqueness_of_account_ids(pre_states: &[AccountWithMetadata]) -> boo number_of_accounts == number_of_account_ids } -/// Representation of a number as `lo + hi * 2^128`. -#[derive(PartialEq, Eq)] -struct WrappedBalanceSum { - lo: u128, - hi: u128, -} - -impl WrappedBalanceSum { - /// Constructs a [`WrappedBalanceSum`] from an iterator of balances. - /// - /// Returns [`None`] if balance sum overflows `lo + hi * 2^128` representation, which is not - /// expected in practical scenarios. - fn from_balances(balances: impl Iterator) -> Option { - let mut wrapped = WrappedBalanceSum { lo: 0, hi: 0 }; - - for balance in balances { - let (new_sum, did_overflow) = wrapped.lo.overflowing_add(balance); - if did_overflow { - wrapped.hi = wrapped.hi.checked_add(1)?; - } - wrapped.lo = new_sum; - } - - Some(wrapped) - } -} - #[cfg(test)] mod tests { use super::*; #[test] - fn test_post_state_new_with_claim_constructor() { + fn post_state_new_with_claim_constructor() { let account = Account { program_owner: [1, 2, 3, 4, 5, 6, 7, 8], balance: 1337, @@ -357,7 +357,7 @@ mod tests { } #[test] - fn test_post_state_new_without_claim_constructor() { + fn post_state_new_without_claim_constructor() { let account = Account { program_owner: [1, 2, 3, 4, 5, 6, 7, 8], balance: 1337, @@ -372,7 +372,7 @@ mod tests { } #[test] - fn test_post_state_account_getter() { + fn post_state_account_getter() { let mut account = Account { program_owner: [1, 2, 3, 4, 5, 6, 7, 8], balance: 1337, diff --git a/nssa/src/encoding/program_deployment_transaction.rs b/nssa/src/encoding/program_deployment_transaction.rs index 9b1b9406..fc1bf459 100644 --- a/nssa/src/encoding/program_deployment_transaction.rs +++ b/nssa/src/encoding/program_deployment_transaction.rs @@ -16,7 +16,7 @@ mod tests { use crate::{ProgramDeploymentTransaction, program_deployment_transaction::Message}; #[test] - fn test_roundtrip() { + fn roundtrip() { let message = Message::new(vec![0xca, 0xfe, 0xca, 0xfe, 0x01, 0x02, 0x03]); let tx = ProgramDeploymentTransaction::new(message); let bytes = tx.to_bytes(); diff --git a/nssa/src/error.rs b/nssa/src/error.rs index c42b70d2..3576b366 100644 --- a/nssa/src/error.rs +++ b/nssa/src/error.rs @@ -29,7 +29,7 @@ pub enum NssaError { Io(#[from] io::Error), #[error("Invalid Public Key")] - InvalidPublicKey, + InvalidPublicKey(#[source] secp256k1::Error), #[error("Risc0 error: {0}")] ProgramWriteInputFailed(String), @@ -59,13 +59,16 @@ pub enum NssaError { CircuitProvingError(String), #[error("Invalid program bytecode")] - InvalidProgramBytecode, + InvalidProgramBytecode(#[source] anyhow::Error), #[error("Program already exists")] ProgramAlreadyExists, #[error("Chain of calls is too long")] MaxChainedCallsDepthExceeded, + + #[error("Max account nonce reached")] + MaxAccountNonceReached, } #[cfg(test)] @@ -83,7 +86,7 @@ mod tests { } #[test] - fn test_ensure() { + fn ensure_works() { assert!(test_function_ensure(true).is_ok()); assert!(test_function_ensure(false).is_err()); } diff --git a/nssa/src/lib.rs b/nssa/src/lib.rs index 47a0eadb..bc7cf121 100644 --- a/nssa/src/lib.rs +++ b/nssa/src/lib.rs @@ -1,16 +1,7 @@ -pub mod program_methods { - include!(concat!(env!("OUT_DIR"), "/program_methods/mod.rs")); -} - -pub mod encoding; -pub mod error; -mod merkle_tree; -pub mod privacy_preserving_transaction; -pub mod program; -pub mod program_deployment_transaction; -pub mod public_transaction; -mod signature; -mod state; +#![expect( + clippy::multiple_inherent_impl, + reason = "We prefer to group methods by functionality rather than by type for encoding" +)] pub use nssa_core::{ SharedSecretKey, @@ -26,3 +17,17 @@ pub use program_methods::PRIVACY_PRESERVING_CIRCUIT_ID; pub use public_transaction::PublicTransaction; pub use signature::{PrivateKey, PublicKey, Signature}; pub use state::V02State; + +pub mod encoding; +pub mod error; +mod merkle_tree; +pub mod privacy_preserving_transaction; +pub mod program; +pub mod program_deployment_transaction; +pub mod public_transaction; +mod signature; +mod state; + +pub mod program_methods { + include!(concat!(env!("OUT_DIR"), "/program_methods/mod.rs")); +} diff --git a/nssa/src/merkle_tree/mod.rs b/nssa/src/merkle_tree/mod.rs index b15891b7..a2d97784 100644 --- a/nssa/src/merkle_tree/mod.rs +++ b/nssa/src/merkle_tree/mod.rs @@ -1,25 +1,13 @@ +#![expect(clippy::arithmetic_side_effects, reason = "TODO: fix later")] + use borsh::{BorshDeserialize, BorshSerialize}; -use sha2::{Digest, Sha256}; +use sha2::{Digest as _, Sha256}; mod default_values; type Value = [u8; 32]; type Node = [u8; 32]; -/// Compute parent as the hash of two child nodes -fn hash_two(left: &Node, right: &Node) -> Node { - let mut hasher = Sha256::new(); - hasher.update(left); - hasher.update(right); - hasher.finalize().into() -} - -fn hash_value(value: &Value) -> Node { - let mut hasher = Sha256::new(); - hasher.update(value); - hasher.finalize().into() -} - #[cfg_attr(test, derive(Debug, PartialEq, Eq))] #[derive(Clone, BorshSerialize, BorshDeserialize)] pub struct MerkleTree { @@ -36,7 +24,8 @@ impl MerkleTree { fn root_index(&self) -> usize { let tree_depth = self.depth(); - let capacity_depth = self.capacity.trailing_zeros() as usize; + let capacity_depth = + usize::try_from(self.capacity.trailing_zeros()).expect("u32 fits in usize"); if tree_depth == capacity_depth { 0 @@ -48,7 +37,8 @@ impl MerkleTree { /// Number of levels required to hold all nodes fn depth(&self) -> usize { - self.length.next_power_of_two().trailing_zeros() as usize + usize::try_from(self.length.next_power_of_two().trailing_zeros()) + .expect("u32 fits in usize") } fn get_node(&self, index: usize) -> &Node { @@ -62,7 +52,7 @@ impl MerkleTree { pub fn with_capacity(capacity: usize) -> Self { // Adjust capacity to ensure power of two let capacity = capacity.next_power_of_two(); - let total_depth = capacity.trailing_zeros() as usize; + let total_depth = usize::try_from(capacity.trailing_zeros()).expect("u32 fits in usize"); let nodes = default_values::DEFAULT_VALUES[..=total_depth] .iter() @@ -152,15 +142,33 @@ impl MerkleTree { } } +/// Compute parent as the hash of two child nodes +fn hash_two(left: &Node, right: &Node) -> Node { + let mut hasher = Sha256::new(); + hasher.update(left); + hasher.update(right); + hasher.finalize().into() +} + +fn hash_value(value: &Value) -> Node { + let mut hasher = Sha256::new(); + hasher.update(value); + hasher.finalize().into() +} + fn prev_power_of_two(x: usize) -> usize { if x == 0 { return 0; } - 1 << (usize::BITS as usize - x.leading_zeros() as usize - 1) + 1 << (usize::BITS - x.leading_zeros() - 1) } #[cfg(test)] mod tests { + use hex_literal::hex; + + use super::*; + impl MerkleTree { pub fn new(values: &[Value]) -> Self { let mut this = Self::with_capacity(values.len()); @@ -171,11 +179,8 @@ mod tests { } } - use hex_literal::hex; - - use super::*; #[test] - fn test_empty_merkle_tree() { + fn empty_merkle_tree() { let tree = MerkleTree::with_capacity(4); let expected_root = hex!("0000000000000000000000000000000000000000000000000000000000000000"); @@ -185,7 +190,7 @@ mod tests { } #[test] - fn test_merkle_tree_0() { + fn merkle_tree_0() { let values = [[0; 32]]; let tree = MerkleTree::new(&values); assert_eq!(tree.root(), hash_value(&[0; 32])); @@ -194,7 +199,7 @@ mod tests { } #[test] - fn test_merkle_tree_1() { + fn merkle_tree_1() { let values = [[1; 32], [2; 32], [3; 32], [4; 32]]; let tree = MerkleTree::new(&values); let expected_root = @@ -205,7 +210,7 @@ mod tests { } #[test] - fn test_merkle_tree_2() { + fn merkle_tree_2() { let values = [[1; 32], [2; 32], [3; 32], [0; 32]]; let tree = MerkleTree::new(&values); let expected_root = @@ -216,7 +221,7 @@ mod tests { } #[test] - fn test_merkle_tree_3() { + fn merkle_tree_3() { let values = [[1; 32], [2; 32], [3; 32]]; let tree = MerkleTree::new(&values); let expected_root = @@ -227,7 +232,7 @@ mod tests { } #[test] - fn test_merkle_tree_4() { + fn merkle_tree_4() { let values = [[11; 32], [12; 32], [13; 32], [14; 32], [15; 32]]; let tree = MerkleTree::new(&values); let expected_root = @@ -239,7 +244,7 @@ mod tests { } #[test] - fn test_merkle_tree_5() { + fn merkle_tree_5() { let values = [ [11; 32], [12; 32], [12; 32], [13; 32], [14; 32], [15; 32], [15; 32], [13; 32], [13; 32], [15; 32], [11; 32], @@ -253,7 +258,7 @@ mod tests { } #[test] - fn test_merkle_tree_6() { + fn merkle_tree_6() { let values = [[1; 32], [2; 32], [3; 32], [4; 32], [5; 32]]; let tree = MerkleTree::new(&values); let expected_root = @@ -262,7 +267,7 @@ mod tests { } #[test] - fn test_with_capacity_4() { + fn with_capacity_4() { let tree = MerkleTree::with_capacity(4); assert_eq!(tree.length, 0); @@ -277,7 +282,7 @@ mod tests { } #[test] - fn test_with_capacity_5() { + fn with_capacity_5() { let tree = MerkleTree::with_capacity(5); assert_eq!(tree.length, 0); @@ -295,7 +300,7 @@ mod tests { } #[test] - fn test_with_capacity_6() { + fn with_capacity_6() { let mut tree = MerkleTree::with_capacity(100); let values = [[1; 32], [2; 32], [3; 32], [4; 32]]; @@ -312,7 +317,7 @@ mod tests { } #[test] - fn test_with_capacity_7() { + fn with_capacity_7() { let mut tree = MerkleTree::with_capacity(599); let values = [[1; 32], [2; 32], [3; 32]]; @@ -328,7 +333,7 @@ mod tests { } #[test] - fn test_with_capacity_8() { + fn with_capacity_8() { let mut tree = MerkleTree::with_capacity(1); let values = [[1; 32], [2; 32], [3; 32]]; @@ -344,7 +349,7 @@ mod tests { } #[test] - fn test_insert_value_1() { + fn insert_value_1() { let mut tree = MerkleTree::with_capacity(1); let values = [[1; 32], [2; 32], [3; 32]]; @@ -358,7 +363,7 @@ mod tests { } #[test] - fn test_insert_value_2() { + fn insert_value_2() { let mut tree = MerkleTree::with_capacity(1); let values = [[1; 32], [2; 32], [3; 32], [4; 32]]; @@ -373,7 +378,7 @@ mod tests { } #[test] - fn test_insert_value_3() { + fn insert_value_3() { let mut tree = MerkleTree::with_capacity(1); let values = [[11; 32], [12; 32], [13; 32], [14; 32], [15; 32]]; @@ -405,7 +410,7 @@ mod tests { } #[test] - fn test_authentication_path_1() { + fn authentication_path_1() { let values = [[1; 32], [2; 32], [3; 32], [4; 32]]; let tree = MerkleTree::new(&values); let expected_authentication_path = vec![ @@ -418,7 +423,7 @@ mod tests { } #[test] - fn test_authentication_path_2() { + fn authentication_path_2() { let values = [[1; 32], [2; 32], [3; 32]]; let tree = MerkleTree::new(&values); let expected_authentication_path = vec![ @@ -431,7 +436,7 @@ mod tests { } #[test] - fn test_authentication_path_3() { + fn authentication_path_3() { let values = [[1; 32], [2; 32], [3; 32], [4; 32], [5; 32]]; let tree = MerkleTree::new(&values); let expected_authentication_path = vec![ @@ -445,14 +450,14 @@ mod tests { } #[test] - fn test_authentication_path_4() { + fn authentication_path_4() { let values = [[1; 32], [2; 32], [3; 32], [4; 32], [5; 32]]; let tree = MerkleTree::new(&values); assert!(tree.get_authentication_path_for(5).is_none()); } #[test] - fn test_authentication_path_5() { + fn authentication_path_5() { let values = [[1; 32], [2; 32], [3; 32], [4; 32], [5; 32]]; let tree = MerkleTree::new(&values); let index = 4; @@ -467,7 +472,7 @@ mod tests { } #[test] - fn test_tree_with_63_insertions() { + fn tree_with_63_insertions() { let values = [ hex!("cd00acab0f45736e6c6311f1953becc0b69a062e7c2a7310875d28bdf9ef9c5b"), hex!("0df5a6afbcc7bf126caf7084acfc593593ab512e6ca433c61c1a922be40a04ea"), diff --git a/nssa/src/privacy_preserving_transaction/circuit.rs b/nssa/src/privacy_preserving_transaction/circuit.rs index 25542aee..d1afe96d 100644 --- a/nssa/src/privacy_preserving_transaction/circuit.rs +++ b/nssa/src/privacy_preserving_transaction/circuit.rs @@ -30,6 +30,12 @@ impl Proof { pub fn from_inner(inner: Vec) -> Self { Self(inner) } + + pub(crate) fn is_valid_for(&self, circuit_output: &PrivacyPreservingCircuitOutput) -> bool { + let inner: InnerReceipt = borsh::from_slice(&self.0).unwrap(); + let receipt = Receipt::new(inner, circuit_output.to_bytes()); + receipt.verify(PRIVACY_PRESERVING_CIRCUIT_ID).is_ok() + } } #[derive(Clone)] @@ -69,20 +75,20 @@ pub fn execute_and_prove( program_with_dependencies: &ProgramWithDependencies, ) -> Result<(PrivacyPreservingCircuitOutput, Proof), NssaError> { let ProgramWithDependencies { - program, + program: initial_program, dependencies, } = program_with_dependencies; let mut env_builder = ExecutorEnv::builder(); let mut program_outputs = Vec::new(); let initial_call = ChainedCall { - program_id: program.id(), + program_id: initial_program.id(), instruction_data, pre_states, pda_seeds: vec![], }; - let mut chained_calls = VecDeque::from_iter([(initial_call, program)]); + let mut chained_calls = VecDeque::from_iter([(initial_call, initial_program)]); let mut chain_calls_counter = 0; while let Some((chained_call, program)) = chained_calls.pop_front() { if chain_calls_counter >= MAX_NUMBER_CHAINED_CALLS { @@ -113,7 +119,9 @@ pub fn execute_and_prove( chained_calls.push_front((new_call, next_program)); } - chain_calls_counter += 1; + chain_calls_counter = chain_calls_counter + .checked_add(1) + .expect("we check the max depth at the beginning of the loop"); } let circuit_input = PrivacyPreservingCircuitInput { @@ -163,16 +171,10 @@ fn execute_and_prove_program( .receipt) } -impl Proof { - pub(crate) fn is_valid_for(&self, circuit_output: &PrivacyPreservingCircuitOutput) -> bool { - let inner: InnerReceipt = borsh::from_slice(&self.0).unwrap(); - let receipt = Receipt::new(inner, circuit_output.to_bytes()); - receipt.verify(PRIVACY_PRESERVING_CIRCUIT_ID).is_ok() - } -} - #[cfg(test)] mod tests { + #![expect(clippy::shadow_unrelated, reason = "We don't care about it in tests")] + use nssa_core::{ Commitment, DUMMY_COMMITMENT_HASH, EncryptionScheme, Nullifier, account::{Account, AccountId, AccountWithMetadata, data::Data}, diff --git a/nssa/src/privacy_preserving_transaction/message.rs b/nssa/src/privacy_preserving_transaction/message.rs index a0b9379c..fedd4438 100644 --- a/nssa/src/privacy_preserving_transaction/message.rs +++ b/nssa/src/privacy_preserving_transaction/message.rs @@ -4,7 +4,7 @@ use nssa_core::{ account::{Account, Nonce}, encryption::{Ciphertext, EphemeralPublicKey, ViewingPublicKey}, }; -use sha2::{Digest, Sha256}; +use sha2::{Digest as _, Sha256}; use crate::{AccountId, error::NssaError}; @@ -56,7 +56,7 @@ pub struct Message { impl std::fmt::Debug for Message { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - struct HexDigest<'a>(&'a [u8; 32]); + struct HexDigest<'arr>(&'arr [u8; 32]); impl std::fmt::Debug for HexDigest<'_> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", hex::encode(self.0)) @@ -120,7 +120,7 @@ pub mod tests { account::Account, encryption::{EphemeralPublicKey, ViewingPublicKey}, }; - use sha2::{Digest, Sha256}; + use sha2::{Digest as _, Sha256}; use crate::{ AccountId, @@ -165,7 +165,7 @@ pub mod tests { } #[test] - fn test_encrypted_account_data_constructor() { + fn encrypted_account_data_constructor() { let npk = NullifierPublicKey::from(&[1; 32]); let vpk = ViewingPublicKey::from_scalar([2; 32]); let account = Account::default(); diff --git a/nssa/src/privacy_preserving_transaction/mod.rs b/nssa/src/privacy_preserving_transaction/mod.rs index 48d88181..aab09147 100644 --- a/nssa/src/privacy_preserving_transaction/mod.rs +++ b/nssa/src/privacy_preserving_transaction/mod.rs @@ -1,9 +1,9 @@ +pub use message::Message; +pub use transaction::PrivacyPreservingTransaction; +pub use witness_set::WitnessSet; + pub mod message; pub mod transaction; pub mod witness_set; pub mod circuit; - -pub use message::Message; -pub use transaction::PrivacyPreservingTransaction; -pub use witness_set::WitnessSet; diff --git a/nssa/src/privacy_preserving_transaction/transaction.rs b/nssa/src/privacy_preserving_transaction/transaction.rs index 1b89ea19..72119959 100644 --- a/nssa/src/privacy_preserving_transaction/transaction.rs +++ b/nssa/src/privacy_preserving_transaction/transaction.rs @@ -1,4 +1,7 @@ -use std::collections::{HashMap, HashSet}; +use std::{ + collections::{HashMap, HashSet}, + hash::Hash, +}; use borsh::{BorshDeserialize, BorshSerialize}; use nssa_core::{ @@ -188,7 +191,6 @@ fn check_privacy_preserving_circuit_proof_is_valid( .ok_or(NssaError::InvalidPrivacyPreservingProof) } -use std::hash::Hash; fn n_unique(data: &[T]) -> usize { let set: HashSet<&T> = data.iter().collect(); set.len() @@ -225,7 +227,7 @@ mod tests { } #[test] - fn test_privacy_preserving_transaction_encoding_bytes_roundtrip() { + fn privacy_preserving_transaction_encoding_bytes_roundtrip() { let tx = transaction_for_tests(); let bytes = tx.to_bytes(); let tx_from_bytes = PrivacyPreservingTransaction::from_bytes(&bytes).unwrap(); diff --git a/nssa/src/program.rs b/nssa/src/program.rs index 29033a50..87b85749 100644 --- a/nssa/src/program.rs +++ b/nssa/src/program.rs @@ -24,10 +24,10 @@ pub struct Program { impl Program { pub fn new(bytecode: Vec) -> Result { let binary = risc0_binfmt::ProgramBinary::decode(&bytecode) - .map_err(|_| NssaError::InvalidProgramBytecode)?; + .map_err(NssaError::InvalidProgramBytecode)?; let id = binary .compute_image_id() - .map_err(|_| NssaError::InvalidProgramBytecode)? + .map_err(NssaError::InvalidProgramBytecode)? .into(); Ok(Self { elf: bytecode, id }) } @@ -117,6 +117,7 @@ impl Program { } #[must_use] + #[expect(clippy::non_ascii_literal, reason = "More readable")] pub fn pinata_token() -> Self { use crate::program_methods::PINATA_TOKEN_ELF; Self::new(PINATA_TOKEN_ELF.to_vec()).expect("Piñata program must be a valid R0BF file") @@ -286,7 +287,7 @@ mod tests { } #[test] - fn test_program_execution() { + fn program_execution() { let program = Program::simple_balance_transfer(); let balance_to_move: u128 = 11_223_344_556_677; let instruction_data = Program::serialize_instruction(balance_to_move).unwrap(); @@ -320,7 +321,7 @@ mod tests { } #[test] - fn test_builtin_programs() { + fn builtin_programs() { let auth_transfer_program = Program::authenticated_transfer_program(); let token_program = Program::token(); let pinata_program = Program::pinata(); diff --git a/nssa/src/program_deployment_transaction/mod.rs b/nssa/src/program_deployment_transaction/mod.rs index b498826e..d1fc7d0d 100644 --- a/nssa/src/program_deployment_transaction/mod.rs +++ b/nssa/src/program_deployment_transaction/mod.rs @@ -1,5 +1,5 @@ -mod message; -mod transaction; - pub use message::Message; pub use transaction::ProgramDeploymentTransaction; + +mod message; +mod transaction; diff --git a/nssa/src/public_transaction/mod.rs b/nssa/src/public_transaction/mod.rs index 278e9df7..1af61e10 100644 --- a/nssa/src/public_transaction/mod.rs +++ b/nssa/src/public_transaction/mod.rs @@ -1,7 +1,7 @@ -mod message; -mod transaction; -mod witness_set; - pub use message::Message; pub use transaction::PublicTransaction; pub use witness_set::WitnessSet; + +mod message; +mod transaction; +mod witness_set; diff --git a/nssa/src/public_transaction/transaction.rs b/nssa/src/public_transaction/transaction.rs index fdd55510..d19c12d4 100644 --- a/nssa/src/public_transaction/transaction.rs +++ b/nssa/src/public_transaction/transaction.rs @@ -6,7 +6,7 @@ use nssa_core::{ account::{Account, AccountId, AccountWithMetadata}, program::{ChainedCall, DEFAULT_PROGRAM_ID, validate_execution}, }; -use sha2::{Digest, digest::FixedOutput}; +use sha2::{Digest as _, digest::FixedOutput as _}; use crate::{ V02State, ensure, @@ -216,7 +216,9 @@ impl PublicTransaction { chained_calls.push_front((new_call, Some(chained_call.program_id))); } - chain_calls_counter += 1; + chain_calls_counter = chain_calls_counter + .checked_add(1) + .expect("we check the max depth at the beginning of the loop"); } // Check that all modified uninitialized accounts where claimed @@ -242,7 +244,7 @@ impl PublicTransaction { #[cfg(test)] pub mod tests { - use sha2::{Digest, digest::FixedOutput}; + use sha2::{Digest as _, digest::FixedOutput as _}; use crate::{ AccountId, PrivateKey, PublicKey, PublicTransaction, Signature, V02State, @@ -282,7 +284,7 @@ pub mod tests { } #[test] - fn test_new_constructor() { + fn new_constructor() { let tx = transaction_for_tests(); let message = tx.message().clone(); let witness_set = tx.witness_set().clone(); @@ -292,19 +294,19 @@ pub mod tests { } #[test] - fn test_message_getter() { + fn message_getter() { let tx = transaction_for_tests(); assert_eq!(&tx.message, tx.message()); } #[test] - fn test_witness_set_getter() { + fn witness_set_getter() { let tx = transaction_for_tests(); assert_eq!(&tx.witness_set, tx.witness_set()); } #[test] - fn test_signer_account_ids() { + fn signer_account_ids() { let tx = transaction_for_tests(); let expected_signer_account_ids = vec![ AccountId::new([ @@ -321,7 +323,7 @@ pub mod tests { } #[test] - fn test_public_transaction_encoding_bytes_roundtrip() { + fn public_transaction_encoding_bytes_roundtrip() { let tx = transaction_for_tests(); let bytes = tx.to_bytes(); let tx_from_bytes = PublicTransaction::from_bytes(&bytes).unwrap(); @@ -329,7 +331,7 @@ pub mod tests { } #[test] - fn test_hash_is_sha256_of_transaction_bytes() { + fn hash_is_sha256_of_transaction_bytes() { let tx = transaction_for_tests(); let hash = tx.hash(); let expected_hash: [u8; 32] = { @@ -342,7 +344,7 @@ pub mod tests { } #[test] - fn test_account_id_list_cant_have_duplicates() { + fn account_id_list_cant_have_duplicates() { let (key1, _, addr1, _) = keys_for_tests(); let state = state_for_tests(); let nonces = vec![0, 0]; @@ -362,7 +364,7 @@ pub mod tests { } #[test] - fn test_number_of_nonces_must_match_number_of_signatures() { + fn number_of_nonces_must_match_number_of_signatures() { let (key1, key2, addr1, addr2) = keys_for_tests(); let state = state_for_tests(); let nonces = vec![0]; @@ -382,7 +384,7 @@ pub mod tests { } #[test] - fn test_all_signatures_must_be_valid() { + fn all_signatures_must_be_valid() { let (key1, key2, addr1, addr2) = keys_for_tests(); let state = state_for_tests(); let nonces = vec![0, 0]; @@ -403,7 +405,7 @@ pub mod tests { } #[test] - fn test_nonces_must_match_the_state_current_nonces() { + fn nonces_must_match_the_state_current_nonces() { let (key1, key2, addr1, addr2) = keys_for_tests(); let state = state_for_tests(); let nonces = vec![0, 1]; @@ -423,7 +425,7 @@ pub mod tests { } #[test] - fn test_program_id_must_belong_to_bulitin_program_ids() { + fn program_id_must_belong_to_bulitin_program_ids() { let (key1, key2, addr1, addr2) = keys_for_tests(); let state = state_for_tests(); let nonces = vec![0, 0]; diff --git a/nssa/src/public_transaction/witness_set.rs b/nssa/src/public_transaction/witness_set.rs index db139d86..59ef5c50 100644 --- a/nssa/src/public_transaction/witness_set.rs +++ b/nssa/src/public_transaction/witness_set.rs @@ -60,7 +60,7 @@ mod tests { use crate::AccountId; #[test] - fn test_for_message_constructor() { + fn for_message_constructor() { let key1 = PrivateKey::try_new([1; 32]).unwrap(); let key2 = PrivateKey::try_new([2; 32]).unwrap(); let pubkey1 = PublicKey::new_from_private_key(&key1); diff --git a/nssa/src/signature/bip340_test_vectors.rs b/nssa/src/signature/bip340_test_vectors.rs index ae473b9c..b7a992b6 100644 --- a/nssa/src/signature/bip340_test_vectors.rs +++ b/nssa/src/signature/bip340_test_vectors.rs @@ -1,9 +1,5 @@ use crate::{PrivateKey, PublicKey, Signature}; -fn hex_to_bytes(hex: &str) -> [u8; N] { - hex::decode(hex).unwrap().try_into().unwrap() -} - pub struct TestVector { pub seckey: Option, pub pubkey: PublicKey, @@ -365,3 +361,7 @@ pub fn test_vectors() -> Vec { }, ] } + +fn hex_to_bytes(hex: &str) -> [u8; N] { + hex::decode(hex).unwrap().try_into().unwrap() +} diff --git a/nssa/src/signature/mod.rs b/nssa/src/signature/mod.rs index 7e2928ea..63377f15 100644 --- a/nssa/src/signature/mod.rs +++ b/nssa/src/signature/mod.rs @@ -1,10 +1,10 @@ -mod private_key; -mod public_key; - use borsh::{BorshDeserialize, BorshSerialize}; pub use private_key::PrivateKey; pub use public_key::PublicKey; -use rand::{RngCore, rngs::OsRng}; +use rand::{RngCore as _, rngs::OsRng}; + +mod private_key; +mod public_key; #[derive(Clone, PartialEq, Eq, BorshSerialize, BorshDeserialize)] pub struct Signature { @@ -20,7 +20,7 @@ impl std::fmt::Debug for Signature { impl Signature { #[must_use] pub fn new(key: &PrivateKey, message: &[u8]) -> Self { - let mut aux_random = [0u8; 32]; + let mut aux_random = [0_u8; 32]; OsRng.fill_bytes(&mut aux_random); Self::new_with_aux_random(key, message, aux_random) } @@ -64,7 +64,7 @@ mod tests { } #[test] - fn test_signature_generation_from_bip340_test_vectors() { + fn signature_generation_from_bip340_test_vectors() { for (i, test_vector) in bip340_test_vectors::test_vectors().into_iter().enumerate() { let Some(private_key) = test_vector.seckey else { continue; @@ -87,7 +87,7 @@ mod tests { } #[test] - fn test_signature_verification_from_bip340_test_vectors() { + fn signature_verification_from_bip340_test_vectors() { for (i, test_vector) in bip340_test_vectors::test_vectors().into_iter().enumerate() { let message = test_vector.message.unwrap_or(vec![]); let expected_result = test_vector.verification_result; diff --git a/nssa/src/signature/private_key.rs b/nssa/src/signature/private_key.rs index 03121a90..f643406a 100644 --- a/nssa/src/signature/private_key.rs +++ b/nssa/src/signature/private_key.rs @@ -1,4 +1,4 @@ -use rand::{Rng, rngs::OsRng}; +use rand::{Rng as _, rngs::OsRng}; use serde::{Deserialize, Serialize}; use crate::error::NssaError; @@ -42,13 +42,13 @@ impl PrivateKey { mod tests { use super::*; #[test] - fn test_value_getter() { + fn value_getter() { let key = PrivateKey::try_new([1; 32]).unwrap(); assert_eq!(key.value(), &key.0); } #[test] - fn test_produce_key() { + fn produce_key() { let _key = PrivateKey::new_os_random(); } } diff --git a/nssa/src/signature/public_key.rs b/nssa/src/signature/public_key.rs index d916db23..0522e114 100644 --- a/nssa/src/signature/public_key.rs +++ b/nssa/src/signature/public_key.rs @@ -1,7 +1,7 @@ use borsh::{BorshDeserialize, BorshSerialize}; use nssa_core::account::AccountId; use serde::{Deserialize, Serialize}; -use sha2::{Digest, Sha256}; +use sha2::{Digest as _, Sha256}; use crate::{PrivateKey, error::NssaError}; @@ -16,15 +16,10 @@ impl std::fmt::Debug for PublicKey { impl BorshDeserialize for PublicKey { fn deserialize_reader(reader: &mut R) -> std::io::Result { - let mut buf = [0u8; 32]; + let mut buf = [0_u8; 32]; reader.read_exact(&mut buf)?; - Self::try_new(buf).map_err(|_| { - std::io::Error::new( - std::io::ErrorKind::InvalidData, - "Invalid public key: not a valid point", - ) - }) + Self::try_new(buf).map_err(|err| std::io::Error::new(std::io::ErrorKind::InvalidData, err)) } } @@ -44,7 +39,7 @@ impl PublicKey { pub fn try_new(value: [u8; 32]) -> Result { // Check point is valid let _ = secp256k1::XOnlyPublicKey::from_byte_array(value) - .map_err(|_| NssaError::InvalidPublicKey)?; + .map_err(NssaError::InvalidPublicKey)?; Ok(Self(value)) } @@ -71,7 +66,7 @@ mod test { use crate::{PublicKey, error::NssaError, signature::bip340_test_vectors}; #[test] - fn test_try_new_invalid_public_key_from_bip340_test_vectors_5() { + fn try_new_invalid_public_key_from_bip340_test_vectors_5() { let value_invalid_key = [ 238, 253, 234, 76, 219, 103, 119, 80, 164, 32, 254, 232, 7, 234, 207, 33, 235, 152, 152, 174, 121, 185, 118, 135, 102, 228, 250, 160, 74, 45, 74, 52, @@ -79,11 +74,11 @@ mod test { let result = PublicKey::try_new(value_invalid_key); - assert!(matches!(result, Err(NssaError::InvalidPublicKey))); + assert!(matches!(result, Err(NssaError::InvalidPublicKey(_)))); } #[test] - fn test_try_new_invalid_public_key_from_bip340_test_vector_14() { + fn try_new_invalid_public_key_from_bip340_test_vector_14() { let value_invalid_key = [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 252, 48, @@ -91,11 +86,11 @@ mod test { let result = PublicKey::try_new(value_invalid_key); - assert!(matches!(result, Err(NssaError::InvalidPublicKey))); + assert!(matches!(result, Err(NssaError::InvalidPublicKey(_)))); } #[test] - fn test_try_new_valid_public_keys() { + fn try_new_valid_public_keys() { for (i, test_vector) in bip340_test_vectors::test_vectors().into_iter().enumerate() { let expected_public_key = test_vector.pubkey; let public_key = PublicKey::try_new(*expected_public_key.value()).unwrap(); @@ -104,7 +99,7 @@ mod test { } #[test] - fn test_public_key_generation_from_bip340_test_vectors() { + fn public_key_generation_from_bip340_test_vectors() { for (i, test_vector) in bip340_test_vectors::test_vectors().into_iter().enumerate() { let Some(private_key) = &test_vector.seckey else { continue; @@ -119,7 +114,7 @@ mod test { } #[test] - fn test_correct_ser_deser_roundtrip() { + fn correct_ser_deser_roundtrip() { let pub_key = PublicKey::try_new([42; 32]).unwrap(); let pub_key_borsh_ser = borsh::to_vec(&pub_key).unwrap(); diff --git a/nssa/src/state.rs b/nssa/src/state.rs index 2c99556f..2210ae5c 100644 --- a/nssa/src/state.rs +++ b/nssa/src/state.rs @@ -160,6 +160,10 @@ impl V02State { ) -> Result<(), NssaError> { let state_diff = tx.validate_and_produce_public_state_diff(self)?; + #[expect( + clippy::iter_over_hash_type, + reason = "Iteration order doesn't matter here" + )] for (account_id, post) in state_diff { let current_account = self.get_account_by_id_mut(account_id); @@ -168,7 +172,10 @@ impl V02State { for account_id in tx.signer_account_ids() { let current_account = self.get_account_by_id_mut(account_id); - current_account.nonce += 1; + current_account.nonce = current_account + .nonce + .checked_add(1) + .ok_or(NssaError::MaxAccountNonceReached)?; } Ok(()) @@ -196,6 +203,10 @@ impl V02State { self.private_state.1.extend(new_nullifiers); // 4. Update public accounts + #[expect( + clippy::iter_over_hash_type, + reason = "Iteration order doesn't matter here" + )] for (account_id, post) in public_state_diff { let current_account = self.get_account_by_id_mut(account_id); *current_account = post; @@ -204,7 +215,10 @@ impl V02State { // 5. Increment nonces for public signers for account_id in tx.signer_account_ids() { let current_account = self.get_account_by_id_mut(account_id); - current_account.nonce += 1; + current_account.nonce = current_account + .nonce + .checked_add(1) + .ok_or(NssaError::MaxAccountNonceReached)?; } Ok(()) @@ -252,7 +266,7 @@ impl V02State { for commitment in new_commitments { if self.private_state.0.contains(commitment) { return Err(NssaError::InvalidInput( - "Commitment already seen".to_string(), + "Commitment already seen".to_owned(), )); } } @@ -265,13 +279,11 @@ impl V02State { ) -> Result<(), NssaError> { for (nullifier, digest) in new_nullifiers { if self.private_state.1.contains(nullifier) { - return Err(NssaError::InvalidInput( - "Nullifier already seen".to_string(), - )); + return Err(NssaError::InvalidInput("Nullifier already seen".to_owned())); } if !self.private_state.0.root_history.contains(digest) { return Err(NssaError::InvalidInput( - "Unrecognized commitment set digest".to_string(), + "Unrecognized commitment set digest".to_owned(), )); } } @@ -313,6 +325,11 @@ impl V02State { #[cfg(test)] pub mod tests { + #![expect( + clippy::arithmetic_side_effects, + clippy::shadow_unrelated, + reason = "We don't care about it in tests" + )] use std::collections::HashMap; @@ -341,202 +358,6 @@ pub mod tests { state::MAX_NUMBER_CHAINED_CALLS, }; - fn transfer_transaction( - from: AccountId, - from_key: &PrivateKey, - nonce: u128, - to: AccountId, - balance: u128, - ) -> PublicTransaction { - let account_ids = vec![from, to]; - let nonces = vec![nonce]; - let program_id = Program::authenticated_transfer_program().id(); - let message = - public_transaction::Message::try_new(program_id, account_ids, nonces, balance).unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[from_key]); - PublicTransaction::new(message, witness_set) - } - - #[test] - fn test_new_with_genesis() { - let key1 = PrivateKey::try_new([1; 32]).unwrap(); - let key2 = PrivateKey::try_new([2; 32]).unwrap(); - let addr1 = AccountId::from(&PublicKey::new_from_private_key(&key1)); - let addr2 = AccountId::from(&PublicKey::new_from_private_key(&key2)); - let initial_data = [(addr1, 100u128), (addr2, 151u128)]; - let authenticated_transfers_program = Program::authenticated_transfer_program(); - let expected_public_state = { - let mut this = HashMap::new(); - this.insert( - addr1, - Account { - balance: 100, - program_owner: authenticated_transfers_program.id(), - ..Account::default() - }, - ); - this.insert( - addr2, - Account { - balance: 151, - program_owner: authenticated_transfers_program.id(), - ..Account::default() - }, - ); - this - }; - let expected_builtin_programs = { - let mut this = HashMap::new(); - this.insert( - authenticated_transfers_program.id(), - authenticated_transfers_program, - ); - this.insert(Program::token().id(), Program::token()); - this.insert(Program::amm().id(), Program::amm()); - this - }; - - let state = V02State::new_with_genesis_accounts(&initial_data, &[]); - - assert_eq!(state.public_state, expected_public_state); - assert_eq!(state.programs, expected_builtin_programs); - } - - #[test] - fn test_insert_program() { - let mut state = V02State::new_with_genesis_accounts(&[], &[]); - let program_to_insert = Program::simple_balance_transfer(); - let program_id = program_to_insert.id(); - assert!(!state.programs.contains_key(&program_id)); - - state.insert_program(program_to_insert); - - assert!(state.programs.contains_key(&program_id)); - } - - #[test] - fn test_get_account_by_account_id_non_default_account() { - let key = PrivateKey::try_new([1; 32]).unwrap(); - let account_id = AccountId::from(&PublicKey::new_from_private_key(&key)); - let initial_data = [(account_id, 100u128)]; - let state = V02State::new_with_genesis_accounts(&initial_data, &[]); - let expected_account = state.public_state.get(&account_id).unwrap(); - - let account = state.get_account_by_id(account_id); - - assert_eq!(&account, expected_account); - } - - #[test] - fn test_get_account_by_account_id_default_account() { - let addr2 = AccountId::new([0; 32]); - let state = V02State::new_with_genesis_accounts(&[], &[]); - let expected_account = Account::default(); - - let account = state.get_account_by_id(addr2); - - assert_eq!(account, expected_account); - } - - #[test] - fn test_builtin_programs_getter() { - let state = V02State::new_with_genesis_accounts(&[], &[]); - - let builtin_programs = state.programs(); - - assert_eq!(builtin_programs, &state.programs); - } - - #[test] - fn transition_from_authenticated_transfer_program_invocation_default_account_destination() { - let key = PrivateKey::try_new([1; 32]).unwrap(); - let account_id = AccountId::from(&PublicKey::new_from_private_key(&key)); - let initial_data = [(account_id, 100)]; - let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]); - let from = account_id; - let to = AccountId::new([2; 32]); - assert_eq!(state.get_account_by_id(to), Account::default()); - let balance_to_move = 5; - - let tx = transfer_transaction(from, &key, 0, to, balance_to_move); - state.transition_from_public_transaction(&tx).unwrap(); - - assert_eq!(state.get_account_by_id(from).balance, 95); - assert_eq!(state.get_account_by_id(to).balance, 5); - assert_eq!(state.get_account_by_id(from).nonce, 1); - assert_eq!(state.get_account_by_id(to).nonce, 0); - } - - #[test] - fn transition_from_authenticated_transfer_program_invocation_insuficient_balance() { - let key = PrivateKey::try_new([1; 32]).unwrap(); - let account_id = AccountId::from(&PublicKey::new_from_private_key(&key)); - let initial_data = [(account_id, 100)]; - let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]); - let from = account_id; - let from_key = key; - let to = AccountId::new([2; 32]); - let balance_to_move = 101; - assert!(state.get_account_by_id(from).balance < balance_to_move); - - let tx = transfer_transaction(from, &from_key, 0, to, balance_to_move); - let result = state.transition_from_public_transaction(&tx); - - assert!(matches!(result, Err(NssaError::ProgramExecutionFailed(_)))); - assert_eq!(state.get_account_by_id(from).balance, 100); - assert_eq!(state.get_account_by_id(to).balance, 0); - assert_eq!(state.get_account_by_id(from).nonce, 0); - assert_eq!(state.get_account_by_id(to).nonce, 0); - } - - #[test] - fn transition_from_authenticated_transfer_program_invocation_non_default_account_destination() { - let key1 = PrivateKey::try_new([1; 32]).unwrap(); - let key2 = PrivateKey::try_new([2; 32]).unwrap(); - let account_id1 = AccountId::from(&PublicKey::new_from_private_key(&key1)); - let account_id2 = AccountId::from(&PublicKey::new_from_private_key(&key2)); - let initial_data = [(account_id1, 100), (account_id2, 200)]; - let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]); - let from = account_id2; - let from_key = key2; - let to = account_id1; - assert_ne!(state.get_account_by_id(to), Account::default()); - let balance_to_move = 8; - - let tx = transfer_transaction(from, &from_key, 0, to, balance_to_move); - state.transition_from_public_transaction(&tx).unwrap(); - - assert_eq!(state.get_account_by_id(from).balance, 192); - assert_eq!(state.get_account_by_id(to).balance, 108); - assert_eq!(state.get_account_by_id(from).nonce, 1); - assert_eq!(state.get_account_by_id(to).nonce, 0); - } - - #[test] - fn transition_from_sequence_of_authenticated_transfer_program_invocations() { - let key1 = PrivateKey::try_new([8; 32]).unwrap(); - let account_id1 = AccountId::from(&PublicKey::new_from_private_key(&key1)); - let key2 = PrivateKey::try_new([2; 32]).unwrap(); - let account_id2 = AccountId::from(&PublicKey::new_from_private_key(&key2)); - let initial_data = [(account_id1, 100)]; - let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]); - let account_id3 = AccountId::new([3; 32]); - let balance_to_move = 5; - - let tx = transfer_transaction(account_id1, &key1, 0, account_id2, balance_to_move); - state.transition_from_public_transaction(&tx).unwrap(); - let balance_to_move = 3; - let tx = transfer_transaction(account_id2, &key2, 0, account_id3, balance_to_move); - state.transition_from_public_transaction(&tx).unwrap(); - - assert_eq!(state.get_account_by_id(account_id1).balance, 95); - assert_eq!(state.get_account_by_id(account_id2).balance, 2); - assert_eq!(state.get_account_by_id(account_id3).balance, 3); - assert_eq!(state.get_account_by_id(account_id1).nonce, 1); - assert_eq!(state.get_account_by_id(account_id2).nonce, 1); - assert_eq!(state.get_account_by_id(account_id3).nonce, 0); - } - impl V02State { pub fn force_insert_account(&mut self, account_id: AccountId, account: Account) { self.public_state.insert(account_id, account); @@ -608,253 +429,6 @@ pub mod tests { } } - #[test] - fn test_program_should_fail_if_modifies_nonces() { - let initial_data = [(AccountId::new([1; 32]), 100)]; - let mut state = - V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); - let account_ids = vec![AccountId::new([1; 32])]; - let program_id = Program::nonce_changer_program().id(); - let message = - public_transaction::Message::try_new(program_id, account_ids, vec![], ()).unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); - let tx = PublicTransaction::new(message, witness_set); - - let result = state.transition_from_public_transaction(&tx); - - assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); - } - - #[test] - fn test_program_should_fail_if_output_accounts_exceed_inputs() { - let initial_data = [(AccountId::new([1; 32]), 100)]; - let mut state = - V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); - let account_ids = vec![AccountId::new([1; 32])]; - let program_id = Program::extra_output_program().id(); - let message = - public_transaction::Message::try_new(program_id, account_ids, vec![], ()).unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); - let tx = PublicTransaction::new(message, witness_set); - - let result = state.transition_from_public_transaction(&tx); - - assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); - } - - #[test] - fn test_program_should_fail_with_missing_output_accounts() { - let initial_data = [(AccountId::new([1; 32]), 100)]; - let mut state = - V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); - let account_ids = vec![AccountId::new([1; 32]), AccountId::new([2; 32])]; - let program_id = Program::missing_output_program().id(); - let message = - public_transaction::Message::try_new(program_id, account_ids, vec![], ()).unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); - let tx = PublicTransaction::new(message, witness_set); - - let result = state.transition_from_public_transaction(&tx); - - assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); - } - - #[test] - fn test_program_should_fail_if_modifies_program_owner_with_only_non_default_program_owner() { - let initial_data = [(AccountId::new([1; 32]), 0)]; - let mut state = - V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); - let account_id = AccountId::new([1; 32]); - let account = state.get_account_by_id(account_id); - // Assert the target account only differs from the default account in the program owner - // field - assert_ne!(account.program_owner, Account::default().program_owner); - assert_eq!(account.balance, Account::default().balance); - assert_eq!(account.nonce, Account::default().nonce); - assert_eq!(account.data, Account::default().data); - let program_id = Program::program_owner_changer().id(); - let message = - public_transaction::Message::try_new(program_id, vec![account_id], vec![], ()).unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); - let tx = PublicTransaction::new(message, witness_set); - - let result = state.transition_from_public_transaction(&tx); - - assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); - } - - #[test] - fn test_program_should_fail_if_modifies_program_owner_with_only_non_default_balance() { - let initial_data = []; - let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]) - .with_test_programs() - .with_non_default_accounts_but_default_program_owners(); - let account_id = AccountId::new([255; 32]); - let account = state.get_account_by_id(account_id); - // Assert the target account only differs from the default account in balance field - assert_eq!(account.program_owner, Account::default().program_owner); - assert_ne!(account.balance, Account::default().balance); - assert_eq!(account.nonce, Account::default().nonce); - assert_eq!(account.data, Account::default().data); - let program_id = Program::program_owner_changer().id(); - let message = - public_transaction::Message::try_new(program_id, vec![account_id], vec![], ()).unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); - let tx = PublicTransaction::new(message, witness_set); - - let result = state.transition_from_public_transaction(&tx); - - assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); - } - - #[test] - fn test_program_should_fail_if_modifies_program_owner_with_only_non_default_nonce() { - let initial_data = []; - let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]) - .with_test_programs() - .with_non_default_accounts_but_default_program_owners(); - let account_id = AccountId::new([254; 32]); - let account = state.get_account_by_id(account_id); - // Assert the target account only differs from the default account in nonce field - assert_eq!(account.program_owner, Account::default().program_owner); - assert_eq!(account.balance, Account::default().balance); - assert_ne!(account.nonce, Account::default().nonce); - assert_eq!(account.data, Account::default().data); - let program_id = Program::program_owner_changer().id(); - let message = - public_transaction::Message::try_new(program_id, vec![account_id], vec![], ()).unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); - let tx = PublicTransaction::new(message, witness_set); - - let result = state.transition_from_public_transaction(&tx); - - assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); - } - - #[test] - fn test_program_should_fail_if_modifies_program_owner_with_only_non_default_data() { - let initial_data = []; - let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]) - .with_test_programs() - .with_non_default_accounts_but_default_program_owners(); - let account_id = AccountId::new([253; 32]); - let account = state.get_account_by_id(account_id); - // Assert the target account only differs from the default account in data field - assert_eq!(account.program_owner, Account::default().program_owner); - assert_eq!(account.balance, Account::default().balance); - assert_eq!(account.nonce, Account::default().nonce); - assert_ne!(account.data, Account::default().data); - let program_id = Program::program_owner_changer().id(); - let message = - public_transaction::Message::try_new(program_id, vec![account_id], vec![], ()).unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); - let tx = PublicTransaction::new(message, witness_set); - - let result = state.transition_from_public_transaction(&tx); - - assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); - } - - #[test] - fn test_program_should_fail_if_transfers_balance_from_non_owned_account() { - let initial_data = [(AccountId::new([1; 32]), 100)]; - let mut state = - V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); - let sender_account_id = AccountId::new([1; 32]); - let receiver_account_id = AccountId::new([2; 32]); - let balance_to_move: u128 = 1; - let program_id = Program::simple_balance_transfer().id(); - assert_ne!( - state.get_account_by_id(sender_account_id).program_owner, - program_id - ); - let message = public_transaction::Message::try_new( - program_id, - vec![sender_account_id, receiver_account_id], - vec![], - balance_to_move, - ) - .unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); - let tx = PublicTransaction::new(message, witness_set); - - let result = state.transition_from_public_transaction(&tx); - - assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); - } - - #[test] - fn test_program_should_fail_if_modifies_data_of_non_owned_account() { - let initial_data = []; - let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]) - .with_test_programs() - .with_non_default_accounts_but_default_program_owners(); - let account_id = AccountId::new([255; 32]); - let program_id = Program::data_changer().id(); - - assert_ne!(state.get_account_by_id(account_id), Account::default()); - assert_ne!( - state.get_account_by_id(account_id).program_owner, - program_id - ); - let message = - public_transaction::Message::try_new(program_id, vec![account_id], vec![], vec![0]) - .unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); - let tx = PublicTransaction::new(message, witness_set); - - let result = state.transition_from_public_transaction(&tx); - - assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); - } - - #[test] - fn test_program_should_fail_if_does_not_preserve_total_balance_by_minting() { - let initial_data = []; - let mut state = - V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); - let account_id = AccountId::new([1; 32]); - let program_id = Program::minter().id(); - - let message = - public_transaction::Message::try_new(program_id, vec![account_id], vec![], ()).unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); - let tx = PublicTransaction::new(message, witness_set); - - let result = state.transition_from_public_transaction(&tx); - - assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); - } - - #[test] - fn test_program_should_fail_if_does_not_preserve_total_balance_by_burning() { - let initial_data = []; - let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]) - .with_test_programs() - .with_account_owned_by_burner_program(); - let program_id = Program::burner().id(); - let account_id = AccountId::new([252; 32]); - assert_eq!( - state.get_account_by_id(account_id).program_owner, - program_id - ); - let balance_to_burn: u128 = 1; - assert!(state.get_account_by_id(account_id).balance > balance_to_burn); - - let message = public_transaction::Message::try_new( - program_id, - vec![account_id], - vec![], - balance_to_burn, - ) - .unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); - let tx = PublicTransaction::new(message, witness_set); - let result = state.transition_from_public_transaction(&tx); - - assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); - } - pub struct TestPublicKeys { pub signing_key: PrivateKey, } @@ -865,12 +439,6 @@ pub mod tests { } } - fn test_public_account_keys_1() -> TestPublicKeys { - TestPublicKeys { - signing_key: PrivateKey::try_new([37; 32]).unwrap(), - } - } - pub struct TestPrivateKeys { pub nsk: NullifierSecretKey, pub vsk: Scalar, @@ -886,1464 +454,6 @@ pub mod tests { } } - pub fn test_private_account_keys_1() -> TestPrivateKeys { - TestPrivateKeys { - nsk: [13; 32], - vsk: [31; 32], - } - } - - pub fn test_private_account_keys_2() -> TestPrivateKeys { - TestPrivateKeys { - nsk: [38; 32], - vsk: [83; 32], - } - } - - fn shielded_balance_transfer_for_tests( - sender_keys: &TestPublicKeys, - recipient_keys: &TestPrivateKeys, - balance_to_move: u128, - state: &V02State, - ) -> PrivacyPreservingTransaction { - let sender = AccountWithMetadata::new( - state.get_account_by_id(sender_keys.account_id()), - true, - sender_keys.account_id(), - ); - - let sender_nonce = sender.account.nonce; - - let recipient = AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); - - let esk = [3; 32]; - let shared_secret = SharedSecretKey::new(&esk, &recipient_keys.vpk()); - let epk = EphemeralPublicKey::from_scalar(esk); - - let (output, proof) = circuit::execute_and_prove( - vec![sender, recipient], - Program::serialize_instruction(balance_to_move).unwrap(), - vec![0, 2], - vec![0xdead_beef], - vec![(recipient_keys.npk(), shared_secret)], - vec![], - vec![None], - &Program::authenticated_transfer_program().into(), - ) - .unwrap(); - - let message = Message::try_from_circuit_output( - vec![sender_keys.account_id()], - vec![sender_nonce], - vec![(recipient_keys.npk(), recipient_keys.vpk(), epk)], - output, - ) - .unwrap(); - - let witness_set = WitnessSet::for_message(&message, proof, &[&sender_keys.signing_key]); - PrivacyPreservingTransaction::new(message, witness_set) - } - - fn private_balance_transfer_for_tests( - sender_keys: &TestPrivateKeys, - sender_private_account: &Account, - recipient_keys: &TestPrivateKeys, - balance_to_move: u128, - new_nonces: [Nonce; 2], - state: &V02State, - ) -> PrivacyPreservingTransaction { - let program = Program::authenticated_transfer_program(); - let sender_commitment = Commitment::new(&sender_keys.npk(), sender_private_account); - let sender_pre = - AccountWithMetadata::new(sender_private_account.clone(), true, &sender_keys.npk()); - let recipient_pre = - AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); - - let esk_1 = [3; 32]; - let shared_secret_1 = SharedSecretKey::new(&esk_1, &sender_keys.vpk()); - let epk_1 = EphemeralPublicKey::from_scalar(esk_1); - - let esk_2 = [3; 32]; - let shared_secret_2 = SharedSecretKey::new(&esk_2, &recipient_keys.vpk()); - let epk_2 = EphemeralPublicKey::from_scalar(esk_2); - - let (output, proof) = circuit::execute_and_prove( - vec![sender_pre, recipient_pre], - Program::serialize_instruction(balance_to_move).unwrap(), - vec![1, 2], - new_nonces.to_vec(), - vec![ - (sender_keys.npk(), shared_secret_1), - (recipient_keys.npk(), shared_secret_2), - ], - vec![sender_keys.nsk], - vec![state.get_proof_for_commitment(&sender_commitment), None], - &program.into(), - ) - .unwrap(); - - let message = Message::try_from_circuit_output( - vec![], - vec![], - vec![ - (sender_keys.npk(), sender_keys.vpk(), epk_1), - (recipient_keys.npk(), recipient_keys.vpk(), epk_2), - ], - output, - ) - .unwrap(); - - let witness_set = WitnessSet::for_message(&message, proof, &[]); - - PrivacyPreservingTransaction::new(message, witness_set) - } - - fn deshielded_balance_transfer_for_tests( - sender_keys: &TestPrivateKeys, - sender_private_account: &Account, - recipient_account_id: &AccountId, - balance_to_move: u128, - new_nonce: Nonce, - state: &V02State, - ) -> PrivacyPreservingTransaction { - let program = Program::authenticated_transfer_program(); - let sender_commitment = Commitment::new(&sender_keys.npk(), sender_private_account); - let sender_pre = - AccountWithMetadata::new(sender_private_account.clone(), true, &sender_keys.npk()); - let recipient_pre = AccountWithMetadata::new( - state.get_account_by_id(*recipient_account_id), - false, - *recipient_account_id, - ); - - let esk = [3; 32]; - let shared_secret = SharedSecretKey::new(&esk, &sender_keys.vpk()); - let epk = EphemeralPublicKey::from_scalar(esk); - - let (output, proof) = circuit::execute_and_prove( - vec![sender_pre, recipient_pre], - Program::serialize_instruction(balance_to_move).unwrap(), - vec![1, 0], - vec![new_nonce], - vec![(sender_keys.npk(), shared_secret)], - vec![sender_keys.nsk], - vec![state.get_proof_for_commitment(&sender_commitment)], - &program.into(), - ) - .unwrap(); - - let message = Message::try_from_circuit_output( - vec![*recipient_account_id], - vec![], - vec![(sender_keys.npk(), sender_keys.vpk(), epk)], - output, - ) - .unwrap(); - - let witness_set = WitnessSet::for_message(&message, proof, &[]); - - PrivacyPreservingTransaction::new(message, witness_set) - } - - #[test] - fn test_transition_from_privacy_preserving_transaction_shielded() { - let sender_keys = test_public_account_keys_1(); - let recipient_keys = test_private_account_keys_1(); - - let mut state = - V02State::new_with_genesis_accounts(&[(sender_keys.account_id(), 200)], &[]); - - let balance_to_move = 37; - - let tx = shielded_balance_transfer_for_tests( - &sender_keys, - &recipient_keys, - balance_to_move, - &state, - ); - - let expected_sender_post = { - let mut this = state.get_account_by_id(sender_keys.account_id()); - this.balance -= balance_to_move; - this.nonce += 1; - this - }; - - let [expected_new_commitment] = tx.message().new_commitments.clone().try_into().unwrap(); - assert!(!state.private_state.0.contains(&expected_new_commitment)); - - state - .transition_from_privacy_preserving_transaction(&tx) - .unwrap(); - - let sender_post = state.get_account_by_id(sender_keys.account_id()); - assert_eq!(sender_post, expected_sender_post); - assert!(state.private_state.0.contains(&expected_new_commitment)); - - assert_eq!( - state.get_account_by_id(sender_keys.account_id()).balance, - 200 - balance_to_move - ); - } - - #[test] - fn test_transition_from_privacy_preserving_transaction_private() { - let sender_keys = test_private_account_keys_1(); - let sender_private_account = Account { - program_owner: Program::authenticated_transfer_program().id(), - balance: 100, - nonce: 0xdead_beef, - data: Data::default(), - }; - let recipient_keys = test_private_account_keys_2(); - - let mut state = V02State::new_with_genesis_accounts(&[], &[]) - .with_private_account(&sender_keys, &sender_private_account); - - let balance_to_move = 37; - - let tx = private_balance_transfer_for_tests( - &sender_keys, - &sender_private_account, - &recipient_keys, - balance_to_move, - [0xcafe_cafe, 0xfeca_feca], - &state, - ); - - let expected_new_commitment_1 = Commitment::new( - &sender_keys.npk(), - &Account { - program_owner: Program::authenticated_transfer_program().id(), - nonce: 0xcafe_cafe, - balance: sender_private_account.balance - balance_to_move, - data: Data::default(), - }, - ); - - let sender_pre_commitment = Commitment::new(&sender_keys.npk(), &sender_private_account); - let expected_new_nullifier = - Nullifier::for_account_update(&sender_pre_commitment, &sender_keys.nsk); - - let expected_new_commitment_2 = Commitment::new( - &recipient_keys.npk(), - &Account { - program_owner: Program::authenticated_transfer_program().id(), - nonce: 0xfeca_feca, - balance: balance_to_move, - ..Account::default() - }, - ); - - let previous_public_state = state.public_state.clone(); - assert!(state.private_state.0.contains(&sender_pre_commitment)); - assert!(!state.private_state.0.contains(&expected_new_commitment_1)); - assert!(!state.private_state.0.contains(&expected_new_commitment_2)); - assert!(!state.private_state.1.contains(&expected_new_nullifier)); - - state - .transition_from_privacy_preserving_transaction(&tx) - .unwrap(); - - assert_eq!(state.public_state, previous_public_state); - assert!(state.private_state.0.contains(&sender_pre_commitment)); - assert!(state.private_state.0.contains(&expected_new_commitment_1)); - assert!(state.private_state.0.contains(&expected_new_commitment_2)); - assert!(state.private_state.1.contains(&expected_new_nullifier)); - } - - #[test] - fn test_transition_from_privacy_preserving_transaction_deshielded() { - let sender_keys = test_private_account_keys_1(); - let sender_private_account = Account { - program_owner: Program::authenticated_transfer_program().id(), - balance: 100, - nonce: 0xdead_beef, - data: Data::default(), - }; - let recipient_keys = test_public_account_keys_1(); - let recipient_initial_balance = 400; - let mut state = V02State::new_with_genesis_accounts( - &[(recipient_keys.account_id(), recipient_initial_balance)], - &[], - ) - .with_private_account(&sender_keys, &sender_private_account); - - let balance_to_move = 37; - - let expected_recipient_post = { - let mut this = state.get_account_by_id(recipient_keys.account_id()); - this.balance += balance_to_move; - this - }; - - let tx = deshielded_balance_transfer_for_tests( - &sender_keys, - &sender_private_account, - &recipient_keys.account_id(), - balance_to_move, - 0xcafe_cafe, - &state, - ); - - let expected_new_commitment = Commitment::new( - &sender_keys.npk(), - &Account { - program_owner: Program::authenticated_transfer_program().id(), - nonce: 0xcafe_cafe, - balance: sender_private_account.balance - balance_to_move, - data: Data::default(), - }, - ); - - let sender_pre_commitment = Commitment::new(&sender_keys.npk(), &sender_private_account); - let expected_new_nullifier = - Nullifier::for_account_update(&sender_pre_commitment, &sender_keys.nsk); - - assert!(state.private_state.0.contains(&sender_pre_commitment)); - assert!(!state.private_state.0.contains(&expected_new_commitment)); - assert!(!state.private_state.1.contains(&expected_new_nullifier)); - - state - .transition_from_privacy_preserving_transaction(&tx) - .unwrap(); - - let recipient_post = state.get_account_by_id(recipient_keys.account_id()); - assert_eq!(recipient_post, expected_recipient_post); - assert!(state.private_state.0.contains(&sender_pre_commitment)); - assert!(state.private_state.0.contains(&expected_new_commitment)); - assert!(state.private_state.1.contains(&expected_new_nullifier)); - assert_eq!( - state.get_account_by_id(recipient_keys.account_id()).balance, - recipient_initial_balance + balance_to_move - ); - } - - #[test] - fn test_burner_program_should_fail_in_privacy_preserving_circuit() { - let program = Program::burner(); - let public_account = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - AccountId::new([0; 32]), - ); - - let result = execute_and_prove( - vec![public_account], - Program::serialize_instruction(10u128).unwrap(), - vec![0], - vec![], - vec![], - vec![], - vec![], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_minter_program_should_fail_in_privacy_preserving_circuit() { - let program = Program::minter(); - let public_account = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 0, - ..Account::default() - }, - true, - AccountId::new([0; 32]), - ); - - let result = execute_and_prove( - vec![public_account], - Program::serialize_instruction(10u128).unwrap(), - vec![0], - vec![], - vec![], - vec![], - vec![], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_nonce_changer_program_should_fail_in_privacy_preserving_circuit() { - let program = Program::nonce_changer_program(); - let public_account = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 0, - ..Account::default() - }, - true, - AccountId::new([0; 32]), - ); - - let result = execute_and_prove( - vec![public_account], - Program::serialize_instruction(()).unwrap(), - vec![0], - vec![], - vec![], - vec![], - vec![], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_data_changer_program_should_fail_for_non_owned_account_in_privacy_preserving_circuit() { - let program = Program::data_changer(); - let public_account = AccountWithMetadata::new( - Account { - program_owner: [0, 1, 2, 3, 4, 5, 6, 7], - balance: 0, - ..Account::default() - }, - true, - AccountId::new([0; 32]), - ); - - let result = execute_and_prove( - vec![public_account], - Program::serialize_instruction(vec![0]).unwrap(), - vec![0], - vec![], - vec![], - vec![], - vec![], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_data_changer_program_should_fail_for_too_large_data_in_privacy_preserving_circuit() { - let program = Program::data_changer(); - let public_account = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 0, - ..Account::default() - }, - true, - AccountId::new([0; 32]), - ); - - let large_data: Vec = - vec![ - 0; - usize::try_from(nssa_core::account::data::DATA_MAX_LENGTH.as_u64()) - .expect("DATA_MAX_LENGTH fits in usize") - + 1 - ]; - - let result = execute_and_prove( - vec![public_account], - Program::serialize_instruction(large_data).unwrap(), - vec![0], - vec![], - vec![], - vec![], - vec![], - &program.clone().into(), - ); - - assert!(matches!(result, Err(NssaError::ProgramProveFailed(_)))); - } - - #[test] - fn test_extra_output_program_should_fail_in_privacy_preserving_circuit() { - let program = Program::extra_output_program(); - let public_account = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 0, - ..Account::default() - }, - true, - AccountId::new([0; 32]), - ); - - let result = execute_and_prove( - vec![public_account], - Program::serialize_instruction(()).unwrap(), - vec![0], - vec![], - vec![], - vec![], - vec![], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_missing_output_program_should_fail_in_privacy_preserving_circuit() { - let program = Program::missing_output_program(); - let public_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 0, - ..Account::default() - }, - true, - AccountId::new([0; 32]), - ); - let public_account_2 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 0, - ..Account::default() - }, - true, - AccountId::new([1; 32]), - ); - - let result = execute_and_prove( - vec![public_account_1, public_account_2], - Program::serialize_instruction(()).unwrap(), - vec![0, 0], - vec![], - vec![], - vec![], - vec![], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_program_owner_changer_should_fail_in_privacy_preserving_circuit() { - let program = Program::program_owner_changer(); - let public_account = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 0, - ..Account::default() - }, - true, - AccountId::new([0; 32]), - ); - - let result = execute_and_prove( - vec![public_account], - Program::serialize_instruction(()).unwrap(), - vec![0], - vec![], - vec![], - vec![], - vec![], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_transfer_from_non_owned_account_should_fail_in_privacy_preserving_circuit() { - let program = Program::simple_balance_transfer(); - let public_account_1 = AccountWithMetadata::new( - Account { - program_owner: [0, 1, 2, 3, 4, 5, 6, 7], - balance: 100, - ..Account::default() - }, - true, - AccountId::new([0; 32]), - ); - let public_account_2 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 0, - ..Account::default() - }, - true, - AccountId::new([1; 32]), - ); - - let result = execute_and_prove( - vec![public_account_1, public_account_2], - Program::serialize_instruction(10u128).unwrap(), - vec![0, 0], - vec![], - vec![], - vec![], - vec![], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_circuit_fails_if_visibility_masks_have_incorrect_lenght() { - let program = Program::simple_balance_transfer(); - let public_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - AccountId::new([0; 32]), - ); - let public_account_2 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 0, - ..Account::default() - }, - true, - AccountId::new([1; 32]), - ); - - // Setting only one visibility mask for a circuit execution with two pre_state accounts. - let visibility_mask = [0]; - let result = execute_and_prove( - vec![public_account_1, public_account_2], - Program::serialize_instruction(10u128).unwrap(), - visibility_mask.to_vec(), - vec![], - vec![], - vec![], - vec![], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_circuit_fails_if_insufficient_nonces_are_provided() { - let program = Program::simple_balance_transfer(); - let sender_keys = test_private_account_keys_1(); - let recipient_keys = test_private_account_keys_2(); - let private_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - &sender_keys.npk(), - ); - let private_account_2 = - AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); - - // Setting only one nonce for an execution with two private accounts. - let private_account_nonces = [0xdead_beef1]; - let result = execute_and_prove( - vec![private_account_1, private_account_2], - Program::serialize_instruction(10u128).unwrap(), - vec![1, 2], - private_account_nonces.to_vec(), - vec![ - ( - sender_keys.npk(), - SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), - ), - ( - recipient_keys.npk(), - SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), - ), - ], - vec![sender_keys.nsk], - vec![Some((0, vec![]))], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_circuit_fails_if_insufficient_keys_are_provided() { - let program = Program::simple_balance_transfer(); - let sender_keys = test_private_account_keys_1(); - let private_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - &sender_keys.npk(), - ); - let private_account_2 = - AccountWithMetadata::new(Account::default(), false, AccountId::new([1; 32])); - - // Setting only one key for an execution with two private accounts. - let private_account_keys = [( - sender_keys.npk(), - SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), - )]; - let result = execute_and_prove( - vec![private_account_1, private_account_2], - Program::serialize_instruction(10u128).unwrap(), - vec![1, 2], - vec![0xdead_beef1, 0xdead_beef2], - private_account_keys.to_vec(), - vec![sender_keys.nsk], - vec![Some((0, vec![]))], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_circuit_fails_if_insufficient_commitment_proofs_are_provided() { - let program = Program::simple_balance_transfer(); - let sender_keys = test_private_account_keys_1(); - let recipient_keys = test_private_account_keys_2(); - let private_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - &sender_keys.npk(), - ); - let private_account_2 = - AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); - - // Setting no second commitment proof. - let private_account_membership_proofs = [Some((0, vec![]))]; - let result = execute_and_prove( - vec![private_account_1, private_account_2], - Program::serialize_instruction(10u128).unwrap(), - vec![1, 2], - vec![0xdead_beef1, 0xdead_beef2], - vec![ - ( - sender_keys.npk(), - SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), - ), - ( - recipient_keys.npk(), - SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), - ), - ], - vec![sender_keys.nsk], - private_account_membership_proofs.to_vec(), - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_circuit_fails_if_insufficient_auth_keys_are_provided() { - let program = Program::simple_balance_transfer(); - let sender_keys = test_private_account_keys_1(); - let recipient_keys = test_private_account_keys_2(); - let private_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - &sender_keys.npk(), - ); - let private_account_2 = - AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); - - // Setting no auth key for an execution with one non default private accounts. - let private_account_nsks = []; - let result = execute_and_prove( - vec![private_account_1, private_account_2], - Program::serialize_instruction(10u128).unwrap(), - vec![1, 2], - vec![0xdead_beef1, 0xdead_beef2], - vec![ - ( - sender_keys.npk(), - SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), - ), - ( - recipient_keys.npk(), - SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), - ), - ], - private_account_nsks.to_vec(), - vec![], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_circuit_fails_if_invalid_auth_keys_are_provided() { - let program = Program::simple_balance_transfer(); - let sender_keys = test_private_account_keys_1(); - let recipient_keys = test_private_account_keys_2(); - let private_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - &sender_keys.npk(), - ); - let private_account_2 = - AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); - - let private_account_keys = [ - // First private account is the sender - ( - sender_keys.npk(), - SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), - ), - // Second private account is the recipient - ( - recipient_keys.npk(), - SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), - ), - ]; - - // Setting the recipient key to authorize the sender. - // This should be set to the sender private account in - // a normal circumstance. The recipient can't authorize this. - let private_account_nsks = [recipient_keys.nsk]; - let private_account_membership_proofs = [Some((0, vec![]))]; - let result = execute_and_prove( - vec![private_account_1, private_account_2], - Program::serialize_instruction(10u128).unwrap(), - vec![1, 2], - vec![0xdead_beef1, 0xdead_beef2], - private_account_keys.to_vec(), - private_account_nsks.to_vec(), - private_account_membership_proofs.to_vec(), - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_circuit_should_fail_if_new_private_account_with_non_default_balance_is_provided() { - let program = Program::simple_balance_transfer(); - let sender_keys = test_private_account_keys_1(); - let recipient_keys = test_private_account_keys_2(); - let private_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - &sender_keys.npk(), - ); - let private_account_2 = AccountWithMetadata::new( - Account { - // Non default balance - balance: 1, - ..Account::default() - }, - false, - &recipient_keys.npk(), - ); - - let result = execute_and_prove( - vec![private_account_1, private_account_2], - Program::serialize_instruction(10u128).unwrap(), - vec![1, 2], - vec![0xdead_beef1, 0xdead_beef2], - vec![ - ( - sender_keys.npk(), - SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), - ), - ( - recipient_keys.npk(), - SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), - ), - ], - vec![sender_keys.nsk], - vec![Some((0, vec![]))], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_circuit_should_fail_if_new_private_account_with_non_default_program_owner_is_provided() - { - let program = Program::simple_balance_transfer(); - let sender_keys = test_private_account_keys_1(); - let recipient_keys = test_private_account_keys_2(); - let private_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - &sender_keys.npk(), - ); - let private_account_2 = AccountWithMetadata::new( - Account { - // Non default program_owner - program_owner: [0, 1, 2, 3, 4, 5, 6, 7], - ..Account::default() - }, - false, - &recipient_keys.npk(), - ); - - let result = execute_and_prove( - vec![private_account_1, private_account_2], - Program::serialize_instruction(10u128).unwrap(), - vec![1, 2], - vec![0xdead_beef1, 0xdead_beef2], - vec![ - ( - sender_keys.npk(), - SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), - ), - ( - recipient_keys.npk(), - SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), - ), - ], - vec![sender_keys.nsk], - vec![Some((0, vec![]))], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_circuit_should_fail_if_new_private_account_with_non_default_data_is_provided() { - let program = Program::simple_balance_transfer(); - let sender_keys = test_private_account_keys_1(); - let recipient_keys = test_private_account_keys_2(); - let private_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - &sender_keys.npk(), - ); - let private_account_2 = AccountWithMetadata::new( - Account { - // Non default data - data: b"hola mundo".to_vec().try_into().unwrap(), - ..Account::default() - }, - false, - &recipient_keys.npk(), - ); - - let result = execute_and_prove( - vec![private_account_1, private_account_2], - Program::serialize_instruction(10u128).unwrap(), - vec![1, 2], - vec![0xdead_beef1, 0xdead_beef2], - vec![ - ( - sender_keys.npk(), - SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), - ), - ( - recipient_keys.npk(), - SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), - ), - ], - vec![sender_keys.nsk], - vec![Some((0, vec![]))], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_circuit_should_fail_if_new_private_account_with_non_default_nonce_is_provided() { - let program = Program::simple_balance_transfer(); - let sender_keys = test_private_account_keys_1(); - let recipient_keys = test_private_account_keys_2(); - let private_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - &sender_keys.npk(), - ); - let private_account_2 = AccountWithMetadata::new( - Account { - // Non default nonce - nonce: 0xdead_beef, - ..Account::default() - }, - false, - &recipient_keys.npk(), - ); - - let result = execute_and_prove( - vec![private_account_1, private_account_2], - Program::serialize_instruction(10u128).unwrap(), - vec![1, 2], - vec![0xdead_beef1, 0xdead_beef2], - vec![ - ( - sender_keys.npk(), - SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), - ), - ( - recipient_keys.npk(), - SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), - ), - ], - vec![sender_keys.nsk], - vec![Some((0, vec![]))], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_circuit_should_fail_if_new_private_account_is_provided_with_default_values_but_marked_as_authorized() - { - let program = Program::simple_balance_transfer(); - let sender_keys = test_private_account_keys_1(); - let recipient_keys = test_private_account_keys_2(); - let private_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - &sender_keys.npk(), - ); - let private_account_2 = AccountWithMetadata::new( - Account::default(), - // This should be set to false in normal circumstances - true, - &recipient_keys.npk(), - ); - - let result = execute_and_prove( - vec![private_account_1, private_account_2], - Program::serialize_instruction(10u128).unwrap(), - vec![1, 2], - vec![0xdead_beef1, 0xdead_beef2], - vec![ - ( - sender_keys.npk(), - SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), - ), - ( - recipient_keys.npk(), - SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), - ), - ], - vec![sender_keys.nsk], - vec![Some((0, vec![]))], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_circuit_should_fail_with_invalid_visibility_mask_value() { - let program = Program::simple_balance_transfer(); - let public_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - AccountId::new([0; 32]), - ); - let public_account_2 = - AccountWithMetadata::new(Account::default(), false, AccountId::new([1; 32])); - - let visibility_mask = [0, 3]; - let result = execute_and_prove( - vec![public_account_1, public_account_2], - Program::serialize_instruction(10u128).unwrap(), - visibility_mask.to_vec(), - vec![], - vec![], - vec![], - vec![], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_circuit_should_fail_with_too_many_nonces() { - let program = Program::simple_balance_transfer(); - let sender_keys = test_private_account_keys_1(); - let recipient_keys = test_private_account_keys_2(); - let private_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - &sender_keys.npk(), - ); - let private_account_2 = - AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); - - // Setting three new private account nonces for a circuit execution with only two private - // accounts. - let private_account_nonces = [0xdead_beef1, 0xdead_beef2, 0xdead_beef3]; - let result = execute_and_prove( - vec![private_account_1, private_account_2], - Program::serialize_instruction(10u128).unwrap(), - vec![1, 2], - private_account_nonces.to_vec(), - vec![ - ( - sender_keys.npk(), - SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), - ), - ( - recipient_keys.npk(), - SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), - ), - ], - vec![sender_keys.nsk], - vec![Some((0, vec![]))], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_circuit_should_fail_with_too_many_private_account_keys() { - let program = Program::simple_balance_transfer(); - let sender_keys = test_private_account_keys_1(); - let recipient_keys = test_private_account_keys_2(); - let private_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - &sender_keys.npk(), - ); - let private_account_2 = - AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); - - // Setting three private account keys for a circuit execution with only two private - // accounts. - let private_account_keys = [ - ( - sender_keys.npk(), - SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), - ), - ( - recipient_keys.npk(), - SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), - ), - ( - sender_keys.npk(), - SharedSecretKey::new(&[57; 32], &sender_keys.vpk()), - ), - ]; - let result = execute_and_prove( - vec![private_account_1, private_account_2], - Program::serialize_instruction(10u128).unwrap(), - vec![1, 2], - vec![0xdead_beef1, 0xdead_beef2], - private_account_keys.to_vec(), - vec![sender_keys.nsk], - vec![Some((0, vec![]))], - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_circuit_should_fail_with_too_many_private_account_auth_keys() { - let program = Program::simple_balance_transfer(); - let sender_keys = test_private_account_keys_1(); - let recipient_keys = test_private_account_keys_2(); - let private_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - &sender_keys.npk(), - ); - let private_account_2 = - AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); - - // Setting two private account keys for a circuit execution with only one non default - // private account (visibility mask equal to 1 means that auth keys are expected). - let visibility_mask = [1, 2]; - let private_account_nsks = [sender_keys.nsk, recipient_keys.nsk]; - let private_account_membership_proofs = [Some((0, vec![])), Some((1, vec![]))]; - let result = execute_and_prove( - vec![private_account_1, private_account_2], - Program::serialize_instruction(10u128).unwrap(), - visibility_mask.to_vec(), - vec![0xdead_beef1, 0xdead_beef2], - vec![ - ( - sender_keys.npk(), - SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), - ), - ( - recipient_keys.npk(), - SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), - ), - ], - private_account_nsks.to_vec(), - private_account_membership_proofs.to_vec(), - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_private_accounts_can_only_be_initialized_once() { - let sender_keys = test_private_account_keys_1(); - let sender_private_account = Account { - program_owner: Program::authenticated_transfer_program().id(), - balance: 100, - nonce: 0xdead_beef, - data: Data::default(), - }; - let recipient_keys = test_private_account_keys_2(); - - let mut state = V02State::new_with_genesis_accounts(&[], &[]) - .with_private_account(&sender_keys, &sender_private_account); - - let balance_to_move = 37; - - let tx = private_balance_transfer_for_tests( - &sender_keys, - &sender_private_account, - &recipient_keys, - balance_to_move, - [0xcafe_cafe, 0xfeca_feca], - &state, - ); - - state - .transition_from_privacy_preserving_transaction(&tx) - .unwrap(); - - let sender_private_account = Account { - program_owner: Program::authenticated_transfer_program().id(), - balance: 100 - balance_to_move, - nonce: 0xcafe_cafe, - data: Data::default(), - }; - - let tx = private_balance_transfer_for_tests( - &sender_keys, - &sender_private_account, - &recipient_keys, - balance_to_move, - [0x1234, 0x5678], - &state, - ); - - let result = state.transition_from_privacy_preserving_transaction(&tx); - - assert!(matches!(result, Err(NssaError::InvalidInput(_)))); - let NssaError::InvalidInput(error_message) = result.err().unwrap() else { - panic!("Incorrect message error"); - }; - let expected_error_message = "Nullifier already seen".to_string(); - assert_eq!(error_message, expected_error_message); - } - - #[test] - fn test_circuit_should_fail_if_there_are_repeated_ids() { - let program = Program::simple_balance_transfer(); - let sender_keys = test_private_account_keys_1(); - let private_account_1 = AccountWithMetadata::new( - Account { - program_owner: program.id(), - balance: 100, - ..Account::default() - }, - true, - &sender_keys.npk(), - ); - - let visibility_mask = [1, 1]; - let private_account_nsks = [sender_keys.nsk, sender_keys.nsk]; - let private_account_membership_proofs = [Some((1, vec![])), Some((1, vec![]))]; - let shared_secret = SharedSecretKey::new(&[55; 32], &sender_keys.vpk()); - let result = execute_and_prove( - vec![private_account_1.clone(), private_account_1], - Program::serialize_instruction(100u128).unwrap(), - visibility_mask.to_vec(), - vec![0xdead_beef1, 0xdead_beef2], - vec![ - (sender_keys.npk(), shared_secret), - (sender_keys.npk(), shared_secret), - ], - private_account_nsks.to_vec(), - private_account_membership_proofs.to_vec(), - &program.into(), - ); - - assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); - } - - #[test] - fn test_claiming_mechanism() { - let program = Program::authenticated_transfer_program(); - let key = PrivateKey::try_new([1; 32]).unwrap(); - let account_id = AccountId::from(&PublicKey::new_from_private_key(&key)); - let initial_balance = 100; - let initial_data = [(account_id, initial_balance)]; - let mut state = - V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); - let from = account_id; - let from_key = key; - let to = AccountId::new([2; 32]); - let amount: u128 = 37; - - // Check the recipient is an uninitialized account - assert_eq!(state.get_account_by_id(to), Account::default()); - - let expected_recipient_post = Account { - program_owner: program.id(), - balance: amount, - ..Account::default() - }; - - let message = - public_transaction::Message::try_new(program.id(), vec![from, to], vec![0], amount) - .unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[&from_key]); - let tx = PublicTransaction::new(message, witness_set); - - state.transition_from_public_transaction(&tx).unwrap(); - - let recipient_post = state.get_account_by_id(to); - - assert_eq!(recipient_post, expected_recipient_post); - } - - #[test] - fn test_public_chained_call() { - let program = Program::chain_caller(); - let key = PrivateKey::try_new([1; 32]).unwrap(); - let from = AccountId::from(&PublicKey::new_from_private_key(&key)); - let to = AccountId::new([2; 32]); - let initial_balance = 1000; - let initial_data = [(from, initial_balance), (to, 0)]; - let mut state = - V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); - let from_key = key; - let amount: u128 = 37; - let instruction: (u128, ProgramId, u32, Option) = ( - amount, - Program::authenticated_transfer_program().id(), - 2, - None, - ); - - let expected_to_post = Account { - program_owner: Program::authenticated_transfer_program().id(), - balance: amount * 2, // The `chain_caller` chains the program twice - ..Account::default() - }; - - let message = public_transaction::Message::try_new( - program.id(), - vec![to, from], // The chain_caller program permutes the account order in the chain - // call - vec![0], - instruction, - ) - .unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[&from_key]); - let tx = PublicTransaction::new(message, witness_set); - - state.transition_from_public_transaction(&tx).unwrap(); - - let from_post = state.get_account_by_id(from); - let to_post = state.get_account_by_id(to); - // The `chain_caller` program calls the program twice - assert_eq!(from_post.balance, initial_balance - 2 * amount); - assert_eq!(to_post, expected_to_post); - } - - #[test] - fn test_execution_fails_if_chained_calls_exceeds_depth() { - let program = Program::chain_caller(); - let key = PrivateKey::try_new([1; 32]).unwrap(); - let from = AccountId::from(&PublicKey::new_from_private_key(&key)); - let to = AccountId::new([2; 32]); - let initial_balance = 100; - let initial_data = [(from, initial_balance), (to, 0)]; - let mut state = - V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); - let from_key = key; - let amount: u128 = 0; - let instruction: (u128, ProgramId, u32, Option) = ( - amount, - Program::authenticated_transfer_program().id(), - u32::try_from(MAX_NUMBER_CHAINED_CALLS).expect("MAX_NUMBER_CHAINED_CALLS fits in u32") - + 1, - None, - ); - - let message = public_transaction::Message::try_new( - program.id(), - vec![to, from], // The chain_caller program permutes the account order in the chain - // call - vec![0], - instruction, - ) - .unwrap(); - let witness_set = public_transaction::WitnessSet::for_message(&message, &[&from_key]); - let tx = PublicTransaction::new(message, witness_set); - - let result = state.transition_from_public_transaction(&tx); - assert!(matches!( - result, - Err(NssaError::MaxChainedCallsDepthExceeded) - )); - } - struct PrivateKeysForTests; impl PrivateKeysForTests { @@ -2593,7 +703,7 @@ pub mod tests { fn user_token_a_holding() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::user_token_a_holding_init(), @@ -2605,7 +715,7 @@ pub mod tests { fn user_token_b_holding() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::user_token_b_holding_init(), @@ -2617,7 +727,7 @@ pub mod tests { fn pool_definition_init() -> Account { Account { program_owner: Program::amm().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -2627,7 +737,7 @@ pub mod tests { liquidity_pool_supply: BalanceForTests::pool_lp_supply_init(), reserve_a: BalanceForTests::vault_a_balance_init(), reserve_b: BalanceForTests::vault_b_balance_init(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -2637,7 +747,7 @@ pub mod tests { fn token_a_definition_account() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenDefinition::Fungible { name: String::from("test"), total_supply: BalanceForTests::token_a_supply(), @@ -2650,7 +760,7 @@ pub mod tests { fn token_b_definition_acc() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenDefinition::Fungible { name: String::from("test"), total_supply: BalanceForTests::token_b_supply(), @@ -2663,7 +773,7 @@ pub mod tests { fn token_lp_definition_acc() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenDefinition::Fungible { name: String::from("LP Token"), total_supply: BalanceForTests::token_lp_supply(), @@ -2676,7 +786,7 @@ pub mod tests { fn vault_a_init() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::vault_a_balance_init(), @@ -2688,7 +798,7 @@ pub mod tests { fn vault_b_init() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::vault_b_balance_init(), @@ -2700,7 +810,7 @@ pub mod tests { fn user_token_lp_holding() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_lp_definition_id(), balance: BalanceForTests::user_token_lp_holding_init(), @@ -2712,7 +822,7 @@ pub mod tests { fn vault_a_swap_1() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::vault_a_balance_swap_1(), @@ -2724,7 +834,7 @@ pub mod tests { fn vault_b_swap_1() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::vault_b_balance_swap_1(), @@ -2736,7 +846,7 @@ pub mod tests { fn pool_definition_swap_1() -> Account { Account { program_owner: Program::amm().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -2746,7 +856,7 @@ pub mod tests { liquidity_pool_supply: BalanceForTests::pool_lp_supply_init(), reserve_a: BalanceForTests::vault_a_balance_swap_1(), reserve_b: BalanceForTests::vault_b_balance_swap_1(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -2756,7 +866,7 @@ pub mod tests { fn user_token_a_holding_swap_1() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::user_token_a_holding_swap_1(), @@ -2768,7 +878,7 @@ pub mod tests { fn user_token_b_holding_swap_1() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::user_token_b_holding_swap_1(), @@ -2780,7 +890,7 @@ pub mod tests { fn vault_a_swap_2() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::vault_a_balance_swap_2(), @@ -2792,7 +902,7 @@ pub mod tests { fn vault_b_swap_2() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::vault_b_balance_swap_2(), @@ -2804,7 +914,7 @@ pub mod tests { fn pool_definition_swap_2() -> Account { Account { program_owner: Program::amm().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -2814,7 +924,7 @@ pub mod tests { liquidity_pool_supply: BalanceForTests::pool_lp_supply_init(), reserve_a: BalanceForTests::vault_a_balance_swap_2(), reserve_b: BalanceForTests::vault_b_balance_swap_2(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -2824,7 +934,7 @@ pub mod tests { fn user_token_a_holding_swap_2() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::user_token_a_holding_swap_2(), @@ -2836,7 +946,7 @@ pub mod tests { fn user_token_b_holding_swap_2() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::user_token_b_holding_swap_2(), @@ -2848,7 +958,7 @@ pub mod tests { fn vault_a_add() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::vault_a_balance_add(), @@ -2860,7 +970,7 @@ pub mod tests { fn vault_b_add() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::vault_b_balance_add(), @@ -2872,7 +982,7 @@ pub mod tests { fn pool_definition_add() -> Account { Account { program_owner: Program::amm().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -2882,7 +992,7 @@ pub mod tests { liquidity_pool_supply: BalanceForTests::token_lp_supply_add(), reserve_a: BalanceForTests::vault_a_balance_add(), reserve_b: BalanceForTests::vault_b_balance_add(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -2892,7 +1002,7 @@ pub mod tests { fn user_token_a_holding_add() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::user_token_a_holding_add(), @@ -2904,7 +1014,7 @@ pub mod tests { fn user_token_b_holding_add() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::user_token_b_holding_add(), @@ -2916,7 +1026,7 @@ pub mod tests { fn user_token_lp_holding_add() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_lp_definition_id(), balance: BalanceForTests::user_token_lp_holding_add(), @@ -2928,7 +1038,7 @@ pub mod tests { fn token_lp_definition_add() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenDefinition::Fungible { name: String::from("LP Token"), total_supply: BalanceForTests::token_lp_supply_add(), @@ -2941,7 +1051,7 @@ pub mod tests { fn vault_a_remove() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::vault_a_balance_remove(), @@ -2953,7 +1063,7 @@ pub mod tests { fn vault_b_remove() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::vault_b_balance_remove(), @@ -2965,7 +1075,7 @@ pub mod tests { fn pool_definition_remove() -> Account { Account { program_owner: Program::amm().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -2975,7 +1085,7 @@ pub mod tests { liquidity_pool_supply: BalanceForTests::token_lp_supply_remove(), reserve_a: BalanceForTests::vault_a_balance_remove(), reserve_b: BalanceForTests::vault_b_balance_remove(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -2985,7 +1095,7 @@ pub mod tests { fn user_token_a_holding_remove() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::user_token_a_holding_remove(), @@ -2997,7 +1107,7 @@ pub mod tests { fn user_token_b_holding_remove() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::user_token_b_holding_remove(), @@ -3009,7 +1119,7 @@ pub mod tests { fn user_token_lp_holding_remove() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_lp_definition_id(), balance: BalanceForTests::user_token_lp_holding_remove(), @@ -3021,7 +1131,7 @@ pub mod tests { fn token_lp_definition_remove() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenDefinition::Fungible { name: String::from("LP Token"), total_supply: BalanceForTests::token_lp_supply_remove(), @@ -3034,7 +1144,7 @@ pub mod tests { fn token_lp_definition_init_inactive() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenDefinition::Fungible { name: String::from("LP Token"), total_supply: 0, @@ -3047,7 +1157,7 @@ pub mod tests { fn vault_a_init_inactive() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: 0, @@ -3059,7 +1169,7 @@ pub mod tests { fn vault_b_init_inactive() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: 0, @@ -3071,7 +1181,7 @@ pub mod tests { fn pool_definition_inactive() -> Account { Account { program_owner: Program::amm().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -3081,7 +1191,7 @@ pub mod tests { liquidity_pool_supply: 0, reserve_a: 0, reserve_b: 0, - fees: 0u128, + fees: 0_u128, active: false, }), nonce: 0, @@ -3091,7 +1201,7 @@ pub mod tests { fn user_token_a_holding_new_init() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::user_token_a_holding_new_definition(), @@ -3103,7 +1213,7 @@ pub mod tests { fn user_token_b_holding_new_init() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::user_token_b_holding_new_definition(), @@ -3115,7 +1225,7 @@ pub mod tests { fn user_token_lp_holding_new_init() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_lp_definition_id(), balance: BalanceForTests::lp_supply_init(), @@ -3127,7 +1237,7 @@ pub mod tests { fn token_lp_definition_new_init() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenDefinition::Fungible { name: String::from("LP Token"), total_supply: BalanceForTests::lp_supply_init(), @@ -3140,7 +1250,7 @@ pub mod tests { fn pool_definition_new_init() -> Account { Account { program_owner: Program::amm().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -3150,7 +1260,7 @@ pub mod tests { liquidity_pool_supply: BalanceForTests::lp_supply_init(), reserve_a: BalanceForTests::vault_a_balance_init(), reserve_b: BalanceForTests::vault_b_balance_init(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -3160,7 +1270,7 @@ pub mod tests { fn user_token_lp_holding_init_zero() -> Account { Account { program_owner: Program::token().id(), - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_lp_definition_id(), balance: 0, @@ -3170,6 +1280,1912 @@ pub mod tests { } } + fn transfer_transaction( + from: AccountId, + from_key: &PrivateKey, + nonce: u128, + to: AccountId, + balance: u128, + ) -> PublicTransaction { + let account_ids = vec![from, to]; + let nonces = vec![nonce]; + let program_id = Program::authenticated_transfer_program().id(); + let message = + public_transaction::Message::try_new(program_id, account_ids, nonces, balance).unwrap(); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[from_key]); + PublicTransaction::new(message, witness_set) + } + + #[test] + fn new_with_genesis() { + let key1 = PrivateKey::try_new([1; 32]).unwrap(); + let key2 = PrivateKey::try_new([2; 32]).unwrap(); + let addr1 = AccountId::from(&PublicKey::new_from_private_key(&key1)); + let addr2 = AccountId::from(&PublicKey::new_from_private_key(&key2)); + let initial_data = [(addr1, 100_u128), (addr2, 151_u128)]; + let authenticated_transfers_program = Program::authenticated_transfer_program(); + let expected_public_state = { + let mut this = HashMap::new(); + this.insert( + addr1, + Account { + balance: 100, + program_owner: authenticated_transfers_program.id(), + ..Account::default() + }, + ); + this.insert( + addr2, + Account { + balance: 151, + program_owner: authenticated_transfers_program.id(), + ..Account::default() + }, + ); + this + }; + let expected_builtin_programs = { + let mut this = HashMap::new(); + this.insert( + authenticated_transfers_program.id(), + authenticated_transfers_program, + ); + this.insert(Program::token().id(), Program::token()); + this.insert(Program::amm().id(), Program::amm()); + this + }; + + let state = V02State::new_with_genesis_accounts(&initial_data, &[]); + + assert_eq!(state.public_state, expected_public_state); + assert_eq!(state.programs, expected_builtin_programs); + } + + #[test] + fn insert_program() { + let mut state = V02State::new_with_genesis_accounts(&[], &[]); + let program_to_insert = Program::simple_balance_transfer(); + let program_id = program_to_insert.id(); + assert!(!state.programs.contains_key(&program_id)); + + state.insert_program(program_to_insert); + + assert!(state.programs.contains_key(&program_id)); + } + + #[test] + fn get_account_by_account_id_non_default_account() { + let key = PrivateKey::try_new([1; 32]).unwrap(); + let account_id = AccountId::from(&PublicKey::new_from_private_key(&key)); + let initial_data = [(account_id, 100_u128)]; + let state = V02State::new_with_genesis_accounts(&initial_data, &[]); + let expected_account = &state.public_state[&account_id]; + + let account = state.get_account_by_id(account_id); + + assert_eq!(&account, expected_account); + } + + #[test] + fn get_account_by_account_id_default_account() { + let addr2 = AccountId::new([0; 32]); + let state = V02State::new_with_genesis_accounts(&[], &[]); + let expected_account = Account::default(); + + let account = state.get_account_by_id(addr2); + + assert_eq!(account, expected_account); + } + + #[test] + fn builtin_programs_getter() { + let state = V02State::new_with_genesis_accounts(&[], &[]); + + let builtin_programs = state.programs(); + + assert_eq!(builtin_programs, &state.programs); + } + + #[test] + fn transition_from_authenticated_transfer_program_invocation_default_account_destination() { + let key = PrivateKey::try_new([1; 32]).unwrap(); + let account_id = AccountId::from(&PublicKey::new_from_private_key(&key)); + let initial_data = [(account_id, 100)]; + let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]); + let from = account_id; + let to = AccountId::new([2; 32]); + assert_eq!(state.get_account_by_id(to), Account::default()); + let balance_to_move = 5; + + let tx = transfer_transaction(from, &key, 0, to, balance_to_move); + state.transition_from_public_transaction(&tx).unwrap(); + + assert_eq!(state.get_account_by_id(from).balance, 95); + assert_eq!(state.get_account_by_id(to).balance, 5); + assert_eq!(state.get_account_by_id(from).nonce, 1); + assert_eq!(state.get_account_by_id(to).nonce, 0); + } + + #[test] + fn transition_from_authenticated_transfer_program_invocation_insuficient_balance() { + let key = PrivateKey::try_new([1; 32]).unwrap(); + let account_id = AccountId::from(&PublicKey::new_from_private_key(&key)); + let initial_data = [(account_id, 100)]; + let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]); + let from = account_id; + let from_key = key; + let to = AccountId::new([2; 32]); + let balance_to_move = 101; + assert!(state.get_account_by_id(from).balance < balance_to_move); + + let tx = transfer_transaction(from, &from_key, 0, to, balance_to_move); + let result = state.transition_from_public_transaction(&tx); + + assert!(matches!(result, Err(NssaError::ProgramExecutionFailed(_)))); + assert_eq!(state.get_account_by_id(from).balance, 100); + assert_eq!(state.get_account_by_id(to).balance, 0); + assert_eq!(state.get_account_by_id(from).nonce, 0); + assert_eq!(state.get_account_by_id(to).nonce, 0); + } + + #[test] + fn transition_from_authenticated_transfer_program_invocation_non_default_account_destination() { + let key1 = PrivateKey::try_new([1; 32]).unwrap(); + let key2 = PrivateKey::try_new([2; 32]).unwrap(); + let account_id1 = AccountId::from(&PublicKey::new_from_private_key(&key1)); + let account_id2 = AccountId::from(&PublicKey::new_from_private_key(&key2)); + let initial_data = [(account_id1, 100), (account_id2, 200)]; + let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]); + let from = account_id2; + let from_key = key2; + let to = account_id1; + assert_ne!(state.get_account_by_id(to), Account::default()); + let balance_to_move = 8; + + let tx = transfer_transaction(from, &from_key, 0, to, balance_to_move); + state.transition_from_public_transaction(&tx).unwrap(); + + assert_eq!(state.get_account_by_id(from).balance, 192); + assert_eq!(state.get_account_by_id(to).balance, 108); + assert_eq!(state.get_account_by_id(from).nonce, 1); + assert_eq!(state.get_account_by_id(to).nonce, 0); + } + + #[test] + fn transition_from_sequence_of_authenticated_transfer_program_invocations() { + let key1 = PrivateKey::try_new([8; 32]).unwrap(); + let account_id1 = AccountId::from(&PublicKey::new_from_private_key(&key1)); + let key2 = PrivateKey::try_new([2; 32]).unwrap(); + let account_id2 = AccountId::from(&PublicKey::new_from_private_key(&key2)); + let initial_data = [(account_id1, 100)]; + let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]); + let account_id3 = AccountId::new([3; 32]); + let balance_to_move = 5; + + let tx = transfer_transaction(account_id1, &key1, 0, account_id2, balance_to_move); + state.transition_from_public_transaction(&tx).unwrap(); + let balance_to_move = 3; + let tx = transfer_transaction(account_id2, &key2, 0, account_id3, balance_to_move); + state.transition_from_public_transaction(&tx).unwrap(); + + assert_eq!(state.get_account_by_id(account_id1).balance, 95); + assert_eq!(state.get_account_by_id(account_id2).balance, 2); + assert_eq!(state.get_account_by_id(account_id3).balance, 3); + assert_eq!(state.get_account_by_id(account_id1).nonce, 1); + assert_eq!(state.get_account_by_id(account_id2).nonce, 1); + assert_eq!(state.get_account_by_id(account_id3).nonce, 0); + } + + #[test] + fn program_should_fail_if_modifies_nonces() { + let initial_data = [(AccountId::new([1; 32]), 100)]; + let mut state = + V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); + let account_ids = vec![AccountId::new([1; 32])]; + let program_id = Program::nonce_changer_program().id(); + let message = + public_transaction::Message::try_new(program_id, account_ids, vec![], ()).unwrap(); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); + let tx = PublicTransaction::new(message, witness_set); + + let result = state.transition_from_public_transaction(&tx); + + assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); + } + + #[test] + fn program_should_fail_if_output_accounts_exceed_inputs() { + let initial_data = [(AccountId::new([1; 32]), 100)]; + let mut state = + V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); + let account_ids = vec![AccountId::new([1; 32])]; + let program_id = Program::extra_output_program().id(); + let message = + public_transaction::Message::try_new(program_id, account_ids, vec![], ()).unwrap(); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); + let tx = PublicTransaction::new(message, witness_set); + + let result = state.transition_from_public_transaction(&tx); + + assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); + } + + #[test] + fn program_should_fail_with_missing_output_accounts() { + let initial_data = [(AccountId::new([1; 32]), 100)]; + let mut state = + V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); + let account_ids = vec![AccountId::new([1; 32]), AccountId::new([2; 32])]; + let program_id = Program::missing_output_program().id(); + let message = + public_transaction::Message::try_new(program_id, account_ids, vec![], ()).unwrap(); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); + let tx = PublicTransaction::new(message, witness_set); + + let result = state.transition_from_public_transaction(&tx); + + assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); + } + + #[test] + fn program_should_fail_if_modifies_program_owner_with_only_non_default_program_owner() { + let initial_data = [(AccountId::new([1; 32]), 0)]; + let mut state = + V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); + let account_id = AccountId::new([1; 32]); + let account = state.get_account_by_id(account_id); + // Assert the target account only differs from the default account in the program owner + // field + assert_ne!(account.program_owner, Account::default().program_owner); + assert_eq!(account.balance, Account::default().balance); + assert_eq!(account.nonce, Account::default().nonce); + assert_eq!(account.data, Account::default().data); + let program_id = Program::program_owner_changer().id(); + let message = + public_transaction::Message::try_new(program_id, vec![account_id], vec![], ()).unwrap(); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); + let tx = PublicTransaction::new(message, witness_set); + + let result = state.transition_from_public_transaction(&tx); + + assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); + } + + #[test] + fn program_should_fail_if_modifies_program_owner_with_only_non_default_balance() { + let initial_data = []; + let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]) + .with_test_programs() + .with_non_default_accounts_but_default_program_owners(); + let account_id = AccountId::new([255; 32]); + let account = state.get_account_by_id(account_id); + // Assert the target account only differs from the default account in balance field + assert_eq!(account.program_owner, Account::default().program_owner); + assert_ne!(account.balance, Account::default().balance); + assert_eq!(account.nonce, Account::default().nonce); + assert_eq!(account.data, Account::default().data); + let program_id = Program::program_owner_changer().id(); + let message = + public_transaction::Message::try_new(program_id, vec![account_id], vec![], ()).unwrap(); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); + let tx = PublicTransaction::new(message, witness_set); + + let result = state.transition_from_public_transaction(&tx); + + assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); + } + + #[test] + fn program_should_fail_if_modifies_program_owner_with_only_non_default_nonce() { + let initial_data = []; + let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]) + .with_test_programs() + .with_non_default_accounts_but_default_program_owners(); + let account_id = AccountId::new([254; 32]); + let account = state.get_account_by_id(account_id); + // Assert the target account only differs from the default account in nonce field + assert_eq!(account.program_owner, Account::default().program_owner); + assert_eq!(account.balance, Account::default().balance); + assert_ne!(account.nonce, Account::default().nonce); + assert_eq!(account.data, Account::default().data); + let program_id = Program::program_owner_changer().id(); + let message = + public_transaction::Message::try_new(program_id, vec![account_id], vec![], ()).unwrap(); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); + let tx = PublicTransaction::new(message, witness_set); + + let result = state.transition_from_public_transaction(&tx); + + assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); + } + + #[test] + fn program_should_fail_if_modifies_program_owner_with_only_non_default_data() { + let initial_data = []; + let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]) + .with_test_programs() + .with_non_default_accounts_but_default_program_owners(); + let account_id = AccountId::new([253; 32]); + let account = state.get_account_by_id(account_id); + // Assert the target account only differs from the default account in data field + assert_eq!(account.program_owner, Account::default().program_owner); + assert_eq!(account.balance, Account::default().balance); + assert_eq!(account.nonce, Account::default().nonce); + assert_ne!(account.data, Account::default().data); + let program_id = Program::program_owner_changer().id(); + let message = + public_transaction::Message::try_new(program_id, vec![account_id], vec![], ()).unwrap(); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); + let tx = PublicTransaction::new(message, witness_set); + + let result = state.transition_from_public_transaction(&tx); + + assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); + } + + #[test] + fn program_should_fail_if_transfers_balance_from_non_owned_account() { + let initial_data = [(AccountId::new([1; 32]), 100)]; + let mut state = + V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); + let sender_account_id = AccountId::new([1; 32]); + let receiver_account_id = AccountId::new([2; 32]); + let balance_to_move: u128 = 1; + let program_id = Program::simple_balance_transfer().id(); + assert_ne!( + state.get_account_by_id(sender_account_id).program_owner, + program_id + ); + let message = public_transaction::Message::try_new( + program_id, + vec![sender_account_id, receiver_account_id], + vec![], + balance_to_move, + ) + .unwrap(); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); + let tx = PublicTransaction::new(message, witness_set); + + let result = state.transition_from_public_transaction(&tx); + + assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); + } + + #[test] + fn program_should_fail_if_modifies_data_of_non_owned_account() { + let initial_data = []; + let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]) + .with_test_programs() + .with_non_default_accounts_but_default_program_owners(); + let account_id = AccountId::new([255; 32]); + let program_id = Program::data_changer().id(); + + assert_ne!(state.get_account_by_id(account_id), Account::default()); + assert_ne!( + state.get_account_by_id(account_id).program_owner, + program_id + ); + let message = + public_transaction::Message::try_new(program_id, vec![account_id], vec![], vec![0]) + .unwrap(); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); + let tx = PublicTransaction::new(message, witness_set); + + let result = state.transition_from_public_transaction(&tx); + + assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); + } + + #[test] + fn program_should_fail_if_does_not_preserve_total_balance_by_minting() { + let initial_data = []; + let mut state = + V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); + let account_id = AccountId::new([1; 32]); + let program_id = Program::minter().id(); + + let message = + public_transaction::Message::try_new(program_id, vec![account_id], vec![], ()).unwrap(); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); + let tx = PublicTransaction::new(message, witness_set); + + let result = state.transition_from_public_transaction(&tx); + + assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); + } + + #[test] + fn program_should_fail_if_does_not_preserve_total_balance_by_burning() { + let initial_data = []; + let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]) + .with_test_programs() + .with_account_owned_by_burner_program(); + let program_id = Program::burner().id(); + let account_id = AccountId::new([252; 32]); + assert_eq!( + state.get_account_by_id(account_id).program_owner, + program_id + ); + let balance_to_burn: u128 = 1; + assert!(state.get_account_by_id(account_id).balance > balance_to_burn); + + let message = public_transaction::Message::try_new( + program_id, + vec![account_id], + vec![], + balance_to_burn, + ) + .unwrap(); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[]); + let tx = PublicTransaction::new(message, witness_set); + let result = state.transition_from_public_transaction(&tx); + + assert!(matches!(result, Err(NssaError::InvalidProgramBehavior))); + } + + fn test_public_account_keys_1() -> TestPublicKeys { + TestPublicKeys { + signing_key: PrivateKey::try_new([37; 32]).unwrap(), + } + } + + pub fn test_private_account_keys_1() -> TestPrivateKeys { + TestPrivateKeys { + nsk: [13; 32], + vsk: [31; 32], + } + } + + pub fn test_private_account_keys_2() -> TestPrivateKeys { + TestPrivateKeys { + nsk: [38; 32], + vsk: [83; 32], + } + } + + fn shielded_balance_transfer_for_tests( + sender_keys: &TestPublicKeys, + recipient_keys: &TestPrivateKeys, + balance_to_move: u128, + state: &V02State, + ) -> PrivacyPreservingTransaction { + let sender = AccountWithMetadata::new( + state.get_account_by_id(sender_keys.account_id()), + true, + sender_keys.account_id(), + ); + + let sender_nonce = sender.account.nonce; + + let recipient = AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); + + let esk = [3; 32]; + let shared_secret = SharedSecretKey::new(&esk, &recipient_keys.vpk()); + let epk = EphemeralPublicKey::from_scalar(esk); + + let (output, proof) = circuit::execute_and_prove( + vec![sender, recipient], + Program::serialize_instruction(balance_to_move).unwrap(), + vec![0, 2], + vec![0xdead_beef], + vec![(recipient_keys.npk(), shared_secret)], + vec![], + vec![None], + &Program::authenticated_transfer_program().into(), + ) + .unwrap(); + + let message = Message::try_from_circuit_output( + vec![sender_keys.account_id()], + vec![sender_nonce], + vec![(recipient_keys.npk(), recipient_keys.vpk(), epk)], + output, + ) + .unwrap(); + + let witness_set = WitnessSet::for_message(&message, proof, &[&sender_keys.signing_key]); + PrivacyPreservingTransaction::new(message, witness_set) + } + + fn private_balance_transfer_for_tests( + sender_keys: &TestPrivateKeys, + sender_private_account: &Account, + recipient_keys: &TestPrivateKeys, + balance_to_move: u128, + new_nonces: [Nonce; 2], + state: &V02State, + ) -> PrivacyPreservingTransaction { + let program = Program::authenticated_transfer_program(); + let sender_commitment = Commitment::new(&sender_keys.npk(), sender_private_account); + let sender_pre = + AccountWithMetadata::new(sender_private_account.clone(), true, &sender_keys.npk()); + let recipient_pre = + AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); + + let esk_1 = [3; 32]; + let shared_secret_1 = SharedSecretKey::new(&esk_1, &sender_keys.vpk()); + let epk_1 = EphemeralPublicKey::from_scalar(esk_1); + + let esk_2 = [3; 32]; + let shared_secret_2 = SharedSecretKey::new(&esk_2, &recipient_keys.vpk()); + let epk_2 = EphemeralPublicKey::from_scalar(esk_2); + + let (output, proof) = circuit::execute_and_prove( + vec![sender_pre, recipient_pre], + Program::serialize_instruction(balance_to_move).unwrap(), + vec![1, 2], + new_nonces.to_vec(), + vec![ + (sender_keys.npk(), shared_secret_1), + (recipient_keys.npk(), shared_secret_2), + ], + vec![sender_keys.nsk], + vec![state.get_proof_for_commitment(&sender_commitment), None], + &program.into(), + ) + .unwrap(); + + let message = Message::try_from_circuit_output( + vec![], + vec![], + vec![ + (sender_keys.npk(), sender_keys.vpk(), epk_1), + (recipient_keys.npk(), recipient_keys.vpk(), epk_2), + ], + output, + ) + .unwrap(); + + let witness_set = WitnessSet::for_message(&message, proof, &[]); + + PrivacyPreservingTransaction::new(message, witness_set) + } + + fn deshielded_balance_transfer_for_tests( + sender_keys: &TestPrivateKeys, + sender_private_account: &Account, + recipient_account_id: &AccountId, + balance_to_move: u128, + new_nonce: Nonce, + state: &V02State, + ) -> PrivacyPreservingTransaction { + let program = Program::authenticated_transfer_program(); + let sender_commitment = Commitment::new(&sender_keys.npk(), sender_private_account); + let sender_pre = + AccountWithMetadata::new(sender_private_account.clone(), true, &sender_keys.npk()); + let recipient_pre = AccountWithMetadata::new( + state.get_account_by_id(*recipient_account_id), + false, + *recipient_account_id, + ); + + let esk = [3; 32]; + let shared_secret = SharedSecretKey::new(&esk, &sender_keys.vpk()); + let epk = EphemeralPublicKey::from_scalar(esk); + + let (output, proof) = circuit::execute_and_prove( + vec![sender_pre, recipient_pre], + Program::serialize_instruction(balance_to_move).unwrap(), + vec![1, 0], + vec![new_nonce], + vec![(sender_keys.npk(), shared_secret)], + vec![sender_keys.nsk], + vec![state.get_proof_for_commitment(&sender_commitment)], + &program.into(), + ) + .unwrap(); + + let message = Message::try_from_circuit_output( + vec![*recipient_account_id], + vec![], + vec![(sender_keys.npk(), sender_keys.vpk(), epk)], + output, + ) + .unwrap(); + + let witness_set = WitnessSet::for_message(&message, proof, &[]); + + PrivacyPreservingTransaction::new(message, witness_set) + } + + #[test] + fn transition_from_privacy_preserving_transaction_shielded() { + let sender_keys = test_public_account_keys_1(); + let recipient_keys = test_private_account_keys_1(); + + let mut state = + V02State::new_with_genesis_accounts(&[(sender_keys.account_id(), 200)], &[]); + + let balance_to_move = 37; + + let tx = shielded_balance_transfer_for_tests( + &sender_keys, + &recipient_keys, + balance_to_move, + &state, + ); + + let expected_sender_post = { + let mut this = state.get_account_by_id(sender_keys.account_id()); + this.balance -= balance_to_move; + this.nonce += 1; + this + }; + + let [expected_new_commitment] = tx.message().new_commitments.clone().try_into().unwrap(); + assert!(!state.private_state.0.contains(&expected_new_commitment)); + + state + .transition_from_privacy_preserving_transaction(&tx) + .unwrap(); + + let sender_post = state.get_account_by_id(sender_keys.account_id()); + assert_eq!(sender_post, expected_sender_post); + assert!(state.private_state.0.contains(&expected_new_commitment)); + + assert_eq!( + state.get_account_by_id(sender_keys.account_id()).balance, + 200 - balance_to_move + ); + } + + #[test] + fn transition_from_privacy_preserving_transaction_private() { + let sender_keys = test_private_account_keys_1(); + let sender_private_account = Account { + program_owner: Program::authenticated_transfer_program().id(), + balance: 100, + nonce: 0xdead_beef, + data: Data::default(), + }; + let recipient_keys = test_private_account_keys_2(); + + let mut state = V02State::new_with_genesis_accounts(&[], &[]) + .with_private_account(&sender_keys, &sender_private_account); + + let balance_to_move = 37; + + let tx = private_balance_transfer_for_tests( + &sender_keys, + &sender_private_account, + &recipient_keys, + balance_to_move, + [0xcafe_cafe, 0xfeca_feca], + &state, + ); + + let expected_new_commitment_1 = Commitment::new( + &sender_keys.npk(), + &Account { + program_owner: Program::authenticated_transfer_program().id(), + nonce: 0xcafe_cafe, + balance: sender_private_account.balance - balance_to_move, + data: Data::default(), + }, + ); + + let sender_pre_commitment = Commitment::new(&sender_keys.npk(), &sender_private_account); + let expected_new_nullifier = + Nullifier::for_account_update(&sender_pre_commitment, &sender_keys.nsk); + + let expected_new_commitment_2 = Commitment::new( + &recipient_keys.npk(), + &Account { + program_owner: Program::authenticated_transfer_program().id(), + nonce: 0xfeca_feca, + balance: balance_to_move, + ..Account::default() + }, + ); + + let previous_public_state = state.public_state.clone(); + assert!(state.private_state.0.contains(&sender_pre_commitment)); + assert!(!state.private_state.0.contains(&expected_new_commitment_1)); + assert!(!state.private_state.0.contains(&expected_new_commitment_2)); + assert!(!state.private_state.1.contains(&expected_new_nullifier)); + + state + .transition_from_privacy_preserving_transaction(&tx) + .unwrap(); + + assert_eq!(state.public_state, previous_public_state); + assert!(state.private_state.0.contains(&sender_pre_commitment)); + assert!(state.private_state.0.contains(&expected_new_commitment_1)); + assert!(state.private_state.0.contains(&expected_new_commitment_2)); + assert!(state.private_state.1.contains(&expected_new_nullifier)); + } + + #[test] + fn transition_from_privacy_preserving_transaction_deshielded() { + let sender_keys = test_private_account_keys_1(); + let sender_private_account = Account { + program_owner: Program::authenticated_transfer_program().id(), + balance: 100, + nonce: 0xdead_beef, + data: Data::default(), + }; + let recipient_keys = test_public_account_keys_1(); + let recipient_initial_balance = 400; + let mut state = V02State::new_with_genesis_accounts( + &[(recipient_keys.account_id(), recipient_initial_balance)], + &[], + ) + .with_private_account(&sender_keys, &sender_private_account); + + let balance_to_move = 37; + + let expected_recipient_post = { + let mut this = state.get_account_by_id(recipient_keys.account_id()); + this.balance += balance_to_move; + this + }; + + let tx = deshielded_balance_transfer_for_tests( + &sender_keys, + &sender_private_account, + &recipient_keys.account_id(), + balance_to_move, + 0xcafe_cafe, + &state, + ); + + let expected_new_commitment = Commitment::new( + &sender_keys.npk(), + &Account { + program_owner: Program::authenticated_transfer_program().id(), + nonce: 0xcafe_cafe, + balance: sender_private_account.balance - balance_to_move, + data: Data::default(), + }, + ); + + let sender_pre_commitment = Commitment::new(&sender_keys.npk(), &sender_private_account); + let expected_new_nullifier = + Nullifier::for_account_update(&sender_pre_commitment, &sender_keys.nsk); + + assert!(state.private_state.0.contains(&sender_pre_commitment)); + assert!(!state.private_state.0.contains(&expected_new_commitment)); + assert!(!state.private_state.1.contains(&expected_new_nullifier)); + + state + .transition_from_privacy_preserving_transaction(&tx) + .unwrap(); + + let recipient_post = state.get_account_by_id(recipient_keys.account_id()); + assert_eq!(recipient_post, expected_recipient_post); + assert!(state.private_state.0.contains(&sender_pre_commitment)); + assert!(state.private_state.0.contains(&expected_new_commitment)); + assert!(state.private_state.1.contains(&expected_new_nullifier)); + assert_eq!( + state.get_account_by_id(recipient_keys.account_id()).balance, + recipient_initial_balance + balance_to_move + ); + } + + #[test] + fn burner_program_should_fail_in_privacy_preserving_circuit() { + let program = Program::burner(); + let public_account = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + AccountId::new([0; 32]), + ); + + let result = execute_and_prove( + vec![public_account], + Program::serialize_instruction(10_u128).unwrap(), + vec![0], + vec![], + vec![], + vec![], + vec![], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn minter_program_should_fail_in_privacy_preserving_circuit() { + let program = Program::minter(); + let public_account = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 0, + ..Account::default() + }, + true, + AccountId::new([0; 32]), + ); + + let result = execute_and_prove( + vec![public_account], + Program::serialize_instruction(10_u128).unwrap(), + vec![0], + vec![], + vec![], + vec![], + vec![], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn nonce_changer_program_should_fail_in_privacy_preserving_circuit() { + let program = Program::nonce_changer_program(); + let public_account = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 0, + ..Account::default() + }, + true, + AccountId::new([0; 32]), + ); + + let result = execute_and_prove( + vec![public_account], + Program::serialize_instruction(()).unwrap(), + vec![0], + vec![], + vec![], + vec![], + vec![], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn data_changer_program_should_fail_for_non_owned_account_in_privacy_preserving_circuit() { + let program = Program::data_changer(); + let public_account = AccountWithMetadata::new( + Account { + program_owner: [0, 1, 2, 3, 4, 5, 6, 7], + balance: 0, + ..Account::default() + }, + true, + AccountId::new([0; 32]), + ); + + let result = execute_and_prove( + vec![public_account], + Program::serialize_instruction(vec![0]).unwrap(), + vec![0], + vec![], + vec![], + vec![], + vec![], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn data_changer_program_should_fail_for_too_large_data_in_privacy_preserving_circuit() { + let program = Program::data_changer(); + let public_account = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 0, + ..Account::default() + }, + true, + AccountId::new([0; 32]), + ); + + let large_data: Vec = + vec![ + 0; + usize::try_from(nssa_core::account::data::DATA_MAX_LENGTH.as_u64()) + .expect("DATA_MAX_LENGTH fits in usize") + + 1 + ]; + + let result = execute_and_prove( + vec![public_account], + Program::serialize_instruction(large_data).unwrap(), + vec![0], + vec![], + vec![], + vec![], + vec![], + &program.clone().into(), + ); + + assert!(matches!(result, Err(NssaError::ProgramProveFailed(_)))); + } + + #[test] + fn extra_output_program_should_fail_in_privacy_preserving_circuit() { + let program = Program::extra_output_program(); + let public_account = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 0, + ..Account::default() + }, + true, + AccountId::new([0; 32]), + ); + + let result = execute_and_prove( + vec![public_account], + Program::serialize_instruction(()).unwrap(), + vec![0], + vec![], + vec![], + vec![], + vec![], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn missing_output_program_should_fail_in_privacy_preserving_circuit() { + let program = Program::missing_output_program(); + let public_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 0, + ..Account::default() + }, + true, + AccountId::new([0; 32]), + ); + let public_account_2 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 0, + ..Account::default() + }, + true, + AccountId::new([1; 32]), + ); + + let result = execute_and_prove( + vec![public_account_1, public_account_2], + Program::serialize_instruction(()).unwrap(), + vec![0, 0], + vec![], + vec![], + vec![], + vec![], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn program_owner_changer_should_fail_in_privacy_preserving_circuit() { + let program = Program::program_owner_changer(); + let public_account = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 0, + ..Account::default() + }, + true, + AccountId::new([0; 32]), + ); + + let result = execute_and_prove( + vec![public_account], + Program::serialize_instruction(()).unwrap(), + vec![0], + vec![], + vec![], + vec![], + vec![], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn transfer_from_non_owned_account_should_fail_in_privacy_preserving_circuit() { + let program = Program::simple_balance_transfer(); + let public_account_1 = AccountWithMetadata::new( + Account { + program_owner: [0, 1, 2, 3, 4, 5, 6, 7], + balance: 100, + ..Account::default() + }, + true, + AccountId::new([0; 32]), + ); + let public_account_2 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 0, + ..Account::default() + }, + true, + AccountId::new([1; 32]), + ); + + let result = execute_and_prove( + vec![public_account_1, public_account_2], + Program::serialize_instruction(10_u128).unwrap(), + vec![0, 0], + vec![], + vec![], + vec![], + vec![], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn circuit_fails_if_visibility_masks_have_incorrect_lenght() { + let program = Program::simple_balance_transfer(); + let public_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + AccountId::new([0; 32]), + ); + let public_account_2 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 0, + ..Account::default() + }, + true, + AccountId::new([1; 32]), + ); + + // Setting only one visibility mask for a circuit execution with two pre_state accounts. + let visibility_mask = [0]; + let result = execute_and_prove( + vec![public_account_1, public_account_2], + Program::serialize_instruction(10_u128).unwrap(), + visibility_mask.to_vec(), + vec![], + vec![], + vec![], + vec![], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn circuit_fails_if_insufficient_nonces_are_provided() { + let program = Program::simple_balance_transfer(); + let sender_keys = test_private_account_keys_1(); + let recipient_keys = test_private_account_keys_2(); + let private_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + &sender_keys.npk(), + ); + let private_account_2 = + AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); + + // Setting only one nonce for an execution with two private accounts. + let private_account_nonces = [0xdead_beef1]; + let result = execute_and_prove( + vec![private_account_1, private_account_2], + Program::serialize_instruction(10_u128).unwrap(), + vec![1, 2], + private_account_nonces.to_vec(), + vec![ + ( + sender_keys.npk(), + SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), + ), + ( + recipient_keys.npk(), + SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), + ), + ], + vec![sender_keys.nsk], + vec![Some((0, vec![]))], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn circuit_fails_if_insufficient_keys_are_provided() { + let program = Program::simple_balance_transfer(); + let sender_keys = test_private_account_keys_1(); + let private_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + &sender_keys.npk(), + ); + let private_account_2 = + AccountWithMetadata::new(Account::default(), false, AccountId::new([1; 32])); + + // Setting only one key for an execution with two private accounts. + let private_account_keys = [( + sender_keys.npk(), + SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), + )]; + let result = execute_and_prove( + vec![private_account_1, private_account_2], + Program::serialize_instruction(10_u128).unwrap(), + vec![1, 2], + vec![0xdead_beef1, 0xdead_beef2], + private_account_keys.to_vec(), + vec![sender_keys.nsk], + vec![Some((0, vec![]))], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn circuit_fails_if_insufficient_commitment_proofs_are_provided() { + let program = Program::simple_balance_transfer(); + let sender_keys = test_private_account_keys_1(); + let recipient_keys = test_private_account_keys_2(); + let private_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + &sender_keys.npk(), + ); + let private_account_2 = + AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); + + // Setting no second commitment proof. + let private_account_membership_proofs = [Some((0, vec![]))]; + let result = execute_and_prove( + vec![private_account_1, private_account_2], + Program::serialize_instruction(10_u128).unwrap(), + vec![1, 2], + vec![0xdead_beef1, 0xdead_beef2], + vec![ + ( + sender_keys.npk(), + SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), + ), + ( + recipient_keys.npk(), + SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), + ), + ], + vec![sender_keys.nsk], + private_account_membership_proofs.to_vec(), + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn circuit_fails_if_insufficient_auth_keys_are_provided() { + let program = Program::simple_balance_transfer(); + let sender_keys = test_private_account_keys_1(); + let recipient_keys = test_private_account_keys_2(); + let private_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + &sender_keys.npk(), + ); + let private_account_2 = + AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); + + // Setting no auth key for an execution with one non default private accounts. + let private_account_nsks = []; + let result = execute_and_prove( + vec![private_account_1, private_account_2], + Program::serialize_instruction(10_u128).unwrap(), + vec![1, 2], + vec![0xdead_beef1, 0xdead_beef2], + vec![ + ( + sender_keys.npk(), + SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), + ), + ( + recipient_keys.npk(), + SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), + ), + ], + private_account_nsks.to_vec(), + vec![], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn circuit_fails_if_invalid_auth_keys_are_provided() { + let program = Program::simple_balance_transfer(); + let sender_keys = test_private_account_keys_1(); + let recipient_keys = test_private_account_keys_2(); + let private_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + &sender_keys.npk(), + ); + let private_account_2 = + AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); + + let private_account_keys = [ + // First private account is the sender + ( + sender_keys.npk(), + SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), + ), + // Second private account is the recipient + ( + recipient_keys.npk(), + SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), + ), + ]; + + // Setting the recipient key to authorize the sender. + // This should be set to the sender private account in + // a normal circumstance. The recipient can't authorize this. + let private_account_nsks = [recipient_keys.nsk]; + let private_account_membership_proofs = [Some((0, vec![]))]; + let result = execute_and_prove( + vec![private_account_1, private_account_2], + Program::serialize_instruction(10_u128).unwrap(), + vec![1, 2], + vec![0xdead_beef1, 0xdead_beef2], + private_account_keys.to_vec(), + private_account_nsks.to_vec(), + private_account_membership_proofs.to_vec(), + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn circuit_should_fail_if_new_private_account_with_non_default_balance_is_provided() { + let program = Program::simple_balance_transfer(); + let sender_keys = test_private_account_keys_1(); + let recipient_keys = test_private_account_keys_2(); + let private_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + &sender_keys.npk(), + ); + let private_account_2 = AccountWithMetadata::new( + Account { + // Non default balance + balance: 1, + ..Account::default() + }, + false, + &recipient_keys.npk(), + ); + + let result = execute_and_prove( + vec![private_account_1, private_account_2], + Program::serialize_instruction(10_u128).unwrap(), + vec![1, 2], + vec![0xdead_beef1, 0xdead_beef2], + vec![ + ( + sender_keys.npk(), + SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), + ), + ( + recipient_keys.npk(), + SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), + ), + ], + vec![sender_keys.nsk], + vec![Some((0, vec![]))], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn circuit_should_fail_if_new_private_account_with_non_default_program_owner_is_provided() { + let program = Program::simple_balance_transfer(); + let sender_keys = test_private_account_keys_1(); + let recipient_keys = test_private_account_keys_2(); + let private_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + &sender_keys.npk(), + ); + let private_account_2 = AccountWithMetadata::new( + Account { + // Non default program_owner + program_owner: [0, 1, 2, 3, 4, 5, 6, 7], + ..Account::default() + }, + false, + &recipient_keys.npk(), + ); + + let result = execute_and_prove( + vec![private_account_1, private_account_2], + Program::serialize_instruction(10_u128).unwrap(), + vec![1, 2], + vec![0xdead_beef1, 0xdead_beef2], + vec![ + ( + sender_keys.npk(), + SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), + ), + ( + recipient_keys.npk(), + SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), + ), + ], + vec![sender_keys.nsk], + vec![Some((0, vec![]))], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn circuit_should_fail_if_new_private_account_with_non_default_data_is_provided() { + let program = Program::simple_balance_transfer(); + let sender_keys = test_private_account_keys_1(); + let recipient_keys = test_private_account_keys_2(); + let private_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + &sender_keys.npk(), + ); + let private_account_2 = AccountWithMetadata::new( + Account { + // Non default data + data: b"hola mundo".to_vec().try_into().unwrap(), + ..Account::default() + }, + false, + &recipient_keys.npk(), + ); + + let result = execute_and_prove( + vec![private_account_1, private_account_2], + Program::serialize_instruction(10_u128).unwrap(), + vec![1, 2], + vec![0xdead_beef1, 0xdead_beef2], + vec![ + ( + sender_keys.npk(), + SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), + ), + ( + recipient_keys.npk(), + SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), + ), + ], + vec![sender_keys.nsk], + vec![Some((0, vec![]))], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn circuit_should_fail_if_new_private_account_with_non_default_nonce_is_provided() { + let program = Program::simple_balance_transfer(); + let sender_keys = test_private_account_keys_1(); + let recipient_keys = test_private_account_keys_2(); + let private_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + &sender_keys.npk(), + ); + let private_account_2 = AccountWithMetadata::new( + Account { + // Non default nonce + nonce: 0xdead_beef, + ..Account::default() + }, + false, + &recipient_keys.npk(), + ); + + let result = execute_and_prove( + vec![private_account_1, private_account_2], + Program::serialize_instruction(10_u128).unwrap(), + vec![1, 2], + vec![0xdead_beef1, 0xdead_beef2], + vec![ + ( + sender_keys.npk(), + SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), + ), + ( + recipient_keys.npk(), + SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), + ), + ], + vec![sender_keys.nsk], + vec![Some((0, vec![]))], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn circuit_should_fail_if_new_private_account_is_provided_with_default_values_but_marked_as_authorized() + { + let program = Program::simple_balance_transfer(); + let sender_keys = test_private_account_keys_1(); + let recipient_keys = test_private_account_keys_2(); + let private_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + &sender_keys.npk(), + ); + let private_account_2 = AccountWithMetadata::new( + Account::default(), + // This should be set to false in normal circumstances + true, + &recipient_keys.npk(), + ); + + let result = execute_and_prove( + vec![private_account_1, private_account_2], + Program::serialize_instruction(10_u128).unwrap(), + vec![1, 2], + vec![0xdead_beef1, 0xdead_beef2], + vec![ + ( + sender_keys.npk(), + SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), + ), + ( + recipient_keys.npk(), + SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), + ), + ], + vec![sender_keys.nsk], + vec![Some((0, vec![]))], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn circuit_should_fail_with_invalid_visibility_mask_value() { + let program = Program::simple_balance_transfer(); + let public_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + AccountId::new([0; 32]), + ); + let public_account_2 = + AccountWithMetadata::new(Account::default(), false, AccountId::new([1; 32])); + + let visibility_mask = [0, 3]; + let result = execute_and_prove( + vec![public_account_1, public_account_2], + Program::serialize_instruction(10_u128).unwrap(), + visibility_mask.to_vec(), + vec![], + vec![], + vec![], + vec![], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn circuit_should_fail_with_too_many_nonces() { + let program = Program::simple_balance_transfer(); + let sender_keys = test_private_account_keys_1(); + let recipient_keys = test_private_account_keys_2(); + let private_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + &sender_keys.npk(), + ); + let private_account_2 = + AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); + + // Setting three new private account nonces for a circuit execution with only two private + // accounts. + let private_account_nonces = [0xdead_beef1, 0xdead_beef2, 0xdead_beef3]; + let result = execute_and_prove( + vec![private_account_1, private_account_2], + Program::serialize_instruction(10_u128).unwrap(), + vec![1, 2], + private_account_nonces.to_vec(), + vec![ + ( + sender_keys.npk(), + SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), + ), + ( + recipient_keys.npk(), + SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), + ), + ], + vec![sender_keys.nsk], + vec![Some((0, vec![]))], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn circuit_should_fail_with_too_many_private_account_keys() { + let program = Program::simple_balance_transfer(); + let sender_keys = test_private_account_keys_1(); + let recipient_keys = test_private_account_keys_2(); + let private_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + &sender_keys.npk(), + ); + let private_account_2 = + AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); + + // Setting three private account keys for a circuit execution with only two private + // accounts. + let private_account_keys = [ + ( + sender_keys.npk(), + SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), + ), + ( + recipient_keys.npk(), + SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), + ), + ( + sender_keys.npk(), + SharedSecretKey::new(&[57; 32], &sender_keys.vpk()), + ), + ]; + let result = execute_and_prove( + vec![private_account_1, private_account_2], + Program::serialize_instruction(10_u128).unwrap(), + vec![1, 2], + vec![0xdead_beef1, 0xdead_beef2], + private_account_keys.to_vec(), + vec![sender_keys.nsk], + vec![Some((0, vec![]))], + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn circuit_should_fail_with_too_many_private_account_auth_keys() { + let program = Program::simple_balance_transfer(); + let sender_keys = test_private_account_keys_1(); + let recipient_keys = test_private_account_keys_2(); + let private_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + &sender_keys.npk(), + ); + let private_account_2 = + AccountWithMetadata::new(Account::default(), false, &recipient_keys.npk()); + + // Setting two private account keys for a circuit execution with only one non default + // private account (visibility mask equal to 1 means that auth keys are expected). + let visibility_mask = [1, 2]; + let private_account_nsks = [sender_keys.nsk, recipient_keys.nsk]; + let private_account_membership_proofs = [Some((0, vec![])), Some((1, vec![]))]; + let result = execute_and_prove( + vec![private_account_1, private_account_2], + Program::serialize_instruction(10_u128).unwrap(), + visibility_mask.to_vec(), + vec![0xdead_beef1, 0xdead_beef2], + vec![ + ( + sender_keys.npk(), + SharedSecretKey::new(&[55; 32], &sender_keys.vpk()), + ), + ( + recipient_keys.npk(), + SharedSecretKey::new(&[56; 32], &recipient_keys.vpk()), + ), + ], + private_account_nsks.to_vec(), + private_account_membership_proofs.to_vec(), + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn private_accounts_can_only_be_initialized_once() { + let sender_keys = test_private_account_keys_1(); + let sender_private_account = Account { + program_owner: Program::authenticated_transfer_program().id(), + balance: 100, + nonce: 0xdead_beef, + data: Data::default(), + }; + let recipient_keys = test_private_account_keys_2(); + + let mut state = V02State::new_with_genesis_accounts(&[], &[]) + .with_private_account(&sender_keys, &sender_private_account); + + let balance_to_move = 37; + + let tx = private_balance_transfer_for_tests( + &sender_keys, + &sender_private_account, + &recipient_keys, + balance_to_move, + [0xcafe_cafe, 0xfeca_feca], + &state, + ); + + state + .transition_from_privacy_preserving_transaction(&tx) + .unwrap(); + + let sender_private_account = Account { + program_owner: Program::authenticated_transfer_program().id(), + balance: 100 - balance_to_move, + nonce: 0xcafe_cafe, + data: Data::default(), + }; + + let tx = private_balance_transfer_for_tests( + &sender_keys, + &sender_private_account, + &recipient_keys, + balance_to_move, + [0x1234, 0x5678], + &state, + ); + + let result = state.transition_from_privacy_preserving_transaction(&tx); + + assert!(matches!(result, Err(NssaError::InvalidInput(_)))); + let NssaError::InvalidInput(error_message) = result.err().unwrap() else { + panic!("Incorrect message error"); + }; + let expected_error_message = "Nullifier already seen".to_owned(); + assert_eq!(error_message, expected_error_message); + } + + #[test] + fn circuit_should_fail_if_there_are_repeated_ids() { + let program = Program::simple_balance_transfer(); + let sender_keys = test_private_account_keys_1(); + let private_account_1 = AccountWithMetadata::new( + Account { + program_owner: program.id(), + balance: 100, + ..Account::default() + }, + true, + &sender_keys.npk(), + ); + + let visibility_mask = [1, 1]; + let private_account_nsks = [sender_keys.nsk, sender_keys.nsk]; + let private_account_membership_proofs = [Some((1, vec![])), Some((1, vec![]))]; + let shared_secret = SharedSecretKey::new(&[55; 32], &sender_keys.vpk()); + let result = execute_and_prove( + vec![private_account_1.clone(), private_account_1], + Program::serialize_instruction(100_u128).unwrap(), + visibility_mask.to_vec(), + vec![0xdead_beef1, 0xdead_beef2], + vec![ + (sender_keys.npk(), shared_secret), + (sender_keys.npk(), shared_secret), + ], + private_account_nsks.to_vec(), + private_account_membership_proofs.to_vec(), + &program.into(), + ); + + assert!(matches!(result, Err(NssaError::CircuitProvingError(_)))); + } + + #[test] + fn claiming_mechanism() { + let program = Program::authenticated_transfer_program(); + let key = PrivateKey::try_new([1; 32]).unwrap(); + let account_id = AccountId::from(&PublicKey::new_from_private_key(&key)); + let initial_balance = 100; + let initial_data = [(account_id, initial_balance)]; + let mut state = + V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); + let from = account_id; + let from_key = key; + let to = AccountId::new([2; 32]); + let amount: u128 = 37; + + // Check the recipient is an uninitialized account + assert_eq!(state.get_account_by_id(to), Account::default()); + + let expected_recipient_post = Account { + program_owner: program.id(), + balance: amount, + ..Account::default() + }; + + let message = + public_transaction::Message::try_new(program.id(), vec![from, to], vec![0], amount) + .unwrap(); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[&from_key]); + let tx = PublicTransaction::new(message, witness_set); + + state.transition_from_public_transaction(&tx).unwrap(); + + let recipient_post = state.get_account_by_id(to); + + assert_eq!(recipient_post, expected_recipient_post); + } + + #[test] + fn public_chained_call() { + let program = Program::chain_caller(); + let key = PrivateKey::try_new([1; 32]).unwrap(); + let from = AccountId::from(&PublicKey::new_from_private_key(&key)); + let to = AccountId::new([2; 32]); + let initial_balance = 1000; + let initial_data = [(from, initial_balance), (to, 0)]; + let mut state = + V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); + let from_key = key; + let amount: u128 = 37; + let instruction: (u128, ProgramId, u32, Option) = ( + amount, + Program::authenticated_transfer_program().id(), + 2, + None, + ); + + let expected_to_post = Account { + program_owner: Program::authenticated_transfer_program().id(), + balance: amount * 2, // The `chain_caller` chains the program twice + ..Account::default() + }; + + let message = public_transaction::Message::try_new( + program.id(), + vec![to, from], // The chain_caller program permutes the account order in the chain + // call + vec![0], + instruction, + ) + .unwrap(); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[&from_key]); + let tx = PublicTransaction::new(message, witness_set); + + state.transition_from_public_transaction(&tx).unwrap(); + + let from_post = state.get_account_by_id(from); + let to_post = state.get_account_by_id(to); + // The `chain_caller` program calls the program twice + assert_eq!(from_post.balance, initial_balance - 2 * amount); + assert_eq!(to_post, expected_to_post); + } + + #[test] + fn execution_fails_if_chained_calls_exceeds_depth() { + let program = Program::chain_caller(); + let key = PrivateKey::try_new([1; 32]).unwrap(); + let from = AccountId::from(&PublicKey::new_from_private_key(&key)); + let to = AccountId::new([2; 32]); + let initial_balance = 100; + let initial_data = [(from, initial_balance), (to, 0)]; + let mut state = + V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); + let from_key = key; + let amount: u128 = 0; + let instruction: (u128, ProgramId, u32, Option) = ( + amount, + Program::authenticated_transfer_program().id(), + u32::try_from(MAX_NUMBER_CHAINED_CALLS).expect("MAX_NUMBER_CHAINED_CALLS fits in u32") + + 1, + None, + ); + + let message = public_transaction::Message::try_new( + program.id(), + vec![to, from], // The chain_caller program permutes the account order in the chain + // call + vec![0], + instruction, + ) + .unwrap(); + let witness_set = public_transaction::WitnessSet::for_message(&message, &[&from_key]); + let tx = PublicTransaction::new(message, witness_set); + + let result = state.transition_from_public_transaction(&tx); + assert!(matches!( + result, + Err(NssaError::MaxChainedCallsDepthExceeded) + )); + } + fn state_for_amm_tests() -> V02State { let initial_data = []; let mut state = @@ -3232,7 +3248,7 @@ pub mod tests { } #[test] - fn test_simple_amm_remove() { + fn simple_amm_remove() { let mut state = state_for_amm_tests(); let instruction = amm_core::Instruction::RemoveLiquidity { @@ -3291,7 +3307,7 @@ pub mod tests { } #[test] - fn test_simple_amm_new_definition_inactive_initialized_pool_and_uninit_user_lp() { + fn simple_amm_new_definition_inactive_initialized_pool_and_uninit_user_lp() { let mut state = state_for_amm_tests_with_new_def(); // Uninitialized in constructor @@ -3371,7 +3387,7 @@ pub mod tests { } #[test] - fn test_simple_amm_new_definition_inactive_initialized_pool_init_user_lp() { + fn simple_amm_new_definition_inactive_initialized_pool_init_user_lp() { let mut state = state_for_amm_tests_with_new_def(); // Uninitialized in constructor @@ -3455,7 +3471,7 @@ pub mod tests { } #[test] - fn test_simple_amm_new_definition_uninitialized_pool() { + fn simple_amm_new_definition_uninitialized_pool() { let mut state = state_for_amm_tests_with_new_def(); // Uninitialized in constructor @@ -3527,7 +3543,7 @@ pub mod tests { } #[test] - fn test_simple_amm_add() { + fn simple_amm_add() { env_logger::init(); let mut state = state_for_amm_tests(); @@ -3590,7 +3606,7 @@ pub mod tests { } #[test] - fn test_simple_amm_swap_1() { + fn simple_amm_swap_1() { let mut state = state_for_amm_tests(); let instruction = amm_core::Instruction::Swap { @@ -3641,7 +3657,7 @@ pub mod tests { } #[test] - fn test_simple_amm_swap_2() { + fn simple_amm_swap_2() { let mut state = state_for_amm_tests(); let instruction = amm_core::Instruction::Swap { @@ -3691,7 +3707,7 @@ pub mod tests { } #[test] - fn test_execution_that_requires_authentication_of_a_program_derived_account_id_succeeds() { + fn execution_that_requires_authentication_of_a_program_derived_account_id_succeeds() { let chain_caller = Program::chain_caller(); let pda_seed = PdaSeed::new([37; 32]); let from = AccountId::from((&chain_caller.id(), &pda_seed)); @@ -3733,7 +3749,7 @@ pub mod tests { } #[test] - fn test_claiming_mechanism_within_chain_call() { + fn claiming_mechanism_within_chain_call() { // This test calls the authenticated transfer program through the chain_caller program. // The transfer is made from an initialized sender to an uninitialized recipient. And // it is expected that the recipient account is claimed by the authenticated transfer @@ -3790,7 +3806,7 @@ pub mod tests { #[test_case::test_case(1; "single call")] #[test_case::test_case(2; "two calls")] - fn test_private_chained_call(number_of_calls: u32) { + fn private_chained_call(number_of_calls: u32) { // Arrange let chain_caller = Program::chain_caller(); let auth_transfers = Program::authenticated_transfer_program(); @@ -3907,7 +3923,7 @@ pub mod tests { } #[test] - fn test_pda_mechanism_with_pinata_token_program() { + fn pda_mechanism_with_pinata_token_program() { let pinata_token = Program::pinata_token(); let token = Program::token(); @@ -3986,7 +4002,7 @@ pub mod tests { } #[test] - fn test_claiming_mechanism_cannot_claim_initialied_accounts() { + fn claiming_mechanism_cannot_claim_initialied_accounts() { let claimer = Program::claimer(); let mut state = V02State::new_with_genesis_accounts(&[], &[]).with_test_programs(); let account_id = AccountId::new([2; 32]); @@ -4014,7 +4030,7 @@ pub mod tests { /// This test ensures that even if a malicious program tries to perform overflow of balances /// it will not be able to break the balance validation. #[test] - fn test_malicious_program_cannot_break_balance_validation() { + fn malicious_program_cannot_break_balance_validation() { let sender_key = PrivateKey::try_new([37; 32]).unwrap(); let sender_id = AccountId::from(&PublicKey::new_from_private_key(&sender_key)); let sender_init_balance: u128 = 10; @@ -4077,7 +4093,7 @@ pub mod tests { } #[test] - fn test_private_authorized_uninitialized_account() { + fn private_authorized_uninitialized_account() { let mut state = V02State::new_with_genesis_accounts(&[], &[]); // Set up keys for the authorized private account @@ -4132,7 +4148,7 @@ pub mod tests { } #[test] - fn test_private_account_claimed_then_used_without_init_flag_should_fail() { + fn private_account_claimed_then_used_without_init_flag_should_fail() { let mut state = V02State::new_with_genesis_accounts(&[], &[]).with_test_programs(); // Set up keys for the private account @@ -4216,7 +4232,7 @@ pub mod tests { } #[test] - fn test_public_changer_claimer_no_data_change_no_claim_succeeds() { + fn public_changer_claimer_no_data_change_no_claim_succeeds() { let initial_data = []; let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); @@ -4240,7 +4256,7 @@ pub mod tests { } #[test] - fn test_public_changer_claimer_data_change_no_claim_fails() { + fn public_changer_claimer_data_change_no_claim_fails() { let initial_data = []; let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); @@ -4263,7 +4279,7 @@ pub mod tests { } #[test] - fn test_private_changer_claimer_no_data_change_no_claim_succeeds() { + fn private_changer_claimer_no_data_change_no_claim_succeeds() { let program = Program::changer_claimer(); let sender_keys = test_private_account_keys_1(); let private_account = @@ -4290,7 +4306,7 @@ pub mod tests { } #[test] - fn test_private_changer_claimer_data_change_no_claim_fails() { + fn private_changer_claimer_data_change_no_claim_fails() { let program = Program::changer_claimer(); let sender_keys = test_private_account_keys_1(); let private_account = @@ -4318,7 +4334,7 @@ pub mod tests { } #[test] - fn test_malicious_authorization_changer_should_fail_in_privacy_preserving_circuit() { + fn malicious_authorization_changer_should_fail_in_privacy_preserving_circuit() { // Arrange let malicious_program = Program::malicious_authorization_changer(); let auth_transfers = Program::authenticated_transfer_program(); @@ -4345,7 +4361,7 @@ pub mod tests { ) .with_test_programs(); - let balance_to_transfer = 10u128; + let balance_to_transfer = 10_u128; let instruction = (balance_to_transfer, auth_transfers.id()); let recipient_esk = [3; 32]; @@ -4374,10 +4390,10 @@ pub mod tests { } #[test] - fn test_state_serialization_roundtrip() { + fn state_serialization_roundtrip() { let account_id_1 = AccountId::new([1; 32]); let account_id_2 = AccountId::new([2; 32]); - let initial_data = [(account_id_1, 100u128), (account_id_2, 151u128)]; + let initial_data = [(account_id_1, 100_u128), (account_id_2, 151_u128)]; let state = V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); let bytes = borsh::to_vec(&state).unwrap(); let state_from_bytes: V02State = borsh::from_slice(&bytes).unwrap(); diff --git a/program_methods/guest/src/bin/authenticated_transfer.rs b/program_methods/guest/src/bin/authenticated_transfer.rs index 43f06c56..7835f733 100644 --- a/program_methods/guest/src/bin/authenticated_transfer.rs +++ b/program_methods/guest/src/bin/authenticated_transfer.rs @@ -31,24 +31,24 @@ fn transfer( // Continue only if the sender has authorized this operation assert!(sender.is_authorized, "Sender must be authorized"); - // Continue only if the sender has enough balance - assert!( - sender.account.balance >= balance_to_move, - "Sender has insufficient balance" - ); - // Create accounts post states, with updated balances let sender_post = { // Modify sender's balance let mut sender_post_account = sender.account; - sender_post_account.balance -= balance_to_move; + sender_post_account.balance = sender_post_account + .balance + .checked_sub(balance_to_move) + .expect("Sender has insufficient balance"); AccountPostState::new(sender_post_account) }; let recipient_post = { // Modify recipient's balance let mut recipient_post_account = recipient.account; - recipient_post_account.balance += balance_to_move; + recipient_post_account.balance = recipient_post_account + .balance + .checked_add(balance_to_move) + .expect("Recipient balance overflow"); // Claim recipient account if it has default program owner if recipient_post_account.program_owner == DEFAULT_PROGRAM_ID { diff --git a/program_methods/guest/src/bin/pinata.rs b/program_methods/guest/src/bin/pinata.rs index 70d76db2..fd19fb4c 100644 --- a/program_methods/guest/src/bin/pinata.rs +++ b/program_methods/guest/src/bin/pinata.rs @@ -1,5 +1,5 @@ use nssa_core::program::{AccountPostState, ProgramInput, read_nssa_inputs, write_nssa_outputs}; -use risc0_zkvm::sha::{Impl, Sha256}; +use risc0_zkvm::sha::{Impl, Sha256 as _}; const PRIZE: u128 = 150; @@ -28,7 +28,7 @@ impl Challenge { bytes[..32].copy_from_slice(&self.seed); bytes[32..].copy_from_slice(&solution.to_le_bytes()); let digest: [u8; 32] = Impl::hash_bytes(&bytes).as_bytes().try_into().unwrap(); - let difficulty = self.difficulty as usize; + let difficulty = usize::from(self.difficulty); digest[..difficulty].iter().all(|&b| b == 0) } @@ -64,13 +64,19 @@ fn main() { let mut pinata_post = pinata.account.clone(); let mut winner_post = winner.account.clone(); - pinata_post.balance -= PRIZE; + pinata_post.balance = pinata_post + .balance + .checked_sub(PRIZE) + .expect("Not enough balance in the pinata"); pinata_post.data = data .next_data() .to_vec() .try_into() .expect("33 bytes should fit into Data"); - winner_post.balance += PRIZE; + winner_post.balance = winner_post + .balance + .checked_add(PRIZE) + .expect("Overflow when adding prize to winner"); write_nssa_outputs( instruction_words, diff --git a/program_methods/guest/src/bin/pinata_token.rs b/program_methods/guest/src/bin/pinata_token.rs index e0b269a4..4089e6e0 100644 --- a/program_methods/guest/src/bin/pinata_token.rs +++ b/program_methods/guest/src/bin/pinata_token.rs @@ -5,7 +5,7 @@ use nssa_core::{ write_nssa_outputs_with_chained_call, }, }; -use risc0_zkvm::sha::{Impl, Sha256}; +use risc0_zkvm::sha::{Impl, Sha256 as _}; const PRIZE: u128 = 150; @@ -34,7 +34,7 @@ impl Challenge { bytes[..32].copy_from_slice(&self.seed); bytes[32..].copy_from_slice(&solution.to_le_bytes()); let digest: [u8; 32] = Impl::hash_bytes(&bytes).as_bytes().try_into().unwrap(); - let difficulty = self.difficulty as usize; + let difficulty = usize::from(self.difficulty); digest[..difficulty].iter().all(|&b| b == 0) } diff --git a/program_methods/guest/src/bin/privacy_preserving_circuit.rs b/program_methods/guest/src/bin/privacy_preserving_circuit.rs index 51dd4c4c..f4b3e6c9 100644 --- a/program_methods/guest/src/bin/privacy_preserving_circuit.rs +++ b/program_methods/guest/src/bin/privacy_preserving_circuit.rs @@ -16,31 +16,6 @@ use nssa_core::{ }; use risc0_zkvm::{guest::env, serde::to_vec}; -fn main() { - let PrivacyPreservingCircuitInput { - program_outputs, - visibility_mask, - private_account_nonces, - private_account_keys, - private_account_nsks, - private_account_membership_proofs, - program_id, - } = env::read(); - - let execution_state = ExecutionState::derive_from_outputs(program_id, program_outputs); - - let output = compute_circuit_output( - execution_state, - &visibility_mask, - &private_account_nonces, - &private_account_keys, - &private_account_nsks, - &private_account_membership_proofs, - ); - - env::commit(&output); -} - /// State of the involved accounts before and after program execution. struct ExecutionState { pre_states: Vec, @@ -117,7 +92,9 @@ impl ExecutionState { program_output.pre_states, program_output.post_states, ); - chain_calls_counter += 1; + chain_calls_counter = chain_calls_counter.checked_add(1).expect( + "Chain calls counter should not overflow as it checked before incrementing", + ); } assert!( @@ -249,10 +226,10 @@ fn compute_circuit_output( let mut private_membership_proofs_iter = private_account_membership_proofs.iter(); let mut output_index = 0; - for (visibility_mask, (pre_state, post_state)) in + for (account_visibility_mask, (pre_state, post_state)) in visibility_mask.iter().copied().zip(states_iter) { - match visibility_mask { + match account_visibility_mask { 0 => { // Public account output.public_pre_states.push(pre_state); @@ -269,7 +246,7 @@ fn compute_circuit_output( "AccountId mismatch" ); - let new_nullifier = if visibility_mask == 1 { + let new_nullifier = if account_visibility_mask == 1 { // Private account with authentication let Some(nsk) = private_nsks_iter.next() else { @@ -347,7 +324,10 @@ fn compute_circuit_output( output.new_commitments.push(commitment_post); output.ciphertexts.push(encrypted_account); - output_index += 1; + output_index = match output_index.checked_add(1) { + Some(val) => val, + None => panic!("Too many private accounts, output index overflow"), + } } _ => panic!("Invalid visibility mask value"), } @@ -402,3 +382,28 @@ fn compute_nullifier_and_set_digest( }, ) } + +fn main() { + let PrivacyPreservingCircuitInput { + program_outputs, + visibility_mask, + private_account_nonces, + private_account_keys, + private_account_nsks, + private_account_membership_proofs, + program_id, + } = env::read(); + + let execution_state = ExecutionState::derive_from_outputs(program_id, program_outputs); + + let output = compute_circuit_output( + execution_state, + &visibility_mask, + &private_account_nonces, + &private_account_keys, + &private_account_nsks, + &private_account_membership_proofs, + ); + + env::commit(&output); +} diff --git a/programs/amm/core/src/lib.rs b/programs/amm/core/src/lib.rs index 128460a2..d499ae9f 100644 --- a/programs/amm/core/src/lib.rs +++ b/programs/amm/core/src/lib.rs @@ -130,7 +130,7 @@ pub fn compute_pool_pda_seed( definition_token_a_id: AccountId, definition_token_b_id: AccountId, ) -> PdaSeed { - use risc0_zkvm::sha::{Impl, Sha256}; + use risc0_zkvm::sha::{Impl, Sha256 as _}; let (token_1, token_2) = match definition_token_a_id .value() @@ -167,7 +167,7 @@ pub fn compute_vault_pda( #[must_use] pub fn compute_vault_pda_seed(pool_id: AccountId, definition_token_id: AccountId) -> PdaSeed { - use risc0_zkvm::sha::{Impl, Sha256}; + use risc0_zkvm::sha::{Impl, Sha256 as _}; let mut bytes = [0; 64]; bytes[0..32].copy_from_slice(&pool_id.to_bytes()); @@ -188,7 +188,7 @@ pub fn compute_liquidity_token_pda(amm_program_id: ProgramId, pool_id: AccountId #[must_use] pub fn compute_liquidity_token_pda_seed(pool_id: AccountId) -> PdaSeed { - use risc0_zkvm::sha::{Impl, Sha256}; + use risc0_zkvm::sha::{Impl, Sha256 as _}; let mut bytes = [0; 64]; bytes[0..32].copy_from_slice(&pool_id.to_bytes()); diff --git a/programs/amm/src/lib.rs b/programs/amm/src/lib.rs index e50c738e..6142eda6 100644 --- a/programs/amm/src/lib.rs +++ b/programs/amm/src/lib.rs @@ -1,5 +1,12 @@ //! The AMM Program implementation. +#![expect( + clippy::arithmetic_side_effects, + clippy::integer_division, + clippy::integer_division_remainder_used, + reason = "TODO: Fix later" +)] + pub use amm_core as core; pub mod add; diff --git a/programs/amm/src/new_definition.rs b/programs/amm/src/new_definition.rs index b3642349..83b4a3ad 100644 --- a/programs/amm/src/new_definition.rs +++ b/programs/amm/src/new_definition.rs @@ -103,7 +103,7 @@ pub fn new_definition( liquidity_pool_supply: initial_lp, reserve_a: token_a_amount.into(), reserve_b: token_b_amount.into(), - fees: 0u128, // TODO: we assume all fees are 0 for now. + fees: 0_u128, // TODO: we assume all fees are 0 for now. active: true, }; diff --git a/programs/amm/src/tests.rs b/programs/amm/src/tests.rs index 203e3284..6bb7cc1f 100644 --- a/programs/amm/src/tests.rs +++ b/programs/amm/src/tests.rs @@ -410,7 +410,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::user_token_a_balance(), @@ -426,7 +426,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::user_token_b_balance(), @@ -442,7 +442,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::vault_a_reserve_init(), @@ -458,7 +458,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::vault_b_reserve_init(), @@ -474,7 +474,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::vault_a_reserve_high(), @@ -490,7 +490,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::vault_b_reserve_high(), @@ -506,7 +506,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::vault_a_reserve_low(), @@ -522,7 +522,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::vault_b_reserve_low(), @@ -538,7 +538,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: 0, @@ -554,7 +554,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: 0, @@ -570,7 +570,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenDefinition::Fungible { name: String::from("test"), total_supply: BalanceForTests::lp_supply_init(), @@ -587,7 +587,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenDefinition::Fungible { name: String::from("test"), total_supply: BalanceForTests::lp_supply_init(), @@ -604,7 +604,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_lp_definition_id(), balance: 0, @@ -620,7 +620,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_lp_definition_id(), balance: BalanceForTests::user_token_lp_balance(), @@ -636,7 +636,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: ProgramId::default(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -646,7 +646,7 @@ impl AccountForTests { liquidity_pool_supply: BalanceForTests::lp_supply_init(), reserve_a: BalanceForTests::vault_a_reserve_init(), reserve_b: BalanceForTests::vault_b_reserve_init(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -660,7 +660,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: ProgramId::default(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -670,7 +670,7 @@ impl AccountForTests { liquidity_pool_supply: BalanceForTests::lp_supply_init(), reserve_a: 0, reserve_b: BalanceForTests::vault_b_reserve_init(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -684,7 +684,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: ProgramId::default(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -694,7 +694,7 @@ impl AccountForTests { liquidity_pool_supply: BalanceForTests::lp_supply_init(), reserve_a: BalanceForTests::vault_a_reserve_init(), reserve_b: 0, - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -708,7 +708,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: ProgramId::default(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -718,7 +718,7 @@ impl AccountForTests { liquidity_pool_supply: BalanceForTests::vault_a_reserve_low(), reserve_a: BalanceForTests::vault_a_reserve_low(), reserve_b: BalanceForTests::vault_b_reserve_high(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -732,7 +732,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: ProgramId::default(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -742,7 +742,7 @@ impl AccountForTests { liquidity_pool_supply: BalanceForTests::vault_a_reserve_high(), reserve_a: BalanceForTests::vault_a_reserve_high(), reserve_b: BalanceForTests::vault_b_reserve_low(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -756,7 +756,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: ProgramId::default(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -766,7 +766,7 @@ impl AccountForTests { liquidity_pool_supply: BalanceForTests::lp_supply_init(), reserve_a: BalanceForTests::vault_a_swap_test_1(), reserve_b: BalanceForTests::vault_b_swap_test_1(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -780,7 +780,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: ProgramId::default(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -790,7 +790,7 @@ impl AccountForTests { liquidity_pool_supply: BalanceForTests::lp_supply_init(), reserve_a: BalanceForTests::vault_a_swap_test_2(), reserve_b: BalanceForTests::vault_b_swap_test_2(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -804,7 +804,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: ProgramId::default(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -814,7 +814,7 @@ impl AccountForTests { liquidity_pool_supply: BalanceForTests::vault_a_reserve_low(), reserve_a: BalanceForTests::vault_a_reserve_init(), reserve_b: BalanceForTests::vault_b_reserve_init(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -828,7 +828,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: ProgramId::default(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -838,7 +838,7 @@ impl AccountForTests { liquidity_pool_supply: 989, reserve_a: BalanceForTests::vault_a_add_successful(), reserve_b: BalanceForTests::vault_b_add_successful(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -852,7 +852,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: ProgramId::default(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -862,7 +862,7 @@ impl AccountForTests { liquidity_pool_supply: 607, reserve_a: BalanceForTests::vault_a_remove_successful(), reserve_b: BalanceForTests::vault_b_remove_successful(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -876,7 +876,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: ProgramId::default(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -886,7 +886,7 @@ impl AccountForTests { liquidity_pool_supply: BalanceForTests::lp_supply_init(), reserve_a: BalanceForTests::vault_a_reserve_init(), reserve_b: BalanceForTests::vault_b_reserve_init(), - fees: 0u128, + fees: 0_u128, active: false, }), nonce: 0, @@ -900,7 +900,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: ProgramId::default(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -910,7 +910,7 @@ impl AccountForTests { liquidity_pool_supply: BalanceForTests::lp_supply_init(), reserve_a: BalanceForTests::vault_a_reserve_init(), reserve_b: BalanceForTests::vault_b_reserve_init(), - fees: 0u128, + fees: 0_u128, active: false, }), nonce: 0, @@ -924,7 +924,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_a_definition_id(), balance: BalanceForTests::vault_a_reserve_init(), @@ -940,7 +940,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::token_b_definition_id(), balance: BalanceForTests::vault_b_reserve_init(), @@ -956,7 +956,7 @@ impl AccountForTests { AccountWithMetadata { account: Account { program_owner: ProgramId::default(), - balance: 0u128, + balance: 0_u128, data: Data::from(&PoolDefinition { definition_token_a_id: IdForTests::token_a_definition_id(), definition_token_b_id: IdForTests::token_b_definition_id(), @@ -966,7 +966,7 @@ impl AccountForTests { liquidity_pool_supply: BalanceForTests::lp_supply_init(), reserve_a: BalanceForTests::vault_a_reserve_init(), reserve_b: BalanceForTests::vault_b_reserve_init(), - fees: 0u128, + fees: 0_u128, active: true, }), nonce: 0, @@ -978,7 +978,7 @@ impl AccountForTests { } #[test] -fn test_pool_pda_produces_unique_id_for_token_pair() { +fn pool_pda_produces_unique_id_for_token_pair() { assert!( amm_core::compute_pool_pda( AMM_PROGRAM_ID, @@ -994,7 +994,7 @@ fn test_pool_pda_produces_unique_id_for_token_pair() { #[should_panic(expected = "Vault A was not provided")] #[test] -fn test_call_add_liquidity_vault_a_omitted() { +fn call_add_liquidity_vault_a_omitted() { let _post_states = add_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_with_wrong_id(), @@ -1011,7 +1011,7 @@ fn test_call_add_liquidity_vault_a_omitted() { #[should_panic(expected = "Vault B was not provided")] #[test] -fn test_call_add_liquidity_vault_b_omitted() { +fn call_add_liquidity_vault_b_omitted() { let _post_states = add_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1028,7 +1028,7 @@ fn test_call_add_liquidity_vault_b_omitted() { #[should_panic(expected = "LP definition mismatch")] #[test] -fn test_call_add_liquidity_lp_definition_mismatch() { +fn call_add_liquidity_lp_definition_mismatch() { let _post_states = add_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1045,7 +1045,7 @@ fn test_call_add_liquidity_lp_definition_mismatch() { #[should_panic(expected = "Both max-balances must be nonzero")] #[test] -fn test_call_add_liquidity_zero_balance_1() { +fn call_add_liquidity_zero_balance_1() { let _post_states = add_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1062,7 +1062,7 @@ fn test_call_add_liquidity_zero_balance_1() { #[should_panic(expected = "Both max-balances must be nonzero")] #[test] -fn test_call_add_liquidity_zero_balance_2() { +fn call_add_liquidity_zero_balance_2() { let _post_states = add_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1079,7 +1079,7 @@ fn test_call_add_liquidity_zero_balance_2() { #[should_panic(expected = "Vaults' balances must be at least the reserve amounts")] #[test] -fn test_call_add_liquidity_vault_insufficient_balance_1() { +fn call_add_liquidity_vault_insufficient_balance_1() { let _post_states = add_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init_zero(), @@ -1096,7 +1096,7 @@ fn test_call_add_liquidity_vault_insufficient_balance_1() { #[should_panic(expected = "Vaults' balances must be at least the reserve amounts")] #[test] -fn test_call_add_liquidity_vault_insufficient_balance_2() { +fn call_add_liquidity_vault_insufficient_balance_2() { let _post_states = add_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1113,7 +1113,7 @@ fn test_call_add_liquidity_vault_insufficient_balance_2() { #[should_panic(expected = "A trade amount is 0")] #[test] -fn test_call_add_liquidity_actual_amount_zero_1() { +fn call_add_liquidity_actual_amount_zero_1() { let _post_states = add_liquidity( AccountForTests::pool_definition_init_reserve_a_low(), AccountForTests::vault_a_init_low(), @@ -1130,7 +1130,7 @@ fn test_call_add_liquidity_actual_amount_zero_1() { #[should_panic(expected = "A trade amount is 0")] #[test] -fn test_call_add_liquidity_actual_amount_zero_2() { +fn call_add_liquidity_actual_amount_zero_2() { let _post_states = add_liquidity( AccountForTests::pool_definition_init_reserve_b_low(), AccountForTests::vault_a_init_high(), @@ -1147,7 +1147,7 @@ fn test_call_add_liquidity_actual_amount_zero_2() { #[should_panic(expected = "Reserves must be nonzero")] #[test] -fn test_call_add_liquidity_reserves_zero_1() { +fn call_add_liquidity_reserves_zero_1() { let _post_states = add_liquidity( AccountForTests::pool_definition_init_reserve_a_zero(), AccountForTests::vault_a_init(), @@ -1164,7 +1164,7 @@ fn test_call_add_liquidity_reserves_zero_1() { #[should_panic(expected = "Reserves must be nonzero")] #[test] -fn test_call_add_liquidity_reserves_zero_2() { +fn call_add_liquidity_reserves_zero_2() { let _post_states = add_liquidity( AccountForTests::pool_definition_init_reserve_b_zero(), AccountForTests::vault_a_init(), @@ -1181,7 +1181,7 @@ fn test_call_add_liquidity_reserves_zero_2() { #[should_panic(expected = "Payable LP must be nonzero")] #[test] -fn test_call_add_liquidity_payable_lp_zero() { +fn call_add_liquidity_payable_lp_zero() { let _post_states = add_liquidity( AccountForTests::pool_definition_add_zero_lp(), AccountForTests::vault_a_init(), @@ -1197,7 +1197,7 @@ fn test_call_add_liquidity_payable_lp_zero() { } #[test] -fn test_call_add_liquidity_chained_call_successsful() { +fn call_add_liquidity_chained_call_successsful() { let (post_states, chained_calls) = add_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1226,7 +1226,7 @@ fn test_call_add_liquidity_chained_call_successsful() { #[should_panic(expected = "Vault A was not provided")] #[test] -fn test_call_remove_liquidity_vault_a_omitted() { +fn call_remove_liquidity_vault_a_omitted() { let _post_states = remove_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_with_wrong_id(), @@ -1243,7 +1243,7 @@ fn test_call_remove_liquidity_vault_a_omitted() { #[should_panic(expected = "Vault B was not provided")] #[test] -fn test_call_remove_liquidity_vault_b_omitted() { +fn call_remove_liquidity_vault_b_omitted() { let _post_states = remove_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1260,7 +1260,7 @@ fn test_call_remove_liquidity_vault_b_omitted() { #[should_panic(expected = "LP definition mismatch")] #[test] -fn test_call_remove_liquidity_lp_def_mismatch() { +fn call_remove_liquidity_lp_def_mismatch() { let _post_states = remove_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1277,7 +1277,7 @@ fn test_call_remove_liquidity_lp_def_mismatch() { #[should_panic(expected = "Invalid liquidity account provided")] #[test] -fn test_call_remove_liquidity_insufficient_liquidity_amount() { +fn call_remove_liquidity_insufficient_liquidity_amount() { let _post_states = remove_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1297,7 +1297,7 @@ fn test_call_remove_liquidity_insufficient_liquidity_amount() { expected = "Insufficient minimal withdraw amount (Token A) provided for liquidity amount" )] #[test] -fn test_call_remove_liquidity_insufficient_balance_1() { +fn call_remove_liquidity_insufficient_balance_1() { let _post_states = remove_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1316,7 +1316,7 @@ fn test_call_remove_liquidity_insufficient_balance_1() { expected = "Insufficient minimal withdraw amount (Token B) provided for liquidity amount" )] #[test] -fn test_call_remove_liquidity_insufficient_balance_2() { +fn call_remove_liquidity_insufficient_balance_2() { let _post_states = remove_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1333,7 +1333,7 @@ fn test_call_remove_liquidity_insufficient_balance_2() { #[should_panic(expected = "Minimum withdraw amount must be nonzero")] #[test] -fn test_call_remove_liquidity_min_bal_zero_1() { +fn call_remove_liquidity_min_bal_zero_1() { let _post_states = remove_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1350,7 +1350,7 @@ fn test_call_remove_liquidity_min_bal_zero_1() { #[should_panic(expected = "Minimum withdraw amount must be nonzero")] #[test] -fn test_call_remove_liquidity_min_bal_zero_2() { +fn call_remove_liquidity_min_bal_zero_2() { let _post_states = remove_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1366,7 +1366,7 @@ fn test_call_remove_liquidity_min_bal_zero_2() { } #[test] -fn test_call_remove_liquidity_chained_call_successful() { +fn call_remove_liquidity_chained_call_successful() { let (post_states, chained_calls) = remove_liquidity( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1395,7 +1395,7 @@ fn test_call_remove_liquidity_chained_call_successful() { #[should_panic(expected = "Balances must be nonzero")] #[test] -fn test_call_new_definition_with_zero_balance_1() { +fn call_new_definition_with_zero_balance_1() { let _post_states = new_definition( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1412,7 +1412,7 @@ fn test_call_new_definition_with_zero_balance_1() { #[should_panic(expected = "Balances must be nonzero")] #[test] -fn test_call_new_definition_with_zero_balance_2() { +fn call_new_definition_with_zero_balance_2() { let _post_states = new_definition( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1429,7 +1429,7 @@ fn test_call_new_definition_with_zero_balance_2() { #[should_panic(expected = "Cannot set up a swap for a token with itself")] #[test] -fn test_call_new_definition_same_token_definition() { +fn call_new_definition_same_token_definition() { let _post_states = new_definition( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1446,7 +1446,7 @@ fn test_call_new_definition_same_token_definition() { #[should_panic(expected = "Liquidity pool Token Definition Account ID does not match PDA")] #[test] -fn test_call_new_definition_wrong_liquidity_id() { +fn call_new_definition_wrong_liquidity_id() { let _post_states = new_definition( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1463,7 +1463,7 @@ fn test_call_new_definition_wrong_liquidity_id() { #[should_panic(expected = "Pool Definition Account ID does not match PDA")] #[test] -fn test_call_new_definition_wrong_pool_id() { +fn call_new_definition_wrong_pool_id() { let _post_states = new_definition( AccountForTests::pool_definition_with_wrong_id(), AccountForTests::vault_a_init(), @@ -1480,7 +1480,7 @@ fn test_call_new_definition_wrong_pool_id() { #[should_panic(expected = "Vault ID does not match PDA")] #[test] -fn test_call_new_definition_wrong_vault_id_1() { +fn call_new_definition_wrong_vault_id_1() { let _post_states = new_definition( AccountForTests::pool_definition_init(), AccountForTests::vault_a_with_wrong_id(), @@ -1497,7 +1497,7 @@ fn test_call_new_definition_wrong_vault_id_1() { #[should_panic(expected = "Vault ID does not match PDA")] #[test] -fn test_call_new_definition_wrong_vault_id_2() { +fn call_new_definition_wrong_vault_id_2() { let _post_states = new_definition( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1514,7 +1514,7 @@ fn test_call_new_definition_wrong_vault_id_2() { #[should_panic(expected = "Cannot initialize an active Pool Definition")] #[test] -fn test_call_new_definition_cannot_initialize_active_pool() { +fn call_new_definition_cannot_initialize_active_pool() { let _post_states = new_definition( AccountForTests::pool_definition_active(), AccountForTests::vault_a_init(), @@ -1531,7 +1531,7 @@ fn test_call_new_definition_cannot_initialize_active_pool() { #[should_panic(expected = "Cannot initialize an active Pool Definition")] #[test] -fn test_call_new_definition_chained_call_successful() { +fn call_new_definition_chained_call_successful() { let (post_states, chained_calls) = new_definition( AccountForTests::pool_definition_active(), AccountForTests::vault_a_init(), @@ -1560,7 +1560,7 @@ fn test_call_new_definition_chained_call_successful() { #[should_panic(expected = "AccountId is not a token type for the pool")] #[test] -fn test_call_swap_incorrect_token_type() { +fn call_swap_incorrect_token_type() { let _post_states = swap( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1575,7 +1575,7 @@ fn test_call_swap_incorrect_token_type() { #[should_panic(expected = "Vault A was not provided")] #[test] -fn test_call_swap_vault_a_omitted() { +fn call_swap_vault_a_omitted() { let _post_states = swap( AccountForTests::pool_definition_init(), AccountForTests::vault_a_with_wrong_id(), @@ -1590,7 +1590,7 @@ fn test_call_swap_vault_a_omitted() { #[should_panic(expected = "Vault B was not provided")] #[test] -fn test_call_swap_vault_b_omitted() { +fn call_swap_vault_b_omitted() { let _post_states = swap( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1605,7 +1605,7 @@ fn test_call_swap_vault_b_omitted() { #[should_panic(expected = "Reserve for Token A exceeds vault balance")] #[test] -fn test_call_swap_reserves_vault_mismatch_1() { +fn call_swap_reserves_vault_mismatch_1() { let _post_states = swap( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init_low(), @@ -1620,7 +1620,7 @@ fn test_call_swap_reserves_vault_mismatch_1() { #[should_panic(expected = "Reserve for Token B exceeds vault balance")] #[test] -fn test_call_swap_reserves_vault_mismatch_2() { +fn call_swap_reserves_vault_mismatch_2() { let _post_states = swap( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1635,7 +1635,7 @@ fn test_call_swap_reserves_vault_mismatch_2() { #[should_panic(expected = "Pool is inactive")] #[test] -fn test_call_swap_ianctive() { +fn call_swap_ianctive() { let _post_states = swap( AccountForTests::pool_definition_inactive(), AccountForTests::vault_a_init(), @@ -1650,7 +1650,7 @@ fn test_call_swap_ianctive() { #[should_panic(expected = "Withdraw amount is less than minimal amount out")] #[test] -fn test_call_swap_below_min_out() { +fn call_swap_below_min_out() { let _post_states = swap( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1664,7 +1664,7 @@ fn test_call_swap_below_min_out() { } #[test] -fn test_call_swap_chained_call_successful_1() { +fn call_swap_chained_call_successful_1() { let (post_states, chained_calls) = swap( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1694,7 +1694,7 @@ fn test_call_swap_chained_call_successful_1() { } #[test] -fn test_call_swap_chained_call_successful_2() { +fn call_swap_chained_call_successful_2() { let (post_states, chained_calls) = swap( AccountForTests::pool_definition_init(), AccountForTests::vault_a_init(), @@ -1724,7 +1724,7 @@ fn test_call_swap_chained_call_successful_2() { } #[test] -fn test_new_definition_lp_asymmetric_amounts() { +fn new_definition_lp_asymmetric_amounts() { let (post_states, chained_calls) = new_definition( AccountForTests::pool_definition_inactive(), AccountForTests::vault_a_init(), @@ -1751,10 +1751,10 @@ fn test_new_definition_lp_asymmetric_amounts() { } #[test] -fn test_new_definition_lp_symmetric_amounts() { +fn new_definition_lp_symmetric_amounts() { // token_a=100, token_b=100 → LP=sqrt(10_000)=100 - let token_a_amount = 100u128; - let token_b_amount = 100u128; + let token_a_amount = 100_u128; + let token_b_amount = 100_u128; let expected_lp = (token_a_amount * token_b_amount).isqrt(); assert_eq!(expected_lp, 100); diff --git a/programs/token/src/new_definition.rs b/programs/token/src/new_definition.rs index 9ba61047..8da55dc1 100644 --- a/programs/token/src/new_definition.rs +++ b/programs/token/src/new_definition.rs @@ -106,7 +106,7 @@ pub fn new_definition_with_metadata( standard: metadata.standard, uri: metadata.uri, creators: metadata.creators, - primary_sale_date: 0u64, // TODO #261: future works to implement this + primary_sale_date: 0_u64, // TODO #261: future works to implement this }; let mut definition_target_account_post = definition_target_account.account; diff --git a/programs/token/src/print_nft.rs b/programs/token/src/print_nft.rs index 33793ee2..c7177a43 100644 --- a/programs/token/src/print_nft.rs +++ b/programs/token/src/print_nft.rs @@ -37,7 +37,7 @@ pub fn print_nft( *print_balance > 1, "Insufficient balance to print another NFT copy" ); - *print_balance -= 1; + *print_balance = print_balance.checked_sub(1).expect("Checked above"); let mut master_account_post = master_account.account; master_account_post.data = Data::from(&master_account_data); diff --git a/programs/token/src/tests.rs b/programs/token/src/tests.rs index cf95c4d4..db0aa1bb 100644 --- a/programs/token/src/tests.rs +++ b/programs/token/src/tests.rs @@ -1,4 +1,9 @@ #![cfg(test)] +#![expect( + clippy::shadow_unrelated, + clippy::arithmetic_side_effects, + reason = "We don't care about it in tests" +)] use nssa_core::account::{Account, AccountId, AccountWithMetadata, Data}; use token_core::{ @@ -25,8 +30,8 @@ impl AccountForTests { fn definition_account_auth() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenDefinition::Fungible { name: String::from("test"), total_supply: BalanceForTests::init_supply(), @@ -42,8 +47,8 @@ impl AccountForTests { fn definition_account_without_auth() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenDefinition::Fungible { name: String::from("test"), total_supply: BalanceForTests::init_supply(), @@ -59,8 +64,8 @@ impl AccountForTests { fn holding_different_definition() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::pool_definition_id_diff(), balance: BalanceForTests::holding_balance(), @@ -75,8 +80,8 @@ impl AccountForTests { fn holding_same_definition_with_authorization() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::pool_definition_id(), balance: BalanceForTests::holding_balance(), @@ -91,8 +96,8 @@ impl AccountForTests { fn holding_same_definition_without_authorization() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::pool_definition_id(), balance: BalanceForTests::holding_balance(), @@ -107,8 +112,8 @@ impl AccountForTests { fn holding_same_definition_without_authorization_overflow() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::pool_definition_id(), balance: BalanceForTests::init_supply(), @@ -123,8 +128,8 @@ impl AccountForTests { fn definition_account_post_burn() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenDefinition::Fungible { name: String::from("test"), total_supply: BalanceForTests::init_supply_burned(), @@ -140,8 +145,8 @@ impl AccountForTests { fn holding_account_post_burn() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::pool_definition_id(), balance: BalanceForTests::holding_balance_burned(), @@ -164,8 +169,8 @@ impl AccountForTests { fn init_mint() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [0u32; 8], - balance: 0u128, + program_owner: [0_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::pool_definition_id(), balance: BalanceForTests::mint_success(), @@ -180,8 +185,8 @@ impl AccountForTests { fn holding_account_same_definition_mint() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::pool_definition_id(), balance: BalanceForTests::holding_balance_mint(), @@ -196,8 +201,8 @@ impl AccountForTests { fn definition_account_mint() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenDefinition::Fungible { name: String::from("test"), total_supply: BalanceForTests::init_supply_mint(), @@ -213,8 +218,8 @@ impl AccountForTests { fn holding_same_definition_with_authorization_and_large_balance() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::pool_definition_id(), balance: BalanceForTests::mint_overflow(), @@ -229,8 +234,8 @@ impl AccountForTests { fn definition_account_with_authorization_nonfungible() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenDefinition::NonFungible { name: String::from("test"), printable_supply: BalanceForTests::printable_copies(), @@ -254,8 +259,8 @@ impl AccountForTests { fn holding_account_init() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::pool_definition_id(), balance: BalanceForTests::init_supply(), @@ -270,8 +275,8 @@ impl AccountForTests { fn definition_account_unclaimed() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [0u32; 8], - balance: 0u128, + program_owner: [0_u32; 8], + balance: 0_u128, data: Data::from(&TokenDefinition::Fungible { name: String::from("test"), total_supply: BalanceForTests::init_supply(), @@ -287,8 +292,8 @@ impl AccountForTests { fn holding_account_unclaimed() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [0u32; 8], - balance: 0u128, + program_owner: [0_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::pool_definition_id(), balance: BalanceForTests::init_supply(), @@ -303,8 +308,8 @@ impl AccountForTests { fn holding_account2_init() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::pool_definition_id(), balance: BalanceForTests::init_supply(), @@ -319,8 +324,8 @@ impl AccountForTests { fn holding_account2_init_post_transfer() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::pool_definition_id(), balance: BalanceForTests::recipient_post_transfer(), @@ -335,8 +340,8 @@ impl AccountForTests { fn holding_account_init_post_transfer() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::Fungible { definition_id: IdForTests::pool_definition_id(), balance: BalanceForTests::sender_post_transfer(), @@ -351,8 +356,8 @@ impl AccountForTests { fn holding_account_master_nft() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::NftMaster { definition_id: IdForTests::pool_definition_id(), print_balance: BalanceForTests::printable_copies(), @@ -367,8 +372,8 @@ impl AccountForTests { fn holding_account_master_nft_insufficient_balance() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::NftMaster { definition_id: IdForTests::pool_definition_id(), print_balance: 1, @@ -383,8 +388,8 @@ impl AccountForTests { fn holding_account_master_nft_after_print() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::NftMaster { definition_id: IdForTests::pool_definition_id(), print_balance: BalanceForTests::printable_copies() - 1, @@ -399,8 +404,8 @@ impl AccountForTests { fn holding_account_printed_nft() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [0u32; 8], - balance: 0u128, + program_owner: [0_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::NftPrintedCopy { definition_id: IdForTests::pool_definition_id(), owned: true, @@ -415,8 +420,8 @@ impl AccountForTests { fn holding_account_with_master_nft_transferred_to() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [0u32; 8], - balance: 0u128, + program_owner: [0_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::NftMaster { definition_id: IdForTests::pool_definition_id(), print_balance: BalanceForTests::printable_copies(), @@ -431,8 +436,8 @@ impl AccountForTests { fn holding_account_master_nft_post_transfer() -> AccountWithMetadata { AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, + program_owner: [5_u32; 8], + balance: 0_u128, data: Data::from(&TokenHolding::NftMaster { definition_id: IdForTests::pool_definition_id(), print_balance: 0, @@ -523,7 +528,7 @@ impl IdForTests { #[should_panic(expected = "Definition target account must have default values")] #[test] -fn test_new_definition_non_default_first_account_should_fail() { +fn new_definition_non_default_first_account_should_fail() { let definition_account = AccountWithMetadata { account: Account { program_owner: [1, 2, 3, 4, 5, 6, 7, 8], @@ -547,7 +552,7 @@ fn test_new_definition_non_default_first_account_should_fail() { #[should_panic(expected = "Holding target account must have default values")] #[test] -fn test_new_definition_non_default_second_account_should_fail() { +fn new_definition_non_default_second_account_should_fail() { let definition_account = AccountWithMetadata { account: Account::default(), is_authorized: true, @@ -570,7 +575,7 @@ fn test_new_definition_non_default_second_account_should_fail() { } #[test] -fn test_new_definition_with_valid_inputs_succeeds() { +fn new_definition_with_valid_inputs_succeeds() { let definition_account = AccountForTests::definition_account_uninit(); let holding_account = AccountForTests::holding_account_uninit(); @@ -595,7 +600,7 @@ fn test_new_definition_with_valid_inputs_succeeds() { #[should_panic(expected = "Sender and recipient definition id mismatch")] #[test] -fn test_transfer_with_different_definition_ids_should_fail() { +fn transfer_with_different_definition_ids_should_fail() { let sender = AccountForTests::holding_same_definition_with_authorization(); let recipient = AccountForTests::holding_different_definition(); let _post_states = transfer(sender, recipient, 10); @@ -603,7 +608,7 @@ fn test_transfer_with_different_definition_ids_should_fail() { #[should_panic(expected = "Insufficient balance")] #[test] -fn test_transfer_with_insufficient_balance_should_fail() { +fn transfer_with_insufficient_balance_should_fail() { let sender = AccountForTests::holding_same_definition_with_authorization(); let recipient = AccountForTests::holding_account_same_definition_mint(); // Attempt to transfer more than balance @@ -612,14 +617,14 @@ fn test_transfer_with_insufficient_balance_should_fail() { #[should_panic(expected = "Sender authorization is missing")] #[test] -fn test_transfer_without_sender_authorization_should_fail() { +fn transfer_without_sender_authorization_should_fail() { let sender = AccountForTests::holding_same_definition_without_authorization(); let recipient = AccountForTests::holding_account_uninit(); let _post_states = transfer(sender, recipient, 37); } #[test] -fn test_transfer_with_valid_inputs_succeeds() { +fn transfer_with_valid_inputs_succeeds() { let sender = AccountForTests::holding_account_init(); let recipient = AccountForTests::holding_account2_init(); let post_states = transfer(sender, recipient, BalanceForTests::transfer_amount()); @@ -637,7 +642,7 @@ fn test_transfer_with_valid_inputs_succeeds() { #[should_panic(expected = "Invalid balance for NFT Master transfer")] #[test] -fn test_transfer_with_master_nft_invalid_balance() { +fn transfer_with_master_nft_invalid_balance() { let sender = AccountForTests::holding_account_master_nft(); let recipient = AccountForTests::holding_account_uninit(); let _post_states = transfer(sender, recipient, BalanceForTests::transfer_amount()); @@ -645,14 +650,14 @@ fn test_transfer_with_master_nft_invalid_balance() { #[should_panic(expected = "Invalid balance in recipient account for NFT transfer")] #[test] -fn test_transfer_with_master_nft_invalid_recipient_balance() { +fn transfer_with_master_nft_invalid_recipient_balance() { let sender = AccountForTests::holding_account_master_nft(); let recipient = AccountForTests::holding_account_with_master_nft_transferred_to(); let _post_states = transfer(sender, recipient, BalanceForTests::printable_copies()); } #[test] -fn test_transfer_with_master_nft_success() { +fn transfer_with_master_nft_success() { let sender = AccountForTests::holding_account_master_nft(); let recipient = AccountForTests::holding_account_uninit(); let post_states = transfer(sender, recipient, BalanceForTests::printable_copies()); @@ -669,7 +674,7 @@ fn test_transfer_with_master_nft_success() { } #[test] -fn test_token_initialize_account_succeeds() { +fn token_initialize_account_succeeds() { let sender = AccountForTests::holding_account_init(); let recipient = AccountForTests::holding_account2_init(); let post_states = transfer(sender, recipient, BalanceForTests::transfer_amount()); @@ -687,7 +692,7 @@ fn test_token_initialize_account_succeeds() { #[test] #[should_panic(expected = "Mismatch Token Definition and Token Holding")] -fn test_burn_mismatch_def() { +fn burn_mismatch_def() { let definition_account = AccountForTests::definition_account_auth(); let holding_account = AccountForTests::holding_different_definition(); let _post_states = burn( @@ -699,7 +704,7 @@ fn test_burn_mismatch_def() { #[test] #[should_panic(expected = "Authorization is missing")] -fn test_burn_missing_authorization() { +fn burn_missing_authorization() { let definition_account = AccountForTests::definition_account_auth(); let holding_account = AccountForTests::holding_same_definition_without_authorization(); let _post_states = burn( @@ -711,7 +716,7 @@ fn test_burn_missing_authorization() { #[test] #[should_panic(expected = "Insufficient balance to burn")] -fn test_burn_insufficient_balance() { +fn burn_insufficient_balance() { let definition_account = AccountForTests::definition_account_auth(); let holding_account = AccountForTests::holding_same_definition_with_authorization(); let _post_states = burn( @@ -723,7 +728,7 @@ fn test_burn_insufficient_balance() { #[test] #[should_panic(expected = "Total supply underflow")] -fn test_burn_total_supply_underflow() { +fn burn_total_supply_underflow() { let definition_account = AccountForTests::definition_account_auth(); let holding_account = AccountForTests::holding_same_definition_with_authorization_and_large_balance(); @@ -735,7 +740,7 @@ fn test_burn_total_supply_underflow() { } #[test] -fn test_burn_success() { +fn burn_success() { let definition_account = AccountForTests::definition_account_auth(); let holding_account = AccountForTests::holding_same_definition_with_authorization(); let post_states = burn( @@ -758,7 +763,7 @@ fn test_burn_success() { #[test] #[should_panic(expected = "Holding account must be valid")] -fn test_mint_not_valid_holding_account() { +fn mint_not_valid_holding_account() { let definition_account = AccountForTests::definition_account_auth(); let holding_account = AccountForTests::definition_account_without_auth(); let _post_states = mint( @@ -770,7 +775,7 @@ fn test_mint_not_valid_holding_account() { #[test] #[should_panic(expected = "Definition account must be valid")] -fn test_mint_not_valid_definition_account() { +fn mint_not_valid_definition_account() { let definition_account = AccountForTests::holding_same_definition_with_authorization(); let holding_account = AccountForTests::holding_same_definition_without_authorization(); let _post_states = mint( @@ -782,7 +787,7 @@ fn test_mint_not_valid_definition_account() { #[test] #[should_panic(expected = "Definition authorization is missing")] -fn test_mint_missing_authorization() { +fn mint_missing_authorization() { let definition_account = AccountForTests::definition_account_without_auth(); let holding_account = AccountForTests::holding_same_definition_without_authorization(); let _post_states = mint( @@ -794,7 +799,7 @@ fn test_mint_missing_authorization() { #[test] #[should_panic(expected = "Mismatch Token Definition and Token Holding")] -fn test_mint_mismatched_token_definition() { +fn mint_mismatched_token_definition() { let definition_account = AccountForTests::definition_account_auth(); let holding_account = AccountForTests::holding_different_definition(); let _post_states = mint( @@ -805,7 +810,7 @@ fn test_mint_mismatched_token_definition() { } #[test] -fn test_mint_success() { +fn mint_success() { let definition_account = AccountForTests::definition_account_auth(); let holding_account = AccountForTests::holding_same_definition_without_authorization(); let post_states = mint( @@ -827,7 +832,7 @@ fn test_mint_success() { } #[test] -fn test_mint_uninit_holding_success() { +fn mint_uninit_holding_success() { let definition_account = AccountForTests::definition_account_auth(); let holding_account = AccountForTests::holding_account_uninit(); let post_states = mint( @@ -851,7 +856,7 @@ fn test_mint_uninit_holding_success() { #[test] #[should_panic(expected = "Total supply overflow")] -fn test_mint_total_supply_overflow() { +fn mint_total_supply_overflow() { let definition_account = AccountForTests::definition_account_auth(); let holding_account = AccountForTests::holding_same_definition_without_authorization(); let _post_states = mint( @@ -863,7 +868,7 @@ fn test_mint_total_supply_overflow() { #[test] #[should_panic(expected = "Balance overflow on minting")] -fn test_mint_holding_account_overflow() { +fn mint_holding_account_overflow() { let definition_account = AccountForTests::definition_account_auth(); let holding_account = AccountForTests::holding_same_definition_without_authorization_overflow(); let _post_states = mint( @@ -875,7 +880,7 @@ fn test_mint_holding_account_overflow() { #[test] #[should_panic(expected = "Cannot mint additional supply for Non-Fungible Tokens")] -fn test_mint_cannot_mint_unmintable_tokens() { +fn mint_cannot_mint_unmintable_tokens() { let definition_account = AccountForTests::definition_account_with_authorization_nonfungible(); let holding_account = AccountForTests::holding_account_master_nft(); let _post_states = mint( @@ -887,7 +892,7 @@ fn test_mint_cannot_mint_unmintable_tokens() { #[should_panic(expected = "Definition target account must have default values")] #[test] -fn test_call_new_definition_metadata_with_init_definition() { +fn call_new_definition_metadata_with_init_definition() { let definition_account = AccountForTests::definition_account_auth(); let metadata_account = AccountWithMetadata { account: Account::default(), @@ -901,12 +906,12 @@ fn test_call_new_definition_metadata_with_init_definition() { }; let new_definition = NewTokenDefinition::Fungible { name: String::from("test"), - total_supply: 15u128, + total_supply: 15_u128, }; let metadata = NewTokenMetadata { standard: MetadataStandard::Simple, - uri: "test_uri".to_string(), - creators: "test_creators".to_string(), + uri: "test_uri".to_owned(), + creators: "test_creators".to_owned(), }; let _post_states = new_definition_with_metadata( definition_account, @@ -919,7 +924,7 @@ fn test_call_new_definition_metadata_with_init_definition() { #[should_panic(expected = "Metadata target account must have default values")] #[test] -fn test_call_new_definition_metadata_with_init_metadata() { +fn call_new_definition_metadata_with_init_metadata() { let definition_account = AccountWithMetadata { account: Account::default(), is_authorized: true, @@ -933,12 +938,12 @@ fn test_call_new_definition_metadata_with_init_metadata() { let metadata_account = AccountForTests::holding_account_same_definition_mint(); let new_definition = NewTokenDefinition::Fungible { name: String::from("test"), - total_supply: 15u128, + total_supply: 15_u128, }; let metadata = NewTokenMetadata { standard: MetadataStandard::Simple, - uri: "test_uri".to_string(), - creators: "test_creators".to_string(), + uri: "test_uri".to_owned(), + creators: "test_creators".to_owned(), }; let _post_states = new_definition_with_metadata( definition_account, @@ -951,7 +956,7 @@ fn test_call_new_definition_metadata_with_init_metadata() { #[should_panic(expected = "Holding target account must have default values")] #[test] -fn test_call_new_definition_metadata_with_init_holding() { +fn call_new_definition_metadata_with_init_holding() { let definition_account = AccountWithMetadata { account: Account::default(), is_authorized: true, @@ -965,12 +970,12 @@ fn test_call_new_definition_metadata_with_init_holding() { let holding_account = AccountForTests::holding_account_same_definition_mint(); let new_definition = NewTokenDefinition::Fungible { name: String::from("test"), - total_supply: 15u128, + total_supply: 15_u128, }; let metadata = NewTokenMetadata { standard: MetadataStandard::Simple, - uri: "test_uri".to_string(), - creators: "test_creators".to_string(), + uri: "test_uri".to_owned(), + creators: "test_creators".to_owned(), }; let _post_states = new_definition_with_metadata( definition_account, @@ -983,7 +988,7 @@ fn test_call_new_definition_metadata_with_init_holding() { #[should_panic(expected = "Master NFT Account must be authorized")] #[test] -fn test_print_nft_master_account_must_be_authorized() { +fn print_nft_master_account_must_be_authorized() { let master_account = AccountForTests::holding_account_uninit(); let printed_account = AccountForTests::holding_account_uninit(); let _post_states = print_nft(master_account, printed_account); @@ -991,7 +996,7 @@ fn test_print_nft_master_account_must_be_authorized() { #[should_panic(expected = "Printed Account must be uninitialized")] #[test] -fn test_print_nft_print_account_initialized() { +fn print_nft_print_account_initialized() { let master_account = AccountForTests::holding_account_master_nft(); let printed_account = AccountForTests::holding_account_init(); let _post_states = print_nft(master_account, printed_account); @@ -999,7 +1004,7 @@ fn test_print_nft_print_account_initialized() { #[should_panic(expected = "Invalid Token Holding data")] #[test] -fn test_print_nft_master_nft_invalid_token_holding() { +fn print_nft_master_nft_invalid_token_holding() { let master_account = AccountForTests::definition_account_auth(); let printed_account = AccountForTests::holding_account_uninit(); let _post_states = print_nft(master_account, printed_account); @@ -1007,7 +1012,7 @@ fn test_print_nft_master_nft_invalid_token_holding() { #[should_panic(expected = "Invalid Token Holding provided as NFT Master Account")] #[test] -fn test_print_nft_master_nft_not_nft_master_account() { +fn print_nft_master_nft_not_nft_master_account() { let master_account = AccountForTests::holding_account_init(); let printed_account = AccountForTests::holding_account_uninit(); let _post_states = print_nft(master_account, printed_account); @@ -1015,14 +1020,14 @@ fn test_print_nft_master_nft_not_nft_master_account() { #[should_panic(expected = "Insufficient balance to print another NFT copy")] #[test] -fn test_print_nft_master_nft_insufficient_balance() { +fn print_nft_master_nft_insufficient_balance() { let master_account = AccountForTests::holding_account_master_nft_insufficient_balance(); let printed_account = AccountForTests::holding_account_uninit(); let _post_states = print_nft(master_account, printed_account); } #[test] -fn test_print_nft_success() { +fn print_nft_success() { let master_account = AccountForTests::holding_account_master_nft(); let printed_account = AccountForTests::holding_account_uninit(); let post_states = print_nft(master_account, printed_account); diff --git a/sequencer_core/src/block_settlement_client.rs b/sequencer_core/src/block_settlement_client.rs index 78d434a9..ad8247ed 100644 --- a/sequencer_core/src/block_settlement_client.rs +++ b/sequencer_core/src/block_settlement_client.rs @@ -1,9 +1,9 @@ -use anyhow::{Context, Result}; +use anyhow::{Context as _, Result}; use bedrock_client::BedrockClient; pub use common::block::Block; pub use logos_blockchain_core::mantle::{MantleTx, SignedMantleTx, ops::channel::MsgId}; use logos_blockchain_core::mantle::{ - Op, OpProof, Transaction, TxHash, ledger, + Op, OpProof, Transaction as _, TxHash, ledger, ops::channel::{ChannelId, inscribe::InscriptionOp}, }; pub use logos_blockchain_key_management_system_service::keys::Ed25519Key; @@ -14,7 +14,7 @@ use crate::config::BedrockConfig; #[expect(async_fn_in_trait, reason = "We don't care about Send/Sync here")] pub trait BlockSettlementClientTrait: Clone { //// Create a new client. - fn new(config: &BedrockConfig, bedrock_signing_key: Ed25519Key) -> Result; + fn new(config: &BedrockConfig, signing_key: Ed25519Key) -> Result; /// Get the bedrock channel ID used by this client. fn bedrock_channel_id(&self) -> ChannelId; diff --git a/sequencer_core/src/block_store.rs b/sequencer_core/src/block_store.rs index 19f6cb0e..3cec3127 100644 --- a/sequencer_core/src/block_store.rs +++ b/sequencer_core/src/block_store.rs @@ -24,16 +24,13 @@ impl SequencerStore { /// ATTENTION: Will overwrite genesis block. pub fn open_db_with_genesis( location: &Path, - genesis_block: Option<(&Block, MantleMsgId)>, + genesis_block: &Block, + genesis_msg_id: MantleMsgId, signing_key: nssa::PrivateKey, ) -> Result { - let tx_hash_to_block_map = if let Some((block, _msg_id)) = &genesis_block { - block_to_transactions_map(block) - } else { - HashMap::new() - }; + let tx_hash_to_block_map = block_to_transactions_map(genesis_block); - let dbio = RocksDBIO::open_or_create(location, genesis_block)?; + let dbio = RocksDBIO::open_or_create(location, genesis_block, genesis_msg_id)?; let genesis_id = dbio.get_meta_first_block_in_db()?; @@ -45,11 +42,6 @@ impl SequencerStore { }) } - /// Reopening existing database - pub fn open_db_restart(location: &Path, signing_key: nssa::PrivateKey) -> Result { - SequencerStore::open_db_with_genesis(location, None, signing_key) - } - pub fn get_block_at_id(&self, id: u64) -> Result { Ok(self.dbio.get_block(id)?) } @@ -120,13 +112,15 @@ pub(crate) fn block_to_transactions_map(block: &Block) -> HashMap #[cfg(test)] mod tests { + #![expect(clippy::shadow_unrelated, reason = "We don't care about it in tests")] + use common::{block::HashableBlockData, test_utils::sequencer_sign_key_for_testing}; use tempfile::tempdir; use super::*; #[test] - fn test_get_transaction_by_hash() { + fn get_transaction_by_hash() { let temp_dir = tempdir().unwrap(); let path = temp_dir.path(); @@ -141,12 +135,9 @@ mod tests { let genesis_block = genesis_block_hashable_data.into_pending_block(&signing_key, [0; 32]); // Start an empty node store - let mut node_store = SequencerStore::open_db_with_genesis( - path, - Some((&genesis_block, [0; 32])), - signing_key, - ) - .unwrap(); + let mut node_store = + SequencerStore::open_db_with_genesis(path, &genesis_block, [0; 32], signing_key) + .unwrap(); let tx = common::test_utils::produce_dummy_empty_transaction(); let block = common::test_utils::produce_dummy_block(1, None, vec![tx.clone()]); @@ -163,7 +154,7 @@ mod tests { } #[test] - fn test_latest_block_meta_returns_genesis_meta_initially() { + fn latest_block_meta_returns_genesis_meta_initially() { let temp_dir = tempdir().unwrap(); let path = temp_dir.path(); @@ -179,12 +170,9 @@ mod tests { let genesis_block = genesis_block_hashable_data.into_pending_block(&signing_key, [0; 32]); let genesis_hash = genesis_block.header.hash; - let node_store = SequencerStore::open_db_with_genesis( - path, - Some((&genesis_block, [0; 32])), - signing_key, - ) - .unwrap(); + let node_store = + SequencerStore::open_db_with_genesis(path, &genesis_block, [0; 32], signing_key) + .unwrap(); // Verify that initially the latest block hash equals genesis hash let latest_meta = node_store.latest_block_meta().unwrap(); @@ -193,7 +181,7 @@ mod tests { } #[test] - fn test_latest_block_meta_updates_after_new_block() { + fn latest_block_meta_updates_after_new_block() { let temp_dir = tempdir().unwrap(); let path = temp_dir.path(); @@ -207,12 +195,9 @@ mod tests { }; let genesis_block = genesis_block_hashable_data.into_pending_block(&signing_key, [0; 32]); - let mut node_store = SequencerStore::open_db_with_genesis( - path, - Some((&genesis_block, [0; 32])), - signing_key, - ) - .unwrap(); + let mut node_store = + SequencerStore::open_db_with_genesis(path, &genesis_block, [0; 32], signing_key) + .unwrap(); // Add a new block let tx = common::test_utils::produce_dummy_empty_transaction(); @@ -232,7 +217,7 @@ mod tests { } #[test] - fn test_mark_block_finalized() { + fn mark_block_finalized() { let temp_dir = tempdir().unwrap(); let path = temp_dir.path(); @@ -246,12 +231,9 @@ mod tests { }; let genesis_block = genesis_block_hashable_data.into_pending_block(&signing_key, [0; 32]); - let mut node_store = SequencerStore::open_db_with_genesis( - path, - Some((&genesis_block, [0; 32])), - signing_key, - ) - .unwrap(); + let mut node_store = + SequencerStore::open_db_with_genesis(path, &genesis_block, [0; 32], signing_key) + .unwrap(); // Add a new block with Pending status let tx = common::test_utils::produce_dummy_empty_transaction(); diff --git a/sequencer_core/src/lib.rs b/sequencer_core/src/lib.rs index 36bd03d8..cd39dfc0 100644 --- a/sequencer_core/src/lib.rs +++ b/sequencer_core/src/lib.rs @@ -13,6 +13,8 @@ use config::SequencerConfig; use log::{error, info, warn}; use logos_blockchain_key_management_system_service::keys::{ED25519_SECRET_KEY_SIZE, Ed25519Key}; use mempool::{MemPool, MemPoolHandle}; +#[cfg(feature = "mock")] +pub use mock::SequencerCoreWithMockClients; use crate::{ block_settlement_client::{BlockSettlementClient, BlockSettlementClientTrait, MsgId}, @@ -24,11 +26,9 @@ pub mod block_settlement_client; pub mod block_store; pub mod config; pub mod indexer_client; -#[cfg(feature = "mock")] -pub mod mock; #[cfg(feature = "mock")] -pub use mock::SequencerCoreWithMockClients; +pub mod mock; pub struct SequencerCore< BC: BlockSettlementClientTrait = BlockSettlementClient, @@ -82,7 +82,8 @@ impl SequencerCore SequencerCore Result<(SignedMantleTx, MsgId)> { let now = Instant::now(); - let new_block_height = self.chain_height + 1; + let new_block_height = self + .chain_height + .checked_add(1) + .with_context(|| format!("Max block height reached: {}", self.chain_height))?; let mut valid_transactions = vec![]; @@ -338,12 +342,14 @@ impl SequencerCore Result { if path.exists() { let key_bytes = std::fs::read(path)?; + let key_array: [u8; ED25519_SECRET_KEY_SIZE] = key_bytes .try_into() - .map_err(|_| anyhow!("Found key with incorrect length"))?; + .map_err(|_bytes| anyhow!("Found key with incorrect length"))?; + Ok(Ed25519Key::from_bytes(&key_array)) } else { - let mut key_bytes = [0u8; ED25519_SECRET_KEY_SIZE]; + let mut key_bytes = [0_u8; ED25519_SECRET_KEY_SIZE]; rand::RngCore::fill_bytes(&mut rand::thread_rng(), &mut key_bytes); // Create parent directory if it doesn't exist if let Some(parent) = path.parent() { @@ -354,11 +360,14 @@ fn load_or_create_signing_key(path: &Path) -> Result { } } -#[cfg(all(test, feature = "mock"))] +#[cfg(test)] +#[cfg(feature = "mock")] mod tests { + #![expect(clippy::shadow_unrelated, reason = "We don't care about it in tests")] + use std::{pin::pin, str::FromStr as _, time::Duration}; - use base58::ToBase58; + use base58::ToBase58 as _; use bedrock_client::BackoffConfig; use common::{ block::AccountInitialData, test_utils::sequencer_sign_key_for_testing, @@ -381,7 +390,7 @@ mod tests { SequencerConfig { home, - override_rust_log: Some("info".to_string()), + override_rust_log: Some("info".to_owned()), genesis_id: 1, is_genesis_random: false, max_num_tx_in_block: 10, @@ -462,7 +471,7 @@ mod tests { } #[tokio::test] - async fn test_start_from_config() { + async fn start_from_config() { let config = setup_sequencer_config(); let (sequencer, _mempool_handle) = SequencerCoreWithMockClients::start_from_config(config.clone()).await; @@ -482,7 +491,7 @@ mod tests { } #[tokio::test] - async fn test_start_different_intial_accounts_balances() { + async fn start_different_intial_accounts_balances() { let acc1_account_id: Vec = vec![ 27, 132, 197, 86, 123, 18, 100, 64, 153, 93, 62, 213, 170, 186, 5, 101, 215, 30, 24, 52, 96, 72, 25, 255, 156, 23, 245, 233, 213, 221, 7, 143, @@ -523,7 +532,7 @@ mod tests { } #[test] - fn test_transaction_pre_check_pass() { + fn transaction_pre_check_pass() { let tx = common::test_utils::produce_dummy_empty_transaction(); let result = tx.transaction_stateless_check(); @@ -531,7 +540,7 @@ mod tests { } #[tokio::test] - async fn test_transaction_pre_check_native_transfer_valid() { + async fn transaction_pre_check_native_transfer_valid() { let (sequencer, _mempool_handle) = common_setup().await; let acc1 = sequencer.sequencer_config.initial_accounts[0].account_id; @@ -548,7 +557,7 @@ mod tests { } #[tokio::test] - async fn test_transaction_pre_check_native_transfer_other_signature() { + async fn transaction_pre_check_native_transfer_other_signature() { let (mut sequencer, _mempool_handle) = common_setup().await; let acc1 = sequencer.sequencer_config.initial_accounts[0].account_id; @@ -573,7 +582,7 @@ mod tests { } #[tokio::test] - async fn test_transaction_pre_check_native_transfer_sent_too_much() { + async fn transaction_pre_check_native_transfer_sent_too_much() { let (mut sequencer, _mempool_handle) = common_setup().await; let acc1 = sequencer.sequencer_config.initial_accounts[0].account_id; @@ -600,7 +609,7 @@ mod tests { } #[tokio::test] - async fn test_transaction_execute_native_transfer() { + async fn transaction_execute_native_transfer() { let (mut sequencer, _mempool_handle) = common_setup().await; let acc1 = sequencer.sequencer_config.initial_accounts[0].account_id; @@ -622,7 +631,7 @@ mod tests { } #[tokio::test] - async fn test_push_tx_into_mempool_blocks_until_mempool_is_full() { + async fn push_tx_into_mempool_blocks_until_mempool_is_full() { let config = SequencerConfig { mempool_max_size: 1, ..setup_sequencer_config() @@ -649,7 +658,7 @@ mod tests { } #[tokio::test] - async fn test_produce_new_block_with_mempool_transactions() { + async fn produce_new_block_with_mempool_transactions() { let (mut sequencer, mempool_handle) = common_setup().await; let genesis_height = sequencer.chain_height; @@ -662,7 +671,7 @@ mod tests { } #[tokio::test] - async fn test_replay_transactions_are_rejected_in_the_same_block() { + async fn replay_transactions_are_rejected_in_the_same_block() { let (mut sequencer, mempool_handle) = common_setup().await; let acc1 = sequencer.sequencer_config.initial_accounts[0].account_id; @@ -694,7 +703,7 @@ mod tests { } #[tokio::test] - async fn test_replay_transactions_are_rejected_in_different_blocks() { + async fn replay_transactions_are_rejected_in_different_blocks() { let (mut sequencer, mempool_handle) = common_setup().await; let acc1 = sequencer.sequencer_config.initial_accounts[0].account_id; @@ -730,7 +739,7 @@ mod tests { } #[tokio::test] - async fn test_restart_from_storage() { + async fn restart_from_storage() { let config = setup_sequencer_config(); let acc1_account_id = config.initial_accounts[0].account_id; let acc2_account_id = config.initial_accounts[1].account_id; @@ -782,7 +791,7 @@ mod tests { } #[tokio::test] - async fn test_get_pending_blocks() { + async fn get_pending_blocks() { let config = setup_sequencer_config(); let (mut sequencer, _mempool_handle) = SequencerCoreWithMockClients::start_from_config(config).await; @@ -799,7 +808,7 @@ mod tests { } #[tokio::test] - async fn test_delete_blocks() { + async fn delete_blocks() { let config = setup_sequencer_config(); let (mut sequencer, _mempool_handle) = SequencerCoreWithMockClients::start_from_config(config).await; @@ -822,7 +831,7 @@ mod tests { } #[tokio::test] - async fn test_produce_block_with_correct_prev_meta_after_restart() { + async fn produce_block_with_correct_prev_meta_after_restart() { let config = setup_sequencer_config(); let acc1_account_id = config.initial_accounts[0].account_id; let acc2_account_id = config.initial_accounts[1].account_id; @@ -895,7 +904,7 @@ mod tests { } #[tokio::test] - async fn test_start_from_config_uses_db_height_not_config_genesis() { + async fn start_from_config_uses_db_height_not_config_genesis() { let mut config = setup_sequencer_config(); let original_genesis_id = config.genesis_id; diff --git a/sequencer_core/src/mock.rs b/sequencer_core/src/mock.rs index 930ff946..45a682e2 100644 --- a/sequencer_core/src/mock.rs +++ b/sequencer_core/src/mock.rs @@ -19,10 +19,10 @@ pub struct MockBlockSettlementClient { } impl BlockSettlementClientTrait for MockBlockSettlementClient { - fn new(config: &BedrockConfig, bedrock_signing_key: Ed25519Key) -> Result { + fn new(config: &BedrockConfig, signing_key: Ed25519Key) -> Result { Ok(Self { bedrock_channel_id: config.channel_id, - bedrock_signing_key, + bedrock_signing_key: signing_key, }) } @@ -46,10 +46,10 @@ pub struct MockBlockSettlementClientWithError { } impl BlockSettlementClientTrait for MockBlockSettlementClientWithError { - fn new(config: &BedrockConfig, bedrock_signing_key: Ed25519Key) -> Result { + fn new(config: &BedrockConfig, signing_key: Ed25519Key) -> Result { Ok(Self { bedrock_channel_id: config.channel_id, - bedrock_signing_key, + bedrock_signing_key: signing_key, }) } diff --git a/sequencer_rpc/src/lib.rs b/sequencer_rpc/src/lib.rs index 68b13d7f..b6049715 100644 --- a/sequencer_rpc/src/lib.rs +++ b/sequencer_rpc/src/lib.rs @@ -1,7 +1,3 @@ -pub mod net_utils; -pub mod process; -pub mod types; - use std::sync::Arc; use common::{ @@ -10,6 +6,8 @@ use common::{ }; use mempool::MemPoolHandle; pub use net_utils::*; +#[cfg(feature = "standalone")] +use sequencer_core::mock::{MockBlockSettlementClient, MockIndexerClient}; use sequencer_core::{ SequencerCore, block_settlement_client::{BlockSettlementClient, BlockSettlementClientTrait}, @@ -21,6 +19,13 @@ use tokio::sync::Mutex; use self::types::err_rpc::RpcErr; +pub mod net_utils; +pub mod process; +pub mod types; + +#[cfg(feature = "standalone")] +pub type JsonHandlerWithMockClients = JsonHandler; + // ToDo: Add necessary fields pub struct JsonHandler< BC: BlockSettlementClientTrait = BlockSettlementClient, @@ -51,9 +56,3 @@ pub fn rpc_error_responce_inverter(err: RpcError) -> RpcError { data: content, } } - -#[cfg(feature = "standalone")] -use sequencer_core::mock::{MockBlockSettlementClient, MockIndexerClient}; - -#[cfg(feature = "standalone")] -pub type JsonHandlerWithMockClients = JsonHandler; diff --git a/sequencer_rpc/src/net_utils.rs b/sequencer_rpc/src/net_utils.rs index d170638d..e306ec0e 100644 --- a/sequencer_rpc/src/net_utils.rs +++ b/sequencer_rpc/src/net_utils.rs @@ -6,28 +6,26 @@ use common::{ rpc_primitives::{RpcConfig, message::Message}, transaction::NSSATransaction, }; -use futures::{Future, FutureExt}; +use futures::{Future, FutureExt as _}; use log::info; use mempool::MemPoolHandle; #[cfg(not(feature = "standalone"))] use sequencer_core::SequencerCore; #[cfg(feature = "standalone")] use sequencer_core::SequencerCoreWithMockClients as SequencerCore; +use tokio::sync::Mutex; #[cfg(not(feature = "standalone"))] use super::JsonHandler; - -#[cfg(feature = "standalone")] -type JsonHandler = super::JsonHandlerWithMockClients; - -use tokio::sync::Mutex; - use crate::process::Process; pub const SHUTDOWN_TIMEOUT_SECS: u64 = 10; pub const NETWORK: &str = "network"; +#[cfg(feature = "standalone")] +type JsonHandler = super::JsonHandlerWithMockClients; + pub(crate) fn rpc_handler( message: web::Json, handler: web::Data

, @@ -41,7 +39,7 @@ pub(crate) fn rpc_handler( fn get_cors(cors_allowed_origins: &[String]) -> Cors { let mut cors = Cors::permissive(); - if cors_allowed_origins != ["*".to_string()] { + if cors_allowed_origins != ["*".to_owned()] { for origin in cors_allowed_origins { cors = cors.allowed_origin(origin); } @@ -72,7 +70,7 @@ pub async fn new_http_server( .try_into() .expect("`max_block_size` is expected to fit into usize"); let handler = web::Data::new(JsonHandler { - sequencer_state: seuquencer_core.clone(), + sequencer_state: Arc::clone(&seuquencer_core), mempool_handle, max_block_size, }); @@ -95,12 +93,12 @@ pub async fn new_http_server( .shutdown_timeout(SHUTDOWN_TIMEOUT_SECS) .disable_signals(); - let [addr] = http_server + let [final_addr] = http_server .addrs() .try_into() .expect("Exactly one address bound is expected for sequencer HTTP server"); - info!(target:NETWORK, "HTTP server started at {addr}"); + info!(target:NETWORK, "HTTP server started at {final_addr}"); - Ok((http_server.run(), addr)) + Ok((http_server.run(), final_addr)) } diff --git a/sequencer_rpc/src/process.rs b/sequencer_rpc/src/process.rs index b96510a8..66978bea 100644 --- a/sequencer_rpc/src/process.rs +++ b/sequencer_rpc/src/process.rs @@ -1,13 +1,13 @@ use std::collections::HashMap; use actix_web::Error as HttpError; -use base64::{Engine, engine::general_purpose}; +use base64::{Engine as _, engine::general_purpose}; use common::{ block::{AccountInitialData, HashableBlockData}, rpc_primitives::{ errors::RpcError, message::{Message, Request}, - parser::RpcRequest, + parser::RpcRequest as _, requests::{ GetAccountBalanceRequest, GetAccountBalanceResponse, GetAccountRequest, GetAccountResponse, GetAccountsNoncesRequest, GetAccountsNoncesResponse, @@ -78,12 +78,11 @@ impl< impl JsonHandler { /// Example of request processing - #[allow(clippy::unused_async)] - async fn process_temp_hello(&self, request: Request) -> Result { + fn process_temp_hello(request: Request) -> Result { let _hello_request = HelloRequest::parse(Some(request.params))?; let response = HelloResponse { - greeting: HELLO_FROM_SEQUENCER.to_string(), + greeting: HELLO_FROM_SEQUENCER.to_owned(), }; respond(response) @@ -99,9 +98,7 @@ impl JsonHandler let tx_hash = tx.hash(); - let tx_size = borsh::to_vec(&tx) - .map_err(|_| TransactionMalformationError::FailedToDecode { tx: tx_hash })? - .len(); + let tx_size = send_tx_req.transaction.len(); let max_tx_size = self.max_block_size.saturating_sub(BLOCK_HEADER_OVERHEAD); @@ -125,7 +122,7 @@ impl JsonHandler .expect("Mempool is closed, this is a bug"); let response = SendTxResponse { - status: TRANSACTION_SUBMITTED.to_string(), + status: TRANSACTION_SUBMITTED.to_owned(), tx_hash, }; @@ -306,14 +303,14 @@ impl JsonHandler let mut program_ids = HashMap::new(); program_ids.insert( - "authenticated_transfer".to_string(), + "authenticated_transfer".to_owned(), Program::authenticated_transfer_program().id(), ); - program_ids.insert("token".to_string(), Program::token().id()); - program_ids.insert("pinata".to_string(), Program::pinata().id()); - program_ids.insert("amm".to_string(), Program::amm().id()); + program_ids.insert("token".to_owned(), Program::token().id()); + program_ids.insert("pinata".to_owned(), Program::pinata().id()); + program_ids.insert("amm".to_owned(), Program::amm().id()); program_ids.insert( - "privacy_preserving_circuit".to_string(), + "privacy_preserving_circuit".to_owned(), nssa::PRIVACY_PRESERVING_CIRCUIT_ID, ); let response = GetProgramIdsResponse { program_ids }; @@ -322,7 +319,7 @@ impl JsonHandler pub async fn process_request_internal(&self, request: Request) -> Result { match request.method.as_ref() { - HELLO => self.process_temp_hello(request).await, + HELLO => Self::process_temp_hello(request), SEND_TX => self.process_send_tx(request).await, GET_BLOCK => self.process_get_block_data(request).await, GET_BLOCK_RANGE => self.process_get_block_range_data(request).await, @@ -340,16 +337,12 @@ impl JsonHandler } } -#[expect( - clippy::cast_possible_truncation, - reason = "Test code assumes usize is large enough for max_block_size" -)] #[cfg(test)] mod tests { use std::{str::FromStr as _, sync::Arc, time::Duration}; - use base58::ToBase58; - use base64::{Engine, engine::general_purpose}; + use base58::ToBase58 as _; + use base64::{Engine as _, engine::general_purpose}; use bedrock_client::BackoffConfig; use common::{ block::AccountInitialData, config::BasicAuth, test_utils::sequencer_sign_key_for_testing, @@ -396,7 +389,7 @@ mod tests { SequencerConfig { home, - override_rust_log: Some("info".to_string()), + override_rust_log: Some("info".to_owned()), genesis_id: 1, is_genesis_random: false, max_num_tx_in_block: 10, @@ -416,7 +409,7 @@ mod tests { channel_id: [42; 32].into(), node_url: "http://localhost:8080".parse().unwrap(), auth: Some(BasicAuth { - username: "user".to_string(), + username: "user".to_owned(), password: None, }), }, @@ -461,7 +454,9 @@ mod tests { .produce_new_block_with_mempool_transactions() .unwrap(); - let max_block_size = sequencer_core.sequencer_config().max_block_size.as_u64() as usize; + let max_block_size = + usize::try_from(sequencer_core.sequencer_config().max_block_size.as_u64()) + .expect("`max_block_size` is expected to fit in usize"); let sequencer_core = Arc::new(Mutex::new(sequencer_core)); ( @@ -499,7 +494,7 @@ mod tests { } #[actix_web::test] - async fn test_get_account_balance_for_non_existent_account() { + async fn get_account_balance_for_non_existent_account() { let (json_handler, _, _) = components_for_tests().await; let request = serde_json::json!({ "jsonrpc": "2.0", @@ -521,7 +516,7 @@ mod tests { } #[actix_web::test] - async fn test_get_account_balance_for_invalid_base58() { + async fn get_account_balance_for_invalid_base58() { let (json_handler, _, _) = components_for_tests().await; let request = serde_json::json!({ "jsonrpc": "2.0", @@ -551,7 +546,7 @@ mod tests { } #[actix_web::test] - async fn test_get_account_balance_for_invalid_length() { + async fn get_account_balance_for_invalid_length() { let (json_handler, _, _) = components_for_tests().await; let request = serde_json::json!({ "jsonrpc": "2.0", @@ -581,7 +576,7 @@ mod tests { } #[actix_web::test] - async fn test_get_account_balance_for_existing_account() { + async fn get_account_balance_for_existing_account() { let (json_handler, initial_accounts, _) = components_for_tests().await; let acc1_id = initial_accounts[0].account_id; @@ -606,7 +601,7 @@ mod tests { } #[actix_web::test] - async fn test_get_accounts_nonces_for_non_existent_account() { + async fn get_accounts_nonces_for_non_existent_account() { let (json_handler, _, _) = components_for_tests().await; let request = serde_json::json!({ "jsonrpc": "2.0", @@ -628,7 +623,7 @@ mod tests { } #[actix_web::test] - async fn test_get_accounts_nonces_for_existent_account() { + async fn get_accounts_nonces_for_existent_account() { let (json_handler, initial_accounts, _) = components_for_tests().await; let acc1_id = initial_accounts[0].account_id; @@ -654,7 +649,7 @@ mod tests { } #[actix_web::test] - async fn test_get_account_data_for_non_existent_account() { + async fn get_account_data_for_non_existent_account() { let (json_handler, _, _) = components_for_tests().await; let request = serde_json::json!({ "jsonrpc": "2.0", @@ -681,7 +676,7 @@ mod tests { } #[actix_web::test] - async fn test_get_transaction_by_hash_for_non_existent_hash() { + async fn get_transaction_by_hash_for_non_existent_hash() { let (json_handler, _, _) = components_for_tests().await; let request = serde_json::json!({ "jsonrpc": "2.0", @@ -703,7 +698,7 @@ mod tests { } #[actix_web::test] - async fn test_get_transaction_by_hash_for_invalid_hex() { + async fn get_transaction_by_hash_for_invalid_hex() { let (json_handler, _, _) = components_for_tests().await; let request = serde_json::json!({ "jsonrpc": "2.0", @@ -734,7 +729,7 @@ mod tests { } #[actix_web::test] - async fn test_get_transaction_by_hash_for_invalid_length() { + async fn get_transaction_by_hash_for_invalid_length() { let (json_handler, _, _) = components_for_tests().await; let request = serde_json::json!({ "jsonrpc": "2.0", @@ -765,7 +760,7 @@ mod tests { } #[actix_web::test] - async fn test_get_transaction_by_hash_for_existing_transaction() { + async fn get_transaction_by_hash_for_existing_transaction() { let (json_handler, _, tx) = components_for_tests().await; let tx_hash_hex = hex::encode(tx.hash()); let expected_base64_encoded = general_purpose::STANDARD.encode(borsh::to_vec(&tx).unwrap()); diff --git a/sequencer_rpc/src/types/err_rpc.rs b/sequencer_rpc/src/types/err_rpc.rs index e92a578e..4cb75606 100644 --- a/sequencer_rpc/src/types/err_rpc.rs +++ b/sequencer_rpc/src/types/err_rpc.rs @@ -2,7 +2,16 @@ use common::{ rpc_primitives::errors::{RpcError, RpcParseError}, transaction::TransactionMalformationError, }; -use log::debug; + +macro_rules! standard_rpc_err_kind { + ($type_name:path) => { + impl RpcErrKind for $type_name { + fn into_rpc_err(self) -> RpcError { + self.into() + } + } + }; +} pub struct RpcErr(pub RpcError); @@ -18,15 +27,6 @@ impl From for RpcErr { } } -macro_rules! standard_rpc_err_kind { - ($type_name:path) => { - impl RpcErrKind for $type_name { - fn into_rpc_err(self) -> RpcError { - self.into() - } - } - }; -} standard_rpc_err_kind!(RpcError); standard_rpc_err_kind!(RpcParseError); @@ -47,10 +47,3 @@ impl RpcErrKind for TransactionMalformationError { RpcError::invalid_params(Some(serde_json::to_value(self).unwrap())) } } - -#[allow(clippy::needless_pass_by_value)] -#[must_use] -pub fn from_rpc_err_into_anyhow_err(rpc_err: RpcError) -> anyhow::Error { - debug!("Rpc error cast to anyhow error : err {rpc_err:?}"); - anyhow::anyhow!(format!("{rpc_err:#?}")) -} diff --git a/sequencer_runner/src/lib.rs b/sequencer_runner/src/lib.rs index 3148157c..4e0c32ca 100644 --- a/sequencer_runner/src/lib.rs +++ b/sequencer_runner/src/lib.rs @@ -40,6 +40,10 @@ impl SequencerHandle { /// Runs the sequencer indefinitely, monitoring its tasks. /// /// If no error occurs, this function will never return. + #[expect( + clippy::integer_division_remainder_used, + reason = "Generated by select! macro, can't be easily rewritten to avoid this lint" + )] pub async fn run_forever(&mut self) -> Result { let Self { addr: _, @@ -292,9 +296,10 @@ pub async fn main_runner() -> Result<()> { let app_config = SequencerConfig::from_path(&home_dir.join("sequencer_config.json"))?; - if let Some(ref rust_log) = app_config.override_rust_log { + if let Some(rust_log) = &app_config.override_rust_log { info!("RUST_LOG env var set to {rust_log:?}"); + // SAFETY: there is no other threads running at this point unsafe { std::env::set_var(RUST_LOG, rust_log); } diff --git a/storage/src/indexer.rs b/storage/src/indexer.rs index d9ff8fd9..ad17147d 100644 --- a/storage/src/indexer.rs +++ b/storage/src/indexer.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, ops::Div, path::Path, sync::Arc}; +use std::{collections::HashMap, path::Path, sync::Arc}; use common::{ block::{Block, BlockId}, @@ -55,18 +55,16 @@ pub const CF_ACC_TO_TX: &str = "cf_acc_to_tx"; pub type DbResult = Result; -fn closest_breakpoint_id(block_id: u64) -> u64 { - block_id - .saturating_sub(1) - .div(u64::from(BREAKPOINT_INTERVAL)) -} - pub struct RocksDBIO { pub db: DBWithThreadMode, } impl RocksDBIO { - pub fn open_or_create(path: &Path, start_data: Option<(Block, V02State)>) -> DbResult { + pub fn open_or_create( + path: &Path, + genesis_block: &Block, + initial_state: &V02State, + ) -> DbResult { let mut cf_opts = Options::default(); cf_opts.set_max_write_buffer_number(16); // ToDo: Add more column families for different data @@ -85,31 +83,29 @@ impl RocksDBIO { &db_opts, path, vec![cfb, cfmeta, cfbreakpoint, cfhti, cftti, cfameta, cfatt], - ); + ) + .map_err(|err| DbError::RocksDbError { + error: err, + additional_info: Some("Failed to open or create DB".to_owned()), + })?; - let dbio = Self { - // There is no point in handling this from runner code - db: db.unwrap(), - }; + let dbio = Self { db }; let is_start_set = dbio.get_meta_is_first_block_set()?; if is_start_set { Ok(dbio) - } else if let Some((block, initial_state)) = start_data { - let block_id = block.header.block_id; + } else { + let block_id = genesis_block.header.block_id; dbio.put_meta_last_block_in_db(block_id)?; - dbio.put_meta_first_block_in_db(block)?; + dbio.put_meta_first_block_in_db(genesis_block)?; dbio.put_meta_is_first_block_set()?; // First breakpoint setup - dbio.put_breakpoint(0, &initial_state)?; + dbio.put_breakpoint(0, initial_state)?; dbio.put_meta_last_breakpoint_id(0)?; Ok(dbio) - } else { - // Here we are trying to start a DB without a block, one should not do it. - unreachable!() } } @@ -173,7 +169,7 @@ impl RocksDBIO { borsh::to_vec(&DB_META_FIRST_BLOCK_IN_DB_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_FIRST_BLOCK_IN_DB_KEY".to_string()), + Some("Failed to serialize DB_META_FIRST_BLOCK_IN_DB_KEY".to_owned()), ) })?, ) @@ -183,12 +179,12 @@ impl RocksDBIO { Ok(borsh::from_slice::(&data).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to deserialize first block".to_string()), + Some("Failed to deserialize first block".to_owned()), ) })?) } else { Err(DbError::db_interaction_error( - "First block not found".to_string(), + "First block not found".to_owned(), )) } } @@ -202,7 +198,7 @@ impl RocksDBIO { borsh::to_vec(&DB_META_LAST_BLOCK_IN_DB_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_LAST_BLOCK_IN_DB_KEY".to_string()), + Some("Failed to serialize DB_META_LAST_BLOCK_IN_DB_KEY".to_owned()), ) })?, ) @@ -212,12 +208,12 @@ impl RocksDBIO { Ok(borsh::from_slice::(&data).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to deserialize last block".to_string()), + Some("Failed to deserialize last block".to_owned()), ) })?) } else { Err(DbError::db_interaction_error( - "Last block not found".to_string(), + "Last block not found".to_owned(), )) } } @@ -233,8 +229,7 @@ impl RocksDBIO { DbError::borsh_cast_message( err, Some( - "Failed to serialize DB_META_LAST_OBSERVED_L1_LIB_HEADER_ID_IN_DB_KEY" - .to_string(), + "Failed to serialize DB_META_LAST_OBSERVED_L1_LIB_HEADER_ID_IN_DB_KEY".to_owned(), ), ) }, @@ -246,7 +241,7 @@ impl RocksDBIO { borsh::from_slice::<[u8; 32]>(&data).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to deserialize last l1 lib header".to_string()), + Some("Failed to deserialize last l1 lib header".to_owned()), ) }) }) @@ -262,7 +257,7 @@ impl RocksDBIO { borsh::to_vec(&DB_META_FIRST_BLOCK_SET_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_FIRST_BLOCK_SET_KEY".to_string()), + Some("Failed to serialize DB_META_FIRST_BLOCK_SET_KEY".to_owned()), ) })?, ) @@ -280,7 +275,7 @@ impl RocksDBIO { borsh::to_vec(&DB_META_LAST_BREAKPOINT_ID).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_LAST_BREAKPOINT_ID".to_string()), + Some("Failed to serialize DB_META_LAST_BREAKPOINT_ID".to_owned()), ) })?, ) @@ -290,17 +285,17 @@ impl RocksDBIO { Ok(borsh::from_slice::(&data).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to deserialize last breakpoint id".to_string()), + Some("Failed to deserialize last breakpoint id".to_owned()), ) })?) } else { Err(DbError::db_interaction_error( - "Last breakpoint id not found".to_string(), + "Last breakpoint id not found".to_owned(), )) } } - pub fn put_meta_first_block_in_db(&self, block: Block) -> DbResult<()> { + pub fn put_meta_first_block_in_db(&self, block: &Block) -> DbResult<()> { let cf_meta = self.meta_column(); self.db .put_cf( @@ -308,13 +303,13 @@ impl RocksDBIO { borsh::to_vec(&DB_META_FIRST_BLOCK_IN_DB_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_FIRST_BLOCK_IN_DB_KEY".to_string()), + Some("Failed to serialize DB_META_FIRST_BLOCK_IN_DB_KEY".to_owned()), ) })?, borsh::to_vec(&block.header.block_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize first block id".to_string()), + Some("Failed to serialize first block id".to_owned()), ) })?, ) @@ -332,13 +327,13 @@ impl RocksDBIO { borsh::to_vec(&DB_META_LAST_BLOCK_IN_DB_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_LAST_BLOCK_IN_DB_KEY".to_string()), + Some("Failed to serialize DB_META_LAST_BLOCK_IN_DB_KEY".to_owned()), ) })?, borsh::to_vec(&block_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize last block id".to_string()), + Some("Failed to serialize last block id".to_owned()), ) })?, ) @@ -359,8 +354,7 @@ impl RocksDBIO { DbError::borsh_cast_message( err, Some( - "Failed to serialize DB_META_LAST_OBSERVED_L1_LIB_HEADER_ID_IN_DB_KEY" - .to_string(), + "Failed to serialize DB_META_LAST_OBSERVED_L1_LIB_HEADER_ID_IN_DB_KEY".to_owned(), ), ) }, @@ -368,7 +362,7 @@ impl RocksDBIO { borsh::to_vec(&l1_lib_header).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize last l1 block header".to_string()), + Some("Failed to serialize last l1 block header".to_owned()), ) })?, ) @@ -384,13 +378,13 @@ impl RocksDBIO { borsh::to_vec(&DB_META_LAST_BREAKPOINT_ID).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_LAST_BREAKPOINT_ID".to_string()), + Some("Failed to serialize DB_META_LAST_BREAKPOINT_ID".to_owned()), ) })?, borsh::to_vec(&br_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize last block id".to_string()), + Some("Failed to serialize last block id".to_owned()), ) })?, ) @@ -406,10 +400,10 @@ impl RocksDBIO { borsh::to_vec(&DB_META_FIRST_BLOCK_SET_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_FIRST_BLOCK_SET_KEY".to_string()), + Some("Failed to serialize DB_META_FIRST_BLOCK_SET_KEY".to_owned()), ) })?, - [1u8; 1], + [1_u8; 1], ) .map_err(|rerr| DbError::rocksdb_cast_message(rerr, None))?; Ok(()) @@ -417,7 +411,7 @@ impl RocksDBIO { // Block - pub fn put_block(&self, block: Block, l1_lib_header: [u8; 32]) -> DbResult<()> { + pub fn put_block(&self, block: &Block, l1_lib_header: [u8; 32]) -> DbResult<()> { let cf_block = self.block_column(); let cf_hti = self.hash_to_id_column(); let cf_tti: Arc> = self.tx_hash_to_id_column(); @@ -430,13 +424,13 @@ impl RocksDBIO { borsh::to_vec(&block.header.block_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize block id".to_string()), + Some("Failed to serialize block id".to_owned()), ) })?, borsh::to_vec(&block).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize block data".to_string()), + Some("Failed to serialize block data".to_owned()), ) })?, ) @@ -455,13 +449,13 @@ impl RocksDBIO { borsh::to_vec(&block.header.hash).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize block hash".to_string()), + Some("Failed to serialize block hash".to_owned()), ) })?, borsh::to_vec(&block.header.block_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize block id".to_string()), + Some("Failed to serialize block id".to_owned()), ) })?, ) @@ -469,7 +463,7 @@ impl RocksDBIO { let mut acc_to_tx_map: HashMap<[u8; 32], Vec<[u8; 32]>> = HashMap::new(); - for tx in block.body.transactions { + for tx in &block.body.transactions { let tx_hash = tx.hash(); self.db @@ -478,13 +472,13 @@ impl RocksDBIO { borsh::to_vec(&tx_hash).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize tx hash".to_string()), + Some("Failed to serialize tx hash".to_owned()), ) })?, borsh::to_vec(&block.header.block_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize block id".to_string()), + Some("Failed to serialize block id".to_owned()), ) })?, ) @@ -504,6 +498,10 @@ impl RocksDBIO { } } + #[expect( + clippy::iter_over_hash_type, + reason = "RocksDB will keep ordering persistent" + )] for (acc_id, tx_hashes) in acc_to_tx_map { self.put_account_transactions(acc_id, &tx_hashes)?; } @@ -528,7 +526,7 @@ impl RocksDBIO { borsh::to_vec(&block_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize block id".to_string()), + Some("Failed to serialize block id".to_owned()), ) })?, ) @@ -538,12 +536,12 @@ impl RocksDBIO { Ok(borsh::from_slice::(&data).map_err(|serr| { DbError::borsh_cast_message( serr, - Some("Failed to deserialize block data".to_string()), + Some("Failed to deserialize block data".to_owned()), ) })?) } else { Err(DbError::db_interaction_error( - "Block on this id not found".to_string(), + "Block on this id not found".to_owned(), )) } } @@ -575,7 +573,7 @@ impl RocksDBIO { borsh::to_vec(&block_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize block id".to_string()), + Some("Failed to serialize block id".to_owned()), ) })?, ) @@ -585,7 +583,7 @@ impl RocksDBIO { Ok(borsh::from_slice::(&data).map_err(|serr| { DbError::borsh_cast_message( serr, - Some("Failed to deserialize block data".to_string()), + Some("Failed to deserialize block data".to_owned()), ) })?) } else { @@ -610,13 +608,13 @@ impl RocksDBIO { borsh::to_vec(&br_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize breakpoint id".to_string()), + Some("Failed to serialize breakpoint id".to_owned()), ) })?, borsh::to_vec(&breakpoint).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize breakpoint data".to_string()), + Some("Failed to serialize breakpoint data".to_owned()), ) })?, ) @@ -632,7 +630,7 @@ impl RocksDBIO { borsh::to_vec(&br_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize breakpoint id".to_string()), + Some("Failed to serialize breakpoint id".to_owned()), ) })?, ) @@ -642,12 +640,12 @@ impl RocksDBIO { Ok(borsh::from_slice::(&data).map_err(|serr| { DbError::borsh_cast_message( serr, - Some("Failed to deserialize breakpoint data".to_string()), + Some("Failed to deserialize breakpoint data".to_owned()), ) })?) } else { Err(DbError::db_interaction_error( - "Breakpoint on this id not found".to_string(), + "Breakpoint on this id not found".to_owned(), )) } } @@ -662,7 +660,9 @@ impl RocksDBIO { // ToDo: update it to handle any genesis id // right now works correctly only if genesis_id < BREAKPOINT_INTERVAL let start = if br_id != 0 { - u64::from(BREAKPOINT_INTERVAL) * br_id + u64::from(BREAKPOINT_INTERVAL) + .checked_mul(br_id) + .expect("Reached maximum breakpoint id") } else { self.get_meta_first_block_in_db()? }; @@ -690,7 +690,7 @@ impl RocksDBIO { Ok(breakpoint) } else { Err(DbError::db_interaction_error( - "Block on this id not found".to_string(), + "Block on this id not found".to_owned(), )) } } @@ -701,8 +701,13 @@ impl RocksDBIO { pub fn put_next_breakpoint(&self) -> DbResult<()> { let last_block = self.get_meta_last_block_in_db()?; - let next_breakpoint_id = self.get_meta_last_breakpoint_id()? + 1; - let block_to_break_id = next_breakpoint_id * u64::from(BREAKPOINT_INTERVAL); + let next_breakpoint_id = self + .get_meta_last_breakpoint_id()? + .checked_add(1) + .expect("Reached maximum breakpoint id"); + let block_to_break_id = next_breakpoint_id + .checked_mul(u64::from(BREAKPOINT_INTERVAL)) + .expect("Reached maximum breakpoint id"); if block_to_break_id <= last_block { let next_breakpoint = self.calculate_state_for_id(block_to_break_id)?; @@ -711,7 +716,7 @@ impl RocksDBIO { self.put_meta_last_breakpoint_id(next_breakpoint_id) } else { Err(DbError::db_interaction_error( - "Breakpoint not yet achieved".to_string(), + "Breakpoint not yet achieved".to_owned(), )) } } @@ -727,7 +732,7 @@ impl RocksDBIO { borsh::to_vec(&hash).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize block hash".to_string()), + Some("Failed to serialize block hash".to_owned()), ) })?, ) @@ -735,14 +740,11 @@ impl RocksDBIO { if let Some(data) = res { Ok(borsh::from_slice::(&data).map_err(|serr| { - DbError::borsh_cast_message( - serr, - Some("Failed to deserialize block id".to_string()), - ) + DbError::borsh_cast_message(serr, Some("Failed to deserialize block id".to_owned())) })?) } else { Err(DbError::db_interaction_error( - "Block on this hash not found".to_string(), + "Block on this hash not found".to_owned(), )) } } @@ -756,7 +758,7 @@ impl RocksDBIO { borsh::to_vec(&tx_hash).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize transaction hash".to_string()), + Some("Failed to serialize transaction hash".to_owned()), ) })?, ) @@ -764,14 +766,11 @@ impl RocksDBIO { if let Some(data) = res { Ok(borsh::from_slice::(&data).map_err(|serr| { - DbError::borsh_cast_message( - serr, - Some("Failed to deserialize block id".to_string()), - ) + DbError::borsh_cast_message(serr, Some("Failed to deserialize block id".to_owned())) })?) } else { Err(DbError::db_interaction_error( - "Block for this tx hash not found".to_string(), + "Block for this tx hash not found".to_owned(), )) } } @@ -789,12 +788,12 @@ impl RocksDBIO { write_batch.put_cf( &cf_ameta, borsh::to_vec(&acc_id).map_err(|err| { - DbError::borsh_cast_message(err, Some("Failed to serialize account id".to_string())) + DbError::borsh_cast_message(err, Some("Failed to serialize account id".to_owned())) })?, borsh::to_vec(&num_tx).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize acc metadata".to_string()), + Some("Failed to serialize acc metadata".to_owned()), ) })?, ); @@ -805,12 +804,12 @@ impl RocksDBIO { fn get_acc_meta_num_tx(&self, acc_id: [u8; 32]) -> DbResult> { let cf_ameta = self.account_meta_column(); let res = self.db.get_cf(&cf_ameta, acc_id).map_err(|rerr| { - DbError::rocksdb_cast_message(rerr, Some("Failed to read from acc meta cf".to_string())) + DbError::rocksdb_cast_message(rerr, Some("Failed to read from acc meta cf".to_owned())) })?; res.map(|data| { borsh::from_slice::(&data).map_err(|serr| { - DbError::borsh_cast_message(serr, Some("Failed to deserialize num tx".to_string())) + DbError::borsh_cast_message(serr, Some("Failed to deserialize num tx".to_owned())) }) }) .transpose() @@ -828,16 +827,18 @@ impl RocksDBIO { let mut write_batch = WriteBatch::new(); for (tx_id, tx_hash) in tx_hashes.iter().enumerate() { - let put_id = acc_num_tx + tx_id as u64; + let put_id = acc_num_tx + .checked_add( + u64::try_from(tx_id) + .expect("Transaction number for account expected to fit in u64"), + ) + .expect("Reached maximum number of transactions for account"); let mut prefix = borsh::to_vec(&acc_id).map_err(|berr| { - DbError::borsh_cast_message( - berr, - Some("Failed to serialize account id".to_string()), - ) + DbError::borsh_cast_message(berr, Some("Failed to serialize account id".to_owned())) })?; let suffix = borsh::to_vec(&put_id).map_err(|berr| { - DbError::borsh_cast_message(berr, Some("Failed to serialize tx id".to_string())) + DbError::borsh_cast_message(berr, Some("Failed to serialize tx id".to_owned())) })?; prefix.extend_from_slice(&suffix); @@ -848,7 +849,7 @@ impl RocksDBIO { borsh::to_vec(tx_hash).map_err(|berr| { DbError::borsh_cast_message( berr, - Some("Failed to serialize tx hash".to_string()), + Some("Failed to serialize tx hash".to_owned()), ) })?, ); @@ -856,12 +857,17 @@ impl RocksDBIO { self.update_acc_meta_batch( acc_id, - acc_num_tx + (tx_hashes.len() as u64), + acc_num_tx + .checked_add( + u64::try_from(tx_hashes.len()) + .expect("Number of transactions expected to fit in u64"), + ) + .expect("Reached maximum number of transactions for account"), &mut write_batch, )?; self.db.write(write_batch).map_err(|rerr| { - DbError::rocksdb_cast_message(rerr, Some("Failed to write batch".to_string())) + DbError::rocksdb_cast_message(rerr, Some("Failed to write batch".to_owned())) }) } @@ -876,15 +882,12 @@ impl RocksDBIO { // ToDo: Multi get this - for tx_id in offset..(offset + limit) { + for tx_id in offset..(offset.saturating_add(limit)) { let mut prefix = borsh::to_vec(&acc_id).map_err(|berr| { - DbError::borsh_cast_message( - berr, - Some("Failed to serialize account id".to_string()), - ) + DbError::borsh_cast_message(berr, Some("Failed to serialize account id".to_owned())) })?; let suffix = borsh::to_vec(&tx_id).map_err(|berr| { - DbError::borsh_cast_message(berr, Some("Failed to serialize tx id".to_string())) + DbError::borsh_cast_message(berr, Some("Failed to serialize tx id".to_owned())) })?; prefix.extend_from_slice(&suffix); @@ -898,7 +901,7 @@ impl RocksDBIO { Ok(borsh::from_slice::<[u8; 32]>(&data).map_err(|serr| { DbError::borsh_cast_message( serr, - Some("Failed to deserialize tx_hash".to_string()), + Some("Failed to deserialize tx_hash".to_owned()), ) })?) } else { @@ -941,8 +944,17 @@ impl RocksDBIO { } } +fn closest_breakpoint_id(block_id: u64) -> u64 { + block_id + .saturating_sub(1) + .checked_div(u64::from(BREAKPOINT_INTERVAL)) + .expect("Breakpoint interval is not zero") +} + #[cfg(test)] mod tests { + #![expect(clippy::shadow_unrelated, reason = "We don't care about it in tests")] + use nssa::AccountId; use tempfile::tempdir; @@ -999,12 +1011,12 @@ mod tests { } #[test] - fn test_start_db() { + fn start_db() { let temp_dir = tempdir().unwrap(); let temdir_path = temp_dir.path(); - let dbio = RocksDBIO::open_or_create(temdir_path, Some((genesis_block(), initial_state()))) - .unwrap(); + let dbio = + RocksDBIO::open_or_create(temdir_path, &genesis_block(), &initial_state()).unwrap(); let last_id = dbio.get_meta_last_block_in_db().unwrap(); let first_id = dbio.get_meta_first_block_in_db().unwrap(); @@ -1030,18 +1042,18 @@ mod tests { } #[test] - fn test_one_block_insertion() { + fn one_block_insertion() { let temp_dir = tempdir().unwrap(); let temdir_path = temp_dir.path(); - let dbio = RocksDBIO::open_or_create(temdir_path, Some((genesis_block(), initial_state()))) - .unwrap(); + let dbio = + RocksDBIO::open_or_create(temdir_path, &genesis_block(), &initial_state()).unwrap(); let prev_hash = genesis_block().header.hash; let transfer_tx = transfer(1, 0, true); let block = common::test_utils::produce_dummy_block(2, Some(prev_hash), vec![transfer_tx]); - dbio.put_block(block, [1; 32]).unwrap(); + dbio.put_block(&block, [1; 32]).unwrap(); let last_id = dbio.get_meta_last_block_in_db().unwrap(); let first_id = dbio.get_meta_first_block_in_db().unwrap(); @@ -1069,12 +1081,12 @@ mod tests { } #[test] - fn test_new_breakpoint() { + fn new_breakpoint() { let temp_dir = tempdir().unwrap(); let temdir_path = temp_dir.path(); - let dbio = RocksDBIO::open_or_create(temdir_path, Some((genesis_block(), initial_state()))) - .unwrap(); + let dbio = + RocksDBIO::open_or_create(temdir_path, &genesis_block(), &initial_state()).unwrap(); for i in 1..BREAKPOINT_INTERVAL { let last_id = dbio.get_meta_last_block_in_db().unwrap(); @@ -1087,7 +1099,7 @@ mod tests { Some(prev_hash), vec![transfer_tx], ); - dbio.put_block(block, [i; 32]).unwrap(); + dbio.put_block(&block, [i; 32]).unwrap(); } let last_id = dbio.get_meta_last_block_in_db().unwrap(); @@ -1125,12 +1137,12 @@ mod tests { } #[test] - fn test_simple_maps() { + fn simple_maps() { let temp_dir = tempdir().unwrap(); let temdir_path = temp_dir.path(); - let dbio = RocksDBIO::open_or_create(temdir_path, Some((genesis_block(), initial_state()))) - .unwrap(); + let dbio = + RocksDBIO::open_or_create(temdir_path, &genesis_block(), &initial_state()).unwrap(); let last_id = dbio.get_meta_last_block_in_db().unwrap(); let last_block = dbio.get_block(last_id).unwrap(); @@ -1141,7 +1153,7 @@ mod tests { let control_hash1 = block.header.hash; - dbio.put_block(block, [1; 32]).unwrap(); + dbio.put_block(&block, [1; 32]).unwrap(); let last_id = dbio.get_meta_last_block_in_db().unwrap(); let last_block = dbio.get_block(last_id).unwrap(); @@ -1152,7 +1164,7 @@ mod tests { let control_hash2 = block.header.hash; - dbio.put_block(block, [2; 32]).unwrap(); + dbio.put_block(&block, [2; 32]).unwrap(); let last_id = dbio.get_meta_last_block_in_db().unwrap(); let last_block = dbio.get_block(last_id).unwrap(); @@ -1163,7 +1175,7 @@ mod tests { let control_tx_hash1 = transfer_tx.hash(); let block = common::test_utils::produce_dummy_block(4, Some(prev_hash), vec![transfer_tx]); - dbio.put_block(block, [3; 32]).unwrap(); + dbio.put_block(&block, [3; 32]).unwrap(); let last_id = dbio.get_meta_last_block_in_db().unwrap(); let last_block = dbio.get_block(last_id).unwrap(); @@ -1174,7 +1186,7 @@ mod tests { let control_tx_hash2 = transfer_tx.hash(); let block = common::test_utils::produce_dummy_block(5, Some(prev_hash), vec![transfer_tx]); - dbio.put_block(block, [4; 32]).unwrap(); + dbio.put_block(&block, [4; 32]).unwrap(); let control_block_id1 = dbio.get_block_id_by_hash(control_hash1.0).unwrap(); let control_block_id2 = dbio.get_block_id_by_hash(control_hash2.0).unwrap(); @@ -1188,14 +1200,14 @@ mod tests { } #[test] - fn test_block_batch() { + fn block_batch() { let temp_dir = tempdir().unwrap(); let temdir_path = temp_dir.path(); let mut block_res = vec![]; - let dbio = RocksDBIO::open_or_create(temdir_path, Some((genesis_block(), initial_state()))) - .unwrap(); + let dbio = + RocksDBIO::open_or_create(temdir_path, &genesis_block(), &initial_state()).unwrap(); let last_id = dbio.get_meta_last_block_in_db().unwrap(); let last_block = dbio.get_block(last_id).unwrap(); @@ -1205,7 +1217,7 @@ mod tests { let block = common::test_utils::produce_dummy_block(2, Some(prev_hash), vec![transfer_tx]); block_res.push(block.clone()); - dbio.put_block(block, [1; 32]).unwrap(); + dbio.put_block(&block, [1; 32]).unwrap(); let last_id = dbio.get_meta_last_block_in_db().unwrap(); let last_block = dbio.get_block(last_id).unwrap(); @@ -1215,7 +1227,7 @@ mod tests { let block = common::test_utils::produce_dummy_block(3, Some(prev_hash), vec![transfer_tx]); block_res.push(block.clone()); - dbio.put_block(block, [2; 32]).unwrap(); + dbio.put_block(&block, [2; 32]).unwrap(); let last_id = dbio.get_meta_last_block_in_db().unwrap(); let last_block = dbio.get_block(last_id).unwrap(); @@ -1225,7 +1237,7 @@ mod tests { let block = common::test_utils::produce_dummy_block(4, Some(prev_hash), vec![transfer_tx]); block_res.push(block.clone()); - dbio.put_block(block, [3; 32]).unwrap(); + dbio.put_block(&block, [3; 32]).unwrap(); let last_id = dbio.get_meta_last_block_in_db().unwrap(); let last_block = dbio.get_block(last_id).unwrap(); @@ -1235,7 +1247,7 @@ mod tests { let block = common::test_utils::produce_dummy_block(5, Some(prev_hash), vec![transfer_tx]); block_res.push(block.clone()); - dbio.put_block(block, [4; 32]).unwrap(); + dbio.put_block(&block, [4; 32]).unwrap(); let block_hashes_mem: Vec<[u8; 32]> = block_res.into_iter().map(|bl| bl.header.hash.0).collect(); @@ -1266,14 +1278,14 @@ mod tests { } #[test] - fn test_account_map() { + fn account_map() { let temp_dir = tempdir().unwrap(); let temdir_path = temp_dir.path(); let mut tx_hash_res = vec![]; - let dbio = RocksDBIO::open_or_create(temdir_path, Some((genesis_block(), initial_state()))) - .unwrap(); + let dbio = + RocksDBIO::open_or_create(temdir_path, &genesis_block(), &initial_state()).unwrap(); let last_id = dbio.get_meta_last_block_in_db().unwrap(); let last_block = dbio.get_block(last_id).unwrap(); @@ -1285,7 +1297,7 @@ mod tests { let block = common::test_utils::produce_dummy_block(2, Some(prev_hash), vec![transfer_tx]); - dbio.put_block(block, [1; 32]).unwrap(); + dbio.put_block(&block, [1; 32]).unwrap(); let last_id = dbio.get_meta_last_block_in_db().unwrap(); let last_block = dbio.get_block(last_id).unwrap(); @@ -1297,7 +1309,7 @@ mod tests { let block = common::test_utils::produce_dummy_block(3, Some(prev_hash), vec![transfer_tx]); - dbio.put_block(block, [2; 32]).unwrap(); + dbio.put_block(&block, [2; 32]).unwrap(); let last_id = dbio.get_meta_last_block_in_db().unwrap(); let last_block = dbio.get_block(last_id).unwrap(); @@ -1309,7 +1321,7 @@ mod tests { let block = common::test_utils::produce_dummy_block(4, Some(prev_hash), vec![transfer_tx]); - dbio.put_block(block, [3; 32]).unwrap(); + dbio.put_block(&block, [3; 32]).unwrap(); let last_id = dbio.get_meta_last_block_in_db().unwrap(); let last_block = dbio.get_block(last_id).unwrap(); @@ -1321,7 +1333,7 @@ mod tests { let block = common::test_utils::produce_dummy_block(5, Some(prev_hash), vec![transfer_tx]); - dbio.put_block(block, [4; 32]).unwrap(); + dbio.put_block(&block, [4; 32]).unwrap(); let acc1_tx = dbio.get_acc_transactions(*acc1().value(), 0, 4).unwrap(); let acc1_tx_hashes: Vec<[u8; 32]> = acc1_tx.into_iter().map(|tx| tx.hash().0).collect(); diff --git a/storage/src/sequencer.rs b/storage/src/sequencer.rs index 2de123dc..04ddc8e5 100644 --- a/storage/src/sequencer.rs +++ b/storage/src/sequencer.rs @@ -50,7 +50,8 @@ pub struct RocksDBIO { impl RocksDBIO { pub fn open_or_create( path: &Path, - start_block: Option<(&Block, MantleMsgId)>, + genesis_block: &Block, + genesis_msg_id: MantleMsgId, ) -> DbResult { let mut cf_opts = Options::default(); cf_opts.set_max_write_buffer_number(16); @@ -66,33 +67,31 @@ impl RocksDBIO { &db_opts, path, vec![cfb, cfmeta, cfstate], - ); + ) + .map_err(|err| DbError::RocksDbError { + error: err, + additional_info: Some("Failed to open or create DB".to_owned()), + })?; - let dbio = Self { - // There is no point in handling this from runner code - db: db.unwrap(), - }; + let dbio = Self { db }; let is_start_set = dbio.get_meta_is_first_block_set()?; if is_start_set { Ok(dbio) - } else if let Some((block, msg_id)) = start_block { - let block_id = block.header.block_id; - dbio.put_meta_first_block_in_db(block, msg_id)?; + } else { + let block_id = genesis_block.header.block_id; + dbio.put_meta_first_block_in_db(genesis_block, genesis_msg_id)?; dbio.put_meta_is_first_block_set()?; dbio.put_meta_last_block_in_db(block_id)?; dbio.put_meta_last_finalized_block_id(None)?; dbio.put_meta_latest_block_meta(&BlockMeta { - id: block.header.block_id, - hash: block.header.hash, - msg_id, + id: genesis_block.header.block_id, + hash: genesis_block.header.hash, + msg_id: genesis_msg_id, })?; Ok(dbio) - } else { - // Here we are trying to start a DB without a block, one should not do it. - unreachable!() } } @@ -132,7 +131,7 @@ impl RocksDBIO { borsh::to_vec(&DB_META_FIRST_BLOCK_IN_DB_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_FIRST_BLOCK_IN_DB_KEY".to_string()), + Some("Failed to serialize DB_META_FIRST_BLOCK_IN_DB_KEY".to_owned()), ) })?, ) @@ -142,12 +141,12 @@ impl RocksDBIO { Ok(borsh::from_slice::(&data).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to deserialize first block".to_string()), + Some("Failed to deserialize first block".to_owned()), ) })?) } else { Err(DbError::db_interaction_error( - "First block not found".to_string(), + "First block not found".to_owned(), )) } } @@ -161,7 +160,7 @@ impl RocksDBIO { borsh::to_vec(&DB_META_LAST_BLOCK_IN_DB_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_LAST_BLOCK_IN_DB_KEY".to_string()), + Some("Failed to serialize DB_META_LAST_BLOCK_IN_DB_KEY".to_owned()), ) })?, ) @@ -171,12 +170,12 @@ impl RocksDBIO { Ok(borsh::from_slice::(&data).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to deserialize last block".to_string()), + Some("Failed to deserialize last block".to_owned()), ) })?) } else { Err(DbError::db_interaction_error( - "Last block not found".to_string(), + "Last block not found".to_owned(), )) } } @@ -190,7 +189,7 @@ impl RocksDBIO { borsh::to_vec(&DB_META_FIRST_BLOCK_SET_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_FIRST_BLOCK_SET_KEY".to_string()), + Some("Failed to serialize DB_META_FIRST_BLOCK_SET_KEY".to_owned()), ) })?, ) @@ -206,11 +205,11 @@ impl RocksDBIO { borsh::to_vec(&DB_NSSA_STATE_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_NSSA_STATE_KEY".to_string()), + Some("Failed to serialize DB_NSSA_STATE_KEY".to_owned()), ) })?, borsh::to_vec(state).map_err(|err| { - DbError::borsh_cast_message(err, Some("Failed to serialize NSSA state".to_string())) + DbError::borsh_cast_message(err, Some("Failed to serialize NSSA state".to_owned())) })?, ); @@ -225,13 +224,13 @@ impl RocksDBIO { borsh::to_vec(&DB_META_FIRST_BLOCK_IN_DB_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_FIRST_BLOCK_IN_DB_KEY".to_string()), + Some("Failed to serialize DB_META_FIRST_BLOCK_IN_DB_KEY".to_owned()), ) })?, borsh::to_vec(&block.header.block_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize first block id".to_string()), + Some("Failed to serialize first block id".to_owned()), ) })?, ) @@ -242,7 +241,7 @@ impl RocksDBIO { self.db.write(batch).map_err(|rerr| { DbError::rocksdb_cast_message( rerr, - Some("Failed to write first block in db".to_string()), + Some("Failed to write first block in db".to_owned()), ) })?; @@ -257,13 +256,13 @@ impl RocksDBIO { borsh::to_vec(&DB_META_LAST_BLOCK_IN_DB_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_LAST_BLOCK_IN_DB_KEY".to_string()), + Some("Failed to serialize DB_META_LAST_BLOCK_IN_DB_KEY".to_owned()), ) })?, borsh::to_vec(&block_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize last block id".to_string()), + Some("Failed to serialize last block id".to_owned()), ) })?, ) @@ -282,13 +281,13 @@ impl RocksDBIO { borsh::to_vec(&DB_META_LAST_BLOCK_IN_DB_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_LAST_BLOCK_IN_DB_KEY".to_string()), + Some("Failed to serialize DB_META_LAST_BLOCK_IN_DB_KEY".to_owned()), ) })?, borsh::to_vec(&block_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize last block id".to_string()), + Some("Failed to serialize last block id".to_owned()), ) })?, ); @@ -303,13 +302,13 @@ impl RocksDBIO { borsh::to_vec(&DB_META_LAST_FINALIZED_BLOCK_ID).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_LAST_FINALIZED_BLOCK_ID".to_string()), + Some("Failed to serialize DB_META_LAST_FINALIZED_BLOCK_ID".to_owned()), ) })?, borsh::to_vec(&block_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize last block id".to_string()), + Some("Failed to serialize last block id".to_owned()), ) })?, ) @@ -325,10 +324,10 @@ impl RocksDBIO { borsh::to_vec(&DB_META_FIRST_BLOCK_SET_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_FIRST_BLOCK_SET_KEY".to_string()), + Some("Failed to serialize DB_META_FIRST_BLOCK_SET_KEY".to_owned()), ) })?, - [1u8; 1], + [1_u8; 1], ) .map_err(|rerr| DbError::rocksdb_cast_message(rerr, None))?; Ok(()) @@ -342,13 +341,13 @@ impl RocksDBIO { borsh::to_vec(&DB_META_LATEST_BLOCK_META_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_LATEST_BLOCK_META_KEY".to_string()), + Some("Failed to serialize DB_META_LATEST_BLOCK_META_KEY".to_owned()), ) })?, borsh::to_vec(&block_meta).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize latest block meta".to_string()), + Some("Failed to serialize latest block meta".to_owned()), ) })?, ) @@ -367,13 +366,13 @@ impl RocksDBIO { borsh::to_vec(&DB_META_LATEST_BLOCK_META_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_LATEST_BLOCK_META_KEY".to_string()), + Some("Failed to serialize DB_META_LATEST_BLOCK_META_KEY".to_owned()), ) })?, borsh::to_vec(&block_meta).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize latest block meta".to_string()), + Some("Failed to serialize latest block meta".to_owned()), ) })?, ); @@ -389,7 +388,7 @@ impl RocksDBIO { borsh::to_vec(&DB_META_LATEST_BLOCK_META_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize DB_META_LATEST_BLOCK_META_KEY".to_string()), + Some("Failed to serialize DB_META_LATEST_BLOCK_META_KEY".to_owned()), ) })?, ) @@ -399,12 +398,12 @@ impl RocksDBIO { Ok(borsh::from_slice::(&data).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to deserialize latest block meta".to_string()), + Some("Failed to deserialize latest block meta".to_owned()), ) })?) } else { Err(DbError::db_interaction_error( - "Latest block meta not found".to_string(), + "Latest block meta not found".to_owned(), )) } } @@ -437,10 +436,10 @@ impl RocksDBIO { batch.put_cf( &cf_block, borsh::to_vec(&block.header.block_id).map_err(|err| { - DbError::borsh_cast_message(err, Some("Failed to serialize block id".to_string())) + DbError::borsh_cast_message(err, Some("Failed to serialize block id".to_owned())) })?, borsh::to_vec(block).map_err(|err| { - DbError::borsh_cast_message(err, Some("Failed to serialize block data".to_string())) + DbError::borsh_cast_message(err, Some("Failed to serialize block data".to_owned())) })?, ); Ok(()) @@ -455,7 +454,7 @@ impl RocksDBIO { borsh::to_vec(&block_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize block id".to_string()), + Some("Failed to serialize block id".to_owned()), ) })?, ) @@ -465,12 +464,12 @@ impl RocksDBIO { Ok(borsh::from_slice::(&data).map_err(|serr| { DbError::borsh_cast_message( serr, - Some("Failed to deserialize block data".to_string()), + Some("Failed to deserialize block data".to_owned()), ) })?) } else { Err(DbError::db_interaction_error( - "Block on this id not found".to_string(), + "Block on this id not found".to_owned(), )) } } @@ -484,7 +483,7 @@ impl RocksDBIO { borsh::to_vec(&DB_NSSA_STATE_KEY).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize block id".to_string()), + Some("Failed to serialize block id".to_owned()), ) })?, ) @@ -494,12 +493,12 @@ impl RocksDBIO { Ok(borsh::from_slice::(&data).map_err(|serr| { DbError::borsh_cast_message( serr, - Some("Failed to deserialize block data".to_string()), + Some("Failed to deserialize block data".to_owned()), ) })?) } else { Err(DbError::db_interaction_error( - "Block on this id not found".to_string(), + "Block on this id not found".to_owned(), )) } } @@ -507,7 +506,7 @@ impl RocksDBIO { pub fn delete_block(&self, block_id: u64) -> DbResult<()> { let cf_block = self.block_column(); let key = borsh::to_vec(&block_id).map_err(|err| { - DbError::borsh_cast_message(err, Some("Failed to serialize block id".to_string())) + DbError::borsh_cast_message(err, Some("Failed to serialize block id".to_owned())) })?; if self @@ -517,7 +516,7 @@ impl RocksDBIO { .is_none() { return Err(DbError::db_interaction_error( - "Block on this id not found".to_string(), + "Block on this id not found".to_owned(), )); } @@ -539,13 +538,13 @@ impl RocksDBIO { borsh::to_vec(&block_id).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize block id".to_string()), + Some("Failed to serialize block id".to_owned()), ) })?, borsh::to_vec(&block).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to serialize block data".to_string()), + Some("Failed to serialize block data".to_owned()), ) })?, ) @@ -567,14 +566,14 @@ impl RocksDBIO { let (_key, value) = res.map_err(|rerr| { DbError::rocksdb_cast_message( rerr, - Some("Failed to get key value pair".to_string()), + Some("Failed to get key value pair".to_owned()), ) })?; borsh::from_slice::(&value).map_err(|err| { DbError::borsh_cast_message( err, - Some("Failed to deserialize block data".to_string()), + Some("Failed to deserialize block data".to_owned()), ) }) }) diff --git a/test_program_methods/guest/src/bin/burner.rs b/test_program_methods/guest/src/bin/burner.rs index e9abdc16..a2256aa3 100644 --- a/test_program_methods/guest/src/bin/burner.rs +++ b/test_program_methods/guest/src/bin/burner.rs @@ -17,7 +17,7 @@ fn main() { let account_pre = &pre.account; let mut account_post = account_pre.clone(); - account_post.balance -= balance_to_burn; + account_post.balance = account_post.balance.saturating_sub(balance_to_burn); write_nssa_outputs( instruction_words, diff --git a/test_program_methods/guest/src/bin/chain_caller.rs b/test_program_methods/guest/src/bin/chain_caller.rs index e430a0fa..bc17391c 100644 --- a/test_program_methods/guest/src/bin/chain_caller.rs +++ b/test_program_methods/guest/src/bin/chain_caller.rs @@ -42,8 +42,16 @@ fn main() { }; chained_calls.push(new_chained_call); - running_sender_pre.account.balance -= balance; - running_recipient_pre.account.balance += balance; + running_sender_pre.account.balance = + match running_sender_pre.account.balance.checked_sub(balance) { + Some(new_balance) => new_balance, + None => return, + }; + running_recipient_pre.account.balance = + match running_recipient_pre.account.balance.checked_add(balance) { + Some(new_balance) => new_balance, + None => return, + }; } write_nssa_outputs_with_chained_call( diff --git a/test_program_methods/guest/src/bin/minter.rs b/test_program_methods/guest/src/bin/minter.rs index 7a97a3cb..a602df56 100644 --- a/test_program_methods/guest/src/bin/minter.rs +++ b/test_program_methods/guest/src/bin/minter.rs @@ -11,7 +11,10 @@ fn main() { let account_pre = &pre.account; let mut account_post = account_pre.clone(); - account_post.balance += 1; + account_post.balance = account_post + .balance + .checked_add(1) + .expect("Balance overflow"); write_nssa_outputs( instruction_words, diff --git a/test_program_methods/guest/src/bin/modified_transfer.rs b/test_program_methods/guest/src/bin/modified_transfer.rs index 31e8db5e..3aee3816 100644 --- a/test_program_methods/guest/src/bin/modified_transfer.rs +++ b/test_program_methods/guest/src/bin/modified_transfer.rs @@ -1,3 +1,8 @@ +#![expect( + clippy::arithmetic_side_effects, + reason = "This program is intentionally malicious and is expected to have side effects." +)] + use nssa_core::{ account::{Account, AccountWithMetadata}, program::{AccountPostState, ProgramInput, read_nssa_inputs, write_nssa_outputs}, diff --git a/test_program_methods/guest/src/bin/nonce_changer.rs b/test_program_methods/guest/src/bin/nonce_changer.rs index c5653136..d7bea154 100644 --- a/test_program_methods/guest/src/bin/nonce_changer.rs +++ b/test_program_methods/guest/src/bin/nonce_changer.rs @@ -11,7 +11,7 @@ fn main() { let account_pre = &pre.account; let mut account_post = account_pre.clone(); - account_post.nonce += 1; + account_post.nonce = account_post.nonce.overflowing_add(1).0; write_nssa_outputs( instruction_words, diff --git a/test_program_methods/guest/src/bin/simple_balance_transfer.rs b/test_program_methods/guest/src/bin/simple_balance_transfer.rs index b6522a8a..55bbfcef 100644 --- a/test_program_methods/guest/src/bin/simple_balance_transfer.rs +++ b/test_program_methods/guest/src/bin/simple_balance_transfer.rs @@ -17,8 +17,14 @@ fn main() { let mut sender_post = sender_pre.account.clone(); let mut receiver_post = receiver_pre.account.clone(); - sender_post.balance -= balance; - receiver_post.balance += balance; + sender_post.balance = sender_post + .balance + .checked_sub(balance) + .expect("Not enough balance to transfer"); + receiver_post.balance = receiver_post + .balance + .checked_add(balance) + .expect("Overflow when adding balance"); write_nssa_outputs( instruction_words, diff --git a/wallet-ffi/src/error.rs b/wallet-ffi/src/error.rs index 81c52daa..b48eb31f 100644 --- a/wallet-ffi/src/error.rs +++ b/wallet-ffi/src/error.rs @@ -54,6 +54,10 @@ impl WalletFfiError { } /// Log an error message to stderr. +#[expect( + clippy::print_stderr, + reason = "In FFI context it's better to print errors than to return strings" +)] pub fn print_error(msg: impl Into) { eprintln!("[wallet-ffi] {}", msg.into()); } diff --git a/wallet-ffi/src/keys.rs b/wallet-ffi/src/keys.rs index ab6982c0..8030bf5a 100644 --- a/wallet-ffi/src/keys.rs +++ b/wallet-ffi/src/keys.rs @@ -130,6 +130,10 @@ pub unsafe extern "C" fn wallet_ffi_get_private_account_keys( let vpk_len = vpk_bytes.len(); let vpk_vec = vpk_bytes.to_vec(); let vpk_boxed = vpk_vec.into_boxed_slice(); + #[expect( + clippy::as_conversions, + reason = "We need to convert the boxed slice into a raw pointer for FFI" + )] let vpk_ptr = Box::into_raw(vpk_boxed) as *const u8; unsafe { diff --git a/wallet-ffi/src/lib.rs b/wallet-ffi/src/lib.rs index 9069fece..190c52ab 100644 --- a/wallet-ffi/src/lib.rs +++ b/wallet-ffi/src/lib.rs @@ -20,6 +20,22 @@ //! - Use the corresponding `wallet_ffi_free_*` function to free memory //! - Never free memory returned by FFI using standard C `free()` +#![expect( + clippy::undocumented_unsafe_blocks, + clippy::multiple_unsafe_ops_per_block, + reason = "TODO: fix later" +)] + +use std::sync::OnceLock; + +use common::error::ExecutionFailureKind; +// Re-export public types for cbindgen +pub use error::WalletFfiError as FfiError; +use tokio::runtime::Handle; +pub use types::*; + +use crate::error::print_error; + pub mod account; pub mod error; pub mod keys; @@ -29,15 +45,6 @@ pub mod transfer; pub mod types; pub mod wallet; -use std::sync::OnceLock; - -// Re-export public types for cbindgen -pub use error::WalletFfiError as FfiError; -use tokio::runtime::Handle; -pub use types::*; - -use crate::error::print_error; - static TOKIO_RUNTIME: OnceLock = OnceLock::new(); /// Get a reference to the global runtime. @@ -62,3 +69,22 @@ pub(crate) fn block_on(future: F) -> F::Output { let runtime = get_runtime(); runtime.block_on(future) } + +#[expect( + clippy::needless_pass_by_value, + reason = "Error is consumed to create FFI error response" +)] +#[expect( + clippy::wildcard_enum_match_arm, + reason = "We want to catch all errors for future proofing" +)] +pub(crate) fn map_execution_error(e: ExecutionFailureKind) -> FfiError { + match e { + ExecutionFailureKind::InsufficientFundsError => FfiError::InsufficientFunds, + ExecutionFailureKind::KeyNotFoundError => FfiError::KeyNotFound, + ExecutionFailureKind::SequencerError(_) | ExecutionFailureKind::SequencerClientError(_) => { + FfiError::NetworkError + } + _ => FfiError::InternalError, + } +} diff --git a/wallet-ffi/src/pinata.rs b/wallet-ffi/src/pinata.rs index ad15a4d6..7c8e21d0 100644 --- a/wallet-ffi/src/pinata.rs +++ b/wallet-ffi/src/pinata.rs @@ -2,7 +2,6 @@ use std::{ffi::CString, ptr, slice}; -use common::error::ExecutionFailureKind; use nssa::AccountId; use nssa_core::MembershipProof; use wallet::program_facades::pinata::Pinata; @@ -10,6 +9,7 @@ use wallet::program_facades::pinata::Pinata; use crate::{ block_on, error::{print_error, WalletFfiError}, + map_execution_error, types::{FfiBytes32, FfiTransferResult, WalletHandle}, wallet::get_wallet, }; @@ -92,7 +92,7 @@ pub unsafe extern "C" fn wallet_ffi_claim_pinata( (*out_result).tx_hash = ptr::null_mut(); (*out_result).success = false; } - map_execution_error(&e) + map_execution_error(e) } } } @@ -201,7 +201,7 @@ pub unsafe extern "C" fn wallet_ffi_claim_pinata_private_owned_already_initializ (*out_result).tx_hash = ptr::null_mut(); (*out_result).success = false; } - map_execution_error(&e) + map_execution_error(e) } } } @@ -287,18 +287,7 @@ pub unsafe extern "C" fn wallet_ffi_claim_pinata_private_owned_not_initialized( (*out_result).tx_hash = ptr::null_mut(); (*out_result).success = false; } - map_execution_error(&e) + map_execution_error(e) } } } - -fn map_execution_error(e: &ExecutionFailureKind) -> WalletFfiError { - match e { - ExecutionFailureKind::InsufficientFundsError => WalletFfiError::InsufficientFunds, - ExecutionFailureKind::KeyNotFoundError => WalletFfiError::KeyNotFound, - ExecutionFailureKind::SequencerError | ExecutionFailureKind::SequencerClientError(_) => { - WalletFfiError::NetworkError - } - _ => WalletFfiError::InternalError, - } -} diff --git a/wallet-ffi/src/transfer.rs b/wallet-ffi/src/transfer.rs index 5bee3420..da1892dd 100644 --- a/wallet-ffi/src/transfer.rs +++ b/wallet-ffi/src/transfer.rs @@ -2,13 +2,13 @@ use std::{ffi::CString, ptr}; -use common::error::ExecutionFailureKind; use nssa::AccountId; use wallet::program_facades::native_token_transfer::NativeTokenTransfer; use crate::{ block_on, error::{print_error, WalletFfiError}, + map_execution_error, types::{FfiBytes32, FfiTransferResult, WalletHandle}, wallet::get_wallet, FfiPrivateAccountKeys, @@ -685,18 +685,3 @@ pub unsafe extern "C" fn wallet_ffi_free_transfer_result(result: *mut FfiTransfe } } } - -#[expect( - clippy::needless_pass_by_value, - reason = "Error is consumed to create FFI error response" -)] -fn map_execution_error(e: ExecutionFailureKind) -> WalletFfiError { - match e { - ExecutionFailureKind::InsufficientFundsError => WalletFfiError::InsufficientFunds, - ExecutionFailureKind::KeyNotFoundError => WalletFfiError::KeyNotFound, - ExecutionFailureKind::SequencerError | ExecutionFailureKind::SequencerClientError(_) => { - WalletFfiError::NetworkError - } - _ => WalletFfiError::InternalError, - } -} diff --git a/wallet-ffi/src/types.rs b/wallet-ffi/src/types.rs index 2922e5d1..c689fe8e 100644 --- a/wallet-ffi/src/types.rs +++ b/wallet-ffi/src/types.rs @@ -199,6 +199,10 @@ impl From for nssa::AccountId { } impl From for FfiAccount { + #[expect( + clippy::as_conversions, + reason = "We need to convert to byte arrays for FFI" + )] fn from(value: nssa::Account) -> Self { // Convert account data to FFI type let data_vec: Vec = value.data.into(); @@ -230,7 +234,8 @@ impl TryFrom<&FfiAccount> for nssa::Account { let data = if value.data_len > 0 { unsafe { let slice = slice::from_raw_parts(value.data, value.data_len); - Data::try_from(slice.to_vec()).map_err(|_| WalletFfiError::InvalidTypeConversion)? + Data::try_from(slice.to_vec()) + .map_err(|_err| WalletFfiError::InvalidTypeConversion)? } } else { Data::default() @@ -257,7 +262,7 @@ impl TryFrom<&FfiPublicAccountKey> for nssa::PublicKey { fn try_from(value: &FfiPublicAccountKey) -> Result { let public_key = nssa::PublicKey::try_new(value.public_key.data) - .map_err(|_| WalletFfiError::InvalidTypeConversion)?; + .map_err(|_err| WalletFfiError::InvalidTypeConversion)?; Ok(public_key) } } diff --git a/wallet-ffi/src/wallet.rs b/wallet-ffi/src/wallet.rs index 26a31c20..9117d0ee 100644 --- a/wallet-ffi/src/wallet.rs +++ b/wallet-ffi/src/wallet.rs @@ -32,7 +32,7 @@ pub(crate) fn get_wallet( } /// Helper to get a mutable reference to the wallet wrapper. -#[allow(dead_code)] +#[expect(dead_code, reason = "Maybe used later")] pub(crate) fn get_wallet_mut( handle: *mut WalletHandle, ) -> Result<&'static mut WalletWrapper, WalletFfiError> { @@ -69,7 +69,7 @@ fn c_str_to_string(ptr: *const c_char, name: &str) -> Result Ok(s.to_string()), + Ok(s) => Ok(s.to_owned()), Err(e) => { print_error(format!("Invalid UTF-8 in {name}: {e}")); Err(WalletFfiError::InvalidUtf8) diff --git a/wallet/src/chain_storage.rs b/wallet/src/chain_storage.rs index a4b22a31..df703dc0 100644 --- a/wallet/src/chain_storage.rs +++ b/wallet/src/chain_storage.rs @@ -20,6 +20,10 @@ pub struct WalletChainStore { } impl WalletChainStore { + #[expect( + clippy::wildcard_enum_match_arm, + reason = "We perform search for specific variants only" + )] pub fn new( config: WalletConfig, persistent_accounts: Vec, @@ -158,7 +162,7 @@ impl WalletChainStore { #[cfg(test)] mod tests { use key_protocol::key_management::key_tree::{ - keys_private::ChildKeysPrivate, keys_public::ChildKeysPublic, traits::KeyNode, + keys_private::ChildKeysPrivate, keys_public::ChildKeysPublic, traits::KeyNode as _, }; use super::*; @@ -281,16 +285,16 @@ mod tests { chain_index: ChainIndex::root(), data: public_data, }), - PersistentAccountData::Private(PersistentAccountDataPrivate { + PersistentAccountData::Private(Box::new(PersistentAccountDataPrivate { account_id: private_data.account_id(), chain_index: ChainIndex::root(), data: private_data, - }), + })), ] } #[test] - fn test_new_initializes_correctly() { + fn new_initializes_correctly() { let config = create_sample_wallet_config(); let accs = create_sample_persistent_accounts(); diff --git a/wallet/src/cli/account.rs b/wallet/src/cli/account.rs index bd028794..bb9f9700 100644 --- a/wallet/src/cli/account.rs +++ b/wallet/src/cli/account.rs @@ -31,7 +31,7 @@ pub enum AccountSubcommand { #[command(subcommand)] New(NewSubcommand), /// Sync private accounts - SyncPrivate {}, + SyncPrivate, /// List all accounts owned by the wallet #[command(visible_alias = "ls")] List { @@ -80,7 +80,7 @@ impl WalletSubcommand for NewSubcommand { ) -> Result { match self { NewSubcommand::Public { cci, label } => { - if let Some(ref label) = label + if let Some(label) = &label && wallet_core .storage .labels @@ -117,7 +117,7 @@ impl WalletSubcommand for NewSubcommand { Ok(SubcommandReturnValue::RegisterAccount { account_id }) } NewSubcommand::Private { cci, label } => { - if let Some(ref label) = label + if let Some(label) = &label && wallet_core .storage .labels @@ -159,49 +159,8 @@ impl WalletSubcommand for NewSubcommand { } } -/// Formats account details for display, returning (description, `json_view`) -fn format_account_details(account: &Account) -> (String, String) { - let auth_tr_prog_id = Program::authenticated_transfer_program().id(); - let token_prog_id = Program::token().id(); - - match &account.program_owner { - o if *o == auth_tr_prog_id => { - let account_hr: HumanReadableAccount = account.clone().into(); - ( - "Account owned by authenticated transfer program".to_string(), - serde_json::to_string(&account_hr).unwrap(), - ) - } - o if *o == token_prog_id => { - if let Ok(token_def) = TokenDefinition::try_from(&account.data) { - ( - "Definition account owned by token program".to_string(), - serde_json::to_string(&token_def).unwrap(), - ) - } else if let Ok(token_hold) = TokenHolding::try_from(&account.data) { - ( - "Holding account owned by token program".to_string(), - serde_json::to_string(&token_hold).unwrap(), - ) - } else { - let account_hr: HumanReadableAccount = account.clone().into(); - ( - "Unknown token program account".to_string(), - serde_json::to_string(&account_hr).unwrap(), - ) - } - } - _ => { - let account_hr: HumanReadableAccount = account.clone().into(); - ( - "Account".to_string(), - serde_json::to_string(&account_hr).unwrap(), - ) - } - } -} - impl WalletSubcommand for AccountSubcommand { + #[expect(clippy::cognitive_complexity, reason = "TODO: fix later")] async fn handle_subcommand( self, wallet_core: &mut WalletCore, @@ -286,7 +245,7 @@ impl WalletSubcommand for AccountSubcommand { AccountSubcommand::New(new_subcommand) => { new_subcommand.handle_subcommand(wallet_core).await } - AccountSubcommand::SyncPrivate {} => { + AccountSubcommand::SyncPrivate => { let curr_last_block = wallet_core .sequencer_client .get_last_block() @@ -318,7 +277,7 @@ impl WalletSubcommand for AccountSubcommand { if let Some(label) = labels.get(&id_str) { format!("{prefix} [{label}]") } else { - prefix.to_string() + prefix.to_owned() } }; @@ -453,3 +412,45 @@ impl WalletSubcommand for AccountSubcommand { } } } + +/// Formats account details for display, returning (description, `json_view`) +fn format_account_details(account: &Account) -> (String, String) { + let auth_tr_prog_id = Program::authenticated_transfer_program().id(); + let token_prog_id = Program::token().id(); + + match &account.program_owner { + o if *o == auth_tr_prog_id => { + let account_hr: HumanReadableAccount = account.clone().into(); + ( + "Account owned by authenticated transfer program".to_string(), + serde_json::to_string(&account_hr).unwrap(), + ) + } + o if *o == token_prog_id => { + if let Ok(token_def) = TokenDefinition::try_from(&account.data) { + ( + "Definition account owned by token program".to_owned(), + serde_json::to_string(&token_def).unwrap(), + ) + } else if let Ok(token_hold) = TokenHolding::try_from(&account.data) { + ( + "Holding account owned by token program".to_string(), + serde_json::to_string(&token_hold).unwrap(), + ) + } else { + let account_hr: HumanReadableAccount = account.clone().into(); + ( + "Unknown token program account".to_owned(), + serde_json::to_string(&account_hr).unwrap(), + ) + } + } + _ => { + let account_hr: HumanReadableAccount = account.clone().into(); + ( + "Account".to_owned(), + serde_json::to_string(&account_hr).unwrap(), + ) + } + } +} diff --git a/wallet/src/cli/chain.rs b/wallet/src/cli/chain.rs index 1e3ec029..3979a84f 100644 --- a/wallet/src/cli/chain.rs +++ b/wallet/src/cli/chain.rs @@ -11,7 +11,7 @@ use crate::{ #[derive(Subcommand, Debug, Clone)] pub enum ChainSubcommand { /// Get current block id from sequencer - CurrentBlockId {}, + CurrentBlockId, /// Get block at id from sequencer Block { #[arg(short, long)] @@ -31,7 +31,7 @@ impl WalletSubcommand for ChainSubcommand { wallet_core: &mut WalletCore, ) -> Result { match self { - ChainSubcommand::CurrentBlockId {} => { + ChainSubcommand::CurrentBlockId => { let latest_block_res = wallet_core.sequencer_client.get_last_block().await?; println!("Last block id is {}", latest_block_res.last_block); diff --git a/wallet/src/cli/mod.rs b/wallet/src/cli/mod.rs index 42e2b4b2..a53f8047 100644 --- a/wallet/src/cli/mod.rs +++ b/wallet/src/cli/mod.rs @@ -1,6 +1,6 @@ -use std::{io::Write, path::PathBuf}; +use std::{io::Write as _, path::PathBuf, sync::Arc}; -use anyhow::{Context, Result}; +use anyhow::{Context as _, Result}; use clap::{Parser, Subcommand}; use common::HashType; use nssa::{ProgramDeploymentTransaction, program::Program}; @@ -52,7 +52,7 @@ pub enum Command { AMM(AmmProgramAgnosticSubcommand), /// Check the wallet can connect to the node and builtin local programs /// match the remote versions - CheckHealth {}, + CheckHealth, /// Command to setup config, get and set config fields #[command(subcommand)] Config(ConfigSubcommand), @@ -114,7 +114,7 @@ pub async fn execute_subcommand( Command::Pinata(pinata_subcommand) => { pinata_subcommand.handle_subcommand(wallet_core).await? } - Command::CheckHealth {} => { + Command::CheckHealth => { let remote_program_ids = wallet_core .sequencer_client .get_program_ids() @@ -150,7 +150,7 @@ pub async fn execute_subcommand( "Local ID for AMM program is different from remote" ); - println!("✅All looks good!"); + println!("\u{2705}All looks good!"); SubcommandReturnValue::Empty } @@ -206,7 +206,7 @@ pub fn read_password_from_stdin() -> Result { std::io::stdout().flush()?; std::io::stdin().read_line(&mut password)?; - Ok(password.trim().to_string()) + Ok(password.trim().to_owned()) } pub async fn execute_keys_restoration(wallet_core: &mut WalletCore, depth: u32) -> Result<()> { @@ -230,7 +230,7 @@ pub async fn execute_keys_restoration(wallet_core: &mut WalletCore, depth: u32) .storage .user_data .public_key_tree - .cleanup_tree_remove_uninit_layered(depth, wallet_core.sequencer_client.clone()) + .cleanup_tree_remove_uninit_layered(depth, Arc::clone(&wallet_core.sequencer_client)) .await?; println!("Public tree cleaned up"); diff --git a/wallet/src/cli/programs/native_token_transfer.rs b/wallet/src/cli/programs/native_token_transfer.rs index f03194ca..b891976b 100644 --- a/wallet/src/cli/programs/native_token_transfer.rs +++ b/wallet/src/cli/programs/native_token_transfer.rs @@ -346,7 +346,7 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommandPrivate { let to_npk = nssa_core::NullifierPublicKey(to_npk); let to_vpk_res = hex::decode(to_vpk)?; - let mut to_vpk = [0u8; 33]; + let mut to_vpk = [0_u8; 33]; to_vpk.copy_from_slice(&to_vpk_res); let to_vpk = nssa_core::encryption::shared_key_derivation::Secp256k1Point(to_vpk.to_vec()); @@ -423,7 +423,7 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommandShielded { let to_npk = nssa_core::NullifierPublicKey(to_npk); let to_vpk_res = hex::decode(to_vpk)?; - let mut to_vpk = [0u8; 33]; + let mut to_vpk = [0_u8; 33]; to_vpk.copy_from_slice(&to_vpk_res); let to_vpk = nssa_core::encryption::shared_key_derivation::Secp256k1Point(to_vpk.to_vec()); diff --git a/wallet/src/cli/programs/pinata.rs b/wallet/src/cli/programs/pinata.rs index 1fec8058..0af61314 100644 --- a/wallet/src/cli/programs/pinata.rs +++ b/wallet/src/cli/programs/pinata.rs @@ -1,4 +1,4 @@ -use anyhow::{Context, Result}; +use anyhow::{Context as _, Result}; use clap::Subcommand; use common::{PINATA_BASE58, transaction::NSSATransaction}; use nssa::{Account, AccountId}; @@ -34,13 +34,13 @@ impl WalletSubcommand for PinataProgramAgnosticSubcommand { match to_addr_privacy { AccountPrivacyKind::Public => { PinataProgramSubcommand::Public(PinataProgramSubcommandPublic::Claim { - pinata_account_id: PINATA_BASE58.to_string(), + pinata_account_id: PINATA_BASE58.to_owned(), winner_account_id: to, }) } AccountPrivacyKind::Private => PinataProgramSubcommand::Private( PinataProgramSubcommandPrivate::ClaimPrivateOwned { - pinata_account_id: PINATA_BASE58.to_string(), + pinata_account_id: PINATA_BASE58.to_owned(), winner_account_id: to, }, ), @@ -242,7 +242,7 @@ async fn find_solution(wallet: &WalletCore, pinata_account_id: AccountId) -> Res .data .as_ref() .try_into() - .map_err(|_| anyhow::Error::msg("invalid pinata account data"))?; + .map_err(|_err| anyhow::Error::msg("invalid pinata account data"))?; println!("Computing solution for pinata..."); let now = std::time::Instant::now(); @@ -257,7 +257,7 @@ fn compute_solution(data: [u8; 33]) -> u128 { let difficulty = data[0]; let seed = &data[1..]; - let mut solution = 0u128; + let mut solution = 0_u128; while !validate_solution(difficulty, seed, solution) { solution = solution.checked_add(1).expect("solution overflowed u128"); } @@ -276,6 +276,6 @@ fn validate_solution(difficulty: u8, seed: &[u8], solution: u128) -> bool { hasher.update(bytes); let digest: [u8; 32] = hasher.finalize_fixed().into(); - let difficulty = difficulty as usize; + let difficulty = usize::from(difficulty); digest[..difficulty].iter().all(|&b| b == 0) } diff --git a/wallet/src/cli/programs/token.rs b/wallet/src/cli/programs/token.rs index 805cbbd4..343960ac 100644 --- a/wallet/src/cli/programs/token.rs +++ b/wallet/src/cli/programs/token.rs @@ -755,7 +755,7 @@ impl WalletSubcommand for TokenProgramSubcommandPrivate { let recipient_npk = nssa_core::NullifierPublicKey(recipient_npk); let recipient_vpk_res = hex::decode(recipient_vpk)?; - let mut recipient_vpk = [0u8; 33]; + let mut recipient_vpk = [0_u8; 33]; recipient_vpk.copy_from_slice(&recipient_vpk_res); let recipient_vpk = nssa_core::encryption::shared_key_derivation::Secp256k1Point( recipient_vpk.to_vec(), @@ -876,7 +876,7 @@ impl WalletSubcommand for TokenProgramSubcommandPrivate { let holder_npk = nssa_core::NullifierPublicKey(holder_npk); let holder_vpk_res = hex::decode(holder_vpk)?; - let mut holder_vpk = [0u8; 33]; + let mut holder_vpk = [0_u8; 33]; holder_vpk.copy_from_slice(&holder_vpk_res); let holder_vpk = nssa_core::encryption::shared_key_derivation::Secp256k1Point( holder_vpk.to_vec(), @@ -1044,7 +1044,7 @@ impl WalletSubcommand for TokenProgramSubcommandShielded { let recipient_npk = nssa_core::NullifierPublicKey(recipient_npk); let recipient_vpk_res = hex::decode(recipient_vpk)?; - let mut recipient_vpk = [0u8; 33]; + let mut recipient_vpk = [0_u8; 33]; recipient_vpk.copy_from_slice(&recipient_vpk_res); let recipient_vpk = nssa_core::encryption::shared_key_derivation::Secp256k1Point( recipient_vpk.to_vec(), @@ -1188,7 +1188,7 @@ impl WalletSubcommand for TokenProgramSubcommandShielded { let holder_npk = nssa_core::NullifierPublicKey(holder_npk); let holder_vpk_res = hex::decode(holder_vpk)?; - let mut holder_vpk = [0u8; 33]; + let mut holder_vpk = [0_u8; 33]; holder_vpk.copy_from_slice(&holder_vpk_res); let holder_vpk = nssa_core::encryption::shared_key_derivation::Secp256k1Point( holder_vpk.to_vec(), diff --git a/wallet/src/config.rs b/wallet/src/config.rs index c555e4ed..ce1cf2ba 100644 --- a/wallet/src/config.rs +++ b/wallet/src/config.rs @@ -48,21 +48,19 @@ pub struct PersistentAccountDataPrivate { // Big difference in enum variants sizes // however it is improbable, that we will have that much accounts, that it will substantialy affect // memory -#[allow(clippy::large_enum_variant)] #[derive(Debug, Clone, Serialize, Deserialize)] pub enum InitialAccountData { Public(InitialAccountDataPublic), - Private(InitialAccountDataPrivate), + Private(Box), } // Big difference in enum variants sizes // however it is improbable, that we will have that much accounts, that it will substantialy affect // memory -#[allow(clippy::large_enum_variant)] #[derive(Debug, Clone, Serialize, Deserialize)] pub enum PersistentAccountData { Public(PersistentAccountDataPublic), - Private(PersistentAccountDataPrivate), + Private(Box), Preconfigured(InitialAccountData), } @@ -95,6 +93,10 @@ pub struct PersistentStorage { impl PersistentStorage { pub fn from_path(path: &Path) -> Result { + #[expect( + clippy::wildcard_enum_match_arm, + reason = "We want to provide a specific error message for not found case" + )] match std::fs::File::open(path) { Ok(file) => { let storage_content = BufReader::new(file); @@ -141,7 +143,7 @@ impl From for InitialAccountData { impl From for InitialAccountData { fn from(value: InitialAccountDataPrivate) -> Self { - Self::Private(value) + Self::Private(Box::new(value)) } } @@ -153,7 +155,7 @@ impl From for PersistentAccountData { impl From for PersistentAccountData { fn from(value: PersistentAccountDataPrivate) -> Self { - Self::Private(value) + Self::Private(Box::new(value)) } } diff --git a/wallet/src/helperfunctions.rs b/wallet/src/helperfunctions.rs index fb3f8f8f..fe4fdec3 100644 --- a/wallet/src/helperfunctions.rs +++ b/wallet/src/helperfunctions.rs @@ -1,11 +1,11 @@ -use std::{collections::HashMap, path::PathBuf, str::FromStr}; +use std::{collections::HashMap, path::PathBuf, str::FromStr as _}; -use anyhow::Result; -use base58::ToBase58; +use anyhow::{Context as _, Result}; +use base58::ToBase58 as _; use key_protocol::key_protocol_core::NSSAUserData; use nssa::Account; use nssa_core::account::Nonce; -use rand::{RngCore, rngs::OsRng}; +use rand::{RngCore as _, rngs::OsRng}; use serde::Serialize; use crate::{ @@ -16,6 +16,39 @@ use crate::{ }, }; +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum AccountPrivacyKind { + Public, + Private, +} + +/// Human-readable representation of an account. +#[derive(Serialize)] +pub(crate) struct HumanReadableAccount { + balance: u128, + program_owner: String, + data: String, + nonce: u128, +} + +impl From for HumanReadableAccount { + fn from(account: Account) -> Self { + let program_owner = account + .program_owner + .iter() + .flat_map(|n| n.to_le_bytes()) + .collect::>() + .to_base58(); + let data = hex::encode(account.data); + Self { + balance: account.balance, + program_owner, + data, + nonce: account.nonce, + } + } +} + /// Get home dir for wallet. Env var `NSSA_WALLET_HOME_DIR` must be set before execution to succeed. fn get_home_nssa_var() -> Result { Ok(PathBuf::from_str(&std::env::var(HOME_DIR_ENV_VAR)?)?) @@ -100,11 +133,11 @@ pub fn produce_data_for_storage( for (account_id, (key_chain, account)) in &user_data.default_user_private_accounts { vec_for_storage.push( - InitialAccountData::Private(InitialAccountDataPrivate { + InitialAccountData::Private(Box::new(InitialAccountDataPrivate { account_id: *account_id, account: account.clone(), key_chain: key_chain.clone(), - }) + })) .into(), ); } @@ -124,23 +157,17 @@ pub(crate) fn produce_random_nonces(size: usize) -> Vec { result.into_iter().map(Nonce::from_le_bytes).collect() } -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum AccountPrivacyKind { - Public, - Private, -} - pub(crate) fn parse_addr_with_privacy_prefix( account_base58: &str, ) -> Result<(String, AccountPrivacyKind)> { if account_base58.starts_with("Public/") { Ok(( - account_base58.strip_prefix("Public/").unwrap().to_string(), + account_base58.strip_prefix("Public/").unwrap().to_owned(), AccountPrivacyKind::Public, )) } else if account_base58.starts_with("Private/") { Ok(( - account_base58.strip_prefix("Private/").unwrap().to_string(), + account_base58.strip_prefix("Private/").unwrap().to_owned(), AccountPrivacyKind::Private, )) } else { @@ -148,54 +175,12 @@ pub(crate) fn parse_addr_with_privacy_prefix( } } -/// Human-readable representation of an account. -#[derive(Serialize)] -pub(crate) struct HumanReadableAccount { - balance: u128, - program_owner: String, - data: String, - nonce: u128, -} - -impl From for HumanReadableAccount { - fn from(account: Account) -> Self { - let program_owner = account - .program_owner - .iter() - .flat_map(|n| n.to_le_bytes()) - .collect::>() - .to_base58(); - let data = hex::encode(account.data); - Self { - balance: account.balance, - program_owner, - data, - nonce: account.nonce, - } - } -} - #[cfg(test)] mod tests { use super::*; #[test] - fn test_get_home_get_env_var() { - unsafe { - std::env::set_var(HOME_DIR_ENV_VAR, "/path/to/configs"); - } - - let home = get_home().unwrap(); - - assert_eq!(PathBuf::from_str("/path/to/configs").unwrap(), home); - - unsafe { - std::env::remove_var(HOME_DIR_ENV_VAR); - } - } - - #[test] - fn test_addr_parse_with_privacy() { + fn addr_parse_with_privacy() { let addr_base58 = "Public/BLgCRDXYdQPMMWVHYRFGQZbgeHx9frkipa8GtpG2Syqy"; let (_, addr_kind) = parse_addr_with_privacy_prefix(addr_base58).unwrap(); diff --git a/wallet/src/lib.rs b/wallet/src/lib.rs index f7f0d62c..b81ff784 100644 --- a/wallet/src/lib.rs +++ b/wallet/src/lib.rs @@ -1,7 +1,17 @@ +#![expect( + clippy::print_stdout, + clippy::print_stderr, + reason = "This is a CLI application, printing to stdout and stderr is expected and convenient" +)] +#![expect( + clippy::shadow_unrelated, + reason = "Most of the shadows come from args parsing which is ok" +)] + use std::{path::PathBuf, sync::Arc}; -use anyhow::{Context, Result}; -use base64::{Engine, engine::general_purpose::STANDARD as BASE64}; +use anyhow::{Context as _, Result}; +use base64::{Engine as _, engine::general_purpose::STANDARD as BASE64}; use chain_storage::WalletChainStore; use common::{ HashType, error::ExecutionFailureKind, rpc_primitives::requests::SendTxResponse, @@ -18,7 +28,7 @@ use nssa::{ }; use nssa_core::{Commitment, MembershipProof, SharedSecretKey, program::InstructionData}; pub use privacy_preserving_tx::PrivacyPreservingAccount; -use tokio::io::AsyncWriteExt; +use tokio::io::AsyncWriteExt as _; use crate::{ config::{PersistentStorage, WalletConfigOverrides}, @@ -26,8 +36,6 @@ use crate::{ poller::TxPoller, }; -pub const HOME_DIR_ENV_VAR: &str = "NSSA_WALLET_HOME_DIR"; - pub mod chain_storage; pub mod cli; pub mod config; @@ -36,18 +44,20 @@ pub mod poller; mod privacy_preserving_tx; pub mod program_facades; +pub const HOME_DIR_ENV_VAR: &str = "NSSA_WALLET_HOME_DIR"; + pub enum AccDecodeData { Skip, Decode(nssa_core::SharedSecretKey, AccountId), } +#[expect(clippy::partial_pub_fields, reason = "TODO: make all fields private")] pub struct WalletCore { config_path: PathBuf, config_overrides: Option, storage: WalletChainStore, storage_path: PathBuf, poller: TxPoller, - // TODO: Make all fields private pub sequencer_client: Arc, pub last_synced_block: u64, } @@ -322,7 +332,6 @@ impl WalletCore { program: &ProgramWithDependencies, ) -> Result<(SendTxResponse, Vec), ExecutionFailureKind> { // TODO: handle large Err-variant properly - #[allow(clippy::result_large_err)] self.send_privacy_preserving_tx_with_pre_check(accounts, instruction_data, program, |_| { Ok(()) }) @@ -401,12 +410,17 @@ impl WalletCore { } let before_polling = std::time::Instant::now(); - let num_of_blocks = block_id - self.last_synced_block; + let num_of_blocks = block_id.saturating_sub(self.last_synced_block); + if num_of_blocks == 0 { + return Ok(()); + } + println!("Syncing to block {block_id}. Blocks to sync: {num_of_blocks}"); let poller = self.poller.clone(); - let mut blocks = - std::pin::pin!(poller.poll_block_range(self.last_synced_block + 1..=block_id)); + let mut blocks = std::pin::pin!( + poller.poll_block_range(self.last_synced_block.saturating_add(1)..=block_id) + ); let bar = indicatif::ProgressBar::new(num_of_blocks); while let Some(block) = blocks.try_next().await? { diff --git a/wallet/src/main.rs b/wallet/src/main.rs index b2057296..4704675b 100644 --- a/wallet/src/main.rs +++ b/wallet/src/main.rs @@ -1,3 +1,8 @@ +#![expect( + clippy::print_stdout, + reason = "This is a CLI application, printing to stdout is expected and convenient" +)] + use anyhow::{Context as _, Result}; use clap::{CommandFactory as _, Parser as _}; use wallet::{ diff --git a/wallet/src/poller.rs b/wallet/src/poller.rs index 7f0d4e7f..4ef77e04 100644 --- a/wallet/src/poller.rs +++ b/wallet/src/poller.rs @@ -36,7 +36,7 @@ impl TxPoller { for poll_id in 1..max_blocks_to_query { info!("Poll {poll_id}"); - let mut try_error_counter = 0; + let mut try_error_counter = 0_u64; let tx_obj = loop { let tx_obj = self @@ -50,7 +50,9 @@ impl TxPoller { if let Ok(tx_obj) = tx_obj { break tx_obj; } - try_error_counter += 1; + try_error_counter = try_error_counter + .checked_add(1) + .expect("We check error counter in this loop"); if try_error_counter > self.polling_max_error_attempts { anyhow::bail!("Number of retries exceeded"); @@ -75,7 +77,7 @@ impl TxPoller { let mut chunk_start = *range.start(); loop { - let chunk_end = std::cmp::min(chunk_start + self.block_poll_max_amount - 1, *range.end()); + let chunk_end = std::cmp::min(chunk_start.saturating_add(self.block_poll_max_amount).saturating_sub(1), *range.end()); let blocks = self.client.get_block_range(chunk_start..=chunk_end).await?.blocks; for block in blocks { @@ -83,7 +85,7 @@ impl TxPoller { yield Ok(block); } - chunk_start = chunk_end + 1; + chunk_start = chunk_end.saturating_add(1); if chunk_start > *range.end() { break; } diff --git a/wallet/src/privacy_preserving_tx.rs b/wallet/src/privacy_preserving_tx.rs index 8726fc51..9cd23888 100644 --- a/wallet/src/privacy_preserving_tx.rs +++ b/wallet/src/privacy_preserving_tx.rs @@ -69,7 +69,7 @@ impl AccountManager { let acc = wallet .get_account_public(account_id) .await - .map_err(|_| ExecutionFailureKind::KeyNotFoundError)?; + .map_err(ExecutionFailureKind::SequencerError)?; let sk = wallet.get_account_public_signing_key(account_id).cloned(); let account = AccountWithMetadata::new(acc.clone(), sk.is_some(), account_id); diff --git a/wallet/src/program_facades/amm.rs b/wallet/src/program_facades/amm.rs index 0722a769..251970bc 100644 --- a/wallet/src/program_facades/amm.rs +++ b/wallet/src/program_facades/amm.rs @@ -4,7 +4,7 @@ use nssa::{AccountId, program::Program}; use token_core::TokenHolding; use crate::WalletCore; -pub struct Amm<'w>(pub &'w WalletCore); +pub struct Amm<'wallet>(pub &'wallet WalletCore); impl Amm<'_> { pub async fn send_new_definition( @@ -27,18 +27,18 @@ impl Amm<'_> { .0 .get_account_public(user_holding_a) .await - .map_err(|_| ExecutionFailureKind::SequencerError)?; + .map_err(ExecutionFailureKind::SequencerError)?; let user_b_acc = self .0 .get_account_public(user_holding_b) .await - .map_err(|_| ExecutionFailureKind::SequencerError)?; + .map_err(ExecutionFailureKind::SequencerError)?; let definition_token_a_id = TokenHolding::try_from(&user_a_acc.data) - .map_err(|_| ExecutionFailureKind::AccountDataError(user_holding_a))? + .map_err(|_err| ExecutionFailureKind::AccountDataError(user_holding_a))? .definition_id(); let definition_token_b_id = TokenHolding::try_from(&user_b_acc.data) - .map_err(|_| ExecutionFailureKind::AccountDataError(user_holding_b))? + .map_err(|_err| ExecutionFailureKind::AccountDataError(user_holding_b))? .definition_id(); let amm_pool = @@ -61,7 +61,7 @@ impl Amm<'_> { .0 .get_accounts_nonces(vec![user_holding_a, user_holding_b]) .await - .map_err(|_| ExecutionFailureKind::SequencerError)?; + .map_err(ExecutionFailureKind::SequencerError)?; let signing_key_a = self .0 @@ -115,18 +115,18 @@ impl Amm<'_> { .0 .get_account_public(user_holding_a) .await - .map_err(|_| ExecutionFailureKind::SequencerError)?; + .map_err(ExecutionFailureKind::SequencerError)?; let user_b_acc = self .0 .get_account_public(user_holding_b) .await - .map_err(|_| ExecutionFailureKind::SequencerError)?; + .map_err(ExecutionFailureKind::SequencerError)?; let definition_token_a_id = TokenHolding::try_from(&user_a_acc.data) - .map_err(|_| ExecutionFailureKind::AccountDataError(user_holding_a))? + .map_err(|_err| ExecutionFailureKind::AccountDataError(user_holding_a))? .definition_id(); let definition_token_b_id = TokenHolding::try_from(&user_b_acc.data) - .map_err(|_| ExecutionFailureKind::AccountDataError(user_holding_b))? + .map_err(|_err| ExecutionFailureKind::AccountDataError(user_holding_b))? .definition_id(); let amm_pool = @@ -149,17 +149,17 @@ impl Amm<'_> { .0 .get_account_public(user_holding_a) .await - .map_err(|_| ExecutionFailureKind::SequencerError)?; + .map_err(ExecutionFailureKind::SequencerError)?; let token_holder_acc_b = self .0 .get_account_public(user_holding_b) .await - .map_err(|_| ExecutionFailureKind::SequencerError)?; + .map_err(ExecutionFailureKind::SequencerError)?; let token_holder_a = TokenHolding::try_from(&token_holder_acc_a.data) - .map_err(|_| ExecutionFailureKind::AccountDataError(user_holding_a))?; + .map_err(|_err| ExecutionFailureKind::AccountDataError(user_holding_a))?; let token_holder_b = TokenHolding::try_from(&token_holder_acc_b.data) - .map_err(|_| ExecutionFailureKind::AccountDataError(user_holding_b))?; + .map_err(|_err| ExecutionFailureKind::AccountDataError(user_holding_b))?; if token_holder_a.definition_id() == token_definition_id_in { account_id_auth = user_holding_a; @@ -175,7 +175,7 @@ impl Amm<'_> { .0 .get_accounts_nonces(vec![account_id_auth]) .await - .map_err(|_| ExecutionFailureKind::SequencerError)?; + .map_err(ExecutionFailureKind::SequencerError)?; let signing_key = self .0 @@ -221,18 +221,18 @@ impl Amm<'_> { .0 .get_account_public(user_holding_a) .await - .map_err(|_| ExecutionFailureKind::SequencerError)?; + .map_err(ExecutionFailureKind::SequencerError)?; let user_b_acc = self .0 .get_account_public(user_holding_b) .await - .map_err(|_| ExecutionFailureKind::SequencerError)?; + .map_err(ExecutionFailureKind::SequencerError)?; let definition_token_a_id = TokenHolding::try_from(&user_a_acc.data) - .map_err(|_| ExecutionFailureKind::AccountDataError(user_holding_a))? + .map_err(|_err| ExecutionFailureKind::AccountDataError(user_holding_a))? .definition_id(); let definition_token_b_id = TokenHolding::try_from(&user_b_acc.data) - .map_err(|_| ExecutionFailureKind::AccountDataError(user_holding_b))? + .map_err(|_err| ExecutionFailureKind::AccountDataError(user_holding_b))? .definition_id(); let amm_pool = @@ -255,7 +255,7 @@ impl Amm<'_> { .0 .get_accounts_nonces(vec![user_holding_a, user_holding_b]) .await - .map_err(|_| ExecutionFailureKind::SequencerError)?; + .map_err(ExecutionFailureKind::SequencerError)?; let signing_key_a = self .0 @@ -310,18 +310,18 @@ impl Amm<'_> { .0 .get_account_public(user_holding_a) .await - .map_err(|_| ExecutionFailureKind::SequencerError)?; + .map_err(ExecutionFailureKind::SequencerError)?; let user_b_acc = self .0 .get_account_public(user_holding_b) .await - .map_err(|_| ExecutionFailureKind::SequencerError)?; + .map_err(ExecutionFailureKind::SequencerError)?; let definition_token_a_id = TokenHolding::try_from(&user_a_acc.data) - .map_err(|_| ExecutionFailureKind::AccountDataError(user_holding_a))? + .map_err(|_err| ExecutionFailureKind::AccountDataError(user_holding_a))? .definition_id(); let definition_token_b_id = TokenHolding::try_from(&user_b_acc.data) - .map_err(|_| ExecutionFailureKind::AccountDataError(user_holding_b))? + .map_err(|_err| ExecutionFailureKind::AccountDataError(user_holding_b))? .definition_id(); let amm_pool = @@ -344,7 +344,7 @@ impl Amm<'_> { .0 .get_accounts_nonces(vec![user_holding_lp]) .await - .map_err(|_| ExecutionFailureKind::SequencerError)?; + .map_err(ExecutionFailureKind::SequencerError)?; let signing_key_lp = self .0 diff --git a/wallet/src/program_facades/native_token_transfer/mod.rs b/wallet/src/program_facades/native_token_transfer/mod.rs index 6d55ac0f..17fe3fd3 100644 --- a/wallet/src/program_facades/native_token_transfer/mod.rs +++ b/wallet/src/program_facades/native_token_transfer/mod.rs @@ -9,7 +9,7 @@ pub mod private; pub mod public; pub mod shielded; -pub struct NativeTokenTransfer<'w>(pub &'w WalletCore); +pub struct NativeTokenTransfer<'wallet>(pub &'wallet WalletCore); fn auth_transfer_preparation( balance_to_move: u128, @@ -22,7 +22,6 @@ fn auth_transfer_preparation( let program = Program::authenticated_transfer_program(); // TODO: handle large Err-variant properly - #[allow(clippy::result_large_err)] let tx_pre_check = move |accounts: &[&Account]| { let from = accounts[0]; if from.balance >= balance_to_move { diff --git a/wallet/src/program_facades/native_token_transfer/public.rs b/wallet/src/program_facades/native_token_transfer/public.rs index 3e4815a1..eb2adc9a 100644 --- a/wallet/src/program_facades/native_token_transfer/public.rs +++ b/wallet/src/program_facades/native_token_transfer/public.rs @@ -14,14 +14,18 @@ impl NativeTokenTransfer<'_> { to: AccountId, balance_to_move: u128, ) -> Result { - let Ok(balance) = self.0.get_account_balance(from).await else { - return Err(ExecutionFailureKind::SequencerError); - }; + let balance = self + .0 + .get_account_balance(from) + .await + .map_err(ExecutionFailureKind::SequencerError)?; if balance >= balance_to_move { - let Ok(nonces) = self.0.get_accounts_nonces(vec![from]).await else { - return Err(ExecutionFailureKind::SequencerError); - }; + let nonces = self + .0 + .get_accounts_nonces(vec![from]) + .await + .map_err(ExecutionFailureKind::SequencerError)?; let account_ids = vec![from, to]; let program_id = Program::authenticated_transfer_program().id(); @@ -48,9 +52,11 @@ impl NativeTokenTransfer<'_> { &self, from: AccountId, ) -> Result { - let Ok(nonces) = self.0.get_accounts_nonces(vec![from]).await else { - return Err(ExecutionFailureKind::SequencerError); - }; + let nonces = self + .0 + .get_accounts_nonces(vec![from]) + .await + .map_err(ExecutionFailureKind::SequencerError)?; let instruction: u128 = 0; let account_ids = vec![from]; diff --git a/wallet/src/program_facades/pinata.rs b/wallet/src/program_facades/pinata.rs index 68891ff5..c68fa658 100644 --- a/wallet/src/program_facades/pinata.rs +++ b/wallet/src/program_facades/pinata.rs @@ -4,7 +4,7 @@ use nssa_core::{MembershipProof, SharedSecretKey}; use crate::{PrivacyPreservingAccount, WalletCore}; -pub struct Pinata<'w>(pub &'w WalletCore); +pub struct Pinata<'wallet>(pub &'wallet WalletCore); impl Pinata<'_> { pub async fn claim( diff --git a/wallet/src/program_facades/token.rs b/wallet/src/program_facades/token.rs index 9543f593..fe5165ff 100644 --- a/wallet/src/program_facades/token.rs +++ b/wallet/src/program_facades/token.rs @@ -5,7 +5,7 @@ use token_core::Instruction; use crate::{PrivacyPreservingAccount, WalletCore}; -pub struct Token<'w>(pub &'w WalletCore); +pub struct Token<'wallet>(pub &'wallet WalletCore); impl Token<'_> { pub async fn send_new_definition( @@ -133,9 +133,11 @@ impl Token<'_> { let instruction = Instruction::Transfer { amount_to_transfer: amount, }; - let Ok(nonces) = self.0.get_accounts_nonces(vec![sender_account_id]).await else { - return Err(ExecutionFailureKind::SequencerError); - }; + let nonces = self + .0 + .get_accounts_nonces(vec![sender_account_id]) + .await + .map_err(ExecutionFailureKind::SequencerError)?; let message = nssa::public_transaction::Message::try_new( program_id, account_ids, @@ -332,9 +334,11 @@ impl Token<'_> { amount_to_burn: amount, }; - let Ok(nonces) = self.0.get_accounts_nonces(vec![holder_account_id]).await else { - return Err(ExecutionFailureKind::SequencerError); - }; + let nonces = self + .0 + .get_accounts_nonces(vec![holder_account_id]) + .await + .map_err(ExecutionFailureKind::SequencerError)?; let message = nssa::public_transaction::Message::try_new( Program::token().id(), account_ids, @@ -460,13 +464,11 @@ impl Token<'_> { amount_to_mint: amount, }; - let Ok(nonces) = self + let nonces = self .0 .get_accounts_nonces(vec![definition_account_id]) .await - else { - return Err(ExecutionFailureKind::SequencerError); - }; + .map_err(ExecutionFailureKind::SequencerError)?; let message = nssa::public_transaction::Message::try_new( Program::token().id(), account_ids, From aa462b66eb58cfc52dafcd231a09d141573e5ab3 Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Mon, 9 Mar 2026 18:27:56 +0300 Subject: [PATCH 08/18] feat: add nursery clippy lints --- Cargo.toml | 8 +++ common/src/config.rs | 2 +- common/src/error.rs | 2 +- common/src/lib.rs | 6 +- common/src/rpc_primitives/errors.rs | 34 +++++------ common/src/rpc_primitives/message.rs | 39 ++++++------ common/src/rpc_primitives/mod.rs | 6 +- common/src/rpc_primitives/parser.rs | 13 ++-- common/src/transaction.rs | 34 +++++------ .../guest/src/bin/tail_call_with_pda.rs | 1 - ...n_hello_world_through_tail_call_private.rs | 2 +- .../src/components/block_preview.rs | 2 +- .../src/components/transaction_preview.rs | 2 +- indexer/core/src/config.rs | 2 +- indexer/service/protocol/src/convert.rs | 40 ++++++------- indexer/service/protocol/src/lib.rs | 20 +++---- indexer/service/src/lib.rs | 4 +- indexer/service/src/service.rs | 2 +- integration_tests/src/config.rs | 4 +- integration_tests/src/lib.rs | 16 ++--- integration_tests/tests/tps.rs | 2 +- integration_tests/tests/wallet_ffi.rs | 7 +-- .../key_management/key_tree/chain_index.rs | 38 ++++++------ .../key_management/key_tree/keys_public.rs | 9 +-- key_protocol/src/key_protocol_core/mod.rs | 22 +++---- mempool/src/lib.rs | 2 +- nssa/core/src/account.rs | 8 +-- nssa/core/src/commitment.rs | 6 +- nssa/core/src/encoding.rs | 14 ++--- nssa/core/src/encryption/mod.rs | 2 +- .../src/encryption/shared_key_derivation.rs | 4 +- nssa/core/src/nullifier.rs | 14 ++++- nssa/core/src/program.rs | 15 ++--- nssa/src/merkle_tree/default_values.rs | 2 +- nssa/src/merkle_tree/mod.rs | 2 +- .../privacy_preserving_transaction/circuit.rs | 8 +-- .../privacy_preserving_transaction/message.rs | 12 ++-- .../transaction.rs | 6 +- .../witness_set.rs | 4 +- nssa/src/program.rs | 28 ++++----- .../program_deployment_transaction/message.rs | 2 +- .../transaction.rs | 4 +- nssa/src/public_transaction/message.rs | 2 +- nssa/src/public_transaction/transaction.rs | 6 +- nssa/src/public_transaction/witness_set.rs | 2 +- nssa/src/signature/private_key.rs | 2 +- nssa/src/signature/public_key.rs | 2 +- nssa/src/state.rs | 34 +++++------ .../src/bin/privacy_preserving_circuit.rs | 9 ++- programs/amm/core/src/lib.rs | 4 +- programs/amm/src/add.rs | 2 +- programs/amm/src/new_definition.rs | 4 +- programs/amm/src/remove.rs | 2 +- programs/amm/src/tests.rs | 16 ++--- programs/token/core/src/lib.rs | 34 +++++------ sequencer_core/src/block_store.rs | 8 +-- sequencer_core/src/config.rs | 4 +- sequencer_core/src/lib.rs | 27 ++++----- sequencer_rpc/src/lib.rs | 11 ++-- sequencer_runner/src/lib.rs | 2 +- storage/src/error.rs | 6 +- storage/src/indexer.rs | 31 +++++----- storage/src/sequencer.rs | 9 +-- .../bin/malicious_authorization_changer.rs | 2 +- wallet-ffi/src/error.rs | 2 +- wallet-ffi/src/types.rs | 18 +++--- wallet/src/chain_storage.rs | 2 +- wallet/src/cli/account.rs | 59 +++++++++---------- wallet/src/cli/chain.rs | 6 +- wallet/src/cli/config.rs | 6 +- wallet/src/cli/programs/amm.rs | 8 +-- .../src/cli/programs/native_token_transfer.rs | 20 +++---- wallet/src/cli/programs/pinata.rs | 10 ++-- wallet/src/cli/programs/token.rs | 58 +++++++++--------- wallet/src/config.rs | 8 +-- wallet/src/helperfunctions.rs | 8 +-- wallet/src/lib.rs | 10 ++-- wallet/src/poller.rs | 2 +- wallet/src/privacy_preserving_tx.rs | 4 +- 79 files changed, 431 insertions(+), 459 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 8be7cb96..70a50f5e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -248,3 +248,11 @@ clippy.let-underscore-untyped = "allow" # Reason: this lint is actually bad as it forces to use wildcard `..` instead of # field-by-field `_` which may lead to subtle bugs when new fields are added to the struct. clippy.unneeded-field-pattern = "allow" + +# Nursery +clippy.nursery = { level = "deny", priority = -1 } + +# Reason: this is okay if it compiles. +clippy.future-not-send = "allow" +# Reason: this is actually a good lint, but currently it gives a lot of false-positives. +clippy.significant-drop-tightening = "allow" diff --git a/common/src/config.rs b/common/src/config.rs index 94d00ff5..c076f699 100644 --- a/common/src/config.rs +++ b/common/src/config.rs @@ -50,6 +50,6 @@ impl FromStr for BasicAuth { impl From for BasicAuthCredentials { fn from(value: BasicAuth) -> Self { - BasicAuthCredentials::new(value.username, value.password) + Self::new(value.username, value.password) } } diff --git a/common/src/error.rs b/common/src/error.rs index bc037a60..1e348a32 100644 --- a/common/src/error.rs +++ b/common/src/error.rs @@ -22,7 +22,7 @@ pub enum SequencerClientError { impl From for SequencerClientError { fn from(value: SequencerRpcError) -> Self { - SequencerClientError::InternalError(value) + Self::InternalError(value) } } diff --git a/common/src/lib.rs b/common/src/lib.rs index 11c450f6..da07a602 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -48,7 +48,7 @@ impl FromStr for HashType { fn from_str(s: &str) -> Result { let mut bytes = [0_u8; 32]; hex::decode_to_slice(s, &mut bytes)?; - Ok(HashType(bytes)) + Ok(Self(bytes)) } } @@ -66,7 +66,7 @@ impl From for [u8; 32] { impl From<[u8; 32]> for HashType { fn from(bytes: [u8; 32]) -> Self { - HashType(bytes) + Self(bytes) } } @@ -74,7 +74,7 @@ impl TryFrom> for HashType { type Error = <[u8; 32] as TryFrom>>::Error; fn try_from(value: Vec) -> Result { - Ok(HashType(value.try_into()?)) + Ok(Self(value.try_into()?)) } } diff --git a/common/src/rpc_primitives/errors.rs b/common/src/rpc_primitives/errors.rs index 03f7fc16..ae791de8 100644 --- a/common/src/rpc_primitives/errors.rs +++ b/common/src/rpc_primitives/errors.rs @@ -9,7 +9,7 @@ pub struct RpcParseError(pub String); /// /// It is expected that that this struct has impls From<_> all other RPC errors /// like [`RpcBlockError`](crate::types::blocks::RpcBlockError). -#[derive(Debug, serde::Serialize, serde::Deserialize, Clone, PartialEq)] +#[derive(Debug, serde::Serialize, serde::Deserialize, Clone, PartialEq, Eq)] #[serde(deny_unknown_fields)] pub struct RpcError { #[serde(flatten)] @@ -23,7 +23,7 @@ pub struct RpcError { pub data: Option, } -#[derive(Debug, serde::Serialize, serde::Deserialize, Clone, PartialEq)] +#[derive(Debug, serde::Serialize, serde::Deserialize, Clone, PartialEq, Eq)] #[serde(tag = "name", content = "cause", rename_all = "SCREAMING_SNAKE_CASE")] pub enum RpcErrorKind { RequestValidationError(RpcRequestValidationErrorKind), @@ -31,7 +31,7 @@ pub enum RpcErrorKind { InternalError(Value), } -#[derive(Debug, serde::Serialize, serde::Deserialize, Clone, PartialEq)] +#[derive(Debug, serde::Serialize, serde::Deserialize, Clone, PartialEq, Eq)] #[serde(tag = "name", content = "info", rename_all = "SCREAMING_SNAKE_CASE")] pub enum RpcRequestValidationErrorKind { MethodNotFound { method_name: String }, @@ -50,8 +50,8 @@ impl RpcError { /// /// Mostly for completeness, doesn't do anything but filling in the corresponding fields. #[must_use] - pub fn new(code: i64, message: String, data: Option) -> Self { - RpcError { + pub const fn new(code: i64, message: String, data: Option) -> Self { + Self { code, message, data, @@ -70,12 +70,12 @@ impl RpcError { ))); } }; - RpcError::new(-32_602, "Invalid params".to_owned(), Some(value)) + Self::new(-32_602, "Invalid params".to_owned(), Some(value)) } /// Create a server error. pub fn server_error(e: Option) -> Self { - RpcError::new( + Self::new( -32_000, "Server error".to_owned(), e.map(|v| to_value(v).expect("Must be representable in JSON")), @@ -85,7 +85,7 @@ impl RpcError { /// Create a parse error. #[must_use] pub fn parse_error(e: String) -> Self { - RpcError { + Self { code: -32_700, message: "Parse error".to_owned(), data: Some(Value::String(e.clone())), @@ -97,7 +97,7 @@ impl RpcError { #[must_use] pub fn serialization_error(e: &str) -> Self { - RpcError::new_internal_error(Some(Value::String(e.to_owned())), e) + Self::new_internal_error(Some(Value::String(e.to_owned())), e) } /// Helper method to define extract `INTERNAL_ERROR` in separate `RpcErrorKind` @@ -117,7 +117,7 @@ impl RpcError { #[must_use] pub fn new_internal_error(error_data: Option, info: &str) -> Self { - RpcError { + Self { code: -32_000, message: "Server error".to_owned(), data: error_data, @@ -129,7 +129,7 @@ impl RpcError { } fn new_handler_error(error_data: Option, error_struct: Value) -> Self { - RpcError { + Self { code: -32_000, message: "Server error".to_owned(), data: error_data, @@ -140,7 +140,7 @@ impl RpcError { /// Create a method not found error. #[must_use] pub fn method_not_found(method: String) -> Self { - RpcError { + Self { code: -32_601, message: "Method not found".to_owned(), data: Some(Value::String(method.clone())), @@ -175,20 +175,20 @@ impl From for RpcError { impl fmt::Display for ServerError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { - ServerError::Timeout => write!(f, "ServerError: Timeout"), - ServerError::Closed => write!(f, "ServerError: Closed"), + Self::Timeout => write!(f, "ServerError: Timeout"), + Self::Closed => write!(f, "ServerError: Closed"), } } } impl From for RpcError { - fn from(e: ServerError) -> RpcError { + fn from(e: ServerError) -> Self { let error_data = match to_value(&e) { Ok(value) => value, Err(_err) => { - return RpcError::new_internal_error(None, "Failed to serialize ServerError"); + return Self::new_internal_error(None, "Failed to serialize ServerError"); } }; - RpcError::new_internal_error(Some(error_data), e.to_string().as_str()) + Self::new_internal_error(Some(error_data), e.to_string().as_str()) } } diff --git a/common/src/rpc_primitives/message.rs b/common/src/rpc_primitives/message.rs index 80948149..70c62660 100644 --- a/common/src/rpc_primitives/message.rs +++ b/common/src/rpc_primitives/message.rs @@ -56,7 +56,7 @@ impl<'de> serde::Deserialize<'de> for Version { } /// An RPC request. -#[derive(Debug, serde::Serialize, serde::Deserialize, Clone, PartialEq)] +#[derive(Debug, serde::Serialize, serde::Deserialize, Clone, PartialEq, Eq)] #[serde(deny_unknown_fields)] #[expect( clippy::partial_pub_fields, @@ -112,7 +112,7 @@ impl Request { clippy::partial_pub_fields, reason = "We don't want to allow access to the version, but the others are public for ease of use" )] -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub struct Response { jsonrpc: Version, pub result: Result, @@ -160,7 +160,7 @@ impl<'de> serde::Deserialize<'de> for Response { return Err(err); } }; - Ok(Response { + Ok(Self { jsonrpc: Version, result, id: wr.id, @@ -173,7 +173,7 @@ impl<'de> serde::Deserialize<'de> for Response { clippy::partial_pub_fields, reason = "We don't want to allow access to the version, but the others are public for ease of use" )] -#[derive(Debug, serde::Serialize, serde::Deserialize, Clone, PartialEq)] +#[derive(Debug, serde::Serialize, serde::Deserialize, Clone, PartialEq, Eq)] #[serde(deny_unknown_fields)] pub struct Notification { jsonrpc: Version, @@ -227,7 +227,7 @@ impl Message { #[must_use] pub fn request(method: String, params: Value) -> Self { let id = Value::from("dontcare"); - Message::Request(Request { + Self::Request(Request { jsonrpc: Version, method, params, @@ -237,8 +237,8 @@ impl Message { /// Create a top-level error (without an ID). #[must_use] - pub fn error(error: RpcError) -> Self { - Message::Response(Response { + pub const fn error(error: RpcError) -> Self { + Self::Response(Response { jsonrpc: Version, result: Err(error), id: Value::Null, @@ -247,8 +247,8 @@ impl Message { /// A constructor for a notification. #[must_use] - pub fn notification(method: String, params: Value) -> Self { - Message::Notification(Notification { + pub const fn notification(method: String, params: Value) -> Self { + Self::Notification(Notification { jsonrpc: Version, method, params, @@ -257,8 +257,8 @@ impl Message { /// A constructor for a response. #[must_use] - pub fn response(id: Value, result: Result) -> Self { - Message::Response(Response { + pub const fn response(id: Value, result: Result) -> Self { + Self::Response(Response { jsonrpc: Version, result, id, @@ -269,29 +269,30 @@ impl Message { #[must_use] pub fn id(&self) -> Value { match self { - Message::Request(req) => req.id.clone(), - Message::Response(response) => response.id.clone(), - Message::Notification(_) | Message::Batch(_) | Message::UnmatchedSub(_) => Value::Null, + Self::Request(req) => req.id.clone(), + Self::Response(response) => response.id.clone(), + Self::Notification(_) | Self::Batch(_) | Self::UnmatchedSub(_) => Value::Null, } } } impl From for String { fn from(val: Message) -> Self { - ::serde_json::ser::to_string(&val).unwrap() + ::serde_json::ser::to_string(&val).expect("message serialization to json should not fail") } } impl From for Vec { fn from(val: Message) -> Self { - ::serde_json::ser::to_vec(&val).unwrap() + ::serde_json::ser::to_vec(&val) + .expect("message serialization to json bytes should not fail") } } /// A broken message. /// /// Protocol-level errors. -#[derive(Debug, Clone, PartialEq, serde::Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, serde::Deserialize)] #[serde(untagged)] pub enum Broken { /// It was valid JSON, but doesn't match the form of a JSONRPC 2.0 message. @@ -309,10 +310,10 @@ impl Broken { #[must_use] pub fn reply(&self) -> Message { match self { - Broken::Unmatched(_) => Message::error(RpcError::parse_error( + Self::Unmatched(_) => Message::error(RpcError::parse_error( "JSON RPC Request format was expected".to_owned(), )), - Broken::SyntaxError(e) => Message::error(RpcError::parse_error(e.clone())), + Self::SyntaxError(e) => Message::error(RpcError::parse_error(e.clone())), } } } diff --git a/common/src/rpc_primitives/mod.rs b/common/src/rpc_primitives/mod.rs index 5cc74995..cd643712 100644 --- a/common/src/rpc_primitives/mod.rs +++ b/common/src/rpc_primitives/mod.rs @@ -30,7 +30,7 @@ pub struct RpcConfig { impl Default for RpcConfig { fn default() -> Self { - RpcConfig { + Self { addr: "0.0.0.0:3040".to_owned(), cors_allowed_origins: vec!["*".to_owned()], limits_config: RpcLimitsConfig::default(), @@ -41,7 +41,7 @@ impl Default for RpcConfig { impl RpcConfig { #[must_use] pub fn new(addr: &str) -> Self { - RpcConfig { + Self { addr: addr.to_owned(), ..Default::default() } @@ -49,7 +49,7 @@ impl RpcConfig { #[must_use] pub fn with_port(port: u16) -> Self { - RpcConfig { + Self { addr: format!("0.0.0.0:{port}"), ..Default::default() } diff --git a/common/src/rpc_primitives/parser.rs b/common/src/rpc_primitives/parser.rs index 933f8daf..0b918c94 100644 --- a/common/src/rpc_primitives/parser.rs +++ b/common/src/rpc_primitives/parser.rs @@ -19,10 +19,11 @@ pub trait RpcRequest: Sized { } pub fn parse_params(value: Option) -> Result { - if let Some(value) = value { - serde_json::from_value(value) - .map_err(|err| RpcParseError(format!("Failed parsing args: {err}"))) - } else { - Err(RpcParseError("Require at least one parameter".to_owned())) - } + value.map_or_else( + || Err(RpcParseError("Require at least one parameter".to_owned())), + |value| { + serde_json::from_value(value) + .map_err(|err| RpcParseError(format!("Failed parsing args: {err}"))) + }, + ) } diff --git a/common/src/transaction.rs b/common/src/transaction.rs index 74a41ca2..8fdc2074 100644 --- a/common/src/transaction.rs +++ b/common/src/transaction.rs @@ -16,18 +16,18 @@ impl NSSATransaction { #[must_use] pub fn hash(&self) -> HashType { HashType(match self { - NSSATransaction::Public(tx) => tx.hash(), - NSSATransaction::PrivacyPreserving(tx) => tx.hash(), - NSSATransaction::ProgramDeployment(tx) => tx.hash(), + Self::Public(tx) => tx.hash(), + Self::PrivacyPreserving(tx) => tx.hash(), + Self::ProgramDeployment(tx) => tx.hash(), }) } #[must_use] pub fn affected_public_account_ids(&self) -> Vec { match self { - NSSATransaction::ProgramDeployment(tx) => tx.affected_public_account_ids(), - NSSATransaction::Public(tx) => tx.affected_public_account_ids(), - NSSATransaction::PrivacyPreserving(tx) => tx.affected_public_account_ids(), + Self::ProgramDeployment(tx) => tx.affected_public_account_ids(), + Self::Public(tx) => tx.affected_public_account_ids(), + Self::PrivacyPreserving(tx) => tx.affected_public_account_ids(), } } @@ -35,21 +35,21 @@ impl NSSATransaction { pub fn transaction_stateless_check(self) -> Result { // Stateless checks here match self { - NSSATransaction::Public(tx) => { + Self::Public(tx) => { if tx.witness_set().is_valid_for(tx.message()) { - Ok(NSSATransaction::Public(tx)) + Ok(Self::Public(tx)) } else { Err(TransactionMalformationError::InvalidSignature) } } - NSSATransaction::PrivacyPreserving(tx) => { + Self::PrivacyPreserving(tx) => { if tx.witness_set().signatures_are_valid_for(tx.message()) { - Ok(NSSATransaction::PrivacyPreserving(tx)) + Ok(Self::PrivacyPreserving(tx)) } else { Err(TransactionMalformationError::InvalidSignature) } } - NSSATransaction::ProgramDeployment(tx) => Ok(NSSATransaction::ProgramDeployment(tx)), + Self::ProgramDeployment(tx) => Ok(Self::ProgramDeployment(tx)), } } @@ -58,13 +58,9 @@ impl NSSATransaction { state: &mut V02State, ) -> Result { match &self { - NSSATransaction::Public(tx) => state.transition_from_public_transaction(tx), - NSSATransaction::PrivacyPreserving(tx) => { - state.transition_from_privacy_preserving_transaction(tx) - } - NSSATransaction::ProgramDeployment(tx) => { - state.transition_from_program_deployment_transaction(tx) - } + Self::Public(tx) => state.transition_from_public_transaction(tx), + Self::PrivacyPreserving(tx) => state.transition_from_privacy_preserving_transaction(tx), + Self::ProgramDeployment(tx) => state.transition_from_program_deployment_transaction(tx), } .inspect_err(|err| warn!("Error at transition {err:#?}"))?; @@ -99,7 +95,7 @@ pub enum TxKind { ProgramDeployment, } -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, thiserror::Error)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, thiserror::Error)] pub enum TransactionMalformationError { #[error("Invalid signature(-s)")] InvalidSignature, diff --git a/examples/program_deployment/methods/guest/src/bin/tail_call_with_pda.rs b/examples/program_deployment/methods/guest/src/bin/tail_call_with_pda.rs index 679df3bf..3ebcabd2 100644 --- a/examples/program_deployment/methods/guest/src/bin/tail_call_with_pda.rs +++ b/examples/program_deployment/methods/guest/src/bin/tail_call_with_pda.rs @@ -41,7 +41,6 @@ fn main() { // Unpack the input account pre state let [pre_state] = pre_states - .clone() .try_into() .unwrap_or_else(|_| panic!("Input pre states should consist of a single account")); diff --git a/examples/program_deployment/src/bin/run_hello_world_through_tail_call_private.rs b/examples/program_deployment/src/bin/run_hello_world_through_tail_call_private.rs index 9b3619cb..4fac3eec 100644 --- a/examples/program_deployment/src/bin/run_hello_world_through_tail_call_private.rs +++ b/examples/program_deployment/src/bin/run_hello_world_through_tail_call_private.rs @@ -48,7 +48,7 @@ async fn main() { let hello_world_bytecode: Vec = std::fs::read(hello_world_path).unwrap(); let hello_world = Program::new(hello_world_bytecode).unwrap(); let dependencies: HashMap = - [(hello_world.id(), hello_world)].into_iter().collect(); + std::iter::once((hello_world.id(), hello_world)).collect(); let program_with_dependencies = ProgramWithDependencies::new(simple_tail_call, dependencies); let accounts = vec![PrivacyPreservingAccount::PrivateOwned(account_id)]; diff --git a/explorer_service/src/components/block_preview.rs b/explorer_service/src/components/block_preview.rs index e16ab831..04ba8555 100644 --- a/explorer_service/src/components/block_preview.rs +++ b/explorer_service/src/components/block_preview.rs @@ -5,7 +5,7 @@ use leptos_router::components::A; use crate::format_utils; /// Get CSS class for bedrock status -fn status_class(status: &BedrockStatus) -> &'static str { +const fn status_class(status: &BedrockStatus) -> &'static str { match status { BedrockStatus::Pending => "status-pending", BedrockStatus::Safe => "status-safe", diff --git a/explorer_service/src/components/transaction_preview.rs b/explorer_service/src/components/transaction_preview.rs index f4ff2bb4..0c82cf48 100644 --- a/explorer_service/src/components/transaction_preview.rs +++ b/explorer_service/src/components/transaction_preview.rs @@ -3,7 +3,7 @@ use leptos::prelude::*; use leptos_router::components::A; /// Get transaction type name and CSS class -fn transaction_type_info(tx: &Transaction) -> (&'static str, &'static str) { +const fn transaction_type_info(tx: &Transaction) -> (&'static str, &'static str) { match tx { Transaction::Public(_) => ("Public", "tx-type-public"), Transaction::PrivacyPreserving(_) => ("Privacy-Preserving", "tx-type-private"), diff --git a/indexer/core/src/config.rs b/indexer/core/src/config.rs index 326a79a3..7dec7fc9 100644 --- a/indexer/core/src/config.rs +++ b/indexer/core/src/config.rs @@ -42,7 +42,7 @@ pub struct IndexerConfig { } impl IndexerConfig { - pub fn from_path(config_path: &Path) -> Result { + pub fn from_path(config_path: &Path) -> Result { let file = File::open(config_path).with_context(|| { format!("Failed to open indexer config at {}", config_path.display()) })?; diff --git a/indexer/service/protocol/src/convert.rs b/indexer/service/protocol/src/convert.rs index 931c340c..9e31ef7a 100644 --- a/indexer/service/protocol/src/convert.rs +++ b/indexer/service/protocol/src/convert.rs @@ -35,7 +35,7 @@ impl From for AccountId { impl From for nssa_core::account::AccountId { fn from(value: AccountId) -> Self { let AccountId { value } = value; - nssa_core::account::AccountId::new(value) + Self::new(value) } } @@ -68,7 +68,7 @@ impl TryFrom for nssa_core::account::Account { nonce, } = value; - Ok(nssa_core::account::Account { + Ok(Self { program_owner: program_owner.into(), balance, data: data.try_into()?, @@ -87,7 +87,7 @@ impl TryFrom for nssa_core::account::Data { type Error = nssa_core::account::data::DataTooBigError; fn try_from(value: Data) -> Result { - nssa_core::account::Data::try_from(value.0) + Self::try_from(value.0) } } @@ -103,7 +103,7 @@ impl From for Commitment { impl From for nssa_core::Commitment { fn from(value: Commitment) -> Self { - nssa_core::Commitment::from_byte_array(value.0) + Self::from_byte_array(value.0) } } @@ -115,7 +115,7 @@ impl From for Nullifier { impl From for nssa_core::Nullifier { fn from(value: Nullifier) -> Self { - nssa_core::Nullifier::from_byte_array(value.0) + Self::from_byte_array(value.0) } } @@ -143,7 +143,7 @@ impl From for Ciphertext { impl From for nssa_core::encryption::Ciphertext { fn from(value: Ciphertext) -> Self { - nssa_core::encryption::Ciphertext::from_inner(value.0) + Self::from_inner(value.0) } } @@ -155,7 +155,7 @@ impl From for EphemeralPublicKey { impl From for nssa_core::encryption::EphemeralPublicKey { fn from(value: EphemeralPublicKey) -> Self { - nssa_core::encryption::shared_key_derivation::Secp256k1Point(value.0) + Self(value.0) } } @@ -173,7 +173,7 @@ impl From for Signature { impl From for nssa::Signature { fn from(value: Signature) -> Self { let Signature(sig_value) = value; - nssa::Signature { value: sig_value } + Self { value: sig_value } } } @@ -187,7 +187,7 @@ impl TryFrom for nssa::PublicKey { type Error = nssa::error::NssaError; fn try_from(value: PublicKey) -> Result { - nssa::PublicKey::try_new(value.0) + Self::try_new(value.0) } } @@ -203,7 +203,7 @@ impl From for Proof { impl From for nssa::privacy_preserving_transaction::circuit::Proof { fn from(value: Proof) -> Self { - nssa::privacy_preserving_transaction::circuit::Proof::from_inner(value.0) + Self::from_inner(value.0) } } @@ -505,12 +505,12 @@ impl From for nssa::ProgramDeploymentTransaction { impl From for Transaction { fn from(value: common::transaction::NSSATransaction) -> Self { match value { - common::transaction::NSSATransaction::Public(tx) => Transaction::Public(tx.into()), + common::transaction::NSSATransaction::Public(tx) => Self::Public(tx.into()), common::transaction::NSSATransaction::PrivacyPreserving(tx) => { - Transaction::PrivacyPreserving(tx.into()) + Self::PrivacyPreserving(tx.into()) } common::transaction::NSSATransaction::ProgramDeployment(tx) => { - Transaction::ProgramDeployment(tx.into()) + Self::ProgramDeployment(tx.into()) } } } @@ -521,15 +521,9 @@ impl TryFrom for common::transaction::NSSATransaction { fn try_from(value: Transaction) -> Result { match value { - Transaction::Public(tx) => { - Ok(common::transaction::NSSATransaction::Public(tx.try_into()?)) - } - Transaction::PrivacyPreserving(tx) => Ok( - common::transaction::NSSATransaction::PrivacyPreserving(tx.try_into()?), - ), - Transaction::ProgramDeployment(tx) => Ok( - common::transaction::NSSATransaction::ProgramDeployment(tx.into()), - ), + Transaction::Public(tx) => Ok(Self::Public(tx.try_into()?)), + Transaction::PrivacyPreserving(tx) => Ok(Self::PrivacyPreserving(tx.try_into()?)), + Transaction::ProgramDeployment(tx) => Ok(Self::ProgramDeployment(tx.into())), } } } @@ -683,6 +677,6 @@ impl From for HashType { impl From for common::HashType { fn from(value: HashType) -> Self { - common::HashType(value.0) + Self(value.0) } } diff --git a/indexer/service/protocol/src/lib.rs b/indexer/service/protocol/src/lib.rs index 42c513a2..6bd67d73 100644 --- a/indexer/service/protocol/src/lib.rs +++ b/indexer/service/protocol/src/lib.rs @@ -71,8 +71,8 @@ pub enum ProgramIdParseError { impl Display for ProgramIdParseError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - ProgramIdParseError::InvalidBase58(err) => write!(f, "invalid base58: {err:?}"), - ProgramIdParseError::InvalidLength(len) => { + Self::InvalidBase58(err) => write!(f, "invalid base58: {err:?}"), + Self::InvalidLength(len) => { write!(f, "invalid length: expected 32 bytes, got {len}") } } @@ -93,7 +93,7 @@ impl FromStr for ProgramId { for (i, chunk) in bytes.chunks_exact(4).enumerate() { arr[i] = u32::from_le_bytes(chunk.try_into().unwrap()); } - Ok(ProgramId(arr)) + Ok(Self(arr)) } } @@ -125,7 +125,7 @@ impl FromStr for AccountId { } let mut value = [0_u8; 32]; value.copy_from_slice(&bytes); - Ok(AccountId { value }) + Ok(Self { value }) } } @@ -174,7 +174,7 @@ impl FromStr for Signature { fn from_str(s: &str) -> Result { let mut bytes = [0_u8; 64]; hex::decode_to_slice(s, &mut bytes)?; - Ok(Signature(bytes)) + Ok(Self(bytes)) } } @@ -194,11 +194,11 @@ impl Transaction { /// Get the hash of the transaction #[expect(clippy::same_name_method, reason = "This is handy")] #[must_use] - pub fn hash(&self) -> &self::HashType { + pub const fn hash(&self) -> &self::HashType { match self { - Transaction::Public(tx) => &tx.hash, - Transaction::PrivacyPreserving(tx) => &tx.hash, - Transaction::ProgramDeployment(tx) => &tx.hash, + Self::Public(tx) => &tx.hash, + Self::PrivacyPreserving(tx) => &tx.hash, + Self::ProgramDeployment(tx) => &tx.hash, } } } @@ -338,7 +338,7 @@ impl FromStr for HashType { fn from_str(s: &str) -> Result { let mut bytes = [0_u8; 32]; hex::decode_to_slice(s, &mut bytes)?; - Ok(HashType(bytes)) + Ok(Self(bytes)) } } diff --git a/indexer/service/src/lib.rs b/indexer/service/src/lib.rs index cfbe93a0..1f87e929 100644 --- a/indexer/service/src/lib.rs +++ b/indexer/service/src/lib.rs @@ -16,7 +16,7 @@ pub struct IndexerHandle { server_handle: Option, } impl IndexerHandle { - fn new(addr: SocketAddr, server_handle: jsonrpsee::server::ServerHandle) -> Self { + const fn new(addr: SocketAddr, server_handle: jsonrpsee::server::ServerHandle) -> Self { Self { addr, server_handle: Some(server_handle), @@ -24,7 +24,7 @@ impl IndexerHandle { } #[must_use] - pub fn addr(&self) -> SocketAddr { + pub const fn addr(&self) -> SocketAddr { self.addr } diff --git a/indexer/service/src/service.rs b/indexer/service/src/service.rs index 85d4f32f..2b2e3eca 100644 --- a/indexer/service/src/service.rs +++ b/indexer/service/src/service.rs @@ -252,7 +252,7 @@ struct Subscription { } impl Subscription { - fn new(sink: SubscriptionSink) -> Self { + const fn new(sink: SubscriptionSink) -> Self { Self { sink, _marker: std::marker::PhantomData, diff --git a/integration_tests/src/config.rs b/integration_tests/src/config.rs index e20179eb..0ce55177 100644 --- a/integration_tests/src/config.rs +++ b/integration_tests/src/config.rs @@ -158,8 +158,8 @@ pub enum UrlProtocol { impl std::fmt::Display for UrlProtocol { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - UrlProtocol::Http => write!(f, "http"), - UrlProtocol::Ws => write!(f, "ws"), + Self::Http => write!(f, "http"), + Self::Ws => write!(f, "ws"), } } } diff --git a/integration_tests/src/lib.rs b/integration_tests/src/lib.rs index 2492d939..4217b269 100644 --- a/integration_tests/src/lib.rs +++ b/integration_tests/src/lib.rs @@ -53,7 +53,7 @@ impl TestContext { } #[must_use] - pub fn builder() -> TestContextBuilder { + pub const fn builder() -> TestContextBuilder { TestContextBuilder::new() } @@ -271,7 +271,7 @@ impl TestContext { /// Get reference to the wallet. #[must_use] - pub fn wallet(&self) -> &WalletCore { + pub const fn wallet(&self) -> &WalletCore { &self.wallet } @@ -281,19 +281,19 @@ impl TestContext { } /// Get mutable reference to the wallet. - pub fn wallet_mut(&mut self) -> &mut WalletCore { + pub const fn wallet_mut(&mut self) -> &mut WalletCore { &mut self.wallet } /// Get reference to the sequencer client. #[must_use] - pub fn sequencer_client(&self) -> &SequencerClient { + pub const fn sequencer_client(&self) -> &SequencerClient { &self.sequencer_client } /// Get reference to the indexer client. #[must_use] - pub fn indexer_client(&self) -> &IndexerClient { + pub const fn indexer_client(&self) -> &IndexerClient { &self.indexer_client } @@ -384,7 +384,7 @@ impl BlockingTestContext { }) } - pub fn ctx(&self) -> &TestContext { + pub const fn ctx(&self) -> &TestContext { self.ctx.as_ref().expect("TestContext is set") } } @@ -395,7 +395,7 @@ pub struct TestContextBuilder { } impl TestContextBuilder { - fn new() -> Self { + const fn new() -> Self { Self { initial_data: None, sequencer_partial_config: None, @@ -409,7 +409,7 @@ impl TestContextBuilder { } #[must_use] - pub fn with_sequencer_partial_config( + pub const fn with_sequencer_partial_config( mut self, sequencer_partial_config: config::SequencerPartialConfig, ) -> Self { diff --git a/integration_tests/tests/tps.rs b/integration_tests/tests/tps.rs index a1e67fe5..c89ee761 100644 --- a/integration_tests/tests/tps.rs +++ b/integration_tests/tests/tps.rs @@ -118,7 +118,7 @@ impl TpsTestManager { } } - fn generate_sequencer_partial_config() -> SequencerPartialConfig { + const fn generate_sequencer_partial_config() -> SequencerPartialConfig { SequencerPartialConfig { max_num_tx_in_block: 300, max_block_size: ByteSize::mb(500), diff --git a/integration_tests/tests/wallet_ffi.rs b/integration_tests/tests/wallet_ffi.rs index 380f8b7b..2170734c 100644 --- a/integration_tests/tests/wallet_ffi.rs +++ b/integration_tests/tests/wallet_ffi.rs @@ -216,12 +216,7 @@ fn new_wallet_rust_with_default_config(password: &str) -> Result { let config_path = tempdir.path().join("wallet_config.json"); let storage_path = tempdir.path().join("storage.json"); - WalletCore::new_init_storage( - config_path.clone(), - storage_path.clone(), - None, - password.to_owned(), - ) + WalletCore::new_init_storage(config_path, storage_path, None, password.to_owned()) } fn load_existing_ffi_wallet(home: &Path) -> Result<*mut WalletHandle> { diff --git a/key_protocol/src/key_management/key_tree/chain_index.rs b/key_protocol/src/key_management/key_tree/chain_index.rs index e3700393..b22dc779 100644 --- a/key_protocol/src/key_management/key_tree/chain_index.rs +++ b/key_protocol/src/key_management/key_tree/chain_index.rs @@ -23,7 +23,7 @@ impl FromStr for ChainIndex { } if s == "/" { - return Ok(ChainIndex(vec![])); + return Ok(Self(vec![])); } let uprooted_substring = s.strip_prefix("/").unwrap(); @@ -55,14 +55,14 @@ impl Display for ChainIndex { impl Default for ChainIndex { fn default() -> Self { - ChainIndex::from_str("/").expect("Root parsing failure") + Self::from_str("/").expect("Root parsing failure") } } impl ChainIndex { #[must_use] pub fn root() -> Self { - ChainIndex::default() + Self::default() } #[must_use] @@ -76,42 +76,42 @@ impl ChainIndex { } #[must_use] - pub fn next_in_line(&self) -> Option { + pub fn next_in_line(&self) -> Option { let mut chain = self.0.clone(); // ToDo: Add overflow check if let Some(last_p) = chain.last_mut() { *last_p = last_p.checked_add(1)?; } - Some(ChainIndex(chain)) + Some(Self(chain)) } #[must_use] - pub fn previous_in_line(&self) -> Option { + pub fn previous_in_line(&self) -> Option { let mut chain = self.0.clone(); if let Some(last_p) = chain.last_mut() { *last_p = last_p.checked_sub(1)?; } - Some(ChainIndex(chain)) + Some(Self(chain)) } #[must_use] - pub fn parent(&self) -> Option { + pub fn parent(&self) -> Option { if self.0.is_empty() { None } else { let last = self.0.len().checked_sub(1)?; - Some(ChainIndex(self.0[..last].to_vec())) + Some(Self(self.0[..last].to_vec())) } } #[must_use] - pub fn nth_child(&self, child_id: u32) -> ChainIndex { + pub fn nth_child(&self, child_id: u32) -> Self { let mut chain = self.0.clone(); chain.push(child_id); - ChainIndex(chain) + Self(chain) } #[must_use] @@ -131,17 +131,17 @@ impl ChainIndex { Some(res) } - fn shuffle_iter(&self) -> impl Iterator { + fn shuffle_iter(&self) -> impl Iterator { self.0 .iter() .permutations(self.0.len()) .unique() - .map(|item| ChainIndex(item.into_iter().copied().collect())) + .map(|item| Self(item.into_iter().copied().collect())) } - pub fn chain_ids_at_depth(depth: usize) -> impl Iterator { - let mut stack = vec![ChainIndex(vec![0; depth])]; - let mut cumulative_stack = vec![ChainIndex(vec![0; depth])]; + pub fn chain_ids_at_depth(depth: usize) -> impl Iterator { + let mut stack = vec![Self(vec![0; depth])]; + let mut cumulative_stack = vec![Self(vec![0; depth])]; while let Some(top_id) = stack.pop() { if let Some(collapsed_id) = top_id.collapse_back() { @@ -155,9 +155,9 @@ impl ChainIndex { cumulative_stack.into_iter().unique() } - pub fn chain_ids_at_depth_rev(depth: usize) -> impl Iterator { - let mut stack = vec![ChainIndex(vec![0; depth])]; - let mut cumulative_stack = vec![ChainIndex(vec![0; depth])]; + pub fn chain_ids_at_depth_rev(depth: usize) -> impl Iterator { + let mut stack = vec![Self(vec![0; depth])]; + let mut cumulative_stack = vec![Self(vec![0; depth])]; while let Some(top_id) = stack.pop() { if let Some(collapsed_id) = top_id.collapse_back() { diff --git a/key_protocol/src/key_management/key_tree/keys_public.rs b/key_protocol/src/key_management/key_tree/keys_public.rs index 06c3de05..694c23c5 100644 --- a/key_protocol/src/key_management/key_tree/keys_public.rs +++ b/key_protocol/src/key_management/key_tree/keys_public.rs @@ -19,16 +19,13 @@ impl ChildKeysPublic { if 2_u32.pow(31) > cci { // Non-harden hash_input.extend_from_slice(self.cpk.value()); - hash_input.extend_from_slice(&cci.to_le_bytes()); - - hmac_sha512::HMAC::mac(hash_input, self.ccc) } else { // Harden hash_input.extend_from_slice(self.csk.value()); - hash_input.extend_from_slice(&(cci).to_le_bytes()); - - hmac_sha512::HMAC::mac(hash_input, self.ccc) } + hash_input.extend_from_slice(&cci.to_le_bytes()); + + hmac_sha512::HMAC::mac(hash_input, self.ccc) } } diff --git a/key_protocol/src/key_protocol_core/mod.rs b/key_protocol/src/key_protocol_core/mod.rs index d870b902..19ae45a3 100644 --- a/key_protocol/src/key_protocol_core/mod.rs +++ b/key_protocol/src/key_protocol_core/mod.rs @@ -104,17 +104,14 @@ impl NSSAUserData { } /// Returns the signing key for public transaction signatures + #[must_use] pub fn get_pub_account_signing_key( &self, account_id: nssa::AccountId, ) -> Option<&nssa::PrivateKey> { - // First seek in defaults - if let Some(key) = self.default_pub_account_signing_keys.get(&account_id) { - Some(key) - // Then seek in tree - } else { - self.public_key_tree.get_node(account_id).map(Into::into) - } + self.default_pub_account_signing_keys + .get(&account_id) + .or_else(|| self.public_key_tree.get_node(account_id).map(Into::into)) } /// Generated new private key for privacy preserving transactions @@ -137,17 +134,14 @@ impl NSSAUserData { } /// Returns the signing key for public transaction signatures + #[must_use] pub fn get_private_account( &self, account_id: nssa::AccountId, ) -> Option<&(KeyChain, nssa_core::account::Account)> { - // First seek in defaults - if let Some(key) = self.default_user_private_accounts.get(&account_id) { - Some(key) - // Then seek in tree - } else { - self.private_key_tree.get_node(account_id).map(Into::into) - } + self.default_user_private_accounts + .get(&account_id) + .or_else(|| self.private_key_tree.get_node(account_id).map(Into::into)) } /// Returns the signing key for public transaction signatures diff --git a/mempool/src/lib.rs b/mempool/src/lib.rs index fa844065..ff06da7d 100644 --- a/mempool/src/lib.rs +++ b/mempool/src/lib.rs @@ -49,7 +49,7 @@ pub struct MemPoolHandle { } impl MemPoolHandle { - fn new(sender: Sender) -> Self { + const fn new(sender: Sender) -> Self { Self { sender } } diff --git a/nssa/core/src/account.rs b/nssa/core/src/account.rs index 98799c9f..fa76dd08 100644 --- a/nssa/core/src/account.rs +++ b/nssa/core/src/account.rs @@ -88,17 +88,17 @@ impl std::fmt::Debug for AccountId { impl AccountId { #[must_use] - pub fn new(value: [u8; 32]) -> Self { + pub const fn new(value: [u8; 32]) -> Self { Self { value } } #[must_use] - pub fn value(&self) -> &[u8; 32] { + pub const fn value(&self) -> &[u8; 32] { &self.value } #[must_use] - pub fn into_value(self) -> [u8; 32] { + pub const fn into_value(self) -> [u8; 32] { self.value } } @@ -127,7 +127,7 @@ impl FromStr for AccountId { } let mut value = [0_u8; 32]; value.copy_from_slice(&bytes); - Ok(AccountId { value }) + Ok(Self { value }) } } diff --git a/nssa/core/src/commitment.rs b/nssa/core/src/commitment.rs index 87e1ac79..8cb4431b 100644 --- a/nssa/core/src/commitment.rs +++ b/nssa/core/src/commitment.rs @@ -91,18 +91,16 @@ pub fn compute_digest_for_path( .unwrap(); let mut level_index = proof.0; for node in &proof.1 { + let mut bytes = [0_u8; 64]; let is_left_child = level_index & 1 == 0; if is_left_child { - let mut bytes = [0_u8; 64]; bytes[..32].copy_from_slice(&result); bytes[32..].copy_from_slice(node); - result = Impl::hash_bytes(&bytes).as_bytes().try_into().unwrap(); } else { - let mut bytes = [0_u8; 64]; bytes[..32].copy_from_slice(node); bytes[32..].copy_from_slice(&result); - result = Impl::hash_bytes(&bytes).as_bytes().try_into().unwrap(); } + result = Impl::hash_bytes(&bytes).as_bytes().try_into().unwrap(); level_index >>= 1; } result diff --git a/nssa/core/src/encoding.rs b/nssa/core/src/encoding.rs index 04e3ac88..6abd4c11 100644 --- a/nssa/core/src/encoding.rs +++ b/nssa/core/src/encoding.rs @@ -69,13 +69,13 @@ impl Account { impl Commitment { #[must_use] - pub fn to_byte_array(&self) -> [u8; 32] { + pub const fn to_byte_array(&self) -> [u8; 32] { self.0 } #[cfg(feature = "host")] #[must_use] - pub fn from_byte_array(bytes: [u8; 32]) -> Self { + pub const fn from_byte_array(bytes: [u8; 32]) -> Self { Self(bytes) } @@ -90,7 +90,7 @@ impl Commitment { impl NullifierPublicKey { #[must_use] - pub fn to_byte_array(&self) -> [u8; 32] { + pub const fn to_byte_array(&self) -> [u8; 32] { self.0 } } @@ -98,13 +98,13 @@ impl NullifierPublicKey { #[cfg(feature = "host")] impl Nullifier { #[must_use] - pub fn to_byte_array(&self) -> [u8; 32] { + pub const fn to_byte_array(&self) -> [u8; 32] { self.0 } #[cfg(feature = "host")] #[must_use] - pub fn from_byte_array(bytes: [u8; 32]) -> Self { + pub const fn from_byte_array(bytes: [u8; 32]) -> Self { Self(bytes) } @@ -137,7 +137,7 @@ impl Ciphertext { #[cfg(feature = "host")] #[must_use] - pub fn from_inner(inner: Vec) -> Self { + pub const fn from_inner(inner: Vec) -> Self { Self(inner) } @@ -175,7 +175,7 @@ impl Secp256k1Point { impl AccountId { #[must_use] - pub fn to_bytes(&self) -> [u8; 32] { + pub const fn to_bytes(&self) -> [u8; 32] { *self.value() } } diff --git a/nssa/core/src/encryption/mod.rs b/nssa/core/src/encryption/mod.rs index 1d722a5e..400fb331 100644 --- a/nssa/core/src/encryption/mod.rs +++ b/nssa/core/src/encryption/mod.rs @@ -44,7 +44,7 @@ impl EncryptionScheme { commitment: &Commitment, output_index: u32, ) -> Ciphertext { - let mut buffer = account.to_bytes().clone(); + let mut buffer = account.to_bytes(); Self::symmetric_transform(&mut buffer, shared_secret, commitment, output_index); Ciphertext(buffer) } diff --git a/nssa/core/src/encryption/shared_key_derivation.rs b/nssa/core/src/encryption/shared_key_derivation.rs index c5890f49..8169e8f9 100644 --- a/nssa/core/src/encryption/shared_key_derivation.rs +++ b/nssa/core/src/encryption/shared_key_derivation.rs @@ -32,7 +32,7 @@ impl std::fmt::Debug for Secp256k1Point { impl Secp256k1Point { #[must_use] - pub fn from_scalar(value: Scalar) -> Secp256k1Point { + pub fn from_scalar(value: Scalar) -> Self { let x_bytes: FieldBytes = value.into(); let x = k256::Scalar::from_repr(x_bytes).unwrap(); @@ -49,7 +49,7 @@ pub type EphemeralPublicKey = Secp256k1Point; pub type ViewingPublicKey = Secp256k1Point; impl From<&EphemeralSecretKey> for EphemeralPublicKey { fn from(value: &EphemeralSecretKey) -> Self { - Secp256k1Point::from_scalar(*value) + Self::from_scalar(*value) } } diff --git a/nssa/core/src/nullifier.rs b/nssa/core/src/nullifier.rs index 2ba9afc4..6ba59860 100644 --- a/nssa/core/src/nullifier.rs +++ b/nssa/core/src/nullifier.rs @@ -16,7 +16,12 @@ impl From<&NullifierPublicKey> for AccountId { let mut bytes = [0; 64]; bytes[0..32].copy_from_slice(PRIVATE_ACCOUNT_ID_PREFIX); bytes[32..].copy_from_slice(&value.0); - AccountId::new(Impl::hash_bytes(&bytes).as_bytes().try_into().unwrap()) + Self::new( + Impl::hash_bytes(&bytes) + .as_bytes() + .try_into() + .expect("Conversion should not fail"), + ) } } @@ -36,7 +41,12 @@ impl From<&NullifierSecretKey> for NullifierPublicKey { bytes.extend_from_slice(value); bytes.extend_from_slice(SUFFIX_1); bytes.extend_from_slice(SUFFIX_2); - Self(Impl::hash_bytes(&bytes).as_bytes().try_into().unwrap()) + Self( + Impl::hash_bytes(&bytes) + .as_bytes() + .try_into() + .expect("hash should be exactly 32 bytes long"), + ) } } diff --git a/nssa/core/src/program.rs b/nssa/core/src/program.rs index b541e5f0..bbb1e03b 100644 --- a/nssa/core/src/program.rs +++ b/nssa/core/src/program.rs @@ -42,7 +42,7 @@ impl From<(&ProgramId, &PdaSeed)> for AccountId { bytemuck::try_cast_slice(value.0).expect("ProgramId should be castable to &[u8]"); bytes[32..64].copy_from_slice(program_id_bytes); bytes[64..].copy_from_slice(&value.1.0); - AccountId::new( + Self::new( Impl::hash_bytes(&bytes) .as_bytes() .try_into() @@ -85,6 +85,7 @@ impl ChainedCall { } /// Represents the final state of an `Account` after a program execution. +/// /// A post state may optionally request that the executing program /// becomes the owner of the account (a “claim”). This is used to signal /// that the program intends to take ownership of the account. @@ -99,7 +100,7 @@ impl AccountPostState { /// Creates a post state without a claim request. /// The executing program is not requesting ownership of the account. #[must_use] - pub fn new(account: Account) -> Self { + pub const fn new(account: Account) -> Self { Self { account, claim: false, @@ -110,7 +111,7 @@ impl AccountPostState { /// This indicates that the executing program intends to claim the /// account as its own and is allowed to mutate it. #[must_use] - pub fn new_claimed(account: Account) -> Self { + pub const fn new_claimed(account: Account) -> Self { Self { account, claim: true, @@ -128,18 +129,18 @@ impl AccountPostState { /// Returns `true` if this post state requests that the account /// be claimed (owned) by the executing program. #[must_use] - pub fn requires_claim(&self) -> bool { + pub const fn requires_claim(&self) -> bool { self.claim } /// Returns the underlying account #[must_use] - pub fn account(&self) -> &Account { + pub const fn account(&self) -> &Account { &self.account } /// Returns the underlying account - pub fn account_mut(&mut self) -> &mut Account { + pub const fn account_mut(&mut self) -> &mut Account { &mut self.account } @@ -174,7 +175,7 @@ impl WrappedBalanceSum { /// Returns [`None`] if balance sum overflows `lo + hi * 2^128` representation, which is not /// expected in practical scenarios. fn from_balances(balances: impl Iterator) -> Option { - let mut wrapped = WrappedBalanceSum { lo: 0, hi: 0 }; + let mut wrapped = Self { lo: 0, hi: 0 }; for balance in balances { let (new_sum, did_overflow) = wrapped.lo.overflowing_add(balance); diff --git a/nssa/src/merkle_tree/default_values.rs b/nssa/src/merkle_tree/default_values.rs index 03166440..f4c8cbd1 100644 --- a/nssa/src/merkle_tree/default_values.rs +++ b/nssa/src/merkle_tree/default_values.rs @@ -1,4 +1,4 @@ -pub(crate) const DEFAULT_VALUES: [[u8; 32]; 32] = [ +pub const DEFAULT_VALUES: [[u8; 32]; 32] = [ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, diff --git a/nssa/src/merkle_tree/mod.rs b/nssa/src/merkle_tree/mod.rs index a2d97784..1126336c 100644 --- a/nssa/src/merkle_tree/mod.rs +++ b/nssa/src/merkle_tree/mod.rs @@ -156,7 +156,7 @@ fn hash_value(value: &Value) -> Node { hasher.finalize().into() } -fn prev_power_of_two(x: usize) -> usize { +const fn prev_power_of_two(x: usize) -> usize { if x == 0 { return 0; } diff --git a/nssa/src/privacy_preserving_transaction/circuit.rs b/nssa/src/privacy_preserving_transaction/circuit.rs index d1afe96d..4de1c2c4 100644 --- a/nssa/src/privacy_preserving_transaction/circuit.rs +++ b/nssa/src/privacy_preserving_transaction/circuit.rs @@ -27,7 +27,7 @@ impl Proof { } #[must_use] - pub fn from_inner(inner: Vec) -> Self { + pub const fn from_inner(inner: Vec) -> Self { Self(inner) } @@ -47,7 +47,7 @@ pub struct ProgramWithDependencies { impl ProgramWithDependencies { #[must_use] - pub fn new(program: Program, dependencies: HashMap) -> Self { + pub const fn new(program: Program, dependencies: HashMap) -> Self { Self { program, dependencies, @@ -57,7 +57,7 @@ impl ProgramWithDependencies { impl From for ProgramWithDependencies { fn from(program: Program) -> Self { - ProgramWithDependencies::new(program, HashMap::new()) + Self::new(program, HashMap::new()) } } @@ -328,7 +328,7 @@ mod tests { let shared_secret_2 = SharedSecretKey::new(&esk_2, &recipient_keys.vpk()); let (output, proof) = execute_and_prove( - vec![sender_pre.clone(), recipient], + vec![sender_pre, recipient], Program::serialize_instruction(balance_to_move).unwrap(), vec![1, 2], vec![0xdead_beef1, 0xdead_beef2], diff --git a/nssa/src/privacy_preserving_transaction/message.rs b/nssa/src/privacy_preserving_transaction/message.rs index fedd4438..34f5058f 100644 --- a/nssa/src/privacy_preserving_transaction/message.rs +++ b/nssa/src/privacy_preserving_transaction/message.rs @@ -155,12 +155,12 @@ pub mod tests { )]; Message { - public_account_ids: public_account_ids.clone(), - nonces: nonces.clone(), - public_post_states: public_post_states.clone(), - encrypted_private_post_states: encrypted_private_post_states.clone(), - new_commitments: new_commitments.clone(), - new_nullifiers: new_nullifiers.clone(), + public_account_ids, + nonces, + public_post_states, + encrypted_private_post_states, + new_commitments, + new_nullifiers, } } diff --git a/nssa/src/privacy_preserving_transaction/transaction.rs b/nssa/src/privacy_preserving_transaction/transaction.rs index 72119959..2b268c07 100644 --- a/nssa/src/privacy_preserving_transaction/transaction.rs +++ b/nssa/src/privacy_preserving_transaction/transaction.rs @@ -25,7 +25,7 @@ pub struct PrivacyPreservingTransaction { impl PrivacyPreservingTransaction { #[must_use] - pub fn new(message: Message, witness_set: WitnessSet) -> Self { + pub const fn new(message: Message, witness_set: WitnessSet) -> Self { Self { message, witness_set, @@ -129,12 +129,12 @@ impl PrivacyPreservingTransaction { } #[must_use] - pub fn message(&self) -> &Message { + pub const fn message(&self) -> &Message { &self.message } #[must_use] - pub fn witness_set(&self) -> &WitnessSet { + pub const fn witness_set(&self) -> &WitnessSet { &self.witness_set } diff --git a/nssa/src/privacy_preserving_transaction/witness_set.rs b/nssa/src/privacy_preserving_transaction/witness_set.rs index df80c420..373bbc9c 100644 --- a/nssa/src/privacy_preserving_transaction/witness_set.rs +++ b/nssa/src/privacy_preserving_transaction/witness_set.rs @@ -47,7 +47,7 @@ impl WitnessSet { } #[must_use] - pub fn proof(&self) -> &Proof { + pub const fn proof(&self) -> &Proof { &self.proof } @@ -57,7 +57,7 @@ impl WitnessSet { } #[must_use] - pub fn from_raw_parts( + pub const fn from_raw_parts( signatures_and_public_keys: Vec<(Signature, PublicKey)>, proof: Proof, ) -> Self { diff --git a/nssa/src/program.rs b/nssa/src/program.rs index 87b85749..90ca0244 100644 --- a/nssa/src/program.rs +++ b/nssa/src/program.rs @@ -33,7 +33,7 @@ impl Program { } #[must_use] - pub fn id(&self) -> ProgramId { + pub const fn id(&self) -> ProgramId { self.id } @@ -142,7 +142,7 @@ mod tests { pub fn nonce_changer_program() -> Self { use test_program_methods::{NONCE_CHANGER_ELF, NONCE_CHANGER_ID}; - Program { + Self { id: NONCE_CHANGER_ID, elf: NONCE_CHANGER_ELF.to_vec(), } @@ -153,7 +153,7 @@ mod tests { pub fn extra_output_program() -> Self { use test_program_methods::{EXTRA_OUTPUT_ELF, EXTRA_OUTPUT_ID}; - Program { + Self { id: EXTRA_OUTPUT_ID, elf: EXTRA_OUTPUT_ELF.to_vec(), } @@ -164,7 +164,7 @@ mod tests { pub fn missing_output_program() -> Self { use test_program_methods::{MISSING_OUTPUT_ELF, MISSING_OUTPUT_ID}; - Program { + Self { id: MISSING_OUTPUT_ID, elf: MISSING_OUTPUT_ELF.to_vec(), } @@ -175,7 +175,7 @@ mod tests { pub fn program_owner_changer() -> Self { use test_program_methods::{PROGRAM_OWNER_CHANGER_ELF, PROGRAM_OWNER_CHANGER_ID}; - Program { + Self { id: PROGRAM_OWNER_CHANGER_ID, elf: PROGRAM_OWNER_CHANGER_ELF.to_vec(), } @@ -186,7 +186,7 @@ mod tests { pub fn simple_balance_transfer() -> Self { use test_program_methods::{SIMPLE_BALANCE_TRANSFER_ELF, SIMPLE_BALANCE_TRANSFER_ID}; - Program { + Self { id: SIMPLE_BALANCE_TRANSFER_ID, elf: SIMPLE_BALANCE_TRANSFER_ELF.to_vec(), } @@ -197,7 +197,7 @@ mod tests { pub fn data_changer() -> Self { use test_program_methods::{DATA_CHANGER_ELF, DATA_CHANGER_ID}; - Program { + Self { id: DATA_CHANGER_ID, elf: DATA_CHANGER_ELF.to_vec(), } @@ -208,7 +208,7 @@ mod tests { pub fn minter() -> Self { use test_program_methods::{MINTER_ELF, MINTER_ID}; - Program { + Self { id: MINTER_ID, elf: MINTER_ELF.to_vec(), } @@ -219,7 +219,7 @@ mod tests { pub fn burner() -> Self { use test_program_methods::{BURNER_ELF, BURNER_ID}; - Program { + Self { id: BURNER_ID, elf: BURNER_ELF.to_vec(), } @@ -229,7 +229,7 @@ mod tests { pub fn chain_caller() -> Self { use test_program_methods::{CHAIN_CALLER_ELF, CHAIN_CALLER_ID}; - Program { + Self { id: CHAIN_CALLER_ID, elf: CHAIN_CALLER_ELF.to_vec(), } @@ -239,7 +239,7 @@ mod tests { pub fn claimer() -> Self { use test_program_methods::{CLAIMER_ELF, CLAIMER_ID}; - Program { + Self { id: CLAIMER_ID, elf: CLAIMER_ELF.to_vec(), } @@ -249,7 +249,7 @@ mod tests { pub fn changer_claimer() -> Self { use test_program_methods::{CHANGER_CLAIMER_ELF, CHANGER_CLAIMER_ID}; - Program { + Self { id: CHANGER_CLAIMER_ID, elf: CHANGER_CLAIMER_ELF.to_vec(), } @@ -259,7 +259,7 @@ mod tests { pub fn noop() -> Self { use test_program_methods::{NOOP_ELF, NOOP_ID}; - Program { + Self { id: NOOP_ID, elf: NOOP_ELF.to_vec(), } @@ -271,7 +271,7 @@ mod tests { MALICIOUS_AUTHORIZATION_CHANGER_ELF, MALICIOUS_AUTHORIZATION_CHANGER_ID, }; - Program { + Self { id: MALICIOUS_AUTHORIZATION_CHANGER_ID, elf: MALICIOUS_AUTHORIZATION_CHANGER_ELF.to_vec(), } diff --git a/nssa/src/program_deployment_transaction/message.rs b/nssa/src/program_deployment_transaction/message.rs index 1f8b7500..a51e4149 100644 --- a/nssa/src/program_deployment_transaction/message.rs +++ b/nssa/src/program_deployment_transaction/message.rs @@ -7,7 +7,7 @@ pub struct Message { impl Message { #[must_use] - pub fn new(bytecode: Vec) -> Self { + pub const fn new(bytecode: Vec) -> Self { Self { bytecode } } diff --git a/nssa/src/program_deployment_transaction/transaction.rs b/nssa/src/program_deployment_transaction/transaction.rs index 1cdb238a..1e53388d 100644 --- a/nssa/src/program_deployment_transaction/transaction.rs +++ b/nssa/src/program_deployment_transaction/transaction.rs @@ -13,7 +13,7 @@ pub struct ProgramDeploymentTransaction { impl ProgramDeploymentTransaction { #[must_use] - pub fn new(message: Message) -> Self { + pub const fn new(message: Message) -> Self { Self { message } } @@ -44,7 +44,7 @@ impl ProgramDeploymentTransaction { } #[must_use] - pub fn affected_public_account_ids(&self) -> Vec { + pub const fn affected_public_account_ids(&self) -> Vec { vec![] } } diff --git a/nssa/src/public_transaction/message.rs b/nssa/src/public_transaction/message.rs index 15eba285..d4838b87 100644 --- a/nssa/src/public_transaction/message.rs +++ b/nssa/src/public_transaction/message.rs @@ -50,7 +50,7 @@ impl Message { } #[must_use] - pub fn new_preserialized( + pub const fn new_preserialized( program_id: ProgramId, account_ids: Vec, nonces: Vec, diff --git a/nssa/src/public_transaction/transaction.rs b/nssa/src/public_transaction/transaction.rs index d19c12d4..4c4cd0b3 100644 --- a/nssa/src/public_transaction/transaction.rs +++ b/nssa/src/public_transaction/transaction.rs @@ -23,7 +23,7 @@ pub struct PublicTransaction { impl PublicTransaction { #[must_use] - pub fn new(message: Message, witness_set: WitnessSet) -> Self { + pub const fn new(message: Message, witness_set: WitnessSet) -> Self { Self { message, witness_set, @@ -31,12 +31,12 @@ impl PublicTransaction { } #[must_use] - pub fn message(&self) -> &Message { + pub const fn message(&self) -> &Message { &self.message } #[must_use] - pub fn witness_set(&self) -> &WitnessSet { + pub const fn witness_set(&self) -> &WitnessSet { &self.witness_set } diff --git a/nssa/src/public_transaction/witness_set.rs b/nssa/src/public_transaction/witness_set.rs index 59ef5c50..49c18b81 100644 --- a/nssa/src/public_transaction/witness_set.rs +++ b/nssa/src/public_transaction/witness_set.rs @@ -47,7 +47,7 @@ impl WitnessSet { } #[must_use] - pub fn from_raw_parts(signatures_and_public_keys: Vec<(Signature, PublicKey)>) -> Self { + pub const fn from_raw_parts(signatures_and_public_keys: Vec<(Signature, PublicKey)>) -> Self { Self { signatures_and_public_keys, } diff --git a/nssa/src/signature/private_key.rs b/nssa/src/signature/private_key.rs index f643406a..d8ece0e0 100644 --- a/nssa/src/signature/private_key.rs +++ b/nssa/src/signature/private_key.rs @@ -33,7 +33,7 @@ impl PrivateKey { } #[must_use] - pub fn value(&self) -> &[u8; 32] { + pub const fn value(&self) -> &[u8; 32] { &self.0 } } diff --git a/nssa/src/signature/public_key.rs b/nssa/src/signature/public_key.rs index 0522e114..9cdac761 100644 --- a/nssa/src/signature/public_key.rs +++ b/nssa/src/signature/public_key.rs @@ -44,7 +44,7 @@ impl PublicKey { } #[must_use] - pub fn value(&self) -> &[u8; 32] { + pub const fn value(&self) -> &[u8; 32] { &self.0 } } diff --git a/nssa/src/state.rs b/nssa/src/state.rs index 2210ae5c..6dbb2852 100644 --- a/nssa/src/state.rs +++ b/nssa/src/state.rs @@ -18,7 +18,7 @@ pub const MAX_NUMBER_CHAINED_CALLS: usize = 10; #[derive(Clone, BorshSerialize, BorshDeserialize)] #[cfg_attr(test, derive(Debug, PartialEq, Eq))] -pub(crate) struct CommitmentSet { +pub struct CommitmentSet { merkle_tree: MerkleTree, commitments: HashMap, root_history: HashSet, @@ -54,7 +54,7 @@ impl CommitmentSet { /// Initializes an empty `CommitmentSet` with a given capacity. /// If the capacity is not a `power_of_two`, then capacity is taken /// to be the next `power_of_two`. - pub(crate) fn with_capacity(capacity: usize) -> CommitmentSet { + pub(crate) fn with_capacity(capacity: usize) -> Self { Self { merkle_tree: MerkleTree::with_capacity(capacity), commitments: HashMap::new(), @@ -68,7 +68,7 @@ impl CommitmentSet { struct NullifierSet(BTreeSet); impl NullifierSet { - fn new() -> Self { + const fn new() -> Self { Self(BTreeSet::new()) } @@ -242,7 +242,7 @@ impl V02State { self.public_state .get(&account_id) .cloned() - .unwrap_or(Account::default()) + .unwrap_or_else(Account::default) } #[must_use] @@ -250,7 +250,7 @@ impl V02State { self.private_state.0.get_proof_for(commitment) } - pub(crate) fn programs(&self) -> &HashMap { + pub(crate) const fn programs(&self) -> &HashMap { &self.programs } @@ -631,8 +631,7 @@ pub mod tests { fn lp_supply_init() -> u128 { // isqrt(vault_a_balance_init * vault_b_balance_init) = isqrt(5_000 * 2_500) = 3535 - (BalanceForTests::vault_a_balance_init() * BalanceForTests::vault_b_balance_init()) - .isqrt() + (Self::vault_a_balance_init() * Self::vault_b_balance_init()).isqrt() } } @@ -642,16 +641,13 @@ pub mod tests { fn pool_definition_id() -> AccountId { amm_core::compute_pool_pda( Program::amm().id(), - IdForTests::token_a_definition_id(), - IdForTests::token_b_definition_id(), + Self::token_a_definition_id(), + Self::token_b_definition_id(), ) } fn token_lp_definition_id() -> AccountId { - amm_core::compute_liquidity_token_pda( - Program::amm().id(), - IdForTests::pool_definition_id(), - ) + amm_core::compute_liquidity_token_pda(Program::amm().id(), Self::pool_definition_id()) } fn token_a_definition_id() -> AccountId { @@ -683,16 +679,16 @@ pub mod tests { fn vault_a_id() -> AccountId { amm_core::compute_vault_pda( Program::amm().id(), - IdForTests::pool_definition_id(), - IdForTests::token_a_definition_id(), + Self::pool_definition_id(), + Self::token_a_definition_id(), ) } fn vault_b_id() -> AccountId { amm_core::compute_vault_pda( Program::amm().id(), - IdForTests::pool_definition_id(), - IdForTests::token_b_definition_id(), + Self::pool_definition_id(), + Self::token_b_definition_id(), ) } } @@ -2199,7 +2195,7 @@ pub mod tests { vec![], vec![], vec![], - &program.clone().into(), + &program.into(), ); assert!(matches!(result, Err(NssaError::ProgramProveFailed(_)))); @@ -4205,7 +4201,7 @@ pub mod tests { // Prepare new state of account let account_metadata = { - let mut acc = authorized_account.clone(); + let mut acc = authorized_account; acc.account.program_owner = Program::claimer().id(); acc }; diff --git a/program_methods/guest/src/bin/privacy_preserving_circuit.rs b/program_methods/guest/src/bin/privacy_preserving_circuit.rs index f4b3e6c9..b74b3e65 100644 --- a/program_methods/guest/src/bin/privacy_preserving_circuit.rs +++ b/program_methods/guest/src/bin/privacy_preserving_circuit.rs @@ -37,7 +37,7 @@ impl ExecutionState { }; let mut chained_calls = VecDeque::from_iter([(initial_call, None)]); - let mut execution_state = ExecutionState { + let mut execution_state = Self { pre_states: Vec::new(), post_states: HashMap::new(), }; @@ -324,10 +324,9 @@ fn compute_circuit_output( output.new_commitments.push(commitment_post); output.ciphertexts.push(encrypted_account); - output_index = match output_index.checked_add(1) { - Some(val) => val, - None => panic!("Too many private accounts, output index overflow"), - } + output_index = output_index + .checked_add(1) + .unwrap_or_else(|| panic!("Too many private accounts, output index overflow")); } _ => panic!("Invalid visibility mask value"), } diff --git a/programs/amm/core/src/lib.rs b/programs/amm/core/src/lib.rs index d499ae9f..05b0b870 100644 --- a/programs/amm/core/src/lib.rs +++ b/programs/amm/core/src/lib.rs @@ -97,7 +97,7 @@ impl TryFrom<&Data> for PoolDefinition { type Error = std::io::Error; fn try_from(data: &Data) -> Result { - PoolDefinition::try_from_slice(data.as_ref()) + Self::try_from_slice(data.as_ref()) } } @@ -109,7 +109,7 @@ impl From<&PoolDefinition> for Data { BorshSerialize::serialize(definition, &mut data) .expect("Serialization to Vec should not fail"); - Data::try_from(data).expect("Token definition encoded data should fit into Data") + Self::try_from(data).expect("Token definition encoded data should fit into Data") } } diff --git a/programs/amm/src/add.rs b/programs/amm/src/add.rs index 0a926b3b..d057507b 100644 --- a/programs/amm/src/add.rs +++ b/programs/amm/src/add.rs @@ -156,7 +156,7 @@ pub fn add_liquidity( pool_definition_lp_auth.is_authorized = true; let call_token_lp = ChainedCall::new( token_program_id, - vec![pool_definition_lp_auth.clone(), user_holding_lp.clone()], + vec![pool_definition_lp_auth, user_holding_lp.clone()], &token_core::Instruction::Mint { amount_to_mint: delta_lp, }, diff --git a/programs/amm/src/new_definition.rs b/programs/amm/src/new_definition.rs index 83b4a3ad..366eb747 100644 --- a/programs/amm/src/new_definition.rs +++ b/programs/amm/src/new_definition.rs @@ -134,7 +134,7 @@ pub fn new_definition( let call_token_lp = ChainedCall::new( token_program_id, - vec![pool_lp_auth.clone(), user_holding_lp.clone()], + vec![pool_lp_auth, user_holding_lp.clone()], &instruction, ) .with_pda_seeds(vec![compute_liquidity_token_pda_seed(pool.account_id)]); @@ -151,5 +151,5 @@ pub fn new_definition( AccountPostState::new(user_holding_lp.account), ]; - (post_states.clone(), chained_calls) + (post_states, chained_calls) } diff --git a/programs/amm/src/remove.rs b/programs/amm/src/remove.rs index d8c7ced5..7844f4bd 100644 --- a/programs/amm/src/remove.rs +++ b/programs/amm/src/remove.rs @@ -108,7 +108,7 @@ pub fn remove_liquidity( reserve_a: pool_def_data.reserve_a - withdraw_amount_a, reserve_b: pool_def_data.reserve_b - withdraw_amount_b, active, - ..pool_def_data.clone() + ..pool_def_data }; pool_post.data = Data::from(&pool_post_definition); diff --git a/programs/amm/src/tests.rs b/programs/amm/src/tests.rs index 6bb7cc1f..29456e03 100644 --- a/programs/amm/src/tests.rs +++ b/programs/amm/src/tests.rs @@ -107,7 +107,7 @@ impl BalanceForTests { fn lp_supply_init() -> u128 { // sqrt(vault_a_reserve_init * vault_b_reserve_init) = sqrt(1000 * 500) = 707 - (BalanceForTests::vault_a_reserve_init() * BalanceForTests::vault_b_reserve_init()).isqrt() + (Self::vault_a_reserve_init() * Self::vault_b_reserve_init()).isqrt() } fn vault_a_swap_test_1() -> u128 { @@ -365,7 +365,7 @@ impl IdForTests { } fn token_lp_definition_id() -> AccountId { - compute_liquidity_token_pda(AMM_PROGRAM_ID, IdForTests::pool_definition_id()) + compute_liquidity_token_pda(AMM_PROGRAM_ID, Self::pool_definition_id()) } fn user_token_a_id() -> AccountId { @@ -383,24 +383,24 @@ impl IdForTests { fn pool_definition_id() -> AccountId { compute_pool_pda( AMM_PROGRAM_ID, - IdForTests::token_a_definition_id(), - IdForTests::token_b_definition_id(), + Self::token_a_definition_id(), + Self::token_b_definition_id(), ) } fn vault_a_id() -> AccountId { compute_vault_pda( AMM_PROGRAM_ID, - IdForTests::pool_definition_id(), - IdForTests::token_a_definition_id(), + Self::pool_definition_id(), + Self::token_a_definition_id(), ) } fn vault_b_id() -> AccountId { compute_vault_pda( AMM_PROGRAM_ID, - IdForTests::pool_definition_id(), - IdForTests::token_b_definition_id(), + Self::pool_definition_id(), + Self::token_b_definition_id(), ) } } diff --git a/programs/token/core/src/lib.rs b/programs/token/core/src/lib.rs index f96e10e2..42c15860 100644 --- a/programs/token/core/src/lib.rs +++ b/programs/token/core/src/lib.rs @@ -92,7 +92,7 @@ impl TryFrom<&Data> for TokenDefinition { type Error = std::io::Error; fn try_from(data: &Data) -> Result { - TokenDefinition::try_from_slice(data.as_ref()) + Self::try_from_slice(data.as_ref()) } } @@ -104,7 +104,7 @@ impl From<&TokenDefinition> for Data { BorshSerialize::serialize(definition, &mut data) .expect("Serialization to Vec should not fail"); - Data::try_from(data).expect("Token definition encoded data should fit into Data") + Self::try_from(data).expect("Token definition encoded data should fit into Data") } } @@ -128,17 +128,17 @@ pub enum TokenHolding { impl TokenHolding { #[must_use] - pub fn zeroized_clone_from(other: &Self) -> Self { + pub const fn zeroized_clone_from(other: &Self) -> Self { match other { - TokenHolding::Fungible { definition_id, .. } => TokenHolding::Fungible { + Self::Fungible { definition_id, .. } => Self::Fungible { definition_id: *definition_id, balance: 0, }, - TokenHolding::NftMaster { definition_id, .. } => TokenHolding::NftMaster { + Self::NftMaster { definition_id, .. } => Self::NftMaster { definition_id: *definition_id, print_balance: 0, }, - TokenHolding::NftPrintedCopy { definition_id, .. } => TokenHolding::NftPrintedCopy { + Self::NftPrintedCopy { definition_id, .. } => Self::NftPrintedCopy { definition_id: *definition_id, owned: false, }, @@ -146,16 +146,16 @@ impl TokenHolding { } #[must_use] - pub fn zeroized_from_definition( + pub const fn zeroized_from_definition( definition_id: AccountId, definition: &TokenDefinition, ) -> Self { match definition { - TokenDefinition::Fungible { .. } => TokenHolding::Fungible { + TokenDefinition::Fungible { .. } => Self::Fungible { definition_id, balance: 0, }, - TokenDefinition::NonFungible { .. } => TokenHolding::NftPrintedCopy { + TokenDefinition::NonFungible { .. } => Self::NftPrintedCopy { definition_id, owned: false, }, @@ -163,11 +163,11 @@ impl TokenHolding { } #[must_use] - pub fn definition_id(&self) -> AccountId { + pub const fn definition_id(&self) -> AccountId { match self { - TokenHolding::Fungible { definition_id, .. } - | TokenHolding::NftMaster { definition_id, .. } - | TokenHolding::NftPrintedCopy { definition_id, .. } => *definition_id, + Self::Fungible { definition_id, .. } + | Self::NftMaster { definition_id, .. } + | Self::NftPrintedCopy { definition_id, .. } => *definition_id, } } } @@ -176,7 +176,7 @@ impl TryFrom<&Data> for TokenHolding { type Error = std::io::Error; fn try_from(data: &Data) -> Result { - TokenHolding::try_from_slice(data.as_ref()) + Self::try_from_slice(data.as_ref()) } } @@ -188,7 +188,7 @@ impl From<&TokenHolding> for Data { BorshSerialize::serialize(holding, &mut data) .expect("Serialization to Vec should not fail"); - Data::try_from(data).expect("Token holding encoded data should fit into Data") + Self::try_from(data).expect("Token holding encoded data should fit into Data") } } @@ -227,7 +227,7 @@ impl TryFrom<&Data> for TokenMetadata { type Error = std::io::Error; fn try_from(data: &Data) -> Result { - TokenMetadata::try_from_slice(data.as_ref()) + Self::try_from_slice(data.as_ref()) } } @@ -239,6 +239,6 @@ impl From<&TokenMetadata> for Data { BorshSerialize::serialize(metadata, &mut data) .expect("Serialization to Vec should not fail"); - Data::try_from(data).expect("Token metadata encoded data should fit into Data") + Self::try_from(data).expect("Token metadata encoded data should fit into Data") } } diff --git a/sequencer_core/src/block_store.rs b/sequencer_core/src/block_store.rs index 3cec3127..eb541188 100644 --- a/sequencer_core/src/block_store.rs +++ b/sequencer_core/src/block_store.rs @@ -72,11 +72,11 @@ impl SequencerStore { Ok(self.dbio.latest_block_meta()?) } - pub fn genesis_id(&self) -> u64 { + pub const fn genesis_id(&self) -> u64 { self.genesis_id } - pub fn signing_key(&self) -> &nssa::PrivateKey { + pub const fn signing_key(&self) -> &nssa::PrivateKey { &self.signing_key } @@ -201,7 +201,7 @@ mod tests { // Add a new block let tx = common::test_utils::produce_dummy_empty_transaction(); - let block = common::test_utils::produce_dummy_block(1, None, vec![tx.clone()]); + let block = common::test_utils::produce_dummy_block(1, None, vec![tx]); let block_hash = block.header.hash; let block_msg_id = [1; 32]; @@ -237,7 +237,7 @@ mod tests { // Add a new block with Pending status let tx = common::test_utils::produce_dummy_empty_transaction(); - let block = common::test_utils::produce_dummy_block(1, None, vec![tx.clone()]); + let block = common::test_utils::produce_dummy_block(1, None, vec![tx]); let block_id = block.header.block_id; let dummy_state = V02State::new_with_genesis_accounts(&[], &[]); diff --git a/sequencer_core/src/config.rs b/sequencer_core/src/config.rs index 003b82e8..72b8071a 100644 --- a/sequencer_core/src/config.rs +++ b/sequencer_core/src/config.rs @@ -69,7 +69,7 @@ pub struct BedrockConfig { } impl SequencerConfig { - pub fn from_path(config_home: &Path) -> Result { + pub fn from_path(config_home: &Path) -> Result { let file = File::open(config_home)?; let reader = BufReader::new(file); @@ -77,6 +77,6 @@ impl SequencerConfig { } } -fn default_max_block_size() -> ByteSize { +const fn default_max_block_size() -> ByteSize { ByteSize::mib(1) } diff --git a/sequencer_core/src/lib.rs b/sequencer_core/src/lib.rs index cd39dfc0..a7500da6 100644 --- a/sequencer_core/src/lib.rs +++ b/sequencer_core/src/lib.rs @@ -281,19 +281,19 @@ impl SequencerCore &nssa::V02State { + pub const fn state(&self) -> &nssa::V02State { &self.state } - pub fn block_store(&self) -> &SequencerStore { + pub const fn block_store(&self) -> &SequencerStore { &self.store } - pub fn chain_height(&self) -> u64 { + pub const fn chain_height(&self) -> u64 { self.chain_height } - pub fn sequencer_config(&self) -> &SequencerConfig { + pub const fn sequencer_config(&self) -> &SequencerConfig { &self.sequencer_config } @@ -302,20 +302,17 @@ impl SequencerCore Result<()> { - if let Some(first_pending_block_id) = self - .get_pending_blocks()? + self.get_pending_blocks()? .iter() .map(|block| block.header.block_id) .min() - { - info!("Clearing pending blocks up to id: {last_finalized_block_id}"); - // TODO: Delete blocks instead of marking them as finalized. - // Current approach is used because we still have `GetBlockDataRequest`. - (first_pending_block_id..=last_finalized_block_id) - .try_for_each(|id| self.store.mark_block_as_finalized(id)) - } else { - Ok(()) - } + .map_or(Ok(()), |first_pending_block_id| { + info!("Clearing pending blocks up to id: {last_finalized_block_id}"); + // TODO: Delete blocks instead of marking them as finalized. + // Current approach is used because we still have `GetBlockDataRequest`. + (first_pending_block_id..=last_finalized_block_id) + .try_for_each(|id| self.store.mark_block_as_finalized(id)) + }) } /// Returns the list of stored pending blocks. diff --git a/sequencer_rpc/src/lib.rs b/sequencer_rpc/src/lib.rs index b6049715..47e4fa75 100644 --- a/sequencer_rpc/src/lib.rs +++ b/sequencer_rpc/src/lib.rs @@ -42,13 +42,10 @@ fn respond(val: T) -> Result { #[must_use] pub fn rpc_error_responce_inverter(err: RpcError) -> RpcError { - let mut content: Option = None; - if err.error_struct.is_some() { - content = match err.error_struct.clone().unwrap() { - RpcErrorKind::HandlerError(val) | RpcErrorKind::InternalError(val) => Some(val), - RpcErrorKind::RequestValidationError(vall) => Some(serde_json::to_value(vall).unwrap()), - }; - } + let content = err.error_struct.map(|error| match error { + RpcErrorKind::HandlerError(val) | RpcErrorKind::InternalError(val) => val, + RpcErrorKind::RequestValidationError(vall) => serde_json::to_value(vall).unwrap(), + }); RpcError { error_struct: None, code: err.code, diff --git a/sequencer_runner/src/lib.rs b/sequencer_runner/src/lib.rs index 4e0c32ca..e2831191 100644 --- a/sequencer_runner/src/lib.rs +++ b/sequencer_runner/src/lib.rs @@ -80,7 +80,7 @@ impl SequencerHandle { } #[must_use] - pub fn addr(&self) -> SocketAddr { + pub const fn addr(&self) -> SocketAddr { self.addr } } diff --git a/storage/src/error.rs b/storage/src/error.rs index bcba2750..3056e09b 100644 --- a/storage/src/error.rs +++ b/storage/src/error.rs @@ -18,7 +18,7 @@ pub enum DbError { impl DbError { #[must_use] - pub fn rocksdb_cast_message(rerr: rocksdb::Error, message: Option) -> Self { + pub const fn rocksdb_cast_message(rerr: rocksdb::Error, message: Option) -> Self { Self::RocksDbError { error: rerr, additional_info: message, @@ -26,7 +26,7 @@ impl DbError { } #[must_use] - pub fn borsh_cast_message(berr: borsh::io::Error, message: Option) -> Self { + pub const fn borsh_cast_message(berr: borsh::io::Error, message: Option) -> Self { Self::SerializationError { error: berr, additional_info: message, @@ -34,7 +34,7 @@ impl DbError { } #[must_use] - pub fn db_interaction_error(message: String) -> Self { + pub const fn db_interaction_error(message: String) -> Self { Self::DbInteractionError { additional_info: message, } diff --git a/storage/src/indexer.rs b/storage/src/indexer.rs index ad17147d..6d03d320 100644 --- a/storage/src/indexer.rs +++ b/storage/src/indexer.rs @@ -92,10 +92,7 @@ impl RocksDBIO { let dbio = Self { db }; let is_start_set = dbio.get_meta_is_first_block_set()?; - - if is_start_set { - Ok(dbio) - } else { + if !is_start_set { let block_id = genesis_block.header.block_id; dbio.put_meta_last_block_in_db(block_id)?; dbio.put_meta_first_block_in_db(genesis_block)?; @@ -104,9 +101,9 @@ impl RocksDBIO { // First breakpoint setup dbio.put_breakpoint(0, initial_state)?; dbio.put_meta_last_breakpoint_id(0)?; - - Ok(dbio) } + + Ok(dbio) } pub fn destroy(path: &Path) -> DbResult<()> { @@ -494,7 +491,7 @@ impl RocksDBIO { acc_to_tx_map .entry(acc_id) .and_modify(|tx_hashes| tx_hashes.push(tx_hash.into())) - .or_insert(vec![tx_hash.into()]); + .or_insert_with(|| vec![tx_hash.into()]); } } @@ -932,10 +929,12 @@ impl RocksDBIO { .transactions .iter() .find(|tx| tx.hash().0 == tx_hash) - .ok_or(DbError::db_interaction_error(format!( - "Missing transaction in block {} with hash {:#?}", - block.header.block_id, tx_hash - )))?; + .ok_or_else(|| { + DbError::db_interaction_error(format!( + "Missing transaction in block {} with hash {:#?}", + block.header.block_id, tx_hash + )) + })?; tx_batch.push(transaction.clone()); } @@ -993,17 +992,15 @@ mod tests { fn transfer(amount: u128, nonce: u128, direction: bool) -> NSSATransaction { let from; let to; - let sign_key; - - if direction { + let sign_key = if direction { from = acc1(); to = acc2(); - sign_key = acc1_sign_key(); + acc1_sign_key() } else { from = acc2(); to = acc1(); - sign_key = acc2_sign_key(); - } + acc2_sign_key() + }; common::test_utils::create_transaction_native_token_transfer( from, nonce, to, amount, &sign_key, diff --git a/storage/src/sequencer.rs b/storage/src/sequencer.rs index 04ddc8e5..37ad419e 100644 --- a/storage/src/sequencer.rs +++ b/storage/src/sequencer.rs @@ -76,10 +76,7 @@ impl RocksDBIO { let dbio = Self { db }; let is_start_set = dbio.get_meta_is_first_block_set()?; - - if is_start_set { - Ok(dbio) - } else { + if !is_start_set { let block_id = genesis_block.header.block_id; dbio.put_meta_first_block_in_db(genesis_block, genesis_msg_id)?; dbio.put_meta_is_first_block_set()?; @@ -90,9 +87,9 @@ impl RocksDBIO { hash: genesis_block.header.hash, msg_id: genesis_msg_id, })?; - - Ok(dbio) } + + Ok(dbio) } pub fn destroy(path: &Path) -> DbResult<()> { diff --git a/test_program_methods/guest/src/bin/malicious_authorization_changer.rs b/test_program_methods/guest/src/bin/malicious_authorization_changer.rs index 46f06bf2..56ba7e72 100644 --- a/test_program_methods/guest/src/bin/malicious_authorization_changer.rs +++ b/test_program_methods/guest/src/bin/malicious_authorization_changer.rs @@ -36,7 +36,7 @@ fn main() { let chained_call = ChainedCall { program_id: transfer_program_id, instruction_data, - pre_states: vec![authorised_sender.clone(), receiver.clone()], + pre_states: vec![authorised_sender, receiver.clone()], pda_seeds: vec![], }; diff --git a/wallet-ffi/src/error.rs b/wallet-ffi/src/error.rs index b48eb31f..be3be56d 100644 --- a/wallet-ffi/src/error.rs +++ b/wallet-ffi/src/error.rs @@ -47,7 +47,7 @@ pub enum WalletFfiError { impl WalletFfiError { /// Check if it's [`WalletFfiError::Success`] or panic. pub fn unwrap(self) { - let WalletFfiError::Success = self else { + let Self::Success = self else { panic!("Called `unwrap()` on error value `{self:#?}`"); }; } diff --git a/wallet-ffi/src/types.rs b/wallet-ffi/src/types.rs index c689fe8e..a6a148c7 100644 --- a/wallet-ffi/src/types.rs +++ b/wallet-ffi/src/types.rs @@ -3,7 +3,7 @@ use core::slice; use std::{ffi::c_char, ptr}; -use nssa::{Account, Data}; +use nssa::Data; use nssa_core::encryption::shared_key_derivation::Secp256k1Point; use crate::error::WalletFfiError; @@ -143,20 +143,20 @@ impl Default for FfiTransferResult { impl FfiBytes32 { /// Create from a 32-byte array. #[must_use] - pub fn from_bytes(bytes: [u8; 32]) -> Self { + pub const fn from_bytes(bytes: [u8; 32]) -> Self { Self { data: bytes } } /// Create from an `AccountId`. #[must_use] - pub fn from_account_id(id: &nssa::AccountId) -> Self { + pub const fn from_account_id(id: &nssa::AccountId) -> Self { Self { data: *id.value() } } } impl FfiPrivateAccountKeys { #[must_use] - pub fn npk(&self) -> nssa_core::NullifierPublicKey { + pub const fn npk(&self) -> nssa_core::NullifierPublicKey { nssa_core::NullifierPublicKey(self.nullifier_public_key.data) } @@ -182,7 +182,7 @@ impl From for FfiU128 { impl From for u128 { fn from(value: FfiU128) -> Self { - u128::from_le_bytes(value.data) + Self::from_le_bytes(value.data) } } @@ -194,7 +194,7 @@ impl From<&nssa::AccountId> for FfiBytes32 { impl From for nssa::AccountId { fn from(bytes: FfiBytes32) -> Self { - nssa::AccountId::new(bytes.data) + Self::new(bytes.data) } } @@ -217,7 +217,7 @@ impl From for FfiAccount { let program_owner = FfiProgramId { data: value.program_owner, }; - FfiAccount { + Self { program_owner, balance: value.balance.into(), data, @@ -240,7 +240,7 @@ impl TryFrom<&FfiAccount> for nssa::Account { } else { Data::default() }; - Ok(Account { + Ok(Self { program_owner: value.program_owner.data, balance: value.balance.into(), data, @@ -261,7 +261,7 @@ impl TryFrom<&FfiPublicAccountKey> for nssa::PublicKey { type Error = WalletFfiError; fn try_from(value: &FfiPublicAccountKey) -> Result { - let public_key = nssa::PublicKey::try_new(value.public_key.data) + let public_key = Self::try_new(value.public_key.data) .map_err(|_err| WalletFfiError::InvalidTypeConversion)?; Ok(public_key) } diff --git a/wallet/src/chain_storage.rs b/wallet/src/chain_storage.rs index df703dc0..90325666 100644 --- a/wallet/src/chain_storage.rs +++ b/wallet/src/chain_storage.rs @@ -298,6 +298,6 @@ mod tests { let config = create_sample_wallet_config(); let accs = create_sample_persistent_accounts(); - let _ = WalletChainStore::new(config.clone(), accs, HashMap::new()).unwrap(); + let _ = WalletChainStore::new(config, accs, HashMap::new()).unwrap(); } } diff --git a/wallet/src/cli/account.rs b/wallet/src/cli/account.rs index bb9f9700..1c19252d 100644 --- a/wallet/src/cli/account.rs +++ b/wallet/src/cli/account.rs @@ -1,4 +1,4 @@ -use anyhow::Result; +use anyhow::{Context as _, Result}; use clap::Subcommand; use itertools::Itertools as _; use key_protocol::key_management::key_tree::chain_index::ChainIndex; @@ -79,7 +79,7 @@ impl WalletSubcommand for NewSubcommand { wallet_core: &mut WalletCore, ) -> Result { match self { - NewSubcommand::Public { cci, label } => { + Self::Public { cci, label } => { if let Some(label) = &label && wallet_core .storage @@ -116,7 +116,7 @@ impl WalletSubcommand for NewSubcommand { Ok(SubcommandReturnValue::RegisterAccount { account_id }) } - NewSubcommand::Private { cci, label } => { + Self::Private { cci, label } => { if let Some(label) = &label && wallet_core .storage @@ -166,7 +166,7 @@ impl WalletSubcommand for AccountSubcommand { wallet_core: &mut WalletCore, ) -> Result { match self { - AccountSubcommand::Get { + Self::Get { raw, keys, account_id, @@ -185,7 +185,7 @@ impl WalletSubcommand for AccountSubcommand { } AccountPrivacyKind::Private => wallet_core .get_account_private(account_id) - .ok_or(anyhow::anyhow!("Private account not found in storage"))?, + .context("Private account not found in storage")?, }; // Helper closure to display keys for the account @@ -196,7 +196,7 @@ impl WalletSubcommand for AccountSubcommand { .storage .user_data .get_pub_account_signing_key(account_id) - .ok_or(anyhow::anyhow!("Public account not found in storage"))?; + .context("Public account not found in storage")?; let public_key = PublicKey::new_from_private_key(private_key); println!("pk {}", hex::encode(public_key.value())); @@ -206,7 +206,7 @@ impl WalletSubcommand for AccountSubcommand { .storage .user_data .get_private_account(account_id) - .ok_or(anyhow::anyhow!("Private account not found in storage"))?; + .context("Private account not found in storage")?; println!("npk {}", hex::encode(key.nullifer_public_key.0)); println!("vpk {}", hex::encode(key.viewing_public_key.to_bytes())); @@ -226,7 +226,7 @@ impl WalletSubcommand for AccountSubcommand { } if raw { - let account_hr: HumanReadableAccount = account.clone().into(); + let account_hr: HumanReadableAccount = account.into(); println!("{}", serde_json::to_string(&account_hr).unwrap()); return Ok(SubcommandReturnValue::Empty); @@ -242,10 +242,8 @@ impl WalletSubcommand for AccountSubcommand { Ok(SubcommandReturnValue::Empty) } - AccountSubcommand::New(new_subcommand) => { - new_subcommand.handle_subcommand(wallet_core).await - } - AccountSubcommand::SyncPrivate => { + Self::New(new_subcommand) => new_subcommand.handle_subcommand(wallet_core).await, + Self::SyncPrivate => { let curr_last_block = wallet_core .sequencer_client .get_last_block() @@ -268,17 +266,15 @@ impl WalletSubcommand for AccountSubcommand { Ok(SubcommandReturnValue::SyncedToBlock(curr_last_block)) } - AccountSubcommand::List { long } => { + Self::List { long } => { let user_data = &wallet_core.storage.user_data; let labels = &wallet_core.storage.labels; let format_with_label = |prefix: &str, id: nssa::AccountId| { let id_str = id.to_string(); - if let Some(label) = labels.get(&id_str) { - format!("{prefix} [{label}]") - } else { - prefix.to_owned() - } + labels + .get(&id_str) + .map_or_else(|| prefix.to_owned(), |label| format!("{prefix} [{label}]")) }; if !long { @@ -378,7 +374,7 @@ impl WalletSubcommand for AccountSubcommand { Ok(SubcommandReturnValue::Empty) } - AccountSubcommand::Label { account_id, label } => { + Self::Label { account_id, label } => { let (account_id_str, _) = parse_addr_with_privacy_prefix(&account_id)?; // Check if label is already used by a different account @@ -422,29 +418,32 @@ fn format_account_details(account: &Account) -> (String, String) { o if *o == auth_tr_prog_id => { let account_hr: HumanReadableAccount = account.clone().into(); ( - "Account owned by authenticated transfer program".to_string(), + "Account owned by authenticated transfer program".to_owned(), serde_json::to_string(&account_hr).unwrap(), ) } - o if *o == token_prog_id => { - if let Ok(token_def) = TokenDefinition::try_from(&account.data) { + o if *o == token_prog_id => TokenDefinition::try_from(&account.data) + .map(|token_def| { ( "Definition account owned by token program".to_owned(), serde_json::to_string(&token_def).unwrap(), ) - } else if let Ok(token_hold) = TokenHolding::try_from(&account.data) { - ( - "Holding account owned by token program".to_string(), - serde_json::to_string(&token_hold).unwrap(), - ) - } else { + }) + .or_else(|_| { + TokenHolding::try_from(&account.data).map(|token_hold| { + ( + "Holding account owned by token program".to_owned(), + serde_json::to_string(&token_hold).unwrap(), + ) + }) + }) + .unwrap_or_else(|_| { let account_hr: HumanReadableAccount = account.clone().into(); ( "Unknown token program account".to_owned(), serde_json::to_string(&account_hr).unwrap(), ) - } - } + }), _ => { let account_hr: HumanReadableAccount = account.clone().into(); ( diff --git a/wallet/src/cli/chain.rs b/wallet/src/cli/chain.rs index 3979a84f..930c7fa8 100644 --- a/wallet/src/cli/chain.rs +++ b/wallet/src/cli/chain.rs @@ -31,17 +31,17 @@ impl WalletSubcommand for ChainSubcommand { wallet_core: &mut WalletCore, ) -> Result { match self { - ChainSubcommand::CurrentBlockId => { + Self::CurrentBlockId => { let latest_block_res = wallet_core.sequencer_client.get_last_block().await?; println!("Last block id is {}", latest_block_res.last_block); } - ChainSubcommand::Block { id } => { + Self::Block { id } => { let block_res = wallet_core.sequencer_client.get_block(id).await?; println!("Last block id is {:#?}", block_res.block); } - ChainSubcommand::Transaction { hash } => { + Self::Transaction { hash } => { let tx_res = wallet_core .sequencer_client .get_transaction_by_hash(hash) diff --git a/wallet/src/cli/config.rs b/wallet/src/cli/config.rs index 99339132..ec5f1245 100644 --- a/wallet/src/cli/config.rs +++ b/wallet/src/cli/config.rs @@ -29,7 +29,7 @@ impl WalletSubcommand for ConfigSubcommand { wallet_core: &mut WalletCore, ) -> Result { match self { - ConfigSubcommand::Get { all, key } => { + Self::Get { all, key } => { if all { let config_str = serde_json::to_string_pretty(&wallet_core.storage.wallet_config)?; @@ -86,7 +86,7 @@ impl WalletSubcommand for ConfigSubcommand { println!("Please provide a key or use --all flag"); } } - ConfigSubcommand::Set { key, value } => { + Self::Set { key, value } => { match key.as_str() { "override_rust_log" => { wallet_core.storage.wallet_config.override_rust_log = Some(value); @@ -122,7 +122,7 @@ impl WalletSubcommand for ConfigSubcommand { wallet_core.store_config_changes().await?; } - ConfigSubcommand::Description { key } => match key.as_str() { + Self::Description { key } => match key.as_str() { "override_rust_log" => { println!("Value of variable RUST_LOG to override, affects logging"); } diff --git a/wallet/src/cli/programs/amm.rs b/wallet/src/cli/programs/amm.rs index 5da445d6..1aa7cc1b 100644 --- a/wallet/src/cli/programs/amm.rs +++ b/wallet/src/cli/programs/amm.rs @@ -104,7 +104,7 @@ impl WalletSubcommand for AmmProgramAgnosticSubcommand { wallet_core: &mut WalletCore, ) -> Result { match self { - AmmProgramAgnosticSubcommand::New { + Self::New { user_holding_a, user_holding_b, user_holding_lp, @@ -150,7 +150,7 @@ impl WalletSubcommand for AmmProgramAgnosticSubcommand { } } } - AmmProgramAgnosticSubcommand::Swap { + Self::Swap { user_holding_a, user_holding_b, amount_in, @@ -185,7 +185,7 @@ impl WalletSubcommand for AmmProgramAgnosticSubcommand { } } } - AmmProgramAgnosticSubcommand::AddLiquidity { + Self::AddLiquidity { user_holding_a, user_holding_b, user_holding_lp, @@ -233,7 +233,7 @@ impl WalletSubcommand for AmmProgramAgnosticSubcommand { } } } - AmmProgramAgnosticSubcommand::RemoveLiquidity { + Self::RemoveLiquidity { user_holding_a, user_holding_b, user_holding_lp, diff --git a/wallet/src/cli/programs/native_token_transfer.rs b/wallet/src/cli/programs/native_token_transfer.rs index b891976b..80e95641 100644 --- a/wallet/src/cli/programs/native_token_transfer.rs +++ b/wallet/src/cli/programs/native_token_transfer.rs @@ -51,7 +51,7 @@ impl WalletSubcommand for AuthTransferSubcommand { wallet_core: &mut WalletCore, ) -> Result { match self { - AuthTransferSubcommand::Init { account_id } => { + Self::Init { account_id } => { let (account_id, addr_privacy) = parse_addr_with_privacy_prefix(&account_id)?; match addr_privacy { @@ -98,7 +98,7 @@ impl WalletSubcommand for AuthTransferSubcommand { Ok(SubcommandReturnValue::Empty) } - AuthTransferSubcommand::Send { + Self::Send { from, to, to_npk, @@ -307,7 +307,7 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommandPrivate { wallet_core: &mut WalletCore, ) -> Result { match self { - NativeTokenTransferProgramSubcommandPrivate::PrivateOwned { from, to, amount } => { + Self::PrivateOwned { from, to, amount } => { let from: AccountId = from.parse().unwrap(); let to: AccountId = to.parse().unwrap(); @@ -333,7 +333,7 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommandPrivate { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - NativeTokenTransferProgramSubcommandPrivate::PrivateForeign { + Self::PrivateForeign { from, to_npk, to_vpk, @@ -383,7 +383,7 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommandShielded { wallet_core: &mut WalletCore, ) -> Result { match self { - NativeTokenTransferProgramSubcommandShielded::ShieldedOwned { from, to, amount } => { + Self::ShieldedOwned { from, to, amount } => { let from: AccountId = from.parse().unwrap(); let to: AccountId = to.parse().unwrap(); @@ -409,7 +409,7 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommandShielded { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - NativeTokenTransferProgramSubcommandShielded::ShieldedForeign { + Self::ShieldedForeign { from, to_npk, to_vpk, @@ -450,13 +450,13 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommand { wallet_core: &mut WalletCore, ) -> Result { match self { - NativeTokenTransferProgramSubcommand::Private(private_subcommand) => { + Self::Private(private_subcommand) => { private_subcommand.handle_subcommand(wallet_core).await } - NativeTokenTransferProgramSubcommand::Shielded(shielded_subcommand) => { + Self::Shielded(shielded_subcommand) => { shielded_subcommand.handle_subcommand(wallet_core).await } - NativeTokenTransferProgramSubcommand::Deshielded { from, to, amount } => { + Self::Deshielded { from, to, amount } => { let from: AccountId = from.parse().unwrap(); let to: AccountId = to.parse().unwrap(); @@ -482,7 +482,7 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommand { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - NativeTokenTransferProgramSubcommand::Public { from, to, amount } => { + Self::Public { from, to, amount } => { let from: AccountId = from.parse().unwrap(); let to: AccountId = to.parse().unwrap(); diff --git a/wallet/src/cli/programs/pinata.rs b/wallet/src/cli/programs/pinata.rs index 0af61314..5bae0a65 100644 --- a/wallet/src/cli/programs/pinata.rs +++ b/wallet/src/cli/programs/pinata.rs @@ -28,7 +28,7 @@ impl WalletSubcommand for PinataProgramAgnosticSubcommand { wallet_core: &mut WalletCore, ) -> Result { let underlying_subcommand = match self { - PinataProgramAgnosticSubcommand::Claim { to } => { + Self::Claim { to } => { let (to, to_addr_privacy) = parse_addr_with_privacy_prefix(&to)?; match to_addr_privacy { @@ -99,7 +99,7 @@ impl WalletSubcommand for PinataProgramSubcommandPublic { wallet_core: &mut WalletCore, ) -> Result { match self { - PinataProgramSubcommandPublic::Claim { + Self::Claim { pinata_account_id, winner_account_id, } => { @@ -135,7 +135,7 @@ impl WalletSubcommand for PinataProgramSubcommandPrivate { wallet_core: &mut WalletCore, ) -> Result { match self { - PinataProgramSubcommandPrivate::ClaimPrivateOwned { + Self::ClaimPrivateOwned { pinata_account_id, winner_account_id, } => { @@ -182,10 +182,10 @@ impl WalletSubcommand for PinataProgramSubcommand { wallet_core: &mut WalletCore, ) -> Result { match self { - PinataProgramSubcommand::Private(private_subcommand) => { + Self::Private(private_subcommand) => { private_subcommand.handle_subcommand(wallet_core).await } - PinataProgramSubcommand::Public(public_subcommand) => { + Self::Public(public_subcommand) => { public_subcommand.handle_subcommand(wallet_core).await } } diff --git a/wallet/src/cli/programs/token.rs b/wallet/src/cli/programs/token.rs index 343960ac..19fc3423 100644 --- a/wallet/src/cli/programs/token.rs +++ b/wallet/src/cli/programs/token.rs @@ -100,7 +100,7 @@ impl WalletSubcommand for TokenProgramAgnosticSubcommand { wallet_core: &mut WalletCore, ) -> Result { match self { - TokenProgramAgnosticSubcommand::New { + Self::New { definition_account_id, supply_account_id, name, @@ -156,7 +156,7 @@ impl WalletSubcommand for TokenProgramAgnosticSubcommand { underlying_subcommand.handle_subcommand(wallet_core).await } - TokenProgramAgnosticSubcommand::Send { + Self::Send { from, to, to_npk, @@ -246,7 +246,7 @@ impl WalletSubcommand for TokenProgramAgnosticSubcommand { underlying_subcommand.handle_subcommand(wallet_core).await } - TokenProgramAgnosticSubcommand::Burn { + Self::Burn { definition, holder, amount, @@ -298,7 +298,7 @@ impl WalletSubcommand for TokenProgramAgnosticSubcommand { underlying_subcommand.handle_subcommand(wallet_core).await } - TokenProgramAgnosticSubcommand::Mint { + Self::Mint { definition, holder, holder_npk, @@ -653,7 +653,7 @@ impl WalletSubcommand for TokenProgramSubcommandPublic { wallet_core: &mut WalletCore, ) -> Result { match self { - TokenProgramSubcommandPublic::TransferToken { + Self::TransferToken { sender_account_id, recipient_account_id, balance_to_move, @@ -667,7 +667,7 @@ impl WalletSubcommand for TokenProgramSubcommandPublic { .await?; Ok(SubcommandReturnValue::Empty) } - TokenProgramSubcommandPublic::BurnToken { + Self::BurnToken { definition_account_id, holder_account_id, amount, @@ -681,7 +681,7 @@ impl WalletSubcommand for TokenProgramSubcommandPublic { .await?; Ok(SubcommandReturnValue::Empty) } - TokenProgramSubcommandPublic::MintToken { + Self::MintToken { definition_account_id, holder_account_id, amount, @@ -705,7 +705,7 @@ impl WalletSubcommand for TokenProgramSubcommandPrivate { wallet_core: &mut WalletCore, ) -> Result { match self { - TokenProgramSubcommandPrivate::TransferTokenPrivateOwned { + Self::TransferTokenPrivateOwned { sender_account_id, recipient_account_id, balance_to_move, @@ -742,7 +742,7 @@ impl WalletSubcommand for TokenProgramSubcommandPrivate { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - TokenProgramSubcommandPrivate::TransferTokenPrivateForeign { + Self::TransferTokenPrivateForeign { sender_account_id, recipient_npk, recipient_vpk, @@ -788,7 +788,7 @@ impl WalletSubcommand for TokenProgramSubcommandPrivate { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - TokenProgramSubcommandPrivate::BurnTokenPrivateOwned { + Self::BurnTokenPrivateOwned { definition_account_id, holder_account_id, amount, @@ -825,7 +825,7 @@ impl WalletSubcommand for TokenProgramSubcommandPrivate { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - TokenProgramSubcommandPrivate::MintTokenPrivateOwned { + Self::MintTokenPrivateOwned { definition_account_id, holder_account_id, amount, @@ -862,7 +862,7 @@ impl WalletSubcommand for TokenProgramSubcommandPrivate { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - TokenProgramSubcommandPrivate::MintTokenPrivateForeign { + Self::MintTokenPrivateForeign { definition_account_id, holder_npk, holder_vpk, @@ -919,7 +919,7 @@ impl WalletSubcommand for TokenProgramSubcommandDeshielded { wallet_core: &mut WalletCore, ) -> Result { match self { - TokenProgramSubcommandDeshielded::TransferTokenDeshielded { + Self::TransferTokenDeshielded { sender_account_id, recipient_account_id, balance_to_move, @@ -953,7 +953,7 @@ impl WalletSubcommand for TokenProgramSubcommandDeshielded { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - TokenProgramSubcommandDeshielded::BurnTokenDeshieldedOwned { + Self::BurnTokenDeshieldedOwned { definition_account_id, holder_account_id, amount, @@ -987,7 +987,7 @@ impl WalletSubcommand for TokenProgramSubcommandDeshielded { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - TokenProgramSubcommandDeshielded::MintTokenDeshielded { + Self::MintTokenDeshielded { definition_account_id, holder_account_id, amount, @@ -1031,7 +1031,7 @@ impl WalletSubcommand for TokenProgramSubcommandShielded { wallet_core: &mut WalletCore, ) -> Result { match self { - TokenProgramSubcommandShielded::TransferTokenShieldedForeign { + Self::TransferTokenShieldedForeign { sender_account_id, recipient_npk, recipient_vpk, @@ -1072,7 +1072,7 @@ impl WalletSubcommand for TokenProgramSubcommandShielded { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - TokenProgramSubcommandShielded::TransferTokenShieldedOwned { + Self::TransferTokenShieldedOwned { sender_account_id, recipient_account_id, balance_to_move, @@ -1106,7 +1106,7 @@ impl WalletSubcommand for TokenProgramSubcommandShielded { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - TokenProgramSubcommandShielded::BurnTokenShielded { + Self::BurnTokenShielded { definition_account_id, holder_account_id, amount, @@ -1140,7 +1140,7 @@ impl WalletSubcommand for TokenProgramSubcommandShielded { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - TokenProgramSubcommandShielded::MintTokenShieldedOwned { + Self::MintTokenShieldedOwned { definition_account_id, holder_account_id, amount, @@ -1174,7 +1174,7 @@ impl WalletSubcommand for TokenProgramSubcommandShielded { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - TokenProgramSubcommandShielded::MintTokenShieldedForeign { + Self::MintTokenShieldedForeign { definition_account_id, holder_npk, holder_vpk, @@ -1226,7 +1226,7 @@ impl WalletSubcommand for CreateNewTokenProgramSubcommand { wallet_core: &mut WalletCore, ) -> Result { match self { - CreateNewTokenProgramSubcommand::NewPrivateDefPrivateSupp { + Self::NewPrivateDefPrivateSupp { definition_account_id, supply_account_id, name, @@ -1265,7 +1265,7 @@ impl WalletSubcommand for CreateNewTokenProgramSubcommand { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - CreateNewTokenProgramSubcommand::NewPrivateDefPublicSupp { + Self::NewPrivateDefPublicSupp { definition_account_id, supply_account_id, name, @@ -1301,7 +1301,7 @@ impl WalletSubcommand for CreateNewTokenProgramSubcommand { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - CreateNewTokenProgramSubcommand::NewPublicDefPrivateSupp { + Self::NewPublicDefPrivateSupp { definition_account_id, supply_account_id, name, @@ -1337,7 +1337,7 @@ impl WalletSubcommand for CreateNewTokenProgramSubcommand { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - CreateNewTokenProgramSubcommand::NewPublicDefPublicSupp { + Self::NewPublicDefPublicSupp { definition_account_id, supply_account_id, name, @@ -1363,19 +1363,19 @@ impl WalletSubcommand for TokenProgramSubcommand { wallet_core: &mut WalletCore, ) -> Result { match self { - TokenProgramSubcommand::Create(creation_subcommand) => { + Self::Create(creation_subcommand) => { creation_subcommand.handle_subcommand(wallet_core).await } - TokenProgramSubcommand::Private(private_subcommand) => { + Self::Private(private_subcommand) => { private_subcommand.handle_subcommand(wallet_core).await } - TokenProgramSubcommand::Public(public_subcommand) => { + Self::Public(public_subcommand) => { public_subcommand.handle_subcommand(wallet_core).await } - TokenProgramSubcommand::Deshielded(deshielded_subcommand) => { + Self::Deshielded(deshielded_subcommand) => { deshielded_subcommand.handle_subcommand(wallet_core).await } - TokenProgramSubcommand::Shielded(shielded_subcommand) => { + Self::Shielded(shielded_subcommand) => { shielded_subcommand.handle_subcommand(wallet_core).await } } diff --git a/wallet/src/config.rs b/wallet/src/config.rs index ce1cf2ba..aa5fe9d7 100644 --- a/wallet/src/config.rs +++ b/wallet/src/config.rs @@ -70,7 +70,7 @@ pub struct Label(String); impl Label { #[must_use] - pub fn new(label: String) -> Self { + pub const fn new(label: String) -> Self { Self(label) } } @@ -507,7 +507,7 @@ impl Default for WalletConfig { } impl WalletConfig { - pub fn from_path_or_initialize_default(config_path: &Path) -> Result { + pub fn from_path_or_initialize_default(config_path: &Path) -> Result { match std::fs::File::open(config_path) { Ok(file) => { let reader = std::io::BufReader::new(file); @@ -532,7 +532,7 @@ impl WalletConfig { .truncate(true) .open(config_path)?; - let config = WalletConfig::default(); + let config = Self::default(); let default_config_serialized = serde_json::to_vec_pretty(&config).unwrap(); file.write_all(&default_config_serialized)?; @@ -545,7 +545,7 @@ impl WalletConfig { } pub fn apply_overrides(&mut self, overrides: WalletConfigOverrides) { - let WalletConfig { + let Self { override_rust_log, sequencer_addr, seq_poll_timeout, diff --git a/wallet/src/helperfunctions.rs b/wallet/src/helperfunctions.rs index fe4fdec3..d21d9cc7 100644 --- a/wallet/src/helperfunctions.rs +++ b/wallet/src/helperfunctions.rs @@ -58,16 +58,12 @@ fn get_home_nssa_var() -> Result { fn get_home_default_path() -> Result { std::env::home_dir() .map(|path| path.join(".nssa").join("wallet")) - .ok_or(anyhow::anyhow!("Failed to get HOME")) + .context("Failed to get HOME") } /// Get home dir for wallet. pub fn get_home() -> Result { - if let Ok(home) = get_home_nssa_var() { - Ok(home) - } else { - get_home_default_path() - } + get_home_nssa_var().or_else(|_| get_home_default_path()) } /// Fetch config path from default home diff --git a/wallet/src/lib.rs b/wallet/src/lib.rs index b81ff784..b25e749b 100644 --- a/wallet/src/lib.rs +++ b/wallet/src/lib.rs @@ -150,13 +150,13 @@ impl WalletCore { /// Get configuration with applied overrides #[must_use] - pub fn config(&self) -> &WalletConfig { + pub const fn config(&self) -> &WalletConfig { &self.storage.wallet_config } /// Get storage #[must_use] - pub fn storage(&self) -> &WalletChainStore { + pub const fn storage(&self) -> &WalletChainStore { &self.storage } @@ -505,17 +505,17 @@ impl WalletCore { } #[must_use] - pub fn config_path(&self) -> &PathBuf { + pub const fn config_path(&self) -> &PathBuf { &self.config_path } #[must_use] - pub fn storage_path(&self) -> &PathBuf { + pub const fn storage_path(&self) -> &PathBuf { &self.storage_path } #[must_use] - pub fn config_overrides(&self) -> &Option { + pub const fn config_overrides(&self) -> &Option { &self.config_overrides } } diff --git a/wallet/src/poller.rs b/wallet/src/poller.rs index 4ef77e04..3f93fc78 100644 --- a/wallet/src/poller.rs +++ b/wallet/src/poller.rs @@ -18,7 +18,7 @@ pub struct TxPoller { impl TxPoller { #[must_use] - pub fn new(config: &WalletConfig, client: Arc) -> Self { + pub const fn new(config: &WalletConfig, client: Arc) -> Self { Self { polling_delay: config.seq_poll_timeout, polling_max_blocks_to_query: config.seq_tx_poll_max_blocks, diff --git a/wallet/src/privacy_preserving_tx.rs b/wallet/src/privacy_preserving_tx.rs index 9cd23888..5418c58d 100644 --- a/wallet/src/privacy_preserving_tx.rs +++ b/wallet/src/privacy_preserving_tx.rs @@ -22,12 +22,12 @@ pub enum PrivacyPreservingAccount { impl PrivacyPreservingAccount { #[must_use] - pub fn is_public(&self) -> bool { + pub const fn is_public(&self) -> bool { matches!(&self, Self::Public(_)) } #[must_use] - pub fn is_private(&self) -> bool { + pub const fn is_private(&self) -> bool { matches!( &self, Self::PrivateOwned(_) | Self::PrivateForeign { npk: _, vpk: _ } From 222e68ac0bcec715c891373f77a9a4aee6cab7ff Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Mon, 9 Mar 2026 21:40:34 +0300 Subject: [PATCH 09/18] feat: add correctness clippy lints --- Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 70a50f5e..9f891dae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -256,3 +256,6 @@ clippy.nursery = { level = "deny", priority = -1 } clippy.future-not-send = "allow" # Reason: this is actually a good lint, but currently it gives a lot of false-positives. clippy.significant-drop-tightening = "allow" + +# Correctness +clippy.correctness = { level = "deny", priority = -1 } From 3e1cc2e58e292e45f61ca06c25d47ca5a6c9497f Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Mon, 9 Mar 2026 21:42:04 +0300 Subject: [PATCH 10/18] feat: add complexity clippy lints --- Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 9f891dae..5cf44e15 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -259,3 +259,6 @@ clippy.significant-drop-tightening = "allow" # Correctness clippy.correctness = { level = "deny", priority = -1 } + +# Complexity +clippy.complexity = { level = "deny", priority = -1 } From 5bf4495709630d431cf2ea2a6bc1865dd640ad90 Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Mon, 9 Mar 2026 21:43:28 +0300 Subject: [PATCH 11/18] feat: add perf clippy lints --- Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 5cf44e15..6aa84276 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -262,3 +262,6 @@ clippy.correctness = { level = "deny", priority = -1 } # Complexity clippy.complexity = { level = "deny", priority = -1 } + +# Perf +clippy.perf = { level = "deny", priority = -1 } From 90412f959054ab72e139f9c11726024da95f5280 Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Mon, 9 Mar 2026 21:44:48 +0300 Subject: [PATCH 12/18] feat: add suspicious clippy lints --- Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 6aa84276..567afb39 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -265,3 +265,6 @@ clippy.complexity = { level = "deny", priority = -1 } # Perf clippy.perf = { level = "deny", priority = -1 } + +# Suspicious +clippy.suspicious = { level = "deny", priority = -1 } From 6e79ce094121fc44fa7adf0b7d8ef7af10fa5f5e Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Mon, 9 Mar 2026 21:46:05 +0300 Subject: [PATCH 13/18] feat: add style clippy lints --- Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 567afb39..1902c4cc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -268,3 +268,6 @@ clippy.perf = { level = "deny", priority = -1 } # Suspicious clippy.suspicious = { level = "deny", priority = -1 } + +# Style +clippy.style = { level = "deny", priority = -1 } From 147fff957ab0b43f8b5bd0b239a6d7f0a7f13afe Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Mon, 9 Mar 2026 22:35:54 +0300 Subject: [PATCH 14/18] feat: add cargo clippy lints --- Cargo.toml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 1902c4cc..57aada26 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -271,3 +271,12 @@ clippy.suspicious = { level = "deny", priority = -1 } # Style clippy.style = { level = "deny", priority = -1 } + +# Cargo +clippy.cargo = { level = "deny", priority = -1 } + +# Reason: we're not at this stage yet and it will be a pain to create a new crate. +clippy.cargo-common-metadata = "allow" +# Reason: hard to address right now and mostly comes from dependencies +# so the fix would be just a long list of exceptions. +clippy.multiple-crate-versions = "allow" From 3b0e842a42ba44d8651b38bc396c5b9614e107fc Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Mon, 9 Mar 2026 22:52:40 +0300 Subject: [PATCH 15/18] feat: update dependencies --- Cargo.lock | 955 +++++++++++++++++++++---------------------- Cargo.toml | 16 +- nssa/core/Cargo.toml | 2 +- 3 files changed, 468 insertions(+), 505 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 48f65395..c8835979 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,13 +46,13 @@ dependencies = [ [[package]] name = "actix-cors" -version = "0.6.5" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0346d8c1f762b41b458ed3145eea914966bb9ad20b9be0d6d463b20d45586370" +checksum = "daa239b93927be1ff123eebada5a3ff23e89f0124ccb8609234e5103d5a5ae6d" dependencies = [ "actix-utils", "actix-web", - "derive_more 0.99.20", + "derive_more", "futures-util", "log", "once_cell", @@ -69,26 +69,21 @@ dependencies = [ "actix-rt", "actix-service", "actix-utils", - "base64 0.22.1", "bitflags 2.11.0", "bytes", "bytestring", - "derive_more 2.1.1", + "derive_more", "encoding_rs", "foldhash", "futures-core", - "h2 0.3.27", "http 0.2.12", "httparse", "httpdate", "itoa", "language-tags", - "local-channel", "mime", "percent-encoding", "pin-project-lite", - "rand 0.9.2", - "sha1", "smallvec", "tokio", "tokio-util", @@ -102,7 +97,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -114,7 +109,6 @@ dependencies = [ "bytestring", "cfg-if", "http 0.2.12", - "regex", "regex-lite", "serde", "tracing", @@ -169,9 +163,9 @@ dependencies = [ [[package]] name = "actix-web" -version = "4.1.0" +version = "4.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27e8fe9ba4ae613c21f677c2cfaf0696c3744030c6f485b34634e502d6bb379" +checksum = "ff87453bc3b56e9b2b23c1cc0b1be8797184accf51d2abe0f8a33ec275d316bf" dependencies = [ "actix-codec", "actix-http", @@ -182,27 +176,29 @@ dependencies = [ "actix-service", "actix-utils", "actix-web-codegen", - "ahash 0.7.8", "bytes", "bytestring", "cfg-if", - "derive_more 0.99.20", + "derive_more", "encoding_rs", + "foldhash", "futures-core", "futures-util", + "impl-more", "itoa", "language-tags", "log", "mime", "once_cell", "pin-project-lite", - "regex", + "regex-lite", "serde", "serde_json", "serde_urlencoded", "smallvec", - "socket2 0.4.10", + "socket2 0.6.3", "time", + "tracing", "url", ] @@ -215,7 +211,7 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -226,14 +222,14 @@ checksum = "b6ac1e58cded18cb28ddc17143c4dea5345b3ad575e14f32f66e4054a56eb271" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] name = "addchain" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2e69442aa5628ea6951fa33e24efe8313f4321a91bd729fc2f75bdfc858570" +checksum = "2e33f6a175ec6a9e0aca777567f9ff7c3deefc255660df887e7fa3585e9801d8" dependencies = [ "num-bigint 0.3.3", "num-integer", @@ -248,23 +244,14 @@ checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "cpp_demangle", "fallible-iterator", - "gimli 0.31.1", + "gimli", "memmap2", - "object 0.36.7", + "object", "rustc-demangle", "smallvec", "typed-arena", ] -[[package]] -name = "addr2line" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" -dependencies = [ - "gimli 0.32.3", -] - [[package]] name = "adler2" version = "2.0.1" @@ -277,7 +264,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "generic-array 0.14.7", ] @@ -288,8 +275,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", - "cipher", - "cpufeatures", + "cipher 0.4.4", + "cpufeatures 0.2.17", ] [[package]] @@ -300,23 +287,12 @@ checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" dependencies = [ "aead", "aes", - "cipher", + "cipher 0.4.4", "ctr", "ghash", "subtle", ] -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom 0.2.17", - "once_cell", - "version_check", -] - [[package]] name = "ahash" version = "0.8.12" @@ -436,12 +412,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.101" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" -dependencies = [ - "backtrace", -] +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "arbitrary" @@ -517,7 +490,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0c292754729c8a190e50414fd1a37093c786c709899f29c9f7daccecfa855e" dependencies = [ - "ahash 0.8.12", + "ahash", "ark-crypto-primitives-macros", "ark-ec 0.5.0", "ark-ff 0.5.0", @@ -541,7 +514,7 @@ checksum = "e7e89fe77d1f0f4fe5b96dfc940923d88d17b6a773808124f21e764dfb063c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -567,7 +540,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" dependencies = [ - "ahash 0.8.12", + "ahash", "ark-ff 0.5.0", "ark-poly 0.5.0", "ark-serialize 0.5.0", @@ -639,7 +612,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -665,7 +638,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -717,7 +690,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" dependencies = [ - "ahash 0.8.12", + "ahash", "ark-ff 0.5.0", "ark-serialize 0.5.0", "ark-std 0.5.0", @@ -811,7 +784,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -962,7 +935,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -973,7 +946,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1002,7 +975,7 @@ dependencies = [ "manyhow", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1018,7 +991,7 @@ dependencies = [ "proc-macro2", "quote", "quote-use", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1136,21 +1109,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "backtrace" -version = "0.3.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" -dependencies = [ - "addr2line 0.25.1", - "cfg-if", - "libc", - "miniz_oxide", - "object 0.37.3", - "rustc-demangle", - "windows-link", -] - [[package]] name = "base-x" version = "0.2.11" @@ -1245,7 +1203,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1329,6 +1287,15 @@ dependencies = [ "generic-array 0.14.7", ] +[[package]] +name = "block-buffer" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +dependencies = [ + "hybrid-array", +] + [[package]] name = "bollard" version = "0.20.1" @@ -1436,7 +1403,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1450,9 +1417,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.1" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6f81257d10a0f602a294ae4182251151ff97dbb504ef9afcdda4a64b24d9b4" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "bytemuck" @@ -1471,7 +1438,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1563,7 +1530,7 @@ dependencies = [ "quote", "serde", "serde_json", - "syn 2.0.116", + "syn 2.0.117", "tempfile", "toml 0.9.12+spec-1.1.0", ] @@ -1615,25 +1582,25 @@ checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] name = "chacha20" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" dependencies = [ "cfg-if", - "cipher", - "cpufeatures", + "cipher 0.5.1", + "cpufeatures 0.3.0", ] [[package]] name = "chrono" -version = "0.4.43" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ "iana-time-zone", "js-sys", @@ -1649,8 +1616,19 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "crypto-common", - "inout", + "crypto-common 0.1.7", + "inout 0.1.4", +] + +[[package]] +name = "cipher" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e34d8227fe1ba289043aeb13792056ff80fd6de1a9f49137a5f499de8e8c78ea" +dependencies = [ + "block-buffer 0.12.0", + "crypto-common 0.2.1", + "inout 0.2.2", ] [[package]] @@ -1666,9 +1644,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.59" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5caf74d17c3aec5495110c34cc3f78644bfa89af6c8993ed4de2790e49b6499" +checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" dependencies = [ "clap_builder", "clap_derive", @@ -1676,9 +1654,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.59" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "370daa45065b80218950227371916a1633217ae42b2715b2287b606dcd618e24" +checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" dependencies = [ "anstream", "anstyle", @@ -1695,7 +1673,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1826,12 +1804,12 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.17.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bb320cac8a0750d7f25280aa97b09c26edfe161164238ecbbb31092b079e735" +checksum = "531185e432bb31db1ecda541e9e7ab21468d4d844ad7505e0546a49b4945d49b" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "proptest", "serde_core", ] @@ -1880,12 +1858,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f67855af358fcb20fac58f9d714c94e2b228fe5694c1c9b4ead4a366343eda1b" -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - [[package]] name = "convert_case" version = "0.6.0" @@ -1995,6 +1967,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.5.0" @@ -2073,13 +2054,22 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" +dependencies = [ + "hybrid-array", +] + [[package]] name = "ctr" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher", + "cipher 0.4.4", ] [[package]] @@ -2089,7 +2079,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "curve25519-dalek-derive", "digest", "fiat-crypto", @@ -2107,7 +2097,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2141,7 +2131,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2155,7 +2145,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2166,7 +2156,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2177,21 +2167,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.116", -] - -[[package]] -name = "dashmap" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", + "syn 2.0.117", ] [[package]] @@ -2217,7 +2193,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ab67060fc6b8ef687992d439ca0fa36e7ed17e9a0b16b25b601e8757df720de" dependencies = [ "data-encoding", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2233,9 +2209,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.6" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", "serde_core", @@ -2260,7 +2236,7 @@ checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2271,7 +2247,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2292,7 +2268,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2302,20 +2278,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.116", -] - -[[package]] -name = "derive_more" -version = "0.99.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" -dependencies = [ - "convert_case 0.4.0", - "proc-macro2", - "quote", - "rustc_version", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2337,7 +2300,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.116", + "syn 2.0.117", "unicode-xid", ] @@ -2347,9 +2310,9 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", + "block-buffer 0.10.4", "const-oid", - "crypto-common", + "crypto-common 0.1.7", "subtle", ] @@ -2391,7 +2354,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2515,7 +2478,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2526,9 +2489,9 @@ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "either_of" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216d23e0ec69759a17f05e1c553f3a6870e5ec73420fbb07807a6f34d5d1d5a4" +checksum = "14f7f86eef3a7e4b9c2107583dbbbe3d9535c4b800796faf1774b82ba22033da" dependencies = [ "paste", "pin-project-lite", @@ -2605,7 +2568,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2625,20 +2588,30 @@ checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", +] + +[[package]] +name = "env_filter" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a1c3cc8e57274ec99de65301228b537f1e4eedc1b8e0f9411c6caac8ae7308f" +dependencies = [ + "log", + "regex", ] [[package]] name = "env_logger" -version = "0.10.2" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +checksum = "b2daee4ea451f429a58296525ddf28b45a3b64f1acf6587e2067437bb11e218d" dependencies = [ - "humantime", - "is-terminal", + "anstream", + "anstyle", + "env_filter", + "jiff", "log", - "regex", - "termcolor", ] [[package]] @@ -2655,9 +2628,9 @@ checksum = "a1731451909bde27714eacba19c2566362a7f35224f52b153d3f42cf60f72472" [[package]] name = "erased-serde" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" dependencies = [ "serde", "serde_core", @@ -2872,7 +2845,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2958,7 +2931,7 @@ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -3068,21 +3041,21 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 6.0.0", "wasip2", "wasip3", "wasm-bindgen", @@ -3109,12 +3082,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "gimli" -version = "0.32.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" - [[package]] name = "glob" version = "0.3.3" @@ -3184,25 +3151,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17e2ac29387b1aa07a1e448f7bb4f35b500787971e965b02842b900afa5c8f6f" -[[package]] -name = "h2" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap 2.13.0", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "h2" version = "0.4.13" @@ -3243,7 +3191,7 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.12", + "ahash", ] [[package]] @@ -3252,7 +3200,7 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "ahash 0.8.12", + "ahash", ] [[package]] @@ -3300,12 +3248,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - [[package]] name = "hex" version = "0.4.3" @@ -3453,6 +3395,15 @@ dependencies = [ "serde", ] +[[package]] +name = "hybrid-array" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8655f91cd07f2b9d0c24137bd650fe69617773435ee5ec83022377777ce65ef1" +dependencies = [ + "typenum", +] + [[package]] name = "hydration_context" version = "0.3.0" @@ -3479,7 +3430,7 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2 0.4.13", + "h2", "http 1.4.0", "http-body", "httparse", @@ -3571,7 +3522,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.2", + "socket2 0.6.3", "system-configuration", "tokio", "tower-service", @@ -3732,6 +3683,12 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "impl-more" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2" + [[package]] name = "include_bytes_aligned" version = "0.1.4" @@ -3852,6 +3809,15 @@ dependencies = [ "generic-array 0.14.7", ] +[[package]] +name = "inout" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" +dependencies = [ + "hybrid-array", +] + [[package]] name = "integration_tests" version = "0.1.0" @@ -3890,18 +3856,18 @@ checksum = "71dd52191aae121e8611f1e8dc3e324dd0dd1dee1e6dd91d10ee07a3cfb4d9d8" [[package]] name = "inventory" -version = "0.3.21" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" +checksum = "009ae045c87e7082cb72dab0ccd01ae075dd00141ddc108f43a0ea150a9e7227" dependencies = [ "rustversion", ] [[package]] name = "ipnet" -version = "2.11.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] name = "iri-string" @@ -3913,17 +3879,6 @@ dependencies = [ "serde", ] -[[package]] -name = "is-terminal" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.61.2", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -3997,6 +3952,30 @@ dependencies = [ "zeroize", ] +[[package]] +name = "jiff" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", +] + +[[package]] +name = "jiff-static" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "jni" version = "0.21.1" @@ -4031,9 +4010,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.85" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" dependencies = [ "once_cell", "wasm-bindgen", @@ -4143,7 +4122,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4232,7 +4211,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] @@ -4283,7 +4262,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4303,16 +4282,16 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "leptos" -version = "0.8.16" +version = "0.8.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43ad8042559850ee5253293b8460a75513f7d542021b9303083d5c236bcdd16f" +checksum = "4b540ac2868724738f0f5d00f00ec4640e587223774219c1baddc46bad46fb8e" dependencies = [ "any_spawner", "base64 0.22.1", "cfg-if", "either_of", "futures", - "getrandom 0.4.1", + "getrandom 0.4.2", "hydration_context", "leptos_config", "leptos_dom", @@ -4408,7 +4387,7 @@ dependencies = [ "quote", "rstml", "serde", - "syn 2.0.116", + "syn 2.0.117", "walkdir", ] @@ -4447,7 +4426,7 @@ dependencies = [ "rstml", "rustc_version", "server_fn_macro", - "syn 2.0.116", + "syn 2.0.117", "uuid", ] @@ -4500,7 +4479,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4525,9 +4504,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.182" +version = "0.2.183" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" [[package]] name = "libloading" @@ -4581,13 +4560,14 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" +checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" dependencies = [ "bitflags 2.11.0", "libc", - "redox_syscall 0.7.1", + "plain", + "redox_syscall 0.7.3", ] [[package]] @@ -4605,9 +4585,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.23" +version = "1.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" +checksum = "4735e9cbde5aac84a5ce588f6b23a90b9b0b528f6c5a8db8a4aff300463a0839" dependencies = [ "cc", "pkg-config", @@ -4628,9 +4608,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" @@ -4638,17 +4618,6 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" -[[package]] -name = "local-channel" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" -dependencies = [ - "futures-core", - "futures-sink", - "local-waker", -] - [[package]] name = "local-waker" version = "0.1.4" @@ -4672,8 +4641,8 @@ checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "logos-blockchain-blend-crypto" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "blake2", "logos-blockchain-groth16", @@ -4686,8 +4655,8 @@ dependencies = [ [[package]] name = "logos-blockchain-blend-message" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "blake2", "derivative", @@ -4708,11 +4677,12 @@ dependencies = [ [[package]] name = "logos-blockchain-blend-proofs" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "ed25519-dalek", "generic-array 1.3.5", + "hex", "logos-blockchain-blend-crypto", "logos-blockchain-groth16", "logos-blockchain-pol", @@ -4725,8 +4695,8 @@ dependencies = [ [[package]] name = "logos-blockchain-chain-broadcast-service" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "async-trait", "derivative", @@ -4741,8 +4711,8 @@ dependencies = [ [[package]] name = "logos-blockchain-chain-service" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "async-trait", "bytes", @@ -4771,8 +4741,8 @@ dependencies = [ [[package]] name = "logos-blockchain-circuits-prover" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "logos-blockchain-circuits-utils", "tempfile", @@ -4780,16 +4750,16 @@ dependencies = [ [[package]] name = "logos-blockchain-circuits-utils" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "dirs", ] [[package]] name = "logos-blockchain-common-http-client" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "futures", "hex", @@ -4808,8 +4778,8 @@ dependencies = [ [[package]] name = "logos-blockchain-core" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "ark-ff 0.4.2", "bincode", @@ -4838,8 +4808,8 @@ dependencies = [ [[package]] name = "logos-blockchain-cryptarchia-engine" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "cfg_eval", "logos-blockchain-pol", @@ -4854,8 +4824,8 @@ dependencies = [ [[package]] name = "logos-blockchain-cryptarchia-sync" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "bytes", "futures", @@ -4871,8 +4841,8 @@ dependencies = [ [[package]] name = "logos-blockchain-groth16" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "ark-bn254 0.4.0", "ark-ec 0.4.2", @@ -4889,8 +4859,8 @@ dependencies = [ [[package]] name = "logos-blockchain-http-api-common" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "axum 0.7.9", "logos-blockchain-core", @@ -4903,8 +4873,8 @@ dependencies = [ [[package]] name = "logos-blockchain-key-management-system-keys" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "async-trait", "bytes", @@ -4929,18 +4899,18 @@ dependencies = [ [[package]] name = "logos-blockchain-key-management-system-macros" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] name = "logos-blockchain-key-management-system-operators" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "async-trait", "logos-blockchain-blend-proofs", @@ -4955,8 +4925,8 @@ dependencies = [ [[package]] name = "logos-blockchain-key-management-system-service" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "async-trait", "log", @@ -4971,8 +4941,8 @@ dependencies = [ [[package]] name = "logos-blockchain-ledger" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "derivative", "logos-blockchain-blend-crypto", @@ -4995,8 +4965,8 @@ dependencies = [ [[package]] name = "logos-blockchain-network-service" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "async-trait", "futures", @@ -5011,8 +4981,8 @@ dependencies = [ [[package]] name = "logos-blockchain-poc" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "logos-blockchain-circuits-prover", "logos-blockchain-circuits-utils", @@ -5027,8 +4997,8 @@ dependencies = [ [[package]] name = "logos-blockchain-pol" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "astro-float", "logos-blockchain-circuits-prover", @@ -5046,8 +5016,8 @@ dependencies = [ [[package]] name = "logos-blockchain-poq" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "logos-blockchain-circuits-prover", "logos-blockchain-circuits-utils", @@ -5063,8 +5033,8 @@ dependencies = [ [[package]] name = "logos-blockchain-poseidon2" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "ark-bn254 0.4.0", "ark-ff 0.4.2", @@ -5074,8 +5044,8 @@ dependencies = [ [[package]] name = "logos-blockchain-services-utils" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "async-trait", "futures", @@ -5089,8 +5059,8 @@ dependencies = [ [[package]] name = "logos-blockchain-storage-service" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "async-trait", "bytes", @@ -5106,8 +5076,8 @@ dependencies = [ [[package]] name = "logos-blockchain-time-service" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "async-trait", "futures", @@ -5124,12 +5094,12 @@ dependencies = [ [[package]] name = "logos-blockchain-utils" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "async-trait", "blake2", - "cipher", + "cipher 0.4.4", "const-hex", "humantime", "overwatch", @@ -5141,8 +5111,8 @@ dependencies = [ [[package]] name = "logos-blockchain-utxotree" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "ark-ff 0.4.2", "logos-blockchain-groth16", @@ -5155,16 +5125,16 @@ dependencies = [ [[package]] name = "logos-blockchain-witness-generator" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "tempfile", ] [[package]] name = "logos-blockchain-zksign" -version = "0.1.0" -source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81192877116cbc3eedf6688b85fab6dd0e448290" +version = "0.2.1" +source = "git+https://github.com/logos-blockchain/logos-blockchain.git#81dbb4517aa466358ed425d92fad7d45a0c419fd" dependencies = [ "logos-blockchain-circuits-prover", "logos-blockchain-circuits-utils", @@ -5266,7 +5236,7 @@ dependencies = [ "manyhow-macros", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5288,7 +5258,7 @@ checksum = "757aee279b8bdbb9f9e676796fd459e4207a1f986e87886700abf589f5abf771" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5321,7 +5291,7 @@ checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5672,7 +5642,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5734,7 +5704,7 @@ checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5766,15 +5736,6 @@ dependencies = [ "ruzstd", ] -[[package]] -name = "object" -version = "0.37.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" -dependencies = [ - "memchr", -] - [[package]] name = "oco_ref" version = "0.2.1" @@ -5826,7 +5787,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5855,7 +5816,7 @@ checksum = "969ccca8ffc4fb105bd131a228107d5c9dd89d9d627edf3295cbe979156f9712" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5873,7 +5834,7 @@ checksum = "8c04f5d74368e4d0dfe06c45c8627c81bd7c317d52762d118fb9b3076f6420fd" [[package]] name = "overwatch" version = "0.1.0" -source = "git+https://github.com/logos-co/Overwatch?rev=f5a9902#f5a99022f389d65adbd55e51f1e3f9eead62432a" +source = "git+https://github.com/logos-co/Overwatch?rev=448c192#448c192895b8311c742b1726a1bb12ee314ad95c" dependencies = [ "async-trait", "futures", @@ -5888,13 +5849,13 @@ dependencies = [ [[package]] name = "overwatch-derive" version = "0.1.0" -source = "git+https://github.com/logos-co/Overwatch?rev=f5a9902#f5a99022f389d65adbd55e51f1e3f9eead62432a" +source = "git+https://github.com/logos-co/Overwatch?rev=448c192#448c192895b8311c742b1726a1bb12ee314ad95c" dependencies = [ "convert_case 0.8.0", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5948,7 +5909,7 @@ dependencies = [ "regex", "regex-syntax", "structmeta", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5980,29 +5941,29 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pin-project" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] name = "pin-project-lite" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pin-utils" @@ -6037,6 +5998,12 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + [[package]] name = "polyval" version = "0.6.2" @@ -6044,7 +6011,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "opaque-debug", "universal-hash", ] @@ -6108,16 +6075,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] name = "proc-macro-crate" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.23.10+spec-1.0.0", + "toml_edit 0.25.4+spec-1.1.0", ] [[package]] @@ -6139,7 +6106,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6170,7 +6137,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "version_check", "yansi", ] @@ -6250,7 +6217,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6263,7 +6230,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6302,7 +6269,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.6.2", + "socket2 0.6.3", "thiserror 2.0.18", "tokio", "tracing", @@ -6311,9 +6278,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.13" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" dependencies = [ "bytes", "getrandom 0.3.4", @@ -6339,16 +6306,16 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.2", + "socket2 0.6.3", "tracing", "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.44" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -6372,7 +6339,7 @@ dependencies = [ "proc-macro-utils", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6381,6 +6348,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "radium" version = "0.7.0" @@ -6507,12 +6480,12 @@ dependencies = [ [[package]] name = "reactive_stores" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35372f05664a62a3dd389503371a15b8feb3396f99f6ec000de651fddb030942" +checksum = "3e114642d342893571ff40b4e1da8ccdea907be44c649041eb7d8413b3fd95e8" dependencies = [ - "dashmap", "guardian", + "indexmap 2.13.0", "itertools 0.14.0", "or_poisoned", "paste", @@ -6524,15 +6497,15 @@ dependencies = [ [[package]] name = "reactive_stores_macro" -version = "0.2.6" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa40919eb2975100283b2a70e68eafce1e8bcf81f0622ff168e4c2b3f8d46bb" +checksum = "5b024812c47a6867b6cb32767a46182203f94e59eb88c69b032fd9caffa304ce" dependencies = [ - "convert_case 0.8.0", + "convert_case 0.11.0", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6546,9 +6519,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35985aa610addc02e24fc232012c86fd11f14111180f902b67e2d5331f8ebf2b" +checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" dependencies = [ "bitflags 2.11.0", ] @@ -6581,7 +6554,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6615,9 +6588,9 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "reqwest" @@ -6631,7 +6604,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.4.13", + "h2", "http 1.4.0", "http-body", "http-body-util", @@ -6706,7 +6679,7 @@ dependencies = [ "anyhow", "borsh", "bytemuck", - "derive_more 2.1.1", + "derive_more", "elf", "lazy_static", "postcard", @@ -6786,7 +6759,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8eae53a7bf1c09828dfd46ed5c942cefbf4bef3c4400f6758001569a834c462" dependencies = [ "cc", - "derive_more 2.1.1", + "derive_more", "glob", "risc0-build-kernel", "risc0-core", @@ -6841,7 +6814,7 @@ dependencies = [ "bytemuck", "byteorder", "cfg-if", - "derive_more 2.1.1", + "derive_more", "enum-map", "gdbstub", "gdbstub_arch", @@ -6871,7 +6844,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69d677ec41e475534e18e58889ef0626dcdabf5e918804ef847da0c0bbf300b3" dependencies = [ "cc", - "derive_more 2.1.1", + "derive_more", "glob", "risc0-build-kernel", "risc0-core", @@ -6975,25 +6948,25 @@ version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22b7eafb5d85be59cbd9da83f662cf47d834f1b836e14f675d1530b12c666867" dependencies = [ - "addr2line 0.24.2", + "addr2line", "anyhow", "bincode", "bonsai-sdk", "borsh", "bytemuck", "bytes", - "derive_more 2.1.1", + "derive_more", "elf", "enum-map", "gdbstub", "gdbstub_arch", - "gimli 0.31.1", + "gimli", "hex", "keccak", "lazy-regex", "num-bigint 0.4.6", "num-traits", - "object 0.36.7", + "object", "prost 0.13.5", "rand 0.9.2", "rayon", @@ -7120,7 +7093,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.116", + "syn 2.0.117", "syn_derive", "thiserror 2.0.18", ] @@ -7170,9 +7143,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ "bitflags 2.11.0", "errno", @@ -7183,9 +7156,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.36" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "log", "once_cell", @@ -7357,7 +7330,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7403,9 +7376,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.6.0" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d17b898a6d6948c3a8ee4372c17cb384f90d2e6e912ef00895b14fd7ab54ec38" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ "bitflags 2.11.0", "core-foundation 0.10.1", @@ -7416,9 +7389,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.16.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321c8673b092a9a42605034a9879d73cb79101ed5fd117bc9a597b89b4e9e61a" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -7558,7 +7531,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7569,7 +7542,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7615,7 +7588,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7650,9 +7623,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.16.1" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" +checksum = "381b283ce7bc6b476d903296fb59d0d36633652b633b27f64db4fb46dcbfc3b9" dependencies = [ "base64 0.22.1", "chrono", @@ -7669,14 +7642,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.16.1" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" +checksum = "a6d4e30573c8cb306ed6ab1dca8423eec9a463ea0e155f45399455e0368b27e0" dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7704,9 +7677,9 @@ dependencies = [ [[package]] name = "server_fn" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fafe3a832a747ded8dc4827c538a2a064284f150c1c44c51ec56b58bd947dd7" +checksum = "7c799cec4e8e210dfb2f203aa97f0e82232c619e385ef4d011b17a58d6397c7b" dependencies = [ "axum 0.8.8", "base64 0.22.1", @@ -7744,16 +7717,16 @@ dependencies = [ [[package]] name = "server_fn_macro" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14faf423aab09f8c3eb2d9785bb37f11a255cdf01857d3c6083eacc82269c191" +checksum = "1295b54815397d30d986b63f93cfd515fa86d5e528e0bb589ce9d530502f9e0f" dependencies = [ "const_format", "convert_case 0.11.0", "proc-macro2", "quote", "rustc_version", - "syn 2.0.116", + "syn 2.0.117", "xxhash-rust", ] @@ -7764,7 +7737,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63eb08f80db903d3c42f64e60ebb3875e0305be502bdc064ec0a0eab42207f00" dependencies = [ "server_fn_macro", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7774,7 +7747,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest", ] @@ -7785,7 +7758,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest", ] @@ -7852,16 +7825,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "socket2" version = "0.5.10" @@ -7874,12 +7837,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -7924,7 +7887,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" dependencies = [ "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7966,7 +7929,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7977,7 +7940,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7998,7 +7961,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -8020,9 +7983,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.116" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -8038,7 +8001,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -8058,7 +8021,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -8084,9 +8047,9 @@ dependencies = [ [[package]] name = "tachys" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14691ce610071757bd17bd8d572065192c9c93f9f169125390aaea345a4c56b9" +checksum = "f768750b0d5514f487772187d4b20c66f56faff4541b1faa5aad4975f5aee085" dependencies = [ "any_spawner", "async-trait", @@ -8122,26 +8085,17 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.25.0" +version = "3.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" +checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0" dependencies = [ "fastrand", - "getrandom 0.4.1", + "getrandom 0.4.2", "once_cell", "rustix", "windows-sys 0.61.2", ] -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - [[package]] name = "test-case" version = "3.3.1" @@ -8160,7 +8114,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -8171,7 +8125,7 @@ checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "test-case-core", ] @@ -8192,9 +8146,9 @@ dependencies = [ [[package]] name = "testcontainers" -version = "0.27.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fdcea723c64cc08dbc533b3761e345a15bf1222cbe6cb611de09b43f17a168" +checksum = "c1c0624faaa317c56d6d19136580be889677259caf5c897941c6f446b4655068" dependencies = [ "astral-tokio-tar", "async-trait", @@ -8249,7 +8203,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -8260,7 +8214,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -8356,9 +8310,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.49.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" dependencies = [ "bytes", "libc", @@ -8366,20 +8320,20 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.2", + "socket2 0.6.3", "tokio-macros", "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -8496,6 +8450,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "toml_datetime" +version = "1.0.0+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.22.27" @@ -8512,12 +8475,12 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.23.10+spec-1.0.0" +version = "0.25.4+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" +checksum = "7193cbd0ce53dc966037f54351dbbcf0d5a642c7f0038c382ef9e677ce8c13f2" dependencies = [ "indexmap 2.13.0", - "toml_datetime 0.7.5+spec-1.1.0", + "toml_datetime 1.0.0+spec-1.1.0", "toml_parser", "winnow", ] @@ -8545,15 +8508,15 @@ checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] name = "tonic" -version = "0.14.4" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f32a6f80051a4111560201420c7885d0082ba9efe2ab61875c587bb6b18b9a0" +checksum = "fec7c61a0695dc1887c1b53952990f3ad2e3a31453e1f49f10e75424943a93ec" dependencies = [ "async-trait", "axum 0.8.8", "base64 0.22.1", "bytes", - "h2 0.4.13", + "h2", "http 1.4.0", "http-body", "http-body-util", @@ -8562,7 +8525,7 @@ dependencies = [ "hyper-util", "percent-encoding", "pin-project", - "socket2 0.6.2", + "socket2 0.6.3", "sync_wrapper", "tokio", "tokio-stream", @@ -8574,9 +8537,9 @@ dependencies = [ [[package]] name = "tonic-prost" -version = "0.14.4" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f86539c0089bfd09b1f8c0ab0239d80392af74c21bc9e0f15e1b4aca4c1647f" +checksum = "a55376a0bbaa4975a3f10d009ad763d8f4108f067c7c2e74f3001fb49778d309" dependencies = [ "bytes", "prost 0.14.3", @@ -8662,7 +8625,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -8756,7 +8719,7 @@ checksum = "076a02dc54dd46795c2e9c8282ed40bcfb1e22747e955de9389a1de28190fb26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -8792,7 +8755,7 @@ checksum = "27a7a9b72ba121f6f1f6c3632b85604cac41aedb5ddc70accbebb6cac83de846" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -8852,7 +8815,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "subtle", ] @@ -8946,11 +8909,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" +checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" dependencies = [ - "getrandom 0.4.1", + "getrandom 0.4.2", "js-sys", "wasm-bindgen", ] @@ -9064,9 +9027,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.108" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" dependencies = [ "cfg-if", "once_cell", @@ -9077,9 +9040,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.58" +version = "0.4.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" +checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" dependencies = [ "cfg-if", "futures-util", @@ -9091,9 +9054,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.108" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -9101,22 +9064,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.108" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.108" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" dependencies = [ "unicode-ident", ] @@ -9188,7 +9151,7 @@ dependencies = [ "base16", "quote", "sha2", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -9205,9 +9168,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.85" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" +checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" dependencies = [ "js-sys", "wasm-bindgen", @@ -9312,7 +9275,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -9323,7 +9286,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -9594,9 +9557,9 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.14" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" dependencies = [ "memchr", ] @@ -9631,7 +9594,7 @@ dependencies = [ "heck", "indexmap 2.13.0", "prettyplease", - "syn 2.0.116", + "syn 2.0.117", "wasm-metadata", "wit-bindgen-core", "wit-component", @@ -9647,7 +9610,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "wit-bindgen-core", "wit-bindgen-rust", ] @@ -9768,28 +9731,28 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.39" +version = "0.8.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" +checksum = "f2578b716f8a7a858b7f02d5bd870c14bf4ddbbcf3a4c05414ba6503640505e3" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.39" +version = "0.8.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" +checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -9809,7 +9772,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "synstructure", ] @@ -9830,7 +9793,7 @@ checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -9863,7 +9826,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 57aada26..bcd11651 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,7 +58,7 @@ amm_program = { path = "programs/amm" } test_program_methods = { path = "test_program_methods" } bedrock_client = { path = "bedrock_client" } -tokio = { version = "1.28.2", features = [ +tokio = { version = "1.50", features = [ "net", "rt-multi-thread", "sync", @@ -75,15 +75,15 @@ serde = { version = "1.0.60", default-features = false, features = ["derive"] } serde_json = "1.0.81" serde_with = "3.16.1" actix = "0.13.0" -actix-cors = "0.6.1" +actix-cors = "0.7.1" jsonrpsee = "0.26.0" futures = "0.3" actix-rt = "*" lazy_static = "1.5.0" -env_logger = "0.10" +env_logger = "0.11" log = "0.4.28" -lru = "0.7.8" -thiserror = "2.0.12" +lru = "0.16.3" +thiserror = "2.0" sha2 = "0.10.8" hex = "0.4.3" bytemuck = "1.24.0" @@ -91,7 +91,7 @@ bytesize = { version = "2.3.1", features = ["serde"] } humantime-serde = "1.1" humantime = "2.1" aes-gcm = "0.10.3" -toml = "0.7.4" +toml = "0.9.8" bincode = "1.3.3" tempfile = "3.14.0" light-poseidon = "0.3.0" @@ -107,7 +107,7 @@ base58 = "0.2.0" itertools = "0.14.0" url = { version = "2.5.4", features = ["serde"] } tokio-retry = "0.3.0" -schemars = "1.2.0" +schemars = "1.2" async-stream = "0.3.6" logos-blockchain-common-http-client = { git = "https://github.com/logos-blockchain/logos-blockchain.git" } @@ -129,7 +129,7 @@ k256 = { version = "0.13.3", features = [ "pem", ] } elliptic-curve = { version = "0.13.8", features = ["arithmetic"] } -actix-web = { version = "=4.1.0", default-features = false, features = [ +actix-web = { version = "4.13.0", default-features = false, features = [ "macros", ] } clap = { version = "4.5.42", features = ["derive", "env"] } diff --git a/nssa/core/Cargo.toml b/nssa/core/Cargo.toml index ad1a997c..d9e80af4 100644 --- a/nssa/core/Cargo.toml +++ b/nssa/core/Cargo.toml @@ -17,7 +17,7 @@ bytemuck.workspace = true bytesize.workspace = true base58.workspace = true k256 = { workspace = true, optional = true } -chacha20 = { version = "0.9", default-features = false } +chacha20 = { version = "0.10" } [dev-dependencies] serde_json.workspace = true From 252848a145b4ad044e62000321a218d04dbbcc5c Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Tue, 10 Mar 2026 00:17:43 +0300 Subject: [PATCH 16/18] feat: update rust to 1.94.0 --- bedrock_client/src/lib.rs | 2 +- common/src/block.rs | 4 +- common/src/rpc_primitives/errors.rs | 10 +- common/src/rpc_primitives/message.rs | 8 +- common/src/rpc_primitives/requests.rs | 4 +- common/src/sequencer_client.rs | 16 ++-- common/src/test_utils.rs | 8 +- .../bin/run_hello_world_with_move_function.rs | 6 +- explorer_service/Dockerfile | 2 +- explorer_service/src/api.rs | 6 +- .../src/components/block_preview.rs | 2 +- .../src/components/transaction_preview.rs | 2 +- explorer_service/src/format_utils.rs | 4 +- explorer_service/src/main.rs | 2 +- indexer/core/src/config.rs | 8 +- indexer/core/src/lib.rs | 6 +- indexer/service/Dockerfile | 2 +- indexer/service/protocol/src/convert.rs | 2 +- indexer/service/protocol/src/lib.rs | 2 +- integration_tests/src/lib.rs | 2 +- integration_tests/tests/indexer.rs | 2 +- .../key_management/key_tree/keys_private.rs | 2 +- .../key_management/key_tree/keys_public.rs | 2 +- .../src/key_management/key_tree/mod.rs | 22 ++--- .../src/key_management/key_tree/traits.rs | 6 +- key_protocol/src/key_management/mod.rs | 2 +- key_protocol/src/key_protocol_core/mod.rs | 22 ++--- mempool/src/lib.rs | 4 +- nssa/core/src/account.rs | 2 +- nssa/core/src/commitment.rs | 6 +- nssa/core/src/program.rs | 16 ++-- nssa/src/merkle_tree/mod.rs | 6 +- .../privacy_preserving_transaction/circuit.rs | 2 +- .../privacy_preserving_transaction/message.rs | 2 +- nssa/src/program.rs | 20 ++-- nssa/src/signature/bip340_test_vectors.rs | 2 +- nssa/src/state.rs | 4 +- program_methods/guest/src/bin/pinata.rs | 2 +- program_methods/guest/src/bin/pinata_token.rs | 2 +- programs/amm/core/src/lib.rs | 8 +- programs/token/core/src/lib.rs | 4 +- rust-toolchain.toml | 2 +- sequencer_core/src/block_settlement_client.rs | 2 +- sequencer_core/src/config.rs | 38 ++++---- sequencer_core/src/lib.rs | 2 +- sequencer_rpc/src/process.rs | 8 +- sequencer_runner/Dockerfile | 4 +- sequencer_runner/src/lib.rs | 2 +- storage/src/indexer.rs | 34 +++---- storage/src/sequencer.rs | 26 +++--- .../guest/src/bin/chain_caller.rs | 2 +- wallet-ffi/src/error.rs | 36 ++++---- wallet-ffi/src/lib.rs | 2 +- wallet-ffi/src/types.rs | 20 ++-- wallet-ffi/wallet_ffi.h | 56 +++++------ wallet/src/cli/account.rs | 40 ++++---- wallet/src/cli/chain.rs | 10 +- wallet/src/cli/config.rs | 12 +-- wallet/src/cli/mod.rs | 34 +++---- wallet/src/cli/programs/amm.rs | 44 ++++----- .../src/cli/programs/native_token_transfer.rs | 92 +++++++++---------- wallet/src/cli/programs/pinata.rs | 24 ++--- wallet/src/cli/programs/token.rs | 86 ++++++++--------- wallet/src/config.rs | 32 +++---- wallet/src/helperfunctions.rs | 6 +- wallet/src/lib.rs | 21 +++-- wallet/src/poller.rs | 2 +- .../native_token_transfer/mod.rs | 3 + 68 files changed, 440 insertions(+), 436 deletions(-) diff --git a/bedrock_client/src/lib.rs b/bedrock_client/src/lib.rs index bf65bfbb..561717a8 100644 --- a/bedrock_client/src/lib.rs +++ b/bedrock_client/src/lib.rs @@ -14,7 +14,7 @@ use reqwest::{Client, Url}; use serde::{Deserialize, Serialize}; use tokio_retry::Retry; -/// Fibonacci backoff retry strategy configuration +/// Fibonacci backoff retry strategy configuration. #[derive(Debug, Copy, Clone, Serialize, Deserialize)] pub struct BackoffConfig { #[serde(with = "humantime_serde")] diff --git a/common/src/block.rs b/common/src/block.rs index 3731a6c2..8ef2eb0c 100644 --- a/common/src/block.rs +++ b/common/src/block.rs @@ -111,14 +111,14 @@ impl From for HashableBlockData { } } -/// Helper struct for account (de-)serialization +/// Helper struct for account (de-)serialization. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct AccountInitialData { pub account_id: AccountId, pub balance: u128, } -/// Helper struct to (de-)serialize initial commitments +/// Helper struct to (de-)serialize initial commitments. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct CommitmentsInitialData { pub npk: nssa_core::NullifierPublicKey, diff --git a/common/src/rpc_primitives/errors.rs b/common/src/rpc_primitives/errors.rs index ae791de8..28ec0b63 100644 --- a/common/src/rpc_primitives/errors.rs +++ b/common/src/rpc_primitives/errors.rs @@ -14,11 +14,11 @@ pub struct RpcParseError(pub String); pub struct RpcError { #[serde(flatten)] pub error_struct: Option, - /// Deprecated please use the `error_struct` instead + /// Deprecated please use the `error_struct` instead. pub code: i64, - /// Deprecated please use the `error_struct` instead + /// Deprecated please use the `error_struct` instead. pub message: String, - /// Deprecated please use the `error_struct` instead + /// Deprecated please use the `error_struct` instead. #[serde(skip_serializing_if = "Option::is_none")] pub data: Option, } @@ -38,7 +38,7 @@ pub enum RpcRequestValidationErrorKind { ParseError { error_message: String }, } -/// A general Server Error +/// A general Server Error. #[derive(serde::Serialize, serde::Deserialize, Debug, PartialEq, Eq, Clone)] pub enum ServerError { Timeout, @@ -101,7 +101,7 @@ impl RpcError { } /// Helper method to define extract `INTERNAL_ERROR` in separate `RpcErrorKind` - /// Returns `HANDLER_ERROR` if the error is not internal one + /// Returns `HANDLER_ERROR` if the error is not internal one. #[must_use] pub fn new_internal_or_handler_error(error_data: Option, error_struct: Value) -> Self { if error_struct["name"] == "INTERNAL_ERROR" { diff --git a/common/src/rpc_primitives/message.rs b/common/src/rpc_primitives/message.rs index 70c62660..de7f132e 100644 --- a/common/src/rpc_primitives/message.rs +++ b/common/src/rpc_primitives/message.rs @@ -210,7 +210,7 @@ pub enum Message { /// message. /// /// This variant has no direct constructor and is expected to be constructed manually. - Batch(Vec), + Batch(Vec), /// An unmatched sub entry in a `Batch`. /// /// When there's a `Batch` and an element doesn't comform to the JSONRPC 2.0 format, that one @@ -363,7 +363,7 @@ mod tests { use super::*; - /// Test serialization and deserialization of the Message + /// Test serialization and deserialization of the Message. /// /// We first deserialize it from a string. That way we check deserialization works. /// But since serialization doesn't have to produce the exact same result (order, spaces, …), @@ -488,7 +488,7 @@ mod tests { /// /// Check that the given JSON string parses, but is not recognized as a valid RPC message. /// - /// Test things that are almost but not entirely JSONRPC are rejected + /// Test things that are almost but not entirely JSONRPC are rejected. /// /// The reject is done by returning it as Unmatched. #[test] @@ -521,7 +521,7 @@ mod tests { } } - /// Test some non-trivial aspects of the constructors + /// Test some non-trivial aspects of the constructors. /// /// This doesn't have a full coverage, because there's not much to actually test there. /// Most of it is related to the ids. diff --git a/common/src/rpc_primitives/requests.rs b/common/src/rpc_primitives/requests.rs index 2782bffa..fd566c89 100644 --- a/common/src/rpc_primitives/requests.rs +++ b/common/src/rpc_primitives/requests.rs @@ -84,7 +84,7 @@ pub struct GetBlockDataRequest { pub block_id: u64, } -/// Get a range of blocks from `start_block_id` to `end_block_id` (inclusive) +/// Get a range of blocks from `start_block_id` to `end_block_id` (inclusive). #[derive(Serialize, Deserialize, Debug)] pub struct GetBlockRangeDataRequest { pub start_block_id: u64, @@ -213,7 +213,7 @@ pub struct GetProgramIdsResponse { #[derive(Debug, Serialize, Deserialize, Clone)] pub struct GetInitialTestnetAccountsResponse { - /// Hex encoded account id + /// Hex encoded account id. pub account_id: String, pub balance: u64, } diff --git a/common/src/sequencer_client.rs b/common/src/sequencer_client.rs index 1efa0992..d52e4585 100644 --- a/common/src/sequencer_client.rs +++ b/common/src/sequencer_client.rs @@ -105,7 +105,7 @@ impl SequencerClient { } } - /// Get block data at `block_id` from sequencer + /// Get block data at `block_id` from sequencer. pub async fn get_block( &self, block_id: u64, @@ -141,7 +141,7 @@ impl SequencerClient { Ok(resp_deser) } - /// Get last known `blokc_id` from sequencer + /// Get last known `blokc_id` from sequencer. pub async fn get_last_block(&self) -> Result { let block_req = GetLastBlockRequest {}; @@ -225,7 +225,7 @@ impl SequencerClient { Ok(resp_deser) } - /// Send transaction to sequencer + /// Send transaction to sequencer. pub async fn send_tx_public( &self, transaction: nssa::PublicTransaction, @@ -245,7 +245,7 @@ impl SequencerClient { Ok(resp_deser) } - /// Send transaction to sequencer + /// Send transaction to sequencer. pub async fn send_tx_private( &self, transaction: nssa::PrivacyPreservingTransaction, @@ -265,7 +265,7 @@ impl SequencerClient { Ok(resp_deser) } - /// Get genesis id from sequencer + /// Get genesis id from sequencer. pub async fn get_genesis_id(&self) -> Result { let genesis_req = GetGenesisIdRequest {}; @@ -281,7 +281,7 @@ impl SequencerClient { Ok(resp_deser) } - /// Get initial testnet accounts from sequencer + /// Get initial testnet accounts from sequencer. pub async fn get_initial_testnet_accounts( &self, ) -> Result, SequencerClientError> { @@ -299,7 +299,7 @@ impl SequencerClient { Ok(resp_deser) } - /// Get proof for commitment + /// Get proof for commitment. pub async fn get_proof_for_commitment( &self, commitment: nssa_core::Commitment, @@ -339,7 +339,7 @@ impl SequencerClient { Ok(resp_deser) } - /// Get Ids of the programs used by the node + /// Get Ids of the programs used by the node. pub async fn get_program_ids( &self, ) -> Result, SequencerClientError> { diff --git a/common/src/test_utils.rs b/common/src/test_utils.rs index e78f823f..d5b6a437 100644 --- a/common/src/test_utils.rs +++ b/common/src/test_utils.rs @@ -15,13 +15,13 @@ pub fn sequencer_sign_key_for_testing() -> nssa::PrivateKey { // Dummy producers -/// Produce dummy block with +/// Produce dummy block with. /// -/// `id` - block id, provide zero for genesis +/// `id` - block id, provide zero for genesis. /// -/// `prev_hash` - hash of previous block, provide None for genesis +/// `prev_hash` - hash of previous block, provide None for genesis. /// -/// `transactions` - vector of `EncodedTransaction` objects +/// `transactions` - vector of `EncodedTransaction` objects. #[must_use] pub fn produce_dummy_block( id: u64, diff --git a/examples/program_deployment/src/bin/run_hello_world_with_move_function.rs b/examples/program_deployment/src/bin/run_hello_world_with_move_function.rs index 84cb6068..0d4af502 100644 --- a/examples/program_deployment/src/bin/run_hello_world_with_move_function.rs +++ b/examples/program_deployment/src/bin/run_hello_world_with_move_function.rs @@ -26,7 +26,7 @@ type Instruction = (u8, Vec); #[derive(Parser, Debug)] struct Cli { - /// Path to program binary + /// Path to program binary. program_path: String, #[command(subcommand)] @@ -35,7 +35,7 @@ struct Cli { #[derive(Subcommand, Debug)] enum Command { - /// Write instruction into one account + /// Write instruction into one account. WritePublic { account_id: String, greeting: String, @@ -44,7 +44,7 @@ enum Command { account_id: String, greeting: String, }, - /// Move data between two accounts + /// Move data between two accounts. MoveDataPublicToPublic { from: String, to: String, diff --git a/explorer_service/Dockerfile b/explorer_service/Dockerfile index e10c5ebe..238e77e6 100644 --- a/explorer_service/Dockerfile +++ b/explorer_service/Dockerfile @@ -1,4 +1,4 @@ -FROM rust:1.91.1-trixie AS builder +FROM rust:1.94.0-trixie AS builder # Install cargo-binstall, which makes it easier to install other # cargo extensions like cargo-leptos diff --git a/explorer_service/src/api.rs b/explorer_service/src/api.rs index 6cec377c..b37145af 100644 --- a/explorer_service/src/api.rs +++ b/explorer_service/src/api.rs @@ -2,7 +2,7 @@ use indexer_service_protocol::{Account, AccountId, Block, BlockId, HashType, Tra use leptos::prelude::*; use serde::{Deserialize, Serialize}; -/// Search results structure +/// Search results structure. #[derive(Clone, Debug, Serialize, Deserialize)] pub struct SearchResults { pub blocks: Vec, @@ -10,7 +10,7 @@ pub struct SearchResults { pub accounts: Vec<(AccountId, Account)>, } -/// RPC client type +/// RPC client type. #[cfg(feature = "ssr")] pub type IndexerRpcClient = jsonrpsee::http_client::HttpClient; @@ -142,7 +142,7 @@ pub async fn get_transactions_by_account( .map_err(|e| ServerFnError::ServerError(format!("RPC error: {e}"))) } -/// Create the RPC client for the indexer service (server-side only) +/// Create the RPC client for the indexer service (server-side only). #[cfg(feature = "ssr")] pub fn create_indexer_rpc_client(url: &url::Url) -> Result { use jsonrpsee::http_client::HttpClientBuilder; diff --git a/explorer_service/src/components/block_preview.rs b/explorer_service/src/components/block_preview.rs index 04ba8555..8fe48f9f 100644 --- a/explorer_service/src/components/block_preview.rs +++ b/explorer_service/src/components/block_preview.rs @@ -4,7 +4,7 @@ use leptos_router::components::A; use crate::format_utils; -/// Get CSS class for bedrock status +/// Get CSS class for bedrock status. const fn status_class(status: &BedrockStatus) -> &'static str { match status { BedrockStatus::Pending => "status-pending", diff --git a/explorer_service/src/components/transaction_preview.rs b/explorer_service/src/components/transaction_preview.rs index 0c82cf48..094ca4ff 100644 --- a/explorer_service/src/components/transaction_preview.rs +++ b/explorer_service/src/components/transaction_preview.rs @@ -2,7 +2,7 @@ use indexer_service_protocol::Transaction; use leptos::prelude::*; use leptos_router::components::A; -/// Get transaction type name and CSS class +/// Get transaction type name and CSS class. const fn transaction_type_info(tx: &Transaction) -> (&'static str, &'static str) { match tx { Transaction::Public(_) => ("Public", "tx-type-public"), diff --git a/explorer_service/src/format_utils.rs b/explorer_service/src/format_utils.rs index 393e6f8e..2df76658 100644 --- a/explorer_service/src/format_utils.rs +++ b/explorer_service/src/format_utils.rs @@ -1,6 +1,6 @@ -//! Formatting utilities for the explorer +//! Formatting utilities for the explorer. -/// Format timestamp to human-readable string +/// Format timestamp to human-readable string. #[expect( clippy::integer_division, clippy::integer_division_remainder_used, diff --git a/explorer_service/src/main.rs b/explorer_service/src/main.rs index 06ddb4d6..5940a9e1 100644 --- a/explorer_service/src/main.rs +++ b/explorer_service/src/main.rs @@ -16,7 +16,7 @@ async fn main() { #[derive(Parser, Debug)] #[command(version, about, long_about = None)] struct Args { - /// Indexer RPC URL + /// Indexer RPC URL. #[arg(long, env = "INDEXER_RPC_URL", default_value = "http://localhost:8779")] indexer_rpc_url: url::Url, } diff --git a/indexer/core/src/config.rs b/indexer/core/src/config.rs index 7dec7fc9..a85284cc 100644 --- a/indexer/core/src/config.rs +++ b/indexer/core/src/config.rs @@ -27,13 +27,13 @@ pub struct ClientConfig { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct IndexerConfig { - /// Home dir of sequencer storage + /// Home dir of sequencer storage. pub home: PathBuf, - /// List of initial accounts data + /// List of initial accounts data. pub initial_accounts: Vec, - /// List of initial commitments + /// List of initial commitments. pub initial_commitments: Vec, - /// Sequencers signing key + /// Sequencers signing key. pub signing_key: [u8; 32], #[serde(with = "humantime_serde")] pub consensus_info_polling_interval: Duration, diff --git a/indexer/core/src/lib.rs b/indexer/core/src/lib.rs index a6e4409b..8f901774 100644 --- a/indexer/core/src/lib.rs +++ b/indexer/core/src/lib.rs @@ -24,14 +24,14 @@ pub struct IndexerCore { } #[derive(Clone)] -/// This struct represents one L1 block data fetched from backfilling +/// This struct represents one L1 block data fetched from backfilling. pub struct BackfillBlockData { l2_blocks: Vec, l1_header: HeaderId, } #[derive(Clone)] -/// This struct represents data fetched fom backfilling in one iteration +/// This struct represents data fetched fom backfilling in one iteration. pub struct BackfillData { block_data: VecDeque, curr_fin_l1_lib_header: HeaderId, @@ -187,7 +187,7 @@ impl IndexerCore { } /// WARNING: depending on channel state, - /// may take indefinite amount of time + /// may take indefinite amount of time. pub async fn search_for_channel_start(&self) -> Result { let mut curr_last_l1_lib_header = self.get_lib().await?; let mut backfill_start = curr_last_l1_lib_header; diff --git a/indexer/service/Dockerfile b/indexer/service/Dockerfile index bf77ffd2..bb93c2f2 100644 --- a/indexer/service/Dockerfile +++ b/indexer/service/Dockerfile @@ -1,5 +1,5 @@ # Chef stage - uses pre-built cargo-chef image -FROM lukemathwalker/cargo-chef:latest-rust-1.91.1-slim-trixie AS chef +FROM lukemathwalker/cargo-chef:latest-rust-1.94.0-slim-trixie AS chef # Install build dependencies RUN apt-get update && apt-get install -y \ diff --git a/indexer/service/protocol/src/convert.rs b/indexer/service/protocol/src/convert.rs index 9e31ef7a..cbafa0b3 100644 --- a/indexer/service/protocol/src/convert.rs +++ b/indexer/service/protocol/src/convert.rs @@ -1,4 +1,4 @@ -//! Conversions between `indexer_service_protocol` types and `nssa/nssa_core` types +//! Conversions between `indexer_service_protocol` types and `nssa/nssa_core` types. use crate::{ Account, AccountId, BedrockStatus, Block, BlockBody, BlockHeader, Ciphertext, Commitment, diff --git a/indexer/service/protocol/src/lib.rs b/indexer/service/protocol/src/lib.rs index 6bd67d73..98ef5650 100644 --- a/indexer/service/protocol/src/lib.rs +++ b/indexer/service/protocol/src/lib.rs @@ -191,7 +191,7 @@ pub enum Transaction { } impl Transaction { - /// Get the hash of the transaction + /// Get the hash of the transaction. #[expect(clippy::same_name_method, reason = "This is handy")] #[must_use] pub const fn hash(&self) -> &self::HashType { diff --git a/integration_tests/src/lib.rs b/integration_tests/src/lib.rs index 4217b269..6929ec92 100644 --- a/integration_tests/src/lib.rs +++ b/integration_tests/src/lib.rs @@ -368,7 +368,7 @@ impl Drop for TestContext { } } -/// A test context to be used in normal #[test] tests +/// A test context to be used in normal #[test] tests. pub struct BlockingTestContext { ctx: Option, runtime: tokio::runtime::Runtime, diff --git a/integration_tests/tests/indexer.rs b/integration_tests/tests/indexer.rs index 55c6757d..5169aacf 100644 --- a/integration_tests/tests/indexer.rs +++ b/integration_tests/tests/indexer.rs @@ -17,7 +17,7 @@ use nssa::AccountId; use tokio::test; use wallet::cli::{Command, programs::native_token_transfer::AuthTransferSubcommand}; -/// Timeout in milliseconds to reliably await for block finalization +/// Timeout in milliseconds to reliably await for block finalization. const L2_TO_L1_TIMEOUT_MILLIS: u64 = 600_000; #[test] diff --git a/key_protocol/src/key_management/key_tree/keys_private.rs b/key_protocol/src/key_management/key_tree/keys_private.rs index 0f8b423b..3fcbb0d2 100644 --- a/key_protocol/src/key_management/key_tree/keys_private.rs +++ b/key_protocol/src/key_management/key_tree/keys_private.rs @@ -12,7 +12,7 @@ use crate::key_management::{ pub struct ChildKeysPrivate { pub value: (KeyChain, nssa::Account), pub ccc: [u8; 32], - /// Can be [`None`] if root + /// Can be [`None`] if root. pub cci: Option, } diff --git a/key_protocol/src/key_management/key_tree/keys_public.rs b/key_protocol/src/key_management/key_tree/keys_public.rs index 694c23c5..470acaaa 100644 --- a/key_protocol/src/key_management/key_tree/keys_public.rs +++ b/key_protocol/src/key_management/key_tree/keys_public.rs @@ -8,7 +8,7 @@ pub struct ChildKeysPublic { pub csk: nssa::PrivateKey, pub cpk: nssa::PublicKey, pub ccc: [u8; 32], - /// Can be [`None`] if root + /// Can be [`None`] if root. pub cci: Option, } diff --git a/key_protocol/src/key_management/key_tree/mod.rs b/key_protocol/src/key_management/key_tree/mod.rs index bdd15cb0..a94e8291 100644 --- a/key_protocol/src/key_management/key_tree/mod.rs +++ b/key_protocol/src/key_management/key_tree/mod.rs @@ -177,7 +177,7 @@ impl KeyTree { /// For given `depth` adds children to a tree such that their `ChainIndex::depth(&self) < /// depth`. /// - /// Tree must be empty before start + /// Tree must be empty before start. pub fn generate_tree_for_depth(&mut self, depth: u32) { let mut id_stack = vec![ChainIndex::root()]; @@ -197,16 +197,16 @@ impl KeyTree { } impl KeyTree { - /// Cleanup of all non-initialized accounts in a private tree + /// Cleanup of all non-initialized accounts in a private tree. /// /// For given `depth` checks children to a tree such that their `ChainIndex::depth(&self) < /// depth`. /// /// If account is default, removes them. /// - /// Chain must be parsed for accounts beforehand + /// Chain must be parsed for accounts beforehand. /// - /// Fast, leaves gaps between accounts + /// Fast, leaves gaps between accounts. pub fn cleanup_tree_remove_uninit_for_depth(&mut self, depth: u32) { let mut id_stack = vec![ChainIndex::root()]; @@ -231,13 +231,13 @@ impl KeyTree { } } - /// Cleanup of non-initialized accounts in a private tree + /// Cleanup of non-initialized accounts in a private tree. /// /// If account is default, removes them, stops at first non-default account. /// - /// Walks through tree in lairs of same depth using `ChainIndex::chain_ids_at_depth()` + /// Walks through tree in lairs of same depth using `ChainIndex::chain_ids_at_depth()`. /// - /// Chain must be parsed for accounts beforehand + /// Chain must be parsed for accounts beforehand. /// /// Slow, maintains tree consistency. pub fn cleanup_tree_remove_uninit_layered(&mut self, depth: u32) { @@ -259,14 +259,14 @@ impl KeyTree { } impl KeyTree { - /// Cleanup of all non-initialized accounts in a public tree + /// Cleanup of all non-initialized accounts in a public tree. /// /// For given `depth` checks children to a tree such that their `ChainIndex::depth(&self) < /// depth`. /// /// If account is default, removes them. /// - /// Fast, leaves gaps between accounts + /// Fast, leaves gaps between accounts. pub async fn cleanup_tree_remove_ininit_for_depth( &mut self, depth: u32, @@ -298,11 +298,11 @@ impl KeyTree { Ok(()) } - /// Cleanup of non-initialized accounts in a public tree + /// Cleanup of non-initialized accounts in a public tree. /// /// If account is default, removes them, stops at first non-default account. /// - /// Walks through tree in lairs of same depth using `ChainIndex::chain_ids_at_depth()` + /// Walks through tree in lairs of same depth using `ChainIndex::chain_ids_at_depth()`. /// /// Slow, maintains tree consistency. pub async fn cleanup_tree_remove_uninit_layered( diff --git a/key_protocol/src/key_management/key_tree/traits.rs b/key_protocol/src/key_management/key_tree/traits.rs index b57eec64..65e8fae0 100644 --- a/key_protocol/src/key_management/key_tree/traits.rs +++ b/key_protocol/src/key_management/key_tree/traits.rs @@ -1,9 +1,9 @@ -/// Trait, that reperesents a Node in hierarchical key tree +/// Trait, that reperesents a Node in hierarchical key tree. pub trait KeyNode { - /// Tree root node + /// Tree root node. fn root(seed: [u8; 64]) -> Self; - /// `cci`'s child of node + /// `cci`'s child of node. #[must_use] fn nth_child(&self, cci: u32) -> Self; diff --git a/key_protocol/src/key_management/mod.rs b/key_protocol/src/key_management/mod.rs index 3b0a6139..e29e5862 100644 --- a/key_protocol/src/key_management/mod.rs +++ b/key_protocol/src/key_management/mod.rs @@ -12,7 +12,7 @@ pub mod secret_holders; pub type PublicAccountSigningKey = [u8; 32]; #[derive(Serialize, Deserialize, Clone, Debug)] -/// Entrypoint to key management +/// Entrypoint to key management. pub struct KeyChain { pub secret_spending_key: SecretSpendingKey, pub private_key_holder: PrivateKeyHolder, diff --git a/key_protocol/src/key_protocol_core/mod.rs b/key_protocol/src/key_protocol_core/mod.rs index 19ae45a3..abc1135f 100644 --- a/key_protocol/src/key_protocol_core/mod.rs +++ b/key_protocol/src/key_protocol_core/mod.rs @@ -14,14 +14,14 @@ pub type PublicKey = AffinePoint; #[derive(Clone, Debug, Serialize, Deserialize)] pub struct NSSAUserData { - /// Default public accounts + /// Default public accounts. pub default_pub_account_signing_keys: BTreeMap, - /// Default private accounts + /// Default private accounts. pub default_user_private_accounts: BTreeMap, - /// Tree of public keys + /// Tree of public keys. pub public_key_tree: KeyTreePublic, - /// Tree of private keys + /// Tree of private keys. pub private_key_tree: KeyTreePrivate, } @@ -84,9 +84,9 @@ impl NSSAUserData { }) } - /// Generated new private key for public transaction signatures + /// Generated new private key for public transaction signatures. /// - /// Returns the `account_id` of new account + /// Returns the `account_id` of new account. pub fn generate_new_public_transaction_private_key( &mut self, parent_cci: Option, @@ -103,7 +103,7 @@ impl NSSAUserData { } } - /// Returns the signing key for public transaction signatures + /// Returns the signing key for public transaction signatures. #[must_use] pub fn get_pub_account_signing_key( &self, @@ -114,9 +114,9 @@ impl NSSAUserData { .or_else(|| self.public_key_tree.get_node(account_id).map(Into::into)) } - /// Generated new private key for privacy preserving transactions + /// Generated new private key for privacy preserving transactions. /// - /// Returns the `account_id` of new account + /// Returns the `account_id` of new account. pub fn generate_new_privacy_preserving_transaction_key_chain( &mut self, parent_cci: Option, @@ -133,7 +133,7 @@ impl NSSAUserData { } } - /// Returns the signing key for public transaction signatures + /// Returns the signing key for public transaction signatures. #[must_use] pub fn get_private_account( &self, @@ -144,7 +144,7 @@ impl NSSAUserData { .or_else(|| self.private_key_tree.get_node(account_id).map(Into::into)) } - /// Returns the signing key for public transaction signatures + /// Returns the signing key for public transaction signatures. pub fn get_private_account_mut( &mut self, account_id: &nssa::AccountId, diff --git a/mempool/src/lib.rs b/mempool/src/lib.rs index ff06da7d..3bf4ac2a 100644 --- a/mempool/src/lib.rs +++ b/mempool/src/lib.rs @@ -38,7 +38,7 @@ impl MemPool { } } - /// Push an item to the front of the mempool (will be popped first) + /// Push an item to the front of the mempool (will be popped first). pub fn push_front(&mut self, item: T) { self.front_buffer.push(item); } @@ -53,7 +53,7 @@ impl MemPoolHandle { Self { sender } } - /// Send an item to the mempool blocking if max size is reached + /// Send an item to the mempool blocking if max size is reached. pub async fn push(&self, item: T) -> Result<(), tokio::sync::mpsc::error::SendError> { self.sender.send(item).await } diff --git a/nssa/core/src/account.rs b/nssa/core/src/account.rs index fa76dd08..30ee2055 100644 --- a/nssa/core/src/account.rs +++ b/nssa/core/src/account.rs @@ -15,7 +15,7 @@ pub mod data; pub type Nonce = u128; -/// Account to be used both in public and private contexts +/// Account to be used both in public and private contexts. #[derive( Default, Clone, Eq, PartialEq, Serialize, Deserialize, BorshSerialize, BorshDeserialize, )] diff --git a/nssa/core/src/commitment.rs b/nssa/core/src/commitment.rs index 8cb4431b..c9fcfce0 100644 --- a/nssa/core/src/commitment.rs +++ b/nssa/core/src/commitment.rs @@ -16,7 +16,7 @@ pub const DUMMY_COMMITMENT: Commitment = Commitment([ 165, 33, 34, 172, 227, 30, 215, 20, 85, 47, 230, 29, ]); -/// The hash of the dummy commitment +/// The hash of the dummy commitment. /// ```python /// from hashlib import sha256 /// hasher = sha256() @@ -50,7 +50,7 @@ impl std::fmt::Debug for Commitment { impl Commitment { /// Generates the commitment to a private account owned by user for npk: - /// SHA256(npk || `program_owner` || balance || nonce || SHA256(data)) + /// SHA256(npk || `program_owner` || balance || nonce || SHA256(data)). #[must_use] pub fn new(npk: &NullifierPublicKey, account: &Account) -> Self { let mut bytes = Vec::new(); @@ -78,7 +78,7 @@ pub type CommitmentSetDigest = [u8; 32]; pub type MembershipProof = (usize, Vec<[u8; 32]>); -/// Computes the resulting digest for the given membership proof and corresponding commitment +/// Computes the resulting digest for the given membership proof and corresponding commitment. #[must_use] pub fn compute_digest_for_path( commitment: &Commitment, diff --git a/nssa/core/src/program.rs b/nssa/core/src/program.rs index bbb1e03b..c67a816c 100644 --- a/nssa/core/src/program.rs +++ b/nssa/core/src/program.rs @@ -53,10 +53,10 @@ impl From<(&ProgramId, &PdaSeed)> for AccountId { #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct ChainedCall { - /// The program ID of the program to execute + /// The program ID of the program to execute. pub program_id: ProgramId, pub pre_states: Vec, - /// The instruction data to pass + /// The instruction data to pass. pub instruction_data: InstructionData, pub pda_seeds: Vec, } @@ -133,18 +133,18 @@ impl AccountPostState { self.claim } - /// Returns the underlying account + /// Returns the underlying account. #[must_use] pub const fn account(&self) -> &Account { &self.account } - /// Returns the underlying account + /// Returns the underlying account. pub const fn account_mut(&mut self) -> &mut Account { &mut self.account } - /// Consumes the post state and returns the underlying account + /// Consumes the post state and returns the underlying account. #[must_use] pub fn into_account(self) -> Account { self.account @@ -154,9 +154,9 @@ impl AccountPostState { #[derive(Serialize, Deserialize, Clone)] #[cfg_attr(any(feature = "host", test), derive(Debug, PartialEq, Eq))] pub struct ProgramOutput { - /// The instruction data the program received to produce this output + /// The instruction data the program received to produce this output. pub instruction_data: InstructionData, - /// The account pre states the program received to produce this output + /// The account pre states the program received to produce this output. pub pre_states: Vec, pub post_states: Vec, pub chained_calls: Vec, @@ -248,7 +248,7 @@ pub fn write_nssa_outputs_with_chained_call( env::commit(&output); } -/// Validates well-behaved program execution +/// Validates well-behaved program execution. /// /// # Parameters /// - `pre_states`: The list of input accounts, each annotated with authorization metadata. diff --git a/nssa/src/merkle_tree/mod.rs b/nssa/src/merkle_tree/mod.rs index 1126336c..588f0f60 100644 --- a/nssa/src/merkle_tree/mod.rs +++ b/nssa/src/merkle_tree/mod.rs @@ -35,7 +35,7 @@ impl MerkleTree { } } - /// Number of levels required to hold all nodes + /// Number of levels required to hold all nodes. fn depth(&self) -> usize { usize::try_from(self.length.next_power_of_two().trailing_zeros()) .expect("u32 fits in usize") @@ -70,7 +70,7 @@ impl MerkleTree { } /// Reallocates storage of Merkle tree for double capacity. - /// The current tree is embedded into the new tree as a subtree + /// The current tree is embedded into the new tree as a subtree. fn reallocate_to_double_capacity(&mut self) { let old_capacity = self.capacity; let new_capacity = old_capacity << 1; @@ -142,7 +142,7 @@ impl MerkleTree { } } -/// Compute parent as the hash of two child nodes +/// Compute parent as the hash of two child nodes. fn hash_two(left: &Node, right: &Node) -> Node { let mut hasher = Sha256::new(); hasher.update(left); diff --git a/nssa/src/privacy_preserving_transaction/circuit.rs b/nssa/src/privacy_preserving_transaction/circuit.rs index 4de1c2c4..084b05db 100644 --- a/nssa/src/privacy_preserving_transaction/circuit.rs +++ b/nssa/src/privacy_preserving_transaction/circuit.rs @@ -16,7 +16,7 @@ use crate::{ state::MAX_NUMBER_CHAINED_CALLS, }; -/// Proof of the privacy preserving execution circuit +/// Proof of the privacy preserving execution circuit. #[derive(Debug, Clone, PartialEq, Eq, BorshSerialize, BorshDeserialize)] pub struct Proof(pub(crate) Vec); diff --git a/nssa/src/privacy_preserving_transaction/message.rs b/nssa/src/privacy_preserving_transaction/message.rs index 34f5058f..d164606e 100644 --- a/nssa/src/privacy_preserving_transaction/message.rs +++ b/nssa/src/privacy_preserving_transaction/message.rs @@ -32,7 +32,7 @@ impl EncryptedAccountData { } } - /// Computes the tag as the first byte of SHA256("/NSSA/v0.2/ViewTag/" || Npk || vpk) + /// Computes the tag as the first byte of SHA256("/NSSA/v0.2/ViewTag/" || Npk || vpk). #[must_use] pub fn compute_view_tag(npk: &NullifierPublicKey, vpk: &ViewingPublicKey) -> ViewTag { let mut hasher = Sha256::new(); diff --git a/nssa/src/program.rs b/nssa/src/program.rs index 90ca0244..3b372a22 100644 --- a/nssa/src/program.rs +++ b/nssa/src/program.rs @@ -12,7 +12,7 @@ use crate::{ }; /// Maximum number of cycles for a public execution. -/// TODO: Make this variable when fees are implemented +/// TODO: Make this variable when fees are implemented. const MAX_NUM_CYCLES_PUBLIC_EXECUTION: u64 = 1024 * 1024 * 32; // 32M cycles #[derive(Clone, Debug, PartialEq, Eq, BorshSerialize, BorshDeserialize)] @@ -74,7 +74,7 @@ impl Program { Ok(program_output) } - /// Writes inputs to `env_builder` in the order expected by the programs + /// Writes inputs to `env_builder` in the order expected by the programs. pub(crate) fn write_inputs( pre_states: &[AccountWithMetadata], instruction_data: &[u32], @@ -137,7 +137,7 @@ mod tests { }; impl Program { - /// A program that changes the nonce of an account + /// A program that changes the nonce of an account. #[must_use] pub fn nonce_changer_program() -> Self { use test_program_methods::{NONCE_CHANGER_ELF, NONCE_CHANGER_ID}; @@ -148,7 +148,7 @@ mod tests { } } - /// A program that produces more output accounts than the inputs it received + /// A program that produces more output accounts than the inputs it received. #[must_use] pub fn extra_output_program() -> Self { use test_program_methods::{EXTRA_OUTPUT_ELF, EXTRA_OUTPUT_ID}; @@ -159,7 +159,7 @@ mod tests { } } - /// A program that produces less output accounts than the inputs it received + /// A program that produces less output accounts than the inputs it received. #[must_use] pub fn missing_output_program() -> Self { use test_program_methods::{MISSING_OUTPUT_ELF, MISSING_OUTPUT_ID}; @@ -170,7 +170,7 @@ mod tests { } } - /// A program that changes the program owner of an account to [0, 1, 2, 3, 4, 5, 6, 7] + /// A program that changes the program owner of an account to [0, 1, 2, 3, 4, 5, 6, 7]. #[must_use] pub fn program_owner_changer() -> Self { use test_program_methods::{PROGRAM_OWNER_CHANGER_ELF, PROGRAM_OWNER_CHANGER_ID}; @@ -181,7 +181,7 @@ mod tests { } } - /// A program that transfers balance without caring about authorizations + /// A program that transfers balance without caring about authorizations. #[must_use] pub fn simple_balance_transfer() -> Self { use test_program_methods::{SIMPLE_BALANCE_TRANSFER_ELF, SIMPLE_BALANCE_TRANSFER_ID}; @@ -192,7 +192,7 @@ mod tests { } } - /// A program that modifies the data of an account + /// A program that modifies the data of an account. #[must_use] pub fn data_changer() -> Self { use test_program_methods::{DATA_CHANGER_ELF, DATA_CHANGER_ID}; @@ -203,7 +203,7 @@ mod tests { } } - /// A program that mints balance + /// A program that mints balance. #[must_use] pub fn minter() -> Self { use test_program_methods::{MINTER_ELF, MINTER_ID}; @@ -214,7 +214,7 @@ mod tests { } } - /// A program that burns balance + /// A program that burns balance. #[must_use] pub fn burner() -> Self { use test_program_methods::{BURNER_ELF, BURNER_ID}; diff --git a/nssa/src/signature/bip340_test_vectors.rs b/nssa/src/signature/bip340_test_vectors.rs index b7a992b6..e316db5e 100644 --- a/nssa/src/signature/bip340_test_vectors.rs +++ b/nssa/src/signature/bip340_test_vectors.rs @@ -10,7 +10,7 @@ pub struct TestVector { } /// Test vectors from -/// +/// . // pub fn test_vectors() -> Vec { vec![ diff --git a/nssa/src/state.rs b/nssa/src/state.rs index 6dbb2852..3dc0883c 100644 --- a/nssa/src/state.rs +++ b/nssa/src/state.rs @@ -29,7 +29,7 @@ impl CommitmentSet { self.merkle_tree.root() } - /// Queries the `CommitmentSet` for a membership proof of commitment + /// Queries the `CommitmentSet` for a membership proof of commitment. pub fn get_proof_for(&self, commitment: &Commitment) -> Option { let index = *self.commitments.get(commitment)?; @@ -363,7 +363,7 @@ pub mod tests { self.public_state.insert(account_id, account); } - /// Include test programs in the builtin programs map + /// Include test programs in the builtin programs map. #[must_use] pub fn with_test_programs(mut self) -> Self { self.insert_program(Program::nonce_changer_program()); diff --git a/program_methods/guest/src/bin/pinata.rs b/program_methods/guest/src/bin/pinata.rs index fd19fb4c..c9fc0735 100644 --- a/program_methods/guest/src/bin/pinata.rs +++ b/program_methods/guest/src/bin/pinata.rs @@ -40,7 +40,7 @@ impl Challenge { } } -/// A pinata program +/// A pinata program. fn main() { // Read input accounts. // It is expected to receive only two accounts: [pinata_account, winner_account] diff --git a/program_methods/guest/src/bin/pinata_token.rs b/program_methods/guest/src/bin/pinata_token.rs index 4089e6e0..f1bbdc87 100644 --- a/program_methods/guest/src/bin/pinata_token.rs +++ b/program_methods/guest/src/bin/pinata_token.rs @@ -46,7 +46,7 @@ impl Challenge { } } -/// A pinata program +/// A pinata program. fn main() { // Read input accounts. // It is expected to receive three accounts: [pinata_definition, pinata_token_holding, diff --git a/programs/amm/core/src/lib.rs b/programs/amm/core/src/lib.rs index 05b0b870..85efd00d 100644 --- a/programs/amm/core/src/lib.rs +++ b/programs/amm/core/src/lib.rs @@ -26,7 +26,7 @@ pub enum Instruction { amm_program_id: ProgramId, }, - /// Adds liquidity to the Pool + /// Adds liquidity to the Pool. /// /// Required accounts: /// - AMM Pool (initialized) @@ -42,7 +42,7 @@ pub enum Instruction { max_amount_to_add_token_b: u128, }, - /// Removes liquidity from the Pool + /// Removes liquidity from the Pool. /// /// Required accounts: /// - AMM Pool (initialized) @@ -85,11 +85,11 @@ pub struct PoolDefinition { pub liquidity_pool_supply: u128, pub reserve_a: u128, pub reserve_b: u128, - /// Fees are currently not used + /// Fees are currently not used. pub fees: u128, /// A pool becomes inactive (active = false) /// once all of its liquidity has been removed (e.g., reserves are emptied and - /// `liquidity_pool_supply` = 0) + /// `liquidity_pool_supply` = 0). pub active: bool, } diff --git a/programs/token/core/src/lib.rs b/programs/token/core/src/lib.rs index 42c15860..1edbc895 100644 --- a/programs/token/core/src/lib.rs +++ b/programs/token/core/src/lib.rs @@ -29,7 +29,7 @@ pub enum Instruction { /// - Token Metadata account (uninitialized). NewDefinitionWithMetadata { new_definition: NewTokenDefinition, - /// Boxed to avoid large enum variant size + /// Boxed to avoid large enum variant size. metadata: Box, }, @@ -196,7 +196,7 @@ impl From<&TokenHolding> for Data { pub struct NewTokenMetadata { /// Metadata standard. pub standard: MetadataStandard, - /// Pointer to off-chain metadata + /// Pointer to off-chain metadata. pub uri: String, /// Creators of the token. pub creators: String, diff --git a/rust-toolchain.toml b/rust-toolchain.toml index bf951337..8a0f7d2f 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ # Should be kept in sync with Dockerfiles [toolchain] -channel = "1.91.1" +channel = "1.94.0" profile = "default" diff --git a/sequencer_core/src/block_settlement_client.rs b/sequencer_core/src/block_settlement_client.rs index ad8247ed..89b86bb9 100644 --- a/sequencer_core/src/block_settlement_client.rs +++ b/sequencer_core/src/block_settlement_client.rs @@ -74,7 +74,7 @@ pub trait BlockSettlementClientTrait: Clone { } } -/// A component that posts block data to logos blockchain +/// A component that posts block data to logos blockchain. #[derive(Clone)] pub struct BlockSettlementClient { client: BedrockClient, diff --git a/sequencer_core/src/config.rs b/sequencer_core/src/config.rs index 72b8071a..097d1391 100644 --- a/sequencer_core/src/config.rs +++ b/sequencer_core/src/config.rs @@ -20,51 +20,51 @@ use url::Url; // TODO: Provide default values #[derive(Clone, Serialize, Deserialize)] pub struct SequencerConfig { - /// Home dir of sequencer storage + /// Home dir of sequencer storage. pub home: PathBuf, - /// Override rust log (env var logging level) + /// Override rust log (env var logging level). pub override_rust_log: Option, - /// Genesis id + /// Genesis id. pub genesis_id: u64, - /// If `True`, then adds random sequence of bytes to genesis block + /// If `True`, then adds random sequence of bytes to genesis block. pub is_genesis_random: bool, - /// Maximum number of transactions in block + /// Maximum number of transactions in block. pub max_num_tx_in_block: usize, - /// Maximum block size (includes header and transactions) + /// Maximum block size (includes header and transactions). #[serde(default = "default_max_block_size")] pub max_block_size: ByteSize, - /// Mempool maximum size + /// Mempool maximum size. pub mempool_max_size: usize, - /// Interval in which blocks produced + /// Interval in which blocks produced. #[serde(with = "humantime_serde")] pub block_create_timeout: Duration, - /// Interval in which pending blocks are retried + /// Interval in which pending blocks are retried. #[serde(with = "humantime_serde")] pub retry_pending_blocks_timeout: Duration, - /// Port to listen + /// Port to listen. pub port: u16, - /// List of initial accounts data + /// List of initial accounts data. pub initial_accounts: Vec, - /// List of initial commitments + /// List of initial commitments. pub initial_commitments: Vec, - /// Sequencer own signing key + /// Sequencer own signing key. pub signing_key: [u8; 32], - /// Bedrock configuration options + /// Bedrock configuration options. pub bedrock_config: BedrockConfig, - /// Indexer RPC URL + /// Indexer RPC URL. pub indexer_rpc_url: Url, } #[derive(Clone, Serialize, Deserialize)] pub struct BedrockConfig { - /// Fibonacci backoff retry strategy configuration + /// Fibonacci backoff retry strategy configuration. #[serde(default)] pub backoff: BackoffConfig, - /// Bedrock channel ID + /// Bedrock channel ID. pub channel_id: ChannelId, - /// Bedrock Url + /// Bedrock Url. pub node_url: Url, - /// Bedrock auth + /// Bedrock auth. pub auth: Option, } diff --git a/sequencer_core/src/lib.rs b/sequencer_core/src/lib.rs index a7500da6..c844c193 100644 --- a/sequencer_core/src/lib.rs +++ b/sequencer_core/src/lib.rs @@ -335,7 +335,7 @@ impl SequencerCore Result { if path.exists() { let key_bytes = std::fs::read(path)?; diff --git a/sequencer_rpc/src/process.rs b/sequencer_rpc/src/process.rs index 66978bea..3a6a4d60 100644 --- a/sequencer_rpc/src/process.rs +++ b/sequencer_rpc/src/process.rs @@ -77,7 +77,7 @@ impl< } impl JsonHandler { - /// Example of request processing + /// Example of request processing. fn process_temp_hello(request: Request) -> Result { let _hello_request = HelloRequest::parse(Some(request.params))?; @@ -194,8 +194,8 @@ impl JsonHandler respond(response) } - /// Returns the initial accounts for testnet - /// `ToDo`: Useful only for testnet and needs to be removed later + /// Returns the initial accounts for testnet. + /// `ToDo`: Useful only for testnet and needs to be removed later. async fn get_initial_testnet_accounts(&self, request: Request) -> Result { let _get_initial_testnet_accounts_request = GetInitialTestnetAccountsRequest::parse(Some(request.params))?; @@ -284,7 +284,7 @@ impl JsonHandler respond(response) } - /// Returns the commitment proof, corresponding to commitment + /// Returns the commitment proof, corresponding to commitment. async fn process_get_proof_by_commitment(&self, request: Request) -> Result { let get_proof_req = GetProofForCommitmentRequest::parse(Some(request.params))?; diff --git a/sequencer_runner/Dockerfile b/sequencer_runner/Dockerfile index acdea432..0efdf561 100644 --- a/sequencer_runner/Dockerfile +++ b/sequencer_runner/Dockerfile @@ -1,5 +1,5 @@ # Chef stage - uses pre-built cargo-chef image -FROM lukemathwalker/cargo-chef:latest-rust-1.91.1-slim-trixie AS chef +FROM lukemathwalker/cargo-chef:latest-rust-1.94.0-slim-trixie AS chef # Install dependencies RUN apt-get update && apt-get install -y \ @@ -26,7 +26,7 @@ RUN ARCH=$(uname -m); \ else \ echo "Using manual build for $ARCH"; \ git clone --depth 1 --branch release-3.0 https://github.com/risc0/risc0.git; \ - git clone --depth 1 --branch r0.1.91.1 https://github.com/risc0/rust.git; \ + git clone --depth 1 --branch r0.1.94.0 https://github.com/risc0/rust.git; \ cd /risc0; \ cargo install --path rzup; \ rzup build --path /rust rust --verbose; \ diff --git a/sequencer_runner/src/lib.rs b/sequencer_runner/src/lib.rs index e2831191..a17ecbf9 100644 --- a/sequencer_runner/src/lib.rs +++ b/sequencer_runner/src/lib.rs @@ -21,7 +21,7 @@ pub const RUST_LOG: &str = "RUST_LOG"; #[derive(Parser, Debug)] #[clap(version)] struct Args { - /// Path to configs + /// Path to configs. home_dir: PathBuf, } diff --git a/storage/src/indexer.rs b/storage/src/indexer.rs index 6d03d320..534a1c0b 100644 --- a/storage/src/indexer.rs +++ b/storage/src/indexer.rs @@ -11,46 +11,46 @@ use rocksdb::{ use crate::error::DbError; -/// Maximal size of stored blocks in base +/// Maximal size of stored blocks in base. /// -/// Used to control db size +/// Used to control db size. /// /// Currently effectively unbounded. pub const BUFF_SIZE_ROCKSDB: usize = usize::MAX; -/// Size of stored blocks cache in memory +/// Size of stored blocks cache in memory. /// -/// Keeping small to not run out of memory +/// Keeping small to not run out of memory. pub const CACHE_SIZE: usize = 1000; -/// Key base for storing metainformation about id of first block in db +/// Key base for storing metainformation about id of first block in db. pub const DB_META_FIRST_BLOCK_IN_DB_KEY: &str = "first_block_in_db"; -/// Key base for storing metainformation about id of last current block in db +/// Key base for storing metainformation about id of last current block in db. pub const DB_META_LAST_BLOCK_IN_DB_KEY: &str = "last_block_in_db"; -/// Key base for storing metainformation about id of last observed L1 lib header in db +/// Key base for storing metainformation about id of last observed L1 lib header in db. pub const DB_META_LAST_OBSERVED_L1_LIB_HEADER_ID_IN_DB_KEY: &str = "last_observed_l1_lib_header_in_db"; -/// Key base for storing metainformation which describe if first block has been set +/// Key base for storing metainformation which describe if first block has been set. pub const DB_META_FIRST_BLOCK_SET_KEY: &str = "first_block_set"; -/// Key base for storing metainformation about the last breakpoint +/// Key base for storing metainformation about the last breakpoint. pub const DB_META_LAST_BREAKPOINT_ID: &str = "last_breakpoint_id"; -/// Interval between state breakpoints +/// Interval between state breakpoints. pub const BREAKPOINT_INTERVAL: u8 = 100; -/// Name of block column family +/// Name of block column family. pub const CF_BLOCK_NAME: &str = "cf_block"; -/// Name of meta column family +/// Name of meta column family. pub const CF_META_NAME: &str = "cf_meta"; -/// Name of breakpoint column family +/// Name of breakpoint column family. pub const CF_BREAKPOINT_NAME: &str = "cf_breakpoint"; -/// Name of hash to id map column family +/// Name of hash to id map column family. pub const CF_HASH_TO_ID: &str = "cf_hash_to_id"; -/// Name of tx hash to id map column family +/// Name of tx hash to id map column family. pub const CF_TX_TO_ID: &str = "cf_tx_to_id"; -/// Name of account meta column family +/// Name of account meta column family. pub const CF_ACC_META: &str = "cf_acc_meta"; -/// Name of account id to tx hash map column family +/// Name of account id to tx hash map column family. pub const CF_ACC_TO_TX: &str = "cf_acc_to_tx"; pub type DbResult = Result; diff --git a/storage/src/sequencer.rs b/storage/src/sequencer.rs index 37ad419e..8d072a52 100644 --- a/storage/src/sequencer.rs +++ b/storage/src/sequencer.rs @@ -8,37 +8,37 @@ use rocksdb::{ use crate::error::DbError; -/// Maximal size of stored blocks in base +/// Maximal size of stored blocks in base. /// -/// Used to control db size +/// Used to control db size. /// /// Currently effectively unbounded. pub const BUFF_SIZE_ROCKSDB: usize = usize::MAX; -/// Size of stored blocks cache in memory +/// Size of stored blocks cache in memory. /// -/// Keeping small to not run out of memory +/// Keeping small to not run out of memory. pub const CACHE_SIZE: usize = 1000; -/// Key base for storing metainformation about id of first block in db +/// Key base for storing metainformation about id of first block in db. pub const DB_META_FIRST_BLOCK_IN_DB_KEY: &str = "first_block_in_db"; -/// Key base for storing metainformation about id of last current block in db +/// Key base for storing metainformation about id of last current block in db. pub const DB_META_LAST_BLOCK_IN_DB_KEY: &str = "last_block_in_db"; -/// Key base for storing metainformation which describe if first block has been set +/// Key base for storing metainformation which describe if first block has been set. pub const DB_META_FIRST_BLOCK_SET_KEY: &str = "first_block_set"; -/// Key base for storing metainformation about the last finalized block on Bedrock +/// Key base for storing metainformation about the last finalized block on Bedrock. pub const DB_META_LAST_FINALIZED_BLOCK_ID: &str = "last_finalized_block_id"; -/// Key base for storing metainformation about the latest block meta +/// Key base for storing metainformation about the latest block meta. pub const DB_META_LATEST_BLOCK_META_KEY: &str = "latest_block_meta"; -/// Key base for storing the NSSA state +/// Key base for storing the NSSA state. pub const DB_NSSA_STATE_KEY: &str = "nssa_state"; -/// Name of block column family +/// Name of block column family. pub const CF_BLOCK_NAME: &str = "cf_block"; -/// Name of meta column family +/// Name of meta column family. pub const CF_META_NAME: &str = "cf_meta"; -/// Name of state column family +/// Name of state column family. pub const CF_NSSA_STATE_NAME: &str = "cf_nssa_state"; pub type DbResult = Result; diff --git a/test_program_methods/guest/src/bin/chain_caller.rs b/test_program_methods/guest/src/bin/chain_caller.rs index bc17391c..7e67fa9b 100644 --- a/test_program_methods/guest/src/bin/chain_caller.rs +++ b/test_program_methods/guest/src/bin/chain_caller.rs @@ -9,7 +9,7 @@ type Instruction = (u128, ProgramId, u32, Option); /// A program that calls another program `num_chain_calls` times. /// It permutes the order of the input accounts on the subsequent call /// The `ProgramId` in the instruction must be the `program_id` of the authenticated transfers -/// program +/// program. fn main() { let ( ProgramInput { diff --git a/wallet-ffi/src/error.rs b/wallet-ffi/src/error.rs index be3be56d..a8c345b5 100644 --- a/wallet-ffi/src/error.rs +++ b/wallet-ffi/src/error.rs @@ -6,41 +6,41 @@ #[repr(C)] #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum WalletFfiError { - /// Operation completed successfully + /// Operation completed successfully. Success = 0, - /// A null pointer was passed where a valid pointer was expected + /// A null pointer was passed where a valid pointer was expected. NullPointer = 1, - /// Invalid UTF-8 string + /// Invalid UTF-8 string. InvalidUtf8 = 2, - /// Wallet handle is not initialized + /// Wallet handle is not initialized. WalletNotInitialized = 3, - /// Configuration error + /// Configuration error. ConfigError = 4, - /// Storage/persistence error + /// Storage/persistence error. StorageError = 5, - /// Network/RPC error + /// Network/RPC error. NetworkError = 6, - /// Account not found + /// Account not found. AccountNotFound = 7, - /// Key not found for account + /// Key not found for account. KeyNotFound = 8, - /// Insufficient funds for operation + /// Insufficient funds for operation. InsufficientFunds = 9, - /// Invalid account ID format + /// Invalid account ID format. InvalidAccountId = 10, - /// Tokio runtime error + /// Tokio runtime error. RuntimeError = 11, - /// Password required but not provided + /// Password required but not provided. PasswordRequired = 12, - /// Block synchronization error + /// Block synchronization error. SyncError = 13, - /// Serialization/deserialization error + /// Serialization/deserialization error. SerializationError = 14, - /// Invalid conversion from FFI types to NSSA types + /// Invalid conversion from FFI types to NSSA types. InvalidTypeConversion = 15, - /// Invalid Key value + /// Invalid Key value. InvalidKeyValue = 16, - /// Internal error (catch-all) + /// Internal error (catch-all). InternalError = 99, } diff --git a/wallet-ffi/src/lib.rs b/wallet-ffi/src/lib.rs index 190c52ab..c36b05e0 100644 --- a/wallet-ffi/src/lib.rs +++ b/wallet-ffi/src/lib.rs @@ -1,4 +1,4 @@ -//! NSSA Wallet FFI Library +//! NSSA Wallet FFI Library. //! //! This crate provides C-compatible bindings for the NSSA wallet functionality. //! diff --git a/wallet-ffi/src/types.rs b/wallet-ffi/src/types.rs index a6a148c7..21942e8d 100644 --- a/wallet-ffi/src/types.rs +++ b/wallet-ffi/src/types.rs @@ -31,7 +31,7 @@ pub struct FfiProgramId { pub data: [u32; 8], } -/// U128 - 16 bytes little endian +/// U128 - 16 bytes little endian. #[repr(C)] #[derive(Clone, Copy, Default)] pub struct FfiU128 { @@ -45,13 +45,13 @@ pub struct FfiU128 { #[repr(C)] pub struct FfiAccount { pub program_owner: FfiProgramId, - /// Balance as little-endian [u8; 16] + /// Balance as little-endian [u8; 16]. pub balance: FfiU128, - /// Pointer to account data bytes + /// Pointer to account data bytes. pub data: *const u8, - /// Length of account data + /// Length of account data. pub data_len: usize, - /// Nonce as little-endian [u8; 16] + /// Nonce as little-endian [u8; 16]. pub nonce: FfiU128, } @@ -70,11 +70,11 @@ impl Default for FfiAccount { /// Public keys for a private account (safe to expose). #[repr(C)] pub struct FfiPrivateAccountKeys { - /// Nullifier public key (32 bytes) + /// Nullifier public key (32 bytes). pub nullifier_public_key: FfiBytes32, - /// viewing public key (compressed secp256k1 point) + /// viewing public key (compressed secp256k1 point). pub viewing_public_key: *const u8, - /// Length of viewing public key (typically 33 bytes) + /// Length of viewing public key (typically 33 bytes). pub viewing_public_key_len: usize, } @@ -123,9 +123,9 @@ impl Default for FfiAccountList { #[repr(C)] pub struct FfiTransferResult { // TODO: Replace with HashType FFI representation - /// Transaction hash (null-terminated string, or null on failure) + /// Transaction hash (null-terminated string, or null on failure). pub tx_hash: *mut c_char, - /// Whether the transfer succeeded + /// Whether the transfer succeeded. pub success: bool, } diff --git a/wallet-ffi/wallet_ffi.h b/wallet-ffi/wallet_ffi.h index 810feeb5..2665cd40 100644 --- a/wallet-ffi/wallet_ffi.h +++ b/wallet-ffi/wallet_ffi.h @@ -36,75 +36,75 @@ */ typedef enum WalletFfiError { /** - * Operation completed successfully + * Operation completed successfully. */ SUCCESS = 0, /** - * A null pointer was passed where a valid pointer was expected + * A null pointer was passed where a valid pointer was expected. */ NULL_POINTER = 1, /** - * Invalid UTF-8 string + * Invalid UTF-8 string. */ INVALID_UTF8 = 2, /** - * Wallet handle is not initialized + * Wallet handle is not initialized. */ WALLET_NOT_INITIALIZED = 3, /** - * Configuration error + * Configuration error. */ CONFIG_ERROR = 4, /** - * Storage/persistence error + * Storage/persistence error. */ STORAGE_ERROR = 5, /** - * Network/RPC error + * Network/RPC error. */ NETWORK_ERROR = 6, /** - * Account not found + * Account not found. */ ACCOUNT_NOT_FOUND = 7, /** - * Key not found for account + * Key not found for account. */ KEY_NOT_FOUND = 8, /** - * Insufficient funds for operation + * Insufficient funds for operation. */ INSUFFICIENT_FUNDS = 9, /** - * Invalid account ID format + * Invalid account ID format. */ INVALID_ACCOUNT_ID = 10, /** - * Tokio runtime error + * Tokio runtime error. */ RUNTIME_ERROR = 11, /** - * Password required but not provided + * Password required but not provided. */ PASSWORD_REQUIRED = 12, /** - * Block synchronization error + * Block synchronization error. */ SYNC_ERROR = 13, /** - * Serialization/deserialization error + * Serialization/deserialization error. */ SERIALIZATION_ERROR = 14, /** - * Invalid conversion from FFI types to NSSA types + * Invalid conversion from FFI types to NSSA types. */ INVALID_TYPE_CONVERSION = 15, /** - * Invalid Key value + * Invalid Key value. */ INVALID_KEY_VALUE = 16, /** - * Internal error (catch-all) + * Internal error (catch-all). */ INTERNAL_ERROR = 99, } WalletFfiError; @@ -150,7 +150,7 @@ typedef struct FfiProgramId { } FfiProgramId; /** - * U128 - 16 bytes little endian + * U128 - 16 bytes little endian. */ typedef struct FfiU128 { uint8_t data[16]; @@ -165,19 +165,19 @@ typedef struct FfiU128 { typedef struct FfiAccount { struct FfiProgramId program_owner; /** - * Balance as little-endian [u8; 16] + * Balance as little-endian [u8; 16]. */ struct FfiU128 balance; /** - * Pointer to account data bytes + * Pointer to account data bytes. */ const uint8_t *data; /** - * Length of account data + * Length of account data. */ uintptr_t data_len; /** - * Nonce as little-endian [u8; 16] + * Nonce as little-endian [u8; 16]. */ struct FfiU128 nonce; } FfiAccount; @@ -194,15 +194,15 @@ typedef struct FfiPublicAccountKey { */ typedef struct FfiPrivateAccountKeys { /** - * Nullifier public key (32 bytes) + * Nullifier public key (32 bytes). */ struct FfiBytes32 nullifier_public_key; /** - * viewing public key (compressed secp256k1 point) + * viewing public key (compressed secp256k1 point). */ const uint8_t *viewing_public_key; /** - * Length of viewing public key (typically 33 bytes) + * Length of viewing public key (typically 33 bytes). */ uintptr_t viewing_public_key_len; } FfiPrivateAccountKeys; @@ -212,11 +212,11 @@ typedef struct FfiPrivateAccountKeys { */ typedef struct FfiTransferResult { /** - * Transaction hash (null-terminated string, or null on failure) + * Transaction hash (null-terminated string, or null on failure). */ char *tx_hash; /** - * Whether the transfer succeeded + * Whether the transfer succeeded. */ bool success; } FfiTransferResult; diff --git a/wallet/src/cli/account.rs b/wallet/src/cli/account.rs index 1c19252d..319fac0e 100644 --- a/wallet/src/cli/account.rs +++ b/wallet/src/cli/account.rs @@ -12,63 +12,63 @@ use crate::{ helperfunctions::{AccountPrivacyKind, HumanReadableAccount, parse_addr_with_privacy_prefix}, }; -/// Represents generic chain CLI subcommand +/// Represents generic chain CLI subcommand. #[derive(Subcommand, Debug, Clone)] pub enum AccountSubcommand { - /// Get account data + /// Get account data. Get { - /// Flag to get raw account data + /// Flag to get raw account data. #[arg(short, long)] raw: bool, - /// Display keys (pk for public accounts, npk/vpk for private accounts) + /// Display keys (pk for public accounts, npk/vpk for private accounts). #[arg(short, long)] keys: bool, - /// Valid 32 byte base58 string with privacy prefix + /// Valid 32 byte base58 string with privacy prefix. #[arg(short, long)] account_id: String, }, - /// Produce new public or private account + /// Produce new public or private account. #[command(subcommand)] New(NewSubcommand), - /// Sync private accounts + /// Sync private accounts. SyncPrivate, - /// List all accounts owned by the wallet + /// List all accounts owned by the wallet. #[command(visible_alias = "ls")] List { - /// Show detailed account information (like `account get`) + /// Show detailed account information (like `account get`). #[arg(short, long)] long: bool, }, - /// Set a label for an account + /// Set a label for an account. Label { - /// Valid 32 byte base58 string with privacy prefix + /// Valid 32 byte base58 string with privacy prefix. #[arg(short, long)] account_id: String, - /// The label to assign to the account + /// The label to assign to the account. #[arg(short, long)] label: String, }, } -/// Represents generic register CLI subcommand +/// Represents generic register CLI subcommand. #[derive(Subcommand, Debug, Clone)] pub enum NewSubcommand { - /// Register new public account + /// Register new public account. Public { #[arg(long)] - /// Chain index of a parent node + /// Chain index of a parent node. cci: Option, #[arg(short, long)] - /// Label to assign to the new account + /// Label to assign to the new account. label: Option, }, - /// Register new private account + /// Register new private account. Private { #[arg(long)] - /// Chain index of a parent node + /// Chain index of a parent node. cci: Option, #[arg(short, long)] - /// Label to assign to the new account + /// Label to assign to the new account. label: Option, }, } @@ -409,7 +409,7 @@ impl WalletSubcommand for AccountSubcommand { } } -/// Formats account details for display, returning (description, `json_view`) +/// Formats account details for display, returning (description, `json_view`). fn format_account_details(account: &Account) -> (String, String) { let auth_tr_prog_id = Program::authenticated_transfer_program().id(); let token_prog_id = Program::token().id(); diff --git a/wallet/src/cli/chain.rs b/wallet/src/cli/chain.rs index 930c7fa8..4beadbbc 100644 --- a/wallet/src/cli/chain.rs +++ b/wallet/src/cli/chain.rs @@ -7,19 +7,19 @@ use crate::{ cli::{SubcommandReturnValue, WalletSubcommand}, }; -/// Represents generic chain CLI subcommand +/// Represents generic chain CLI subcommand. #[derive(Subcommand, Debug, Clone)] pub enum ChainSubcommand { - /// Get current block id from sequencer + /// Get current block id from sequencer. CurrentBlockId, - /// Get block at id from sequencer + /// Get block at id from sequencer. Block { #[arg(short, long)] id: u64, }, - /// Get transaction at hash from sequencer + /// Get transaction at hash from sequencer. Transaction { - /// hash - valid 32 byte hex string + /// hash - valid 32 byte hex string. #[arg(short = 't', long)] hash: HashType, }, diff --git a/wallet/src/cli/config.rs b/wallet/src/cli/config.rs index ec5f1245..ac94a1b7 100644 --- a/wallet/src/cli/config.rs +++ b/wallet/src/cli/config.rs @@ -6,20 +6,20 @@ use crate::{ cli::{SubcommandReturnValue, WalletSubcommand}, }; -/// Represents generic config CLI subcommand +/// Represents generic config CLI subcommand. #[derive(Subcommand, Debug, Clone)] pub enum ConfigSubcommand { - /// Getter of config fields + /// Getter of config fields. Get { - /// Print all config fields + /// Print all config fields. #[arg(short, long)] all: bool, - /// Config field key to get + /// Config field key to get. key: Option, }, - /// Setter of config fields + /// Setter of config fields. Set { key: String, value: String }, - /// Prints description of corresponding field + /// Prints description of corresponding field. Description { key: String }, } diff --git a/wallet/src/cli/mod.rs b/wallet/src/cli/mod.rs index a53f8047..58d77d6a 100644 --- a/wallet/src/cli/mod.rs +++ b/wallet/src/cli/mod.rs @@ -28,62 +28,62 @@ pub(crate) trait WalletSubcommand { -> Result; } -/// Represents CLI command for a wallet +/// Represents CLI command for a wallet. #[derive(Subcommand, Debug, Clone)] #[clap(about)] pub enum Command { - /// Authenticated transfer subcommand + /// Authenticated transfer subcommand. #[command(subcommand)] AuthTransfer(AuthTransferSubcommand), - /// Generic chain info subcommand + /// Generic chain info subcommand. #[command(subcommand)] ChainInfo(ChainSubcommand), - /// Account view and sync subcommand + /// Account view and sync subcommand. #[command(subcommand)] Account(AccountSubcommand), - /// Pinata program interaction subcommand + /// Pinata program interaction subcommand. #[command(subcommand)] Pinata(PinataProgramAgnosticSubcommand), - /// Token program interaction subcommand + /// Token program interaction subcommand. #[command(subcommand)] Token(TokenProgramAgnosticSubcommand), - /// AMM program interaction subcommand + /// AMM program interaction subcommand. #[command(subcommand)] AMM(AmmProgramAgnosticSubcommand), /// Check the wallet can connect to the node and builtin local programs - /// match the remote versions + /// match the remote versions. CheckHealth, - /// Command to setup config, get and set config fields + /// Command to setup config, get and set config fields. #[command(subcommand)] Config(ConfigSubcommand), - /// Restoring keys from given password at given `depth` + /// Restoring keys from given password at given `depth`. /// - /// !!!WARNING!!! will rewrite current storage + /// !!!WARNING!!! will rewrite current storage. RestoreKeys { #[arg(short, long)] /// Indicates, how deep in tree accounts may be. Affects command complexity. depth: u32, }, - /// Deploy a program + /// Deploy a program. DeployProgram { binary_filepath: PathBuf }, } -/// To execute commands, env var `NSSA_WALLET_HOME_DIR` must be set into directory with config +/// To execute commands, env var `NSSA_WALLET_HOME_DIR` must be set into directory with config. /// /// All account addresses must be valid 32 byte base58 strings. /// /// All account `account_ids` must be provided as {`privacy_prefix}/{account_id`}, -/// where valid options for `privacy_prefix` is `Public` and `Private` +/// where valid options for `privacy_prefix` is `Public` and `Private`. #[derive(Parser, Debug)] #[clap(version, about)] pub struct Args { - /// Continious run flag + /// Continious run flag. #[arg(short, long)] pub continuous_run: bool, - /// Basic authentication in the format `user` or `user:password` + /// Basic authentication in the format `user` or `user:password`. #[arg(long)] pub auth: Option, - /// Wallet command + /// Wallet command. #[command(subcommand)] pub command: Option, } diff --git a/wallet/src/cli/programs/amm.rs b/wallet/src/cli/programs/amm.rs index 1aa7cc1b..7307569d 100644 --- a/wallet/src/cli/programs/amm.rs +++ b/wallet/src/cli/programs/amm.rs @@ -9,22 +9,22 @@ use crate::{ program_facades::amm::Amm, }; -/// Represents generic CLI subcommand for a wallet working with amm program +/// Represents generic CLI subcommand for a wallet working with amm program. #[derive(Subcommand, Debug, Clone)] pub enum AmmProgramAgnosticSubcommand { - /// Produce a new pool + /// Produce a new pool. /// /// `user_holding_a` and `user_holding_b` must be owned. /// - /// Only public execution allowed + /// Only public execution allowed. New { - /// `user_holding_a` - valid 32 byte base58 string with privacy prefix + /// `user_holding_a` - valid 32 byte base58 string with privacy prefix. #[arg(long)] user_holding_a: String, - /// `user_holding_b` - valid 32 byte base58 string with privacy prefix + /// `user_holding_b` - valid 32 byte base58 string with privacy prefix. #[arg(long)] user_holding_b: String, - /// `user_holding_lp` - valid 32 byte base58 string with privacy prefix + /// `user_holding_lp` - valid 32 byte base58 string with privacy prefix. #[arg(long)] user_holding_lp: String, #[arg(long)] @@ -32,39 +32,39 @@ pub enum AmmProgramAgnosticSubcommand { #[arg(long)] balance_b: u128, }, - /// Swap + /// Swap. /// - /// The account associated with swapping token must be owned + /// The account associated with swapping token must be owned. /// - /// Only public execution allowed + /// Only public execution allowed. Swap { - /// `user_holding_a` - valid 32 byte base58 string with privacy prefix + /// `user_holding_a` - valid 32 byte base58 string with privacy prefix. #[arg(long)] user_holding_a: String, - /// `user_holding_b` - valid 32 byte base58 string with privacy prefix + /// `user_holding_b` - valid 32 byte base58 string with privacy prefix. #[arg(long)] user_holding_b: String, #[arg(long)] amount_in: u128, #[arg(long)] min_amount_out: u128, - /// `token_definition` - valid 32 byte base58 string WITHOUT privacy prefix + /// `token_definition` - valid 32 byte base58 string WITHOUT privacy prefix. #[arg(long)] token_definition: String, }, - /// Add liquidity + /// Add liquidity. /// /// `user_holding_a` and `user_holding_b` must be owned. /// - /// Only public execution allowed + /// Only public execution allowed. AddLiquidity { - /// `user_holding_a` - valid 32 byte base58 string with privacy prefix + /// `user_holding_a` - valid 32 byte base58 string with privacy prefix. #[arg(long)] user_holding_a: String, - /// `user_holding_b` - valid 32 byte base58 string with privacy prefix + /// `user_holding_b` - valid 32 byte base58 string with privacy prefix. #[arg(long)] user_holding_b: String, - /// `user_holding_lp` - valid 32 byte base58 string with privacy prefix + /// `user_holding_lp` - valid 32 byte base58 string with privacy prefix. #[arg(long)] user_holding_lp: String, #[arg(long)] @@ -74,19 +74,19 @@ pub enum AmmProgramAgnosticSubcommand { #[arg(long)] max_amount_b: u128, }, - /// Remove liquidity + /// Remove liquidity. /// /// `user_holding_lp` must be owned. /// - /// Only public execution allowed + /// Only public execution allowed. RemoveLiquidity { - /// `user_holding_a` - valid 32 byte base58 string with privacy prefix + /// `user_holding_a` - valid 32 byte base58 string with privacy prefix. #[arg(long)] user_holding_a: String, - /// `user_holding_b` - valid 32 byte base58 string with privacy prefix + /// `user_holding_b` - valid 32 byte base58 string with privacy prefix. #[arg(long)] user_holding_b: String, - /// `user_holding_lp` - valid 32 byte base58 string with privacy prefix + /// `user_holding_lp` - valid 32 byte base58 string with privacy prefix. #[arg(long)] user_holding_lp: String, #[arg(long)] diff --git a/wallet/src/cli/programs/native_token_transfer.rs b/wallet/src/cli/programs/native_token_transfer.rs index 80e95641..314f78ba 100644 --- a/wallet/src/cli/programs/native_token_transfer.rs +++ b/wallet/src/cli/programs/native_token_transfer.rs @@ -11,35 +11,35 @@ use crate::{ program_facades::native_token_transfer::NativeTokenTransfer, }; -/// Represents generic CLI subcommand for a wallet working with native token transfer program +/// Represents generic CLI subcommand for a wallet working with native token transfer program. #[derive(Subcommand, Debug, Clone)] pub enum AuthTransferSubcommand { - /// Initialize account under authenticated transfer program + /// Initialize account under authenticated transfer program. Init { - /// `account_id` - valid 32 byte base58 string with privacy prefix + /// `account_id` - valid 32 byte base58 string with privacy prefix. #[arg(long)] account_id: String, }, - /// Send native tokens from one account to another with variable privacy + /// Send native tokens from one account to another with variable privacy. /// /// If receiver is private, then `to` and (`to_npk` , `to_vpk`) is a mutually exclusive /// patterns. /// /// First is used for owned accounts, second otherwise. Send { - /// from - valid 32 byte base58 string with privacy prefix + /// from - valid 32 byte base58 string with privacy prefix. #[arg(long)] from: String, - /// to - valid 32 byte base58 string with privacy prefix + /// to - valid 32 byte base58 string with privacy prefix. #[arg(long)] to: Option, - /// `to_npk` - valid 32 byte hex string + /// `to_npk` - valid 32 byte hex string. #[arg(long)] to_npk: Option, - /// `to_vpk` - valid 33 byte hex string + /// `to_vpk` - valid 33 byte hex string. #[arg(long)] to_vpk: Option, - /// amount - amount of balance to move + /// amount - amount of balance to move. #[arg(long)] amount: u128, }, @@ -188,114 +188,114 @@ impl WalletSubcommand for AuthTransferSubcommand { } } -/// Represents generic CLI subcommand for a wallet working with native token transfer program +/// Represents generic CLI subcommand for a wallet working with native token transfer program. #[derive(Subcommand, Debug, Clone)] pub enum NativeTokenTransferProgramSubcommand { - /// Send native token transfer from `from` to `to` for `amount` + /// Send native token transfer from `from` to `to` for `amount`. /// - /// Public operation + /// Public operation. Public { - /// from - valid 32 byte hex string + /// from - valid 32 byte hex string. #[arg(long)] from: String, - /// to - valid 32 byte hex string + /// to - valid 32 byte hex string. #[arg(long)] to: String, - /// amount - amount of balance to move + /// amount - amount of balance to move. #[arg(long)] amount: u128, }, - /// Private execution + /// Private execution. #[command(subcommand)] Private(NativeTokenTransferProgramSubcommandPrivate), - /// Send native token transfer from `from` to `to` for `amount` + /// Send native token transfer from `from` to `to` for `amount`. /// - /// Deshielded operation + /// Deshielded operation. Deshielded { - /// from - valid 32 byte hex string + /// from - valid 32 byte hex string. #[arg(long)] from: String, - /// to - valid 32 byte hex string + /// to - valid 32 byte hex string. #[arg(long)] to: String, - /// amount - amount of balance to move + /// amount - amount of balance to move. #[arg(long)] amount: u128, }, - /// Shielded execution + /// Shielded execution. #[command(subcommand)] Shielded(NativeTokenTransferProgramSubcommandShielded), } /// Represents generic shielded CLI subcommand for a wallet working with native token transfer -/// program +/// program. #[derive(Subcommand, Debug, Clone)] pub enum NativeTokenTransferProgramSubcommandShielded { - /// Send native token transfer from `from` to `to` for `amount` + /// Send native token transfer from `from` to `to` for `amount`. /// - /// Shielded operation + /// Shielded operation. ShieldedOwned { - /// from - valid 32 byte hex string + /// from - valid 32 byte hex string. #[arg(long)] from: String, - /// to - valid 32 byte hex string + /// to - valid 32 byte hex string. #[arg(long)] to: String, - /// amount - amount of balance to move + /// amount - amount of balance to move. #[arg(long)] amount: u128, }, - /// Send native token transfer from `from` to `to` for `amount` + /// Send native token transfer from `from` to `to` for `amount`. /// - /// Shielded operation + /// Shielded operation. ShieldedForeign { - /// from - valid 32 byte hex string + /// from - valid 32 byte hex string. #[arg(long)] from: String, - /// `to_npk` - valid 32 byte hex string + /// `to_npk` - valid 32 byte hex string. #[arg(long)] to_npk: String, - /// `to_vpk` - valid 33 byte hex string + /// `to_vpk` - valid 33 byte hex string. #[arg(long)] to_vpk: String, - /// amount - amount of balance to move + /// amount - amount of balance to move. #[arg(long)] amount: u128, }, } /// Represents generic private CLI subcommand for a wallet working with native token transfer -/// program +/// program. #[derive(Subcommand, Debug, Clone)] pub enum NativeTokenTransferProgramSubcommandPrivate { - /// Send native token transfer from `from` to `to` for `amount` + /// Send native token transfer from `from` to `to` for `amount`. /// - /// Private operation + /// Private operation. PrivateOwned { - /// from - valid 32 byte hex string + /// from - valid 32 byte hex string. #[arg(long)] from: String, - /// to - valid 32 byte hex string + /// to - valid 32 byte hex string. #[arg(long)] to: String, - /// amount - amount of balance to move + /// amount - amount of balance to move. #[arg(long)] amount: u128, }, - /// Send native token transfer from `from` to `to` for `amount` + /// Send native token transfer from `from` to `to` for `amount`. /// - /// Private operation + /// Private operation. PrivateForeign { - /// from - valid 32 byte hex string + /// from - valid 32 byte hex string. #[arg(long)] from: String, - /// `to_npk` - valid 32 byte hex string + /// `to_npk` - valid 32 byte hex string. #[arg(long)] to_npk: String, - /// `to_vpk` - valid 33 byte hex string + /// `to_vpk` - valid 33 byte hex string. #[arg(long)] to_vpk: String, - /// amount - amount of balance to move + /// amount - amount of balance to move. #[arg(long)] amount: u128, }, diff --git a/wallet/src/cli/programs/pinata.rs b/wallet/src/cli/programs/pinata.rs index 5bae0a65..948da9c2 100644 --- a/wallet/src/cli/programs/pinata.rs +++ b/wallet/src/cli/programs/pinata.rs @@ -11,12 +11,12 @@ use crate::{ program_facades::pinata::Pinata, }; -/// Represents generic CLI subcommand for a wallet working with pinata program +/// Represents generic CLI subcommand for a wallet working with pinata program. #[derive(Subcommand, Debug, Clone)] pub enum PinataProgramAgnosticSubcommand { - /// Claim pinata + /// Claim pinata. Claim { - /// to - valid 32 byte base58 string with privacy prefix + /// to - valid 32 byte base58 string with privacy prefix. #[arg(long)] to: String, }, @@ -52,42 +52,42 @@ impl WalletSubcommand for PinataProgramAgnosticSubcommand { } } -/// Represents generic CLI subcommand for a wallet working with pinata program +/// Represents generic CLI subcommand for a wallet working with pinata program. #[derive(Subcommand, Debug, Clone)] pub enum PinataProgramSubcommand { - /// Public execution + /// Public execution. #[command(subcommand)] Public(PinataProgramSubcommandPublic), - /// Private execution + /// Private execution. #[command(subcommand)] Private(PinataProgramSubcommandPrivate), } -/// Represents generic public CLI subcommand for a wallet working with pinata program +/// Represents generic public CLI subcommand for a wallet working with pinata program. #[derive(Subcommand, Debug, Clone)] pub enum PinataProgramSubcommandPublic { // TODO: Testnet only. Refactor to prevent compilation on mainnet. // Claim piñata prize Claim { - /// `pinata_account_id` - valid 32 byte hex string + /// `pinata_account_id` - valid 32 byte hex string. #[arg(long)] pinata_account_id: String, - /// `winner_account_id` - valid 32 byte hex string + /// `winner_account_id` - valid 32 byte hex string. #[arg(long)] winner_account_id: String, }, } -/// Represents generic private CLI subcommand for a wallet working with pinata program +/// Represents generic private CLI subcommand for a wallet working with pinata program. #[derive(Subcommand, Debug, Clone)] pub enum PinataProgramSubcommandPrivate { // TODO: Testnet only. Refactor to prevent compilation on mainnet. // Claim piñata prize ClaimPrivateOwned { - /// `pinata_account_id` - valid 32 byte hex string + /// `pinata_account_id` - valid 32 byte hex string. #[arg(long)] pinata_account_id: String, - /// `winner_account_id` - valid 32 byte hex string + /// `winner_account_id` - valid 32 byte hex string. #[arg(long)] winner_account_id: String, }, diff --git a/wallet/src/cli/programs/token.rs b/wallet/src/cli/programs/token.rs index 19fc3423..65a283dd 100644 --- a/wallet/src/cli/programs/token.rs +++ b/wallet/src/cli/programs/token.rs @@ -11,15 +11,15 @@ use crate::{ program_facades::token::Token, }; -/// Represents generic CLI subcommand for a wallet working with token program +/// Represents generic CLI subcommand for a wallet working with token program. #[derive(Subcommand, Debug, Clone)] pub enum TokenProgramAgnosticSubcommand { - /// Produce a new token + /// Produce a new token. New { - /// `definition_account_id` - valid 32 byte base58 string with privacy prefix + /// `definition_account_id` - valid 32 byte base58 string with privacy prefix. #[arg(long)] definition_account_id: String, - /// `supply_account_id` - valid 32 byte base58 string with privacy prefix + /// `supply_account_id` - valid 32 byte base58 string with privacy prefix. #[arg(long)] supply_account_id: String, #[arg(short, long)] @@ -27,68 +27,68 @@ pub enum TokenProgramAgnosticSubcommand { #[arg(short, long)] total_supply: u128, }, - /// Send tokens from one account to another with variable privacy + /// Send tokens from one account to another with variable privacy. /// /// If receiver is private, then `to` and (`to_npk` , `to_vpk`) is a mutually exclusive /// patterns. /// /// First is used for owned accounts, second otherwise. Send { - /// from - valid 32 byte base58 string with privacy prefix + /// from - valid 32 byte base58 string with privacy prefix. #[arg(long)] from: String, - /// to - valid 32 byte base58 string with privacy prefix + /// to - valid 32 byte base58 string with privacy prefix. #[arg(long)] to: Option, - /// `to_npk` - valid 32 byte hex string + /// `to_npk` - valid 32 byte hex string. #[arg(long)] to_npk: Option, - /// `to_vpk` - valid 33 byte hex string + /// `to_vpk` - valid 33 byte hex string. #[arg(long)] to_vpk: Option, - /// amount - amount of balance to move + /// amount - amount of balance to move. #[arg(long)] amount: u128, }, /// Burn tokens on `holder`, modify `definition`. /// - /// `holder` is owned + /// `holder` is owned. /// /// Also if `definition` is private then it is owned, because /// we can not modify foreign accounts. Burn { - /// definition - valid 32 byte base58 string with privacy prefix + /// definition - valid 32 byte base58 string with privacy prefix. #[arg(long)] definition: String, - /// holder - valid 32 byte base58 string with privacy prefix + /// holder - valid 32 byte base58 string with privacy prefix. #[arg(long)] holder: String, - /// amount - amount of balance to burn + /// amount - amount of balance to burn. #[arg(long)] amount: u128, }, /// Mint tokens on `holder`, modify `definition`. /// - /// `definition` is owned + /// `definition` is owned. /// /// If `holder` is private, then `holder` and (`holder_npk` , `holder_vpk`) is a mutually /// exclusive patterns. /// /// First is used for owned accounts, second otherwise. Mint { - /// definition - valid 32 byte base58 string with privacy prefix + /// definition - valid 32 byte base58 string with privacy prefix. #[arg(long)] definition: String, - /// holder - valid 32 byte base58 string with privacy prefix + /// holder - valid 32 byte base58 string with privacy prefix. #[arg(long)] holder: Option, - /// `holder_npk` - valid 32 byte hex string + /// `holder_npk` - valid 32 byte hex string. #[arg(long)] holder_npk: Option, - /// `to_vpk` - valid 33 byte hex string + /// `to_vpk` - valid 33 byte hex string. #[arg(long)] holder_vpk: Option, - /// amount - amount of balance to mint + /// amount - amount of balance to mint. #[arg(long)] amount: u128, }, @@ -394,27 +394,27 @@ impl WalletSubcommand for TokenProgramAgnosticSubcommand { } } -/// Represents generic CLI subcommand for a wallet working with `token_program` +/// Represents generic CLI subcommand for a wallet working with `token_program`. #[derive(Subcommand, Debug, Clone)] pub enum TokenProgramSubcommand { - /// Creation of new token + /// Creation of new token. #[command(subcommand)] Create(CreateNewTokenProgramSubcommand), - /// Public execution + /// Public execution. #[command(subcommand)] Public(TokenProgramSubcommandPublic), - /// Private execution + /// Private execution. #[command(subcommand)] Private(TokenProgramSubcommandPrivate), - /// Deshielded execution + /// Deshielded execution. #[command(subcommand)] Deshielded(TokenProgramSubcommandDeshielded), - /// Shielded execution + /// Shielded execution. #[command(subcommand)] Shielded(TokenProgramSubcommandShielded), } -/// Represents generic public CLI subcommand for a wallet working with `token_program` +/// Represents generic public CLI subcommand for a wallet working with `token_program`. #[derive(Subcommand, Debug, Clone)] pub enum TokenProgramSubcommandPublic { // Transfer tokens using the token program @@ -446,7 +446,7 @@ pub enum TokenProgramSubcommandPublic { }, } -/// Represents generic private CLI subcommand for a wallet working with `token_program` +/// Represents generic private CLI subcommand for a wallet working with `token_program`. #[derive(Subcommand, Debug, Clone)] pub enum TokenProgramSubcommandPrivate { // Transfer tokens using the token program @@ -462,10 +462,10 @@ pub enum TokenProgramSubcommandPrivate { TransferTokenPrivateForeign { #[arg(short, long)] sender_account_id: String, - /// `recipient_npk` - valid 32 byte hex string + /// `recipient_npk` - valid 32 byte hex string. #[arg(long)] recipient_npk: String, - /// `recipient_vpk` - valid 33 byte hex string + /// `recipient_vpk` - valid 33 byte hex string. #[arg(long)] recipient_vpk: String, #[arg(short, long)] @@ -502,7 +502,7 @@ pub enum TokenProgramSubcommandPrivate { }, } -/// Represents deshielded public CLI subcommand for a wallet working with `token_program` +/// Represents deshielded public CLI subcommand for a wallet working with `token_program`. #[derive(Subcommand, Debug, Clone)] pub enum TokenProgramSubcommandDeshielded { // Transfer tokens using the token program @@ -534,7 +534,7 @@ pub enum TokenProgramSubcommandDeshielded { }, } -/// Represents generic shielded CLI subcommand for a wallet working with `token_program` +/// Represents generic shielded CLI subcommand for a wallet working with `token_program`. #[derive(Subcommand, Debug, Clone)] pub enum TokenProgramSubcommandShielded { // Transfer tokens using the token program @@ -550,10 +550,10 @@ pub enum TokenProgramSubcommandShielded { TransferTokenShieldedForeign { #[arg(short, long)] sender_account_id: String, - /// `recipient_npk` - valid 32 byte hex string + /// `recipient_npk` - valid 32 byte hex string. #[arg(long)] recipient_npk: String, - /// `recipient_vpk` - valid 33 byte hex string + /// `recipient_vpk` - valid 33 byte hex string. #[arg(long)] recipient_vpk: String, #[arg(short, long)] @@ -590,12 +590,12 @@ pub enum TokenProgramSubcommandShielded { }, } -/// Represents generic initialization subcommand for a wallet working with `token_program` +/// Represents generic initialization subcommand for a wallet working with `token_program`. #[derive(Subcommand, Debug, Clone)] pub enum CreateNewTokenProgramSubcommand { - /// Create a new token using the token program + /// Create a new token using the token program. /// - /// Definition - public, supply - public + /// Definition - public, supply - public. NewPublicDefPublicSupp { #[arg(short, long)] definition_account_id: String, @@ -606,9 +606,9 @@ pub enum CreateNewTokenProgramSubcommand { #[arg(short, long)] total_supply: u128, }, - /// Create a new token using the token program + /// Create a new token using the token program. /// - /// Definition - public, supply - private + /// Definition - public, supply - private. NewPublicDefPrivateSupp { #[arg(short, long)] definition_account_id: String, @@ -619,9 +619,9 @@ pub enum CreateNewTokenProgramSubcommand { #[arg(short, long)] total_supply: u128, }, - /// Create a new token using the token program + /// Create a new token using the token program. /// - /// Definition - private, supply - public + /// Definition - private, supply - public. NewPrivateDefPublicSupp { #[arg(short, long)] definition_account_id: String, @@ -632,9 +632,9 @@ pub enum CreateNewTokenProgramSubcommand { #[arg(short, long)] total_supply: u128, }, - /// Create a new token using the token program + /// Create a new token using the token program. /// - /// Definition - private, supply - private + /// Definition - private, supply - private. NewPrivateDefPrivateSupp { #[arg(short, long)] definition_account_id: String, diff --git a/wallet/src/config.rs b/wallet/src/config.rs index aa5fe9d7..7e4c4cec 100644 --- a/wallet/src/config.rs +++ b/wallet/src/config.rs @@ -86,7 +86,7 @@ pub struct PersistentStorage { pub accounts: Vec, pub last_synced_block: u64, /// Account labels keyed by account ID string (e.g., - /// "2rnKprXqWGWJTkDZKsQbFXa4ctKRbapsdoTKQFnaVGG8") + /// "2rnKprXqWGWJTkDZKsQbFXa4ctKRbapsdoTKQFnaVGG8"). #[serde(default)] pub labels: HashMap, } @@ -167,42 +167,42 @@ impl From for PersistentAccountData { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct GasConfig { - /// Gas spent per deploying one byte of data + /// Gas spent per deploying one byte of data. pub gas_fee_per_byte_deploy: u64, - /// Gas spent per reading one byte of data in VM + /// Gas spent per reading one byte of data in VM. pub gas_fee_per_input_buffer_runtime: u64, - /// Gas spent per one byte of contract data in runtime + /// Gas spent per one byte of contract data in runtime. pub gas_fee_per_byte_runtime: u64, - /// Cost of one gas of runtime in public balance + /// Cost of one gas of runtime in public balance. pub gas_cost_runtime: u64, - /// Cost of one gas of deployment in public balance + /// Cost of one gas of deployment in public balance. pub gas_cost_deploy: u64, - /// Gas limit for deployment + /// Gas limit for deployment. pub gas_limit_deploy: u64, - /// Gas limit for runtime + /// Gas limit for runtime. pub gas_limit_runtime: u64, } #[optfield::optfield(pub WalletConfigOverrides, rewrap, attrs = (derive(Debug, Default, Clone)))] #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WalletConfig { - /// Override rust log (env var logging level) + /// Override rust log (env var logging level). #[serde(skip_serializing_if = "Option::is_none")] pub override_rust_log: Option, - /// Sequencer URL + /// Sequencer URL. pub sequencer_addr: Url, - /// Sequencer polling duration for new blocks + /// Sequencer polling duration for new blocks. #[serde(with = "humantime_serde")] pub seq_poll_timeout: Duration, - /// Sequencer polling max number of blocks to find transaction + /// Sequencer polling max number of blocks to find transaction. pub seq_tx_poll_max_blocks: usize, - /// Sequencer polling max number error retries + /// Sequencer polling max number error retries. pub seq_poll_max_retries: u64, - /// Max amount of blocks to poll in one request + /// Max amount of blocks to poll in one request. pub seq_block_poll_max_amount: u64, - /// Initial accounts for wallet + /// Initial accounts for wallet. pub initial_accounts: Vec, - /// Basic authentication credentials + /// Basic authentication credentials. #[serde(skip_serializing_if = "Option::is_none")] pub basic_auth: Option, } diff --git a/wallet/src/helperfunctions.rs b/wallet/src/helperfunctions.rs index d21d9cc7..c7be5811 100644 --- a/wallet/src/helperfunctions.rs +++ b/wallet/src/helperfunctions.rs @@ -66,14 +66,14 @@ pub fn get_home() -> Result { get_home_nssa_var().or_else(|_| get_home_default_path()) } -/// Fetch config path from default home +/// Fetch config path from default home. pub fn fetch_config_path() -> Result { let home = get_home()?; let config_path = home.join("wallet_config.json"); Ok(config_path) } -/// Fetch path to data storage from default home +/// Fetch path to data storage from default home. /// /// File must be created through setup beforehand. pub fn fetch_persistent_storage_path() -> Result { @@ -82,7 +82,7 @@ pub fn fetch_persistent_storage_path() -> Result { Ok(accs_path) } -/// Produces data for storage +/// Produces data for storage. #[must_use] pub fn produce_data_for_storage( user_data: &NSSAUserData, diff --git a/wallet/src/lib.rs b/wallet/src/lib.rs index b25e749b..9a83e94e 100644 --- a/wallet/src/lib.rs +++ b/wallet/src/lib.rs @@ -148,25 +148,25 @@ impl WalletCore { }) } - /// Get configuration with applied overrides + /// Get configuration with applied overrides. #[must_use] pub const fn config(&self) -> &WalletConfig { &self.storage.wallet_config } - /// Get storage + /// Get storage. #[must_use] pub const fn storage(&self) -> &WalletChainStore { &self.storage } - /// Reset storage + /// Reset storage. pub fn reset_storage(&mut self, password: String) -> Result<()> { self.storage = WalletChainStore::new_storage(self.storage.wallet_config.clone(), password)?; Ok(()) } - /// Store persistent data at home + /// Store persistent data at home. pub async fn store_persistent_data(&self) -> Result<()> { let data = produce_data_for_storage( &self.storage.user_data, @@ -188,7 +188,7 @@ impl WalletCore { Ok(()) } - /// Store persistent data at home + /// Store persistent data at home. pub async fn store_config_changes(&self) -> Result<()> { let config = serde_json::to_vec_pretty(&self.storage.wallet_config)?; @@ -220,7 +220,7 @@ impl WalletCore { .generate_new_privacy_preserving_transaction_key_chain(chain_index) } - /// Get account balance + /// Get account balance. pub async fn get_account_balance(&self, acc: AccountId) -> Result { Ok(self .sequencer_client @@ -229,7 +229,7 @@ impl WalletCore { .balance) } - /// Get accounts nonces + /// Get accounts nonces. pub async fn get_accounts_nonces(&self, accs: Vec) -> Result> { Ok(self .sequencer_client @@ -238,7 +238,7 @@ impl WalletCore { .nonces) } - /// Get account + /// Get account. pub async fn get_account_public(&self, account_id: AccountId) -> Result { let response = self.sequencer_client.get_account(account_id).await?; Ok(response.account) @@ -268,7 +268,7 @@ impl WalletCore { Some(Commitment::new(&keys.nullifer_public_key, account)) } - /// Poll transactions + /// Poll transactions. pub async fn poll_native_token_transfer(&self, hash: HashType) -> Result { let transaction_encoded = self.poller.poll_tx(hash).await?; let tx_base64_decode = BASE64.decode(transaction_encoded)?; @@ -325,13 +325,14 @@ impl WalletCore { Ok(()) } + // TODO: handle large Err-variant properly + #[expect(clippy::result_large_err, reason = "ExecutionFailureKind is large, tracked by TODO")] pub async fn send_privacy_preserving_tx( &self, accounts: Vec, instruction_data: InstructionData, program: &ProgramWithDependencies, ) -> Result<(SendTxResponse, Vec), ExecutionFailureKind> { - // TODO: handle large Err-variant properly self.send_privacy_preserving_tx_with_pre_check(accounts, instruction_data, program, |_| { Ok(()) }) diff --git a/wallet/src/poller.rs b/wallet/src/poller.rs index 3f93fc78..113f42ee 100644 --- a/wallet/src/poller.rs +++ b/wallet/src/poller.rs @@ -7,7 +7,7 @@ use log::{info, warn}; use crate::config::WalletConfig; #[derive(Clone)] -/// Helperstruct to poll transactions +/// Helperstruct to poll transactions. pub struct TxPoller { polling_max_blocks_to_query: usize, polling_max_error_attempts: u64, diff --git a/wallet/src/program_facades/native_token_transfer/mod.rs b/wallet/src/program_facades/native_token_transfer/mod.rs index 17fe3fd3..fd24c504 100644 --- a/wallet/src/program_facades/native_token_transfer/mod.rs +++ b/wallet/src/program_facades/native_token_transfer/mod.rs @@ -9,8 +9,11 @@ pub mod private; pub mod public; pub mod shielded; +#[expect(clippy::multiple_inherent_impl, reason = "impl blocks split across multiple files for organization")] pub struct NativeTokenTransfer<'wallet>(pub &'wallet WalletCore); +// TODO: handle large Err-variant properly +#[expect(clippy::result_large_err, reason = "ExecutionFailureKind is large, tracked by TODO")] fn auth_transfer_preparation( balance_to_move: u128, ) -> ( From 65ce23b9e1085b01c02a15ccf829a3062e9eac65 Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Mon, 9 Mar 2026 23:12:26 +0300 Subject: [PATCH 17/18] chore: rebuild artifacts --- artifacts/program_methods/amm.bin | Bin 530208 -> 522320 bytes .../authenticated_transfer.bin | Bin 386208 -> 391676 bytes artifacts/program_methods/pinata.bin | Bin 389496 -> 394880 bytes artifacts/program_methods/pinata_token.bin | Bin 400132 -> 405096 bytes .../privacy_preserving_circuit.bin | Bin 516156 -> 518532 bytes artifacts/program_methods/token.bin | Bin 477360 -> 482260 bytes artifacts/test_program_methods/burner.bin | Bin 384772 -> 389752 bytes .../test_program_methods/chain_caller.bin | Bin 402476 -> 405288 bytes .../test_program_methods/changer_claimer.bin | Bin 387604 -> 392480 bytes artifacts/test_program_methods/claimer.bin | Bin 383488 -> 388388 bytes .../test_program_methods/data_changer.bin | Bin 381024 -> 385940 bytes .../test_program_methods/extra_output.bin | Bin 383600 -> 388500 bytes .../malicious_authorization_changer.bin | Bin 389832 -> 394640 bytes artifacts/test_program_methods/minter.bin | Bin 383540 -> 388816 bytes .../test_program_methods/missing_output.bin | Bin 383532 -> 388464 bytes .../modified_transfer.bin | Bin 385460 -> 390848 bytes .../test_program_methods/nonce_changer.bin | Bin 383568 -> 388472 bytes artifacts/test_program_methods/noop.bin | Bin 383420 -> 388332 bytes .../program_owner_changer.bin | Bin 383528 -> 388428 bytes .../simple_balance_transfer.bin | Bin 385580 -> 391228 bytes 20 files changed, 0 insertions(+), 0 deletions(-) diff --git a/artifacts/program_methods/amm.bin b/artifacts/program_methods/amm.bin index da0ed533d88af86db32d731e8372bd7a3e32074a..da3eff23f1ada14a95bc6daf74bb5262c283e2bf 100644 GIT binary patch delta 199080 zcmdpfd3=+{o%f99c_dlBd36v?e=lqV*&d0nb-kp5^M902=*?z%z&vjp`BGU;W@BZ`l1)sj~)D4V?kBT>> zgb<3ysoU`G9xgwhe}WM4QF6*JuTjY5tv-CV|8j<-&u@;Wm97b|R}szG^DV=fAu}tz zL~}hi^~gp}jE$~88cW?xuAL6@>qH{o=yKOgn88u^*^}p~``&O}q8NX5cTT`SEK+`@ zp_UNCQ$n=vJd!#@MPGf!=kuzx%@||z=6}`-5_D!S`t`KGZyd;LcHJ-Pq@%_=c@5Us z=>}t>=ld?J?RMjor`6Siwmpj`8ln6;msiv$rN&kHO>?@@k9zEaBeMM2Ni(qy&9%{Q zsJAoCnW3o&6Ls&JiE_=k=r5X>o0!*5N9x}VM|mo-ovOy^{E4pHMW>M_Ln)}4AS*kW z;hc)j6*N#tYAO*Otx1)9iH94UQsYUi)$IAeWbNUR<3$}@HsZsztLYvt34QGN#r_x48&HGye* zuqL@LD~%OJRmF0DJ#&xXY4mzNWh9Em+57x;V`tH2lOE9w9FLF}-AdrJUKbV>QgckTZ~&a~4piKI1@1 z)euUI3!*~ALJ8SfB51r*GRY-T;)QWWLFsI3z{E?&($XsXd!cbh=~`>RM3r%>v~GC7 zNEVC&DsLLzG4r)QI>?RWnU`3NN-7spd}qHfPJKAeWxapJxPQ!~g%VxVIhrf!FxXBq z^ImLi(LM8z;Az}jG+Qe^L5`q~(XGz4;51|2%uT4{cF#J3r?F|@JmcLlb*@ulq2zMI ztJPfej2!E`R(m)7ihSoEPY zBdwKN-=Cp7ytK;tzVM^eiOdV^ROn6`Fb-67+WY#7QC8VpnMJECwp*z5jB#D%Yqb`T$EEHUYfj(E zYADrfqIBkn_mMk{tH$2D+5aB z?T*as!k#N#wZ`Ty7x!%kdQ;#}5@Y~MB!Z+PU()h6|HbIaBZC*@{Z*9P@An%!$Jy+{ z`FrC($4!b$cy>>*Swo}dyp9;oBuQB?bm`s<(I}-iCWsB2wPDTar8exoW8*{9@VjS@ zSnq1430Pb8^e3!$$7X2GsrI{thsC>DM)#R1!;RVFR>kh=nloWneCFHMI~9%7Hqz(= zMtb}gEvS)@(K6vq>wCm!rYAJeA<7b@mj?zQc$7uHHyQ3pH`|pD8K0kY(C(z)2wl)U z+%AVn%XX2a#>*F+;Sx9Oj*Hr+rQqdT`vq|2D)T^5%-mc*^{9rFP-KQ_UYlJ65=wA;06YO-PYJ^6xNe<|uW z55G^`ZP#Ck`tye0lYg=6Uy1rH!|xOSY$#Pp*Zq=3|G?N<)y(C%koxXVu-4=iIdi$no;%h`KRx`OKzNG1+kv$vZytW1 zSYy}6TIu@X_uxQQeXKS4`Qi78)kYcL?z&yB^|*0>ud(O7_~X|aX&qi``U7LBugYqZ zh-e?XR)~cAeH|BB>z-}T1#6W!Q=BuOnO0dj)+@?(R1BA;n+(va` zi%hfn*nzdm{&R37G1a)E=AcVT&WOth_>-1APfs)s`OB^EWWw#I?Kt~;zL6gKo@bmI`tJHtAn95mwmq`j*c6Dmh~T>EPZ=iy z>+7ZPX>GMw^`aJwA-R?t>LG{b#FCt^Pftx1%q{Vdacf#LX683RZ?enMAFQwn)iriQ;AXZ{ z2p|v1YBUS9ZjU966H-FhlUTG+D1cITlJ6rcjYxf!y$M$z>47xuS#*`nm9InJP}p)e zA>H%w^%t)_w?5hM@%5j(c|?7$lptRmu7B*7k@IogW~ft#=OgPUK5uNTpHzvBHoA|E z2fabjB#jDw+&g*1^dDEON3pHn7T6%&<4 z$<#@?3|W&}GZ?wWXsh4 z<~?@_g);}Xe>1MbR4qR6i%(eAbh#{9H~sURW&J5<^z8f@Z!!uZOxCVR1_ablXiaPlpqENs6|JZdZrH{131 z8k@p)oy5b&%i;GXOXPR1)0_hi1LwJQgcNFO3$c*Uxz0E>y~#T9;QQF-NkiY~HP;M% zzp1%y==)citGL~#p(O|bCn zHBGHTcWI0F$#>}=nk5&VrB;Q=;}{Qp5-3riX{(WGOpGpz0aiFw-($o3U*#bac#t~r z(MLew$7ZS|0T>>gIjWvGS+65FJ)iU53rT@7toHi>>*GdZcAM*6(O=>s^Tg~t>au2d z);Kk1zV$uww&9yw?MOdhTs*gJ=+#%|zF#l<@40*Q{MM1Q(;9oY%=q5C=4&m&4`AFs zpHr^db4$y$-Htl1oLk2_Xs2YI^k>ETxp%h$)&4K*-kp3_;O$i7<%=6E+)KRqrM5Qv z>ko|;L*HL9cD8*d_GP)Z8?tk^=qtfAwTsL=r%dc;nx4PROYHe9(QtIddz`7Yuz z-)a3ZwOB#qH^%deXIqnB)bsI^&n+80`P{PX^JQZR1_g3oD3mVqCckV?al|PoCm; z2)(QI8#7Y?oNMvdhfeVlsN}$iQ@pHOvr7}F_=lyH<(eb%-LY>DzkB8?>)n~1@)R%Y z=~r6sy8GoRUcOs+g?NWkeE&Cw8?!Z5#ny*$K(PmT<}&NuvEA|%Z*{mjmH3Inml~_k z!YRVYk}kheQ&hl|cnokAODaSfVnymDLJ}D}YO-6qJ+)GyO|B9_F6r;2wkovM`auq- z-W>W7Ih69Lw4qj3BL`t{VX=y}<&b6&$WT#xpr$!t8??%wNPQla?LPOW4yZJ0{fIo4 z`jbj)tRIP;DX){(*+0IXTH&M(^|FJ=Lvn!eYlYeHJOe}?hANYvn(C&LQpcQhp4A2U zddlsh+pHgHBlR^GZMI9gQ*XM4CX`GSxal~%T5l@krfv55>F(STJ@qv=JzZ%b;DZ`= z5j@_Lx=vEVgQ*Ad==^v@9KjMhFt6)Y6Tf@JZ#V`YcQx)Sn5O-+`A@xg+XC`v^njuk_0@K~9O^29wT zp9IwfFwO_^$n(-9$P|>Vz;-9ci85()mSu?vR@n)G6B9IN9EC!-$innEyP?Xfs~BtO zb;ec}qN5X>)p!)F(#>kx748?$UInYf^F;-#bL;i(PVP&(VoIT7W{!73gK1q;3vKF2 z9FA3piIq$i)_twOML{P{*59S@#y*Ah zA5{QjMSrx#$*ZHEuzIrFTK)YvL16X03Xr@{5sM#Qc;a35h@zrDRo~mCvVBKY;9$O9 zlgtaB>5pTzQ4c7@W3GLIgx4O%Zx2@Aj@9?Vc8wkI4g`61Cdhp!gWP{Qh;oW@igJo_ z2q}~YQ655hBg*>~!uGTfeNPu*dm$vf0|B%TpnU-C11P5`rzodvZ(K+@R0yI%2o)Mp zp(dIS>d4pq8IOgKk?UDaG*3*3V=R zqr4e|gm@6;A(S_Egkp+Ibi9`P)-&!0V%H@n>-Cw*x-aVG-cAO@X0fijSon#z2y39; z*aJHp=8S_R+}cmgV>_~oaKxd}JHj(wkd+1#J3cg@czk3fAuoEIB&IkqV7e14Xut{@ zu%ZU6r~v~_17n*8#x{*No)jw#p*)205XwWqt!Y5eY21f$|4HnMAbUaD$w{ElIJPVD zbBjb1;BHZXBT0E<6AiC@gqml*nw=>ICpYVLNiX9Wug+-|Ym8Qf4}XW5s>#ALOlJ0M zc7%^?c9<^R5#Dr*!+dfMGr#>se0QV23^O+!$7c*>LFzFbb6D7YIWZk|cR0*Vmjg-G zE9M4N?(QdMGvKTO8GA&fv6NSLD&{QRxbH|b9`61QSD!4idC=>uCRv7^C}1_2GEkXE(?RAzTFyezazj^$?n_p&`V1CD zt63mg9X|Xx7WQ2%?7LW47Z%oqg>6{@@}exfsgRjZVl|E!zPqV8%aDsO9Y^g|J!CB^ zgjH`i&T<#UeVt0!X~!p$!e;AuYNG#_~D(LvFAO(s9q^_l~R90xWaKYV!q z`Rc^;V_$v^WKRpwD9=3n8VN5#XZ~cq`Rq?f`0Zy&>;k7F_6^m+YLlgUZKhNYM90K7 zxLo1GE-*qmCicKhPP6%Pv;#<=y@`Zxcpa4IbON`XgHH9YmcVWOg*d_TfWW^9AfCm` zxIj!g%~qd&A?4P)QW?L239@hAOT-|9iJLw!52N$kK|mD3-(}ao_&oOfr2jU)-pk={K zp1En6L|k(N-Z9Q}4g}UYK>c}Qnp+&apDEJ)v{LhO-9 zxcPQK9rhNV+lgnsUQHEqlLN&0qysV*j9XCqhHD}wyC)Lc=MWw;lRL+Nl#39i<;BkqB@Tj=#MUR>Ia{3;=6}UNiwrI9x-P_ zTJdBan-XPV4}N>zike+VqbRSynDGiwZzUR3a&PB6K(n0HXF%b!f;B`du;ufxP4l3j z&EtWp`Fc&V5?f!1tsl$kqGNfG&Ij7e=Z$CQnMbZAVfUP9c;jy|>1!jV>n{-&NRHL3 zGh_8Bbevun9ml=fFXYvyFXX<`i@5*ng_cOp))xQi4V_-V3&P<2=oX-7K z&3a7%u>q5dq?pM^=y#w6y(F^f4obapN#F_(K!&*9Z)=U{v0a{u-@(0eZA!OTTK(2F4C zFXE&x0?Jq=w9u60mHTR}K!Mrvm7p=>-Xv7uCROV#fO?D-b{9ghW0g~-{@uYQ0xX2uB}kGfCoM_ z@}p58vl_c4wv(V73LEfX5AYz=w-TMMM5n9K>1u$-C-{Z5FUpBVzz1lau+OoY3`CT8 zCf(e(8>(zg)Xn|!1@v6;jJkMGJgJL^#53dMjqtA1LC= z^kNN19=(P_Bn(`^1AXm0m~6)i+qsusfldps8+c~&xnDe^`KWV+KuR0}ml#fZ1@}e^ zWn_zGNj-F=MV#Tw;DQwT6D-9mq&4f*AW_F_N?ac9DzK^w<_9D43r5tp6w239FrKAQ zzLsLE%28g9@(Pq!Sd$vSq%!T04eerJvDG@{RqBvXWz(?a-`P;$wiziMR2jqK&KPG=O zvRco-rZG*!3z04VDSFy3;6*c z?_&=X@||}S^Ddu_z{$K}1m2#5z!{H)z)9#hK;XqV$c@HeV1GeMVlU~=;e0vROAbSM zx=r8)uTH`^oUBZJ;X*pw*-}GUTXX8wZ_-J{dfPF=+My%1pCN3?d#P`=(fW8dVGDN< zePKUg%MT-VN1@ud%~TuTON@s+RGYAcYMM^W+cuN%x;fNbcO^AHeJR?s64tVcu(q{C zZ@Uu_W{heV+)K5xE~1UgqsD`qsTsS6gk#sEUln!BN%%K)RBx*xthE{Abdm6FN2%d? zFpp~G-8iN+r@nd-9Us5xW*k+HL0p~&$${K_CqZ%`JxMyHOL&Mbfo!)(40w=3VqX#1 z&jZ_+;3R?V-3}7WEE+{(Q}jCO&>saQy^`-{`|}ib02Fi(6m;+fMc>`#j5A+`o(h^OuBKVg(q_3NW4(U_2`rtc!Yo8z^KmDC7mv z!BTXv6df!@2TM^75^DpAZ3cX=}0p;uX*q8bjsx2{EH!7i1Bj;hAvw^hYQGny9V z|H^3o9-moe@fp}$Ek1J;e8$6f?ibRLdibvWf|2C&-QtF=X`9@+s{Xdc=LY3atmIPyX~@7f

K)`4;Wq`OrgUhnE1i4l&g{hYHGA& zBnhV9vpP!`NYlAx)4Mk2Q5PBL%Rqe`D{Y;D9Mrno6nMZE4ZVve(vNE0o8cBqE*N^5 zNbDcR>;&S5p%2QABUi+n>H>kp(17HL$%1EMFSZvTkzisLIHQUM&S;(hCqSbD2UHz_ zk~R+PMu<#40(`{FOjcYzjEXqb6II$+C9 z{shsznQNIZd94ofHmjr8>UEiGSTK2w9*kbY>ghFledcPY;#cdT=+&%&UadD|uF@#I zPCAKX3@|B9MWh|xBftr}yu<#T$7pcAC{Ly~;K@JTKY-+=Ro>H;oV39IS@Gg-O=H&pi)) z54JIa%3#+P2LG4c$xB0>oTm>=cAVYEOW8i8&S<$~e{c8kO8gT#nP7MF%1|c)wz3oQ zTf37V`~$lHO3Lm+qBW;o9B>|Oc^R>NKOAmI7BGNHuSp7U$@75KQTHE4f@|ZS4E0?B zu2t5yCnj6<)Zd*u(RkJbnYHwE|1M|1xpu=h&TV*3yElg0C1&QflW_LY)!9jNd5EE_ zF~LbQ3f zOip^LoR7veNGhQ+TZQS@>_LBQMN21c%B?Kx3iw;(^g~Sqk5jW8fTuj*hO*lC}FFaOGR^tYb!LuQbg8EG` zx;~HD3-45NYDyaG$(!&zU1&h~Sl+2fDar(!o+`alUU@oRfjSkI(LX%~Wd-1V@IV!i zl(ZB^uCXnE!U!yq8KiDtl_jo{WspCWhFV|^e4X?Xw4l?ef-Bks+n%b(MBdn`a&HF? zr%f&}ttN=lCRU%+^k7EQ>!M{qFg4b*ikXL3LEB0;fg6^^#x}#GxQCk0?xEq@r>b1!-=FgOYMVG_cqQrWRIn2YyggG$Y#A<1IZ0ruq@@-gY--efA$2qe!55FfW z%esRFJ21%|m}E}f5tB?;^2R8GR_)~8({2`|3jq>gWQBrK2v;lIZ~&zRsyI|439Ix% z9!kO=yB_LS6D%Sf*lKLIe>=YS<;C34kkzEeYLso0h*3K7v!wLOe6KjxTP@s%yw~>X^`zOjN`Dn+3qkhRuASW%-5#q zb(<9&UKKsmCOTX_qC+8wf_*@~tYb0p=Ey!1m&!;^86sI=DW^c|~km6+h6)3IV z(-V31*@@goCxLt?p$~#S2>KxC18lxyA`f;>2qbSiYV3!vj& z0Nwur=>8Yz2etuzeO0_VS_PV|;_j1G7-T#K8IM6GV2}yubUZp8k50#<(+RO36~G~s zU~G3GK(GuT*ai?B$BAf}Gq$Nz?aP^S_H??M#~aU9b1xjS)ulCTZy~m98MbU2w(K}KRfmuJJAFV(IBqjF`mRE3 z*)r_dHtg7OVQ_$R7*65k>=z^%EyL0=9VV&F6!x@Utt zMC*BDX?@mK%!I8t02`sV1Fq7}5cjPQad;s0>H>gZDL}9lAb6Pqml|<)Y{c2I5ogCn z7TOG#c)V{44@ReeDNNzyWD^E~)AuZ#zO)X5)S**&nLFWSUJoyGrhafi!Bxzchus1> z3PTmhkpH*op3o_E>78SKM`@Xm&U3%5KMDskt^|^u!Lc|+OS=l zv0X2ytTxY~*S0xWV6#IHya2;;66W?MIDR`|USAIlc>0a4qqYnw@2ug0-E)Hj_s!k+KVz}$Xv1}1@H zJC5D{&5#W*0MU{#zi*$(19%p|WbZpWmHR1ntF#Fsc`DjZMf<5}55EDNz4bVX!P~6Y zQwS?~q62+Y58;3k+)h~t2a`~eGGUc%?2CiMC?p^q4|S*tN@ktrN=}8q0PUXzNoCN% zSx~|N%ySfGT=@?EousMJ__r526v zPC^)mAv6%JWVP{RB?hU~tE1y|4o^vAW*qa;u{vBYdN4Vb1?V`y>yjZ}Fao>NCqD^X z=YYoxj#&-v=>zxlcTU#h%K@L!tP}77%mJg#fDynmnsrv^0khkH*_(mc0MBU783G^p z2RUav%Q^?2E|{Ln2jJs@33lnZY%?opuoKp~Fa1xz?5XGQfe~CY^6wwR2SES-Fx%{` zm3%<3&0MZ&`;3P8z-X>nJ&F&E;F@u;&4Um$|4X(x*itxtgpfG^A#(si=Hob~Wp=p^ zo|lRdJ0<8J`d<#qOdt3^378Qab9;jnFrzu*#&K8G{;2rklx<{LuD5Xl~88>QH~kUvP=jN&@2<|QnJrLCs-u7 zU$75@4d6StUt{0j=az!SR@*GrmjuTIi~R(S8BYoNJ`AiIj4o1oA1MC z4Q$cxQ}e0!;R24j&HFx#({S-RYW7}B&42p^HUIqsY8L&1hA&d6dGCkRC@#jqV+}F? zeGRh8?~a(}-6VYPD^a~M<1&kWh>ky?;rx5>{x-aSl7@?5qSx0zEx&-8;R`4`knc3z zS4K_82hlJajE3DxRG&iKX7PVhbK_nbzAqjp;Uj+_=0zXj#jo-G--vnNe^U{35K|sQ zu)$+Qe|QPl>3X;R@Jk4NTkkg6tC8@GSBcs4i%7WWu}HZ4-y-^yB>exGJiU=3z9s5` z>~QPej9YJ@d8{Ftr`IJtEST}Idc+}wqKE{c@JDyf;c;)rJcjTPy*eX;WD4~9XaV%J z`R0>EqA5wl!T`|%E#Uponj3*=p|efA@pKdS!kv$JD!oR5 z8@~l^d?4x+AgZsUiTg_tf-(S6-PeRZiu9mDSp)iL=%R7mE3mZ*e*S2f2RflNY!B;o z3gC@S>d{FEorIuFG(w5+c0z$z-;4>DV#1}E@EA;Z3=f@z{!rSCU6Ss49MwwnK&C|J zw3IbQOSuoah5sa!meWvL&Nk~c$uR)o7&e8*H6Q|FraIvN@0-cJ1GBOES=hdE){rU3 z_EqTKXayz+1tbauq;n=FIMaXw1CxT!zhf3A1(*K%xm^1EOX2fhkC=eWYz#UFgU-dE zb1^8&`w(Su8c`N!;Ze`b!nD-{}Cu1 z&*4D%hA_V_U@*n#zUTs0M;GXInJ5b;qk1qJW%V?w*JmOul#BqYBdmc&^oGnu8l?+w zgcXI=K$WY>OvTn?aRYA4w$#dV%yrQJT&`M#I3uw!=}w)HcG_RtMkvd?8lo_{z*Opk zlIe$%89;|YI`xPQp6~vvCcq`zCF~ID)?v#i+Kz6AaSAM>=0;p`5r;hoilKz9OjL?| z)1Kuk@|-RPK7S`gb|)XgY-jb+jia~hgM5`?)!1Ta$bC3Z3gcbG=bLq z;eHaQwESG7Wn9Gc0B*9=#HNvjqD;`d7%<&)PFZ)hjC2Db9a)nqNSO`y8PU%v8)}zG zYR15xS#keKs^uXzA94BMRyfI?bnwQEko&^wX3*{Yo7w!ls2?A0fFMt>brQQ@ogVA@Dh9g)!F3r&tn5)(V6UR# zXQB8kdX(Bxr|29J)raTHI)miVkId%Jj;xan8ZA?&8TqhJ`_4LyLfEv0&$F5$9I4L< ze>Qav%Nske#!{BQ40#jO;Dgp{lGNBLzzVy{cBo}UNf@9Qa zsgjXptR@Na7LDNev?lPDl-T|zP_%e2CPE#yjQTMrP4M1Rgrw5))CzfmKZ(?ka%lti z9QHxbR)c~|P^TRJ$^?%2VpWmXVS6r#-O(-X8i9f|9VwF{rWJmM`(-D|99ORu9w2v$ zbOG_lYKVVBhjKD@eb9Q4ewH7$*{i}W*-GEXK5Tu{431L;|)--VY>(H9eJL6lQ5=sOaf>o zW>*fRpP1Si7b{D{dk&+AFXN0&+)Zo{Ov?d5vju{PVycfj!s=l$K*=yT(obtj8KiR* zVM4;t(u-jBASC~OSbQ>ADI!3t?*=P*3X~#N{vtl87uZjDe()*qrC#u;haAT3kF|Re zjTR$TL&jepn>4`^${}oo%Sr`I-(xfCDWd!{7P>%QX3Hc0ig}b{9_83wZ0YH3gmRK*?jxH zt~JJWhc0lC%Z$XK3P)mmo6p?iNPlihE+$~&!c1l1mk+3`~_lx>=&KGu7s(I;qtg;dp+KCth z8TMzZj$gFf!L=WCh0i>K9gk;RKx3DA1`JlK)2Qk zB9e)8Vgc`6aBUg{? z=mg@*g-7iKVnzF4+>W|H?64(6)HgunL(~ITyr2npcrED8JK#3Y^h132+Y3Ou>Lk;V z?ZQHk+&ojorqHVJ8HnPw_vO|rf{KS()no!OXDbUgw?cN}aOzJ6Vh^o#WPO9?v9-uz zdV<6r628F*V>L7Y+(25wF<48j`h&e|{~CS*_25e!st>oICftK^G56=kHvEi*5C4qD zzH~QSd|i-mU2(YTaBLUJ7h|N1g&6!#I=JEP56#1P|7_QAc~%6<&Q>675DI|53Rz5I zA~!Qry#=W+w=jJQb(zlhS$O9A&{IBO44g3RZb6EK54y^uR`!egGst!sgK+akz<5Ko zl>)QjTgaI}Hi!e2a&vl|KAF>F&ia5E_a9jh?^MI;%}_p0Yp`c)psF!|j>i4##{eJ8 zfOkmgp<{Tk6KCHJr1qQ~qitbe?Zt3E7uk49uGE86_&m#i5(wCGcBJHu^>Z-b+``r zya7ofGFeHNYvPSb)!d+uTvreBKt!%ma6mPm{H#ptF}5)hR_}nTv#Jw~7%R}9V|EKTC>2`KjzVuKd*>dq4GLyC_dDL#@26K$+9>W+CX1V&vbZ1XM_$T;;t z#;xgvz@l5B1Kk3J=|TYa4w>g+D_C)$2Nb1I4F-E}{hN9CRyv}Atzh9qSsJ@nb?7`= z%6PIg)-y>BAD%?@dJ0n+EscHokBVLsRm|q^0-Gj5>0;J^WljZ3mtu55kM{sN_af4v z01AJ$qrq=X`k!z!8|rBA-ajIh=Z_;h$!d8$Y9M^(W$4Zi$?O$G7zV;?KLeUEEnQl2 zmB^JWNGI!c(a8*ncPx~d9B#e>;9di8uYtb&5DR~L=0nWf_#i;ri)^hRGE$~n`1&O9 zSD@yGkVI8poyjvD%k6i;5nu(|afW+ZEc9sH?lPZz5LsWV!MNAEjRIzT>hbv^>%kRP zuMkdtL^}=?;3@Q9k^duN?_hM0Pn^s93IJ;8O;Es`2tE&X767Lauzs?@1~twHvao~)_F|XHh3VD9v>(?b|Qq_$zfLv(rz4hvvVBH%eV zfVK9C7(;=|h~lJ(?C(SPFwMvM;Jv5Fzv@JMatC6QPkL;5QjYoNv)X9B-jGCQTFMbaB^c1wYm$9qDn573|6SG z+v?8>c~13FM0`ht6!r5)cy7HJB%#v45lb!VkdiYk)tB#v4$`x1%NxO~0Lb#kLGd3dnccTYr{t)`yC;J>6tA1eXSF3Usg6OUDuB01rOwa-3 zO45%33^-El8!?f=d*Ar8c^DJOoyZ9GPdIPH2}s(sl3WB?(KjqxPqE0VpqD)U`P6K_{3*(12|0v!Ym2?D)RNBPz4}MoX^9tmT~Dw(=~hE zBw^QY2=ecQNtlFZIjPy>q~YdT$d0I+HD**uSp?QpP_Q^x_(>c-cPmcWUz{gh=p4f0 zVRV>uOM%0I16y@!Zult;yHy$vuZ2zeCgA@Uh#B5T!rf!2>G&KZCSq7-?Vt#Pz}c?T z%^p4qWbK3&24TjI!@>)m3je05KLcYqtzc84NGD5HU_uo-azw#p%HymqSq^F}=bU-O%{zxxn`(MPtBLnC9$si_I54II# zdpw8+Z->LB7tWR!aT11C-w&^TAk%<2hX(X9i9L)y9*(yo5TcjrkD-&$X@muwt;cZ; zVE|PP>|5yMTkS;O-AmXbqLb5b`=4#(fhOtk#|~9vhpP3uWHk$Bs(C0A0?$KYGMxgI zu8}Q5z=W@JDh3uNM;OmfHerk@7-I^?n2Ir)klU7oVZ3h|_rmyH4I{VjGz{Hmr(+Np zx}(j!ATu4zr%fol*2y;V=WIF|@WyS3qk=rll3Q6FZPV+bZMrYn#`^P-PPPQ;WLuC< z_7cvReK4#K!0`?Tz5nD4lp~vL35%lw(#c)|2SkM+Duhs>@#KtiYy{Sc`C3G5AUSRT z0Ww>hgG-e=q`hE&K4O%XD6D^ra6v)Me@VfjkU{{zM`%0L{3^JZn*^2R#hkgRWhJoQ zia>^;RYcYdD(daI4o-BSY6bZY2w~VA;p>Ev)VeTL&@k!eUN~Q?mqGd6=G6D+tNN}b zNHy4^>W{pHbOQz10dPYgWgkv8r0v7^vA2aHqzE{(-L3CKn!f&WJ{tEez^P{e;Isg6 zT7d0AL*ymwL0-b1mjn_n0NfS;wym)Ax3azY=x7N#+CuexNJ|*b){CHh1ioq<4VL0G zycO{e2ptKXj-Y)6?H8i`!lBTU_)zQ#@)mLvs(f2;Tt1D=uCvJ85E&k&O9n4it}?nD z1W6GHgy;i{ULsNs@Z2JPJ6O$2;y08)Y`Z^6M{P9`X$ZqRonA2LP%n??Znd?&;)(?z zm36YZkB7EFk}pH**|s9)%U4-&iK^FcLHfZ}x9f;TtM2xosvm=&c14dLiDA~lM%5e}YOG4!kPl#ckctR}u4`P*9 zLsWkqVIU1iCz-Eu_t#+;+9r;3ZK5x$pM=hYNDmzpsRO7do>8de2cf=DoVpGca9T{4Ds8S1}3V^5rFNstCNSxo@doIo|P!O+m5}S<;hYOWgce(`)@K7hHJMIyP4}Q~b z^POJFci5vZVl&#EG4}{wGl~Er#n=d+*a)#{B0yj$M#tU=YabF<@&j86_+v|uP_m_n z?e?f_e>*Z-;bx0N$JW{B*Q zVL}+DgKn4~EdZ?KJL{2yHy8PPTU5U1t1933RnP!XbN{1)Cfsp;Kzza0JSLt=7vJ=# zQ|sO`ObD{0#HS?Q9(Ys`f)jNu{dVW01$@_MkgJE)?ZN8yJ&N?1?-uf|D{UH}2%Qp? zDrjJRE)9V2Bn>o+bDkgu5iJBFh|U8A&d3siMFffGhKV4u3$p3FIF3-)b8-A>PZ4`m zQ5ZsDhj4s1a2&axu^!LJxDR>9=+KQ&?*gnAAP+2WoaA{noDnv+ z5?g%-#L!BYG3#k@dCv&S(D#c-!;#V;cGU9)p>P|D2X?kRK>(P1n;-xX#AX2^JYSFm zqCbi&udze1u2H)tBtrMluDyjx-X#bEG5tc&LK4{91#WZ z4J%e%q#u?RmF6F^dGa5tEKHlsQNW6{8JLyfNx%n6Bx$rXVA z3LY9*icWx{@S8d9G zL&i=f6Id!MrawZ(3P^bo&EU2N{1EkIGMW4r468%j6`PYxCf||2o-djK(G6ZiH~5iE zhTRjnWbr6qy$7@k72b!ZOeX7r9xIc{E@i&tr8?~AP`EGE>oS+HVDb_@7`=qm(@XUF zOb3H4T@OV&SOe|Q8!{_2N>|<}Z1LG-G9nJ>7QnwYbx5A< zpTu_7>NS~KP)8Y*Ej#I~^-jy-;rz4}Sg`nC;M@?d&T^|A?$d^q0RJm8OAH9u%R#{> zMpzP1e_Y(o*_s24uGM68gZOh1q0=NftWH|z|GiFtT-gM)`Pn|CRw?_4EVKKFd`us4 zY16<=vdLpmtn7&h&!Oyuv;mp03p9}B5mu+&>qhOu9frD7>_VHh3yE&49&*D+Z~M@$ z$Fl~N?%Rg9o%Ef5Ks7dUz~^op8gQooSHkvRbzk@K17^olJLPzB31{+~_mQ|D!N+Xlt@F?OrzAFmYeD;Xlw095ai^WUJNg*l5#Md;~@w zv20tH3^z<{vKy}XH|zHli$vo{b+cYH8ihH* z9yof+1Gg+AL9HOCOcfVLh;x%9(ZD&e9z$gbzr2;(PM;H86D}{iUD~IK@hXQ3G2l=k z;nE>#9n4~uLz2l$Pp^{>Nm-D%3J%F}ldbPp=ru=e7o-BOA>78+0c(wLQ^sXmcG)>@ zO8H)2B{>$Q-^0;!0S_f{F5ZsgN7X{^Z(7KGQJiBt7IJUrLU<3OD379C=!j8>P&`YS z2uKkZMH;v$QbS6eAq?TYaP~;&VYDR<+HGNes6;sTFn=r9t$21r6yhnoi0}roew0g- z0?Oqrf+)u=g3^;HZv=EXHI-Iae`J){0KQ(3UIrqh2Qp zyin5-1rn@cu^SG9HHuqzaSl)uG_39>dMl*fqH>}ysv&G~Gtn2f5_a(_qF=n0=nL*7 zY+*OiaaROe-cNMg6~R7rjOd?w4R<@7A$rSu@ZyL|CfZb7@=#7$dktkvnrZ4#8x6)= zDO-pfyM=2hTYe`liBPEVK$o~Af@tH1FPRAcs*9MvucP60OYBP~x~cxD9aL}W$0Zhr zY4(x{Uua_sHod88QK(Pa$=m#hcV+W4mT8`In+s7Gk(}yrS z50vo64DO^mIR>j5qmA7}jIX$<@udyeR^0Eg7Q68_46Sd+0DFLNF+g~64b?Ah#=Raz z)cD4|ayxTDXa4dP8Xo)um0%mJ187^RzI+vBpIQr00L(UMjZ}Oi(Z*u1uWS+>5%c;b zH2iDCLH*i|t$ziBbfYogyxfAbHn~^~CN2~q#y5&2oWp;z=Mp3p zAVM9M+dZ({?l~@OUSmM(xT-J%Kjz6X25$6&S_b_vqu2_^+L-XedWjD#7#9vDi$%F8 z!|{t;Fa7A=1gI3Cc@RE@Esd(7pogE6~0I<+zM4Q;hO>2`Y&D2rJM5;+Igtf3gCz zoC!rCXgCEEfjMf0#OAv&bG#Q(0^rk@3U;}*vd9Jcu@@m*>fAwyvKkK3Fm1W~8do@Ve(K(3bO5!%7Op#tkiy1tr zTIEJ!e90j$nZfZ0!BxSkN*-zw8L5@#+9M#*ONsvUi-bM%6QUpeEnzQwVEp3JVEp-B zqCfKx(O=n5^jDuE0#yXs;9eQg)i8Uw;pez#=2w!PgkxY0ueK9*^a^x!3%a@+_tu~; zP)wp5?xY!FEAPPGKZpQ(v}Lb)FvfTi25Zre2GMQ~DU-YfI62f{-Gjuqef7BbO+TXM zJAc4hV4s)QsRC+^fSR`y_I%jueP?02KYc#v{(azFCyi9!%mRn`s0tQi11LSmMm;tD ze}m8n0F?khB>+$<095+F1d#Io6NIw#^N*2_gisc@Tp zn)xkg;{(uAFKFi>(9M2HKl;<{pexYNGq-?lKtHd5eqJ39T9V{rOnIlG=;({sV^G5j zza{L&4~%cVP#*^|JP%@cdOzp{#4s81@tZa=jN42MamUj5UdT#_y4w(AdfS8YGADgB zF?!H6s-BzH0LQ%Fp_6HEy9L2DOro23W;N)wE31k{ZihJc2@T7N z+d6TXc4s+>TQk1@QXO}a>hMj55C4!c+{` zaG3tyFxOl==Z6TrLTnJyLSvg;4us&2F;=NG_JE35GEy@5g~LIuygVBjdAI0_EfMC# z`)3=MUr|NxH}1aTT2~QsAg%;|Q*gyqh;XSwciSB?;;O*i2*$!IYuv^bg~Yy$i=A%0 z@^ZJ8Es0iFfG30SN8;Gz&= z7a4?BoGj2j_j{O7GE7@_Ar2hKM385NMRy-@Qli~?jA)DhX#B@j6IR>^eYunxZ;mDA zmu?`&808Fq@NfQ$gn#!MF;;D(M#VOS5|+zo zYWA#3^kd~jt28dT8ac1VU02uByNq2|-*u(-KpD~A0`YV|L5#OlYV1Hz)2cjbeioXv zI4KGHA>0XuxOhe)EZH4)u0Uneo9jwe96)Fu@4hUQ}Fy>%q>rAyr^7q(+l;?nJ1?&Lk`7iEb;J_8)NuG}BD81o>0Q)( z{w7GR%So(cvC3+xL$A)za0*fA8xAAb>N0}g4)fQ4B(bl!0aU`m;R#an&TTuWEdCpU zS%&L&xskGg7%V7Wn)@#wX>W|FfgTErJO}~chI50ujW-t%Rp&{pEOao4X{c>HUCmh(gHviG9q9gC@ePV5Sm zgm(ZLj{W%~a}|i^7C>}WFSQTicWV{B_*V;{Tcz<&v6(=M{V{i4M#*f&3r5k+N8k{FBr^ig2on zlKIT*#CQ$s`JaBV_!6UBr88IKe=uj@Z0(}t2(HXAHZHzfd$XKsM%~&s<5yy_$m$S> zZ*e#WFh=sy6Oxxgg|+#pV54#wr2hP@vK_3l7p(F{uu6~3DzT9Wu7PJ_HG8DpiN4A- zWd)p41tiXQuBCj}os{qHr+iNBzQ<{Y(nv|2k_Egq#f(Xk*4OZT=G z0$m>V`r&Kya2)b>;+~B4RiLRV?vGZny?HRyx4}@q8HRdfhs2GvlEukJqcC z@Gi*fDRC~dZ>J2L#$6g`ahC?})@Uq6lm@Q1+>7fi_u+cWeNT%%5R*QD3qCRv(Z@u+ zI?2!n4i)j7J1_&Mam&Y9-10#up%dH!f0l4=xt|vK* zBzuY^`_jp{)E7q>%aV}t3S3Cf%SK^X*B?Red{?|re4F`bQ1?ZHtS%W8Z6J3Q5wnnz zTc7?5_ana=P+@J?^5M@8FjI{ z0Isp6$c5et_ZaTnz~#N%4*@hX!UB|HyZvQ9WEUbhuFG|eVM1|u!=sR1RZRNHFk5M? zwPyS~E5hQ7@J=DZVs`DHc8<>gFmfJ_|Nd%Ec|D9z91qia0^r$67)wp zl}B!GWa}VNm*#G-wWA^l6gXn-=$lqh1wsx)PzA2WjB6V~kK%sJ`i+RLcuv)qy3Tbd zdq*F4M>&*79hX7#;?$~W;v_2vj^MV53_KemkRs`@0xP2MVjYa*1%+`&L{=cGB8aGp z&@zzIHbho@-(^QuNKCd@@G?3ASVTlc5`TgqBP&4PGO_{=9}!t00xRaj$M#wH*sxON z>)F5x5oC!oy#T4m*9C5PKTUD`16}+2@C04^#S?Um6@i4NU?s3DBxmAW9!w>q7otUw zmhBFka1O;t)i?dQLGf>4ur}&}jAESnY*pOX2RuVkZvcoGJUIts%4Bdw=rj-%_~Qls zRhP~kj3|vm!4Wl_M-9a+Ylo*3jG_vdus}rUbBob|2C%kkArrx zgj^D+EkqFQG6bM*bLfHN=aK+uc?1av3Rt8}wBm~j1=homvrGXf90>p41|BM292dS% z2MaCxcruV{Ph39eP{-!3-CBAs8IXQ{U@PJ(zJR!jt*{~%0{fQ%`?skqbX?V3F!(Ji z6jXp4K62wK{;y;pJV%lY5?`0dw(|h69>}&!Jb`Sx#S?(tb3ozyzNhm2UsL#jkjfv6 z&r|uPr7o>|tB9+}Ap`Ot8Zds~0LUQY;E#!C(!qBg5UyqiI>yzcSmB;q5nF*(?%#^o ziUT$oWRRSgC4=oY83-y!ik-$2(o0eSq*uKpgJ}3%GDw#UlL2{0_a&K(9~y<`h@C(f z-bfUWEhxAL*d}8u^hbc=`;RINu@$U=B7W#&t|5}3jm(Cp`R;SBA%f*a-a>>OhH)?5 zjld20*F3DhO9hcbSvU%Y(g(x60?nfZN<$ZnxkrUDe-v+5pb)g=+=BrI;fL@DWRR49 za@P52olM1~T4a2McYPe;27qHw5NeeQjYG|{LhD*_@&)ega`Ea1Akn&jU?VAseG=t_ z&ZV5#(t?`|B_Hvsg}B%$zD&^@wka%lT+u-(BK#z#{M{|}AsOI$K`q0=0?3+{O6PhW z>O$NFLKVDS#jL&%6tWByvQ5=NC5GFklH9n9I07$NEfC22D}~i2u><0X9r4NEKrB4Z z6Nn*IrJxAH04uhFF#xia!?75nD36c29mbBu2#OnF6>Ij1wLIj@=Z&}--1|84jSzU@ zyB@(8SWN({3O)eAuv=0Da3sR3lM!HlL?E?=>{K{@HJj(3Iwz*W;x#46##|&rAB252 zLd0MHh`;)hK@~ZjX69PtOCy%5mF^o6Mm9W09zD~9ga?S@ieO%Q*&Xop3_Ys9}ON-cHS@Flx2%FB1S4Pxk$ z-JuSbV7q+ z2zk4Z)zO7|U1k9b;zo#IbOEc!jS%&jD1!%4#|52WKvBIR6VWJb5gtf!RLau4p(N06 z0)s=NRp8A$B^UWFc6J&TP^LLgISuEExKnc-avH98otirW62X5OIEcy}?~#WcX9#Dn zk%t-VB+j(L$uaUUSw%Q4rw>yVn#}ewKt!ZjZ7*B*?yI}3!EpQUDVZ;D5Fo?fAS7Y0 zvsAH}{UV;C`?(`~aG>mQerM)h{C33`zl=XK7a<4GR>WDC{Nnr#k7Y(S-1zLsc8RyF z0gmmGD;5D8BRm!q|Fb|VtU)*SLqjSRo(mZH2qY%pEmft+LsloPkBCl017Pbp9UZ|+ z@CV?Jfb=S?NvHqI9{k`Z55D*@TRnpd1^nL-NMz}0_gS5&1E1W<#(~^UaMri`h-~>^ z^zm)<5f_T0oQWq!B+Y#)ZOx5_@!8#L@7%!3XKAIP?$=mCiz zWUGZQB6`4jVb8oZEe8FBtxpecedI0h0w7v+6r!n5jl!4j8EOJq`dK_nKPjUQ;?g4M zd{k4#^%LUMA+a}pZb*XAh-4J~Ju`v9nzQE{)(XM2x^+uoJ03F|DOPPOT`W;~k0XkK9^JAGE8Iuciu0X_eJ3@s%UfOX<(4BXPIr zU^Y!HE2G|QFGubuqjM=eapX`rokWNB;zt$Pz9-P%q{dd#h2wH&oGg+vCK4jQO5IUO zmuWL3SdQY<>#$(o^MllnD(RiBw1nxjBP+&&cexG;Mo7w2w~nJtwem*-S&rg@pB7^6 zq4S4g%MAQ?tQ{P`FLe}^?Un_pzmB8dnILk|@mH>pMqq1cAWy_rnaQEliSe|m5*ujr z^!z{8z6GwTV*7vZJ?FtoQ4WFv!hr(_z6}vAtz!y`uduYN)KtVr*OYu)7RQU=v$Br5 z)GV>Y)T}hotv9Qq0Y0+QUuxF1qI_iK?OJJ>q5i)!v-ja(dVlx-|NQxUhJ9vc&CHs$ z)~vPWv1flFZ(N3CIXM=d(KKS78lU8YcL-1=f_T>KUMJFJbQ~a+qEH7 z7OMu|x+z~-KvUJ<)Njf?STuFF*_3;@L6sVZ%?a-b#~(`|piBs8_AStOncEd{l;$ue zn`ebQN+WSxE^%z%9N%x1+0QJ0UTqd_yq+)7f!!2&zG7^R)r>3bd)#Wv9 z$z!6NazWqSN}W}g*R_qhM-3Bso_C6euT3nbZurKf-l?71OXcW8J=SasT?jn}tfq6U z@R>x8)#B=STqRyZW$o1__8K9h_vpLZt09`^F4Fhk#?_T9e}&RIs+atc2PQDK&%i>+f`Esh>dbt^G3a*i~5Z!!IfWV^&R+Fu_z0{+FcjzsJm1{0LPHCRE?%jyQz2DM{v^nKBuO4;=9X067CUhLaD?R42ZzPU=Az1(>%eT zXY{Fef?^4xHP2?A1M6xrKJI%)Uc%yjNDp(Xj~fVjyyWYR4?~NZtE^Ipt1X7G<4`mI z((zWCaTk3S#Vu4@>z2FKr_~tG6f^+&^f$2CXdqEv-GejSEeQ4#wac%l)`zk~y-)Yb1L+C4Y(RRdn2 zloNX2WZZnxcWCj!4=oNz%(mdc-Sa1R!7JssFw0s6LFUUHfG^}E_6*1feo%$)5|O_! z#Nt@^p@R43RRL3K!npetmoGwleNnav_FLAy!#CFz!z)e82=0PUKH>r*SWB-J?z2F| z_loP4*A>S@;}!3$;M)9<5PUdkky5;=FB-_kX3^`|T@F$7O&D1V7p6HbbyVf{0W&2{8J}rK1V1*3Gbx11ITj`^QI67RvqeN>g&!Yf&3OE2mi#nK*YU@zX8A% zm2fIWB|_SN<9l!dUQomjPaGcaj;W4WxM8CN9V_{;j$#gv=MGnCE33qG8fGKwpxr%? z(!3s8a4f%HO(?ADc6H5h>*LvQR8C_*xdHEQXWQkMk7ASa;WB>9(-k?%NjRN|y2&k)-4tSJGz1`^5ys zaV4xae{~3aUU!%`ELib^&5kF)=7nH0ueVh{uz4`f*=p-R^4(59h_z~(Msb5Q`F zM`Zh#z`4uj<$SJ_p(9w)5KFNE*n^fzf}}0j%wO`6<820Cpb%`vtfx*6m7{{qd_KV` zz~PHzfvLQJD`}|ey;2K4qqo*W5tnFWmW>g2K+CZ9ldQ5TfvjRh+bp>la&Fr;%K>-Bf&-8R&ZArv3f>%+@V{=&9x>9m zAWK~_j|X9q7jN_KY?gtGDb6=bDyq6o+Q5As9JUcSa{(hOr%Sm0bPvA; zN*#-i>cR+@cXD7J5dA5iz7_A6Y1tj?(t7NZX$6@O1p|&%%QULRt9 zF>l;P?(u38wR~7@ttk^}$iuLi64hb4pZYbcP|<`%=Gt48cKh!w1LqlT>HNTj>{a2 zyur2GqG#a3w+b=Vfbhke1#h-I(qeAZ3^)2$gdcn>UJXRXpC3X<+*H zDE9hXD0RLe+Y>`{q{>n_L-`N|ufi~}Bwy^NlfbGzw0KMUBHzc~AH*TIC-8NelGhc- z{fkuZ{h_Mkfkld|v_O5e^o-(~hvmn4RXApnjkLbj{6?YtbK*F(q*#zv>*d~qZM{1q zjH|OvqG7pQtvtbzmud?NSdwXtcUnm8HtTK(5tlfmj}WHGJwsHkgjyU;?ob@DPbwK9 zueKyt$a~=JJVfs=Kbh5`)yfEYV0ziW;a;xoP3)#h5U&)b7|u zUI(^Sfb^C0TthZeI%^9IenOea6K@=&IUo<%PhE5o{*7T`=4oIXcr-=QoU{0!}jy1~!n$BWebC$?+btel^V!Ot-8 zb1`^V@>hP^I6uSc^D{*9bK7E*pJ;FdC!Yt~2VAJ&@Nw@ze9YASl;CGcAV1}Wje}gg zawQD>?5a58W`m!b1NaF_aDJ9z5DI>J(l{0JqXvi8@lgg#bnQ2^(Ys$ z9k&S_&{#f5$I=(zyuiSEq;vR5=fP#0AekhWnqRm*NKoteLe+a5FSC5M5Y!r6k6PYf zNWbk4E8N!*oX~1W7e=VDG=-_@V;!n$;iifY2!Pc(3<8P)VdVqDB%mVtAPC649YH`} zf%j6d91vUubN5>i+ucnx_bk8Zz-`&KU=zJHLXAt=!h3uwF8f#Sf&+g#f^#jWUJkCU zC!7}&e&w^FG+Nw+MPOw;-&2*ul?y9}>sg+IHN#Sj*X3?+uxiaZn1pd1QZ60xKEwIZ z5FK8dchQHBKyj#9@O#k6VDHdWyi>ZC9|Oj^$q^hodz@i27D^{z6tu>DDQz(tk{`!; zh>_UD!@_1!@>Z;F?$KO9TNwiOHwTJ)ZC%be02pb-8~9uu;`}fAy+yboNjSP2$FLn; zjIC*gvfks*py9RHAMK7EL0S2$p|~#?=Us5f2EI7z=Z*Q>;(4;2B9{}JsyA)O6Pq7z z#T|8l4K=`_|Npm!ZqW|k*;AUpFgL8<&@=zP8{)&WA?9a6_1al{TkZ8azU_gL>8YGr z9(FpAZ;)mv8z~zMvax&yR`mAw#?7lMvRTu#EU~VTJxUs~oRQLy*~egg51iX-m4?h+ zL5-@_?sg0VZf9@004ef36}sn)+Cgoxp6gs&4i$2ydq%Q)i;rfyGJ-r`XswG(gsiCwv^EgImRax~O?ow+$Fl|}B0c+@;lvGhwdL>~pd8m?ICbX>?hq-I z7oVC)R3)6X7x!JUtYC`b$zq(6z>a5;@k*kK^+vdDvLh?=BZDJ~)92tTd(hNCgr#@K zAnCyP=imQ(;wq5muucjhSf!ym<|ag<2mLkeHep~dqdnBV=}=Nkksri z=P$O1dK}>xo!%1Dzf%@^YeLd!^TW(oo+-&Syqw-rIC>5AS_?rc&{3>wx~KDH;?6~^ zB`zA-XjO_^_5wG$|;2MYvJ{yK~|j79cmVgIbH&e;;{K=_)fPA2m4>ewcjrLS>;tb&iooy z#SwDlx_4oWlCOmXv8oVIXKfu-IN>El?%-AnDo{N&YT2I|wl|=|vun3CfStAmcEtDg zUpwMC;k}L9nUZ%gFnCW)JELsjcE&{DR7A+-0Bb_mZ7g^B2WnGVd{m1pD#qedaVyD0 zCYbp6|H4FfOTAAr)_VF3#d|Xr$D%&y7WYv`N+!ZxbR37vc{~&};x6a3zcR6Ol_h@( zcR6v%hmd~G#03ZIe9roPUwxCl@4Yz_l~pcY`QlK)MDL5O>N65;_!(IWGk(0tqyScYK>1df?`aRGM*Wa4P&~Mk-6{b>?>IFl-kN!(SNbe#RAmz^NBP zZ_3CbS6lFmFCyZ*p~dM4>#Q*89l%Enb~zYT;b(?+$DGa_jGmyI^077eI32F0;Nz{d z7X~B5+)!Q^gxp11DEYUIYcc5}sm8mDPom2}z*tn2nrN-;@jDP*!$r#DcE&f8rQ||r zZij2I7XA&_VnCWZ$v|F?8RaS`wGcXv?98I=@GH8j8G@nznV)`j`=1dmya~d~Z-MY* ztSE&m_y36TFZD70|BEocMyTK>7%#d7#-muuf&UHR@BS|k#zJy{?)xuE{LoDh_S^#D z2l$u#ZcSk^H&IUhUts+Ig77`{5Uvr2ilzyKi%R|?#ki>__dj4PCay>Re<57Nr|LHu zc0F%`@uRmOad(!oz>hG>!FYGaRwkbo!c>XgDnBsHQ*_LcXKZMa-1{H}%DRiPBX?utUMz4n_aP3|T5o6Ktxnv^sji(n<*!Ak9#P zVSzy_sm4;I84AYN9&mgN9rLbyP+_h2;DAY2xVX^G$>?Bc5qj0Y$GqIh5VpyqI>N%B z&Qz7J<_r3T-~=z`Xb!9}!gmEycn=CE^&BDiNUY-FPRW0z`WzuKV$h#b7G7c5Fk{fK z_->C>u41K6IwWOWEL~8nr$(3mnNeyuB#XIH7Y>O*4PW$Msp07+r3(uOravO6p)~O~ z9=Y)HqzehZnEr?z*kf6-oZeccb)!h!HEoCm_ei)EYt1bipZfO_A^~R~24Rjc2z)YI zXU&x7ZYmO~|D{*Loi?a&>6N&PaEi~E_#0NOZsI@36bH4=C&$EJibD%Q0KO7d->O{` zm6wJ##4!r1ZdE)E%N*5oFSkAOy5?OpP1)99m+BQ#P~;KzS31C;!aOUM>tNq8VQ>U5 zu)0e7U=?N;ZqV8TY8XCjBQZ_e#ixP!anpiXpI|FDpRU&3jRg})HN!8SEw~KooSLxg z5AJsIWxtFt$b1R7Tm%vu7rp-K?`4T8^h&e3^*%Jt*ZTyUu_J6CcPet%?du;e+G;^giYoXx}`(N$XO&VM;MGevATtlO2-33=U&`5{eU3 zVjT8MQbi4}R6NrV#MD@YaCXOfrHb{+pRrQ~ACa%vNdbO{VL)=0F(_g4NDW?DGB=p+ zmt_lu+)){y=)1=nQ}UuA##|9=irpa>headu$d2zz1Lz@R{pmr64V9o_v1sZOD+d4c z+AJ0cSJGV8weKPB`^h>ypCg~i{Hliq=lO!GDC_%-eCfOr-(@aj`5s)fk7Zo$baD?^ z=m{~)^WA}|F@?XN#?a@nES%Ev)h5vpD6HuOn@bFGojzwc4a&!M#u9u3-#iB8n?&x>$dOpj+^sI!G?kd?Szs zaw;}sXs$FyQ^WjKDb4s<4VjcjfE@!2`(E9kJ8%%Wga zZZVkAOf<^p0i1F|SbbybH5ij=MT2-5DHkszEnsL6@8|tj4PFrqMr1NmXYtklNlHr} zKNb(AwFgQ|e|wqJFS%eHJ8w1Unx1;;jZb;wa2&_oLkpuuJG3C0IZjOsACm|zV4H8qiLENm`Fk6)ea6(z;`XMfOpHaW^$AFgS(^ixl;ci$#}Nn zc}1TJMc>~@yUlpsAuFza96Ql7bj2-LT;#91^ug6ZTy|IAHk2`Cq>Vj!v zcluRcrpIA)K&tbS9CTuM82ucB#(4hv|t{)#KdgbdQi}p9Yv7`ecrp zPHwkm(VKeIjT%2JhjWro)BeA!)7otZVpi)q2gC4WBNQER90@Gfckn&k<>gsB1>&#j zczWkwE~g2_>H)hfw2!*ZRh#n&j@uog5p&h8^>SJnIehrb69-DqEUDA*96uG+l+2LPs#JtQFkhznGAF#&w)jKUhL}X^-snI*3k%C_(mNiFHm8r zI+04}so$ynXySZzf)@8Mot&?Zl$0r1Nj(>+%Oqt=*61}0)Gt+oPOGVMk@}^5C1@PH zV6Tq1kl$79%Qz8Aw$X%V)sI?$4Onh3!+3=DEW`G{FjU(N%B;<*K)$82j7B^M!zIYq z*LSWKAh=g&Gy&+vG>15Pc5uqoL9#E7iT>GQKBE2d?&gJ}O(KX5J?f2Sd0< z$m%_uXUgx`F*C-+cI3h4Sm2xS=4JjRab{(fx7ruN_^=FiRrx0X~SxDLH*3?kBrRE zsP{|Q_Y#ZT3kTDZm*CK$PHzcXJM@xTWfv#M7NqGbURKLBA*d-OgY}+k`7vxGkIucK z=JplRS^A#C|F({Ap`>TY7jm>Jn~nHCjri*_?nn5ffzy}z>{r!chO}n;sAiq1U9D%x zQm&@-5G=5tgR<7VY>Sfh9y;Fey&rTuz0WrM&Jo_;RN&uBVjTb8P~c~!0-yf_O(<9U zbD}`UoR>gRKS`kZKhoiH^@!*!UMti$tXFe24hj+dO@i7k8Demmf;Qrik5o?=sozF* zkH1{xrvFrK>gIrQJ2%5U5Xe+rF>3xpKet&8R?XVz@*6nC4-JWGgsu4@pyY2)B4Vr}+Gz*nIvp3PV?1G-- zXyLH>VEynrYNqvXkAHpLJ4gLTbYl&kz@8y2Q8ipi5BCg&Tfq;4accy$9(A?cK7z+x zt+$VmF0!(omR!3IwRB#-L7_l<@Rdu&C*{l4uwT@mXu8y)%h=Jd9w}*JEk@;#_#}g9>Ym| z(PFiTG^G*8)L^^xWBXCzF?D1Q$>Y%uTMedwit#P>lHHiJmN`%fJ--#t!Sg$R@ zx)tGsi^b^7K#DxBcDYMdG{$SK!P{2HSsih++@`TzgTC}%*1Yc6C*XFnrus6K`nLH1eoq%~XAnE7{ zj37}jP;2x#WVM z)j{*b5`}$<)3^e}x`JkY3HU>p^o1QdNL#*ywiY$nR?_J&)sJMPx{P*yr9NesZphQr z^=k}q*~Us*@ii3NGLA*b+nkFA$4=oyx^ZtD?aA7QrtJ0wtVt5zuE#pPF<9r ziDI_*sPMdcwN)mkXVnp`=4b{1e6G~BxZ!0Fu4u%m)$&}$K<#~f#lP^bSPR*sJ=9(x zz8yCdo#*3AIH6dRm5MC8IW_&aI<2n+u9n{r{@`O6yQ^3d)mRRMIx5wydN1x>gY4Qc zZ?TCxviZ`4ZsX!t`ftgHc?amkzhV1Hoz{;*kyhX1Pe3XkHlQTm(#Ih-nf zRR@PR0g5Fh&-tD1rWZ{KuBxV<7tL{d>=@0ysQzKl6p>5noKT3K!}i-i{^qV8^qX3) z+CM~Xixz!D6~C)5-GdH87Qd4sj73|I7(C6gWcnGtU&MDZWV$cfNI&bfmf$zI z_J<2f1Uf&?ct89lLr*1RSyC~6J1H+x+iC#DNXkJTuU}CAwZ?r6)^A?{`7?Xc) z84k|iR9Cq?p~KU;Q-QA;jKe9R@frBYKz_VU6NW#<_GocR&Z7=%6UEyJw{w;p!-bc~ zUucWLttyYYl6E}G;asWf$BAd!j&Wi9M{#P-C}`eM6dA2;4CfM(WF6&lT1UZVj-o@+ zT9*V~tZe-#?D36)Nx+MO2b5Eq^%tYpsg&GQ6aF8ShI2UKsGf>)iNbMRb8oHs@A-R zKq0#uF7Bz7UWBi`9K|_Z_&z4p2z~U0KaDF!k>>u~Nb9a|PSw_`MRMHWm6e`XG32q5 zDkd38#;l-Omh?sX@_arZv43{eoEPz(qF2K!Y9*{S)`0CN;Vv3*?&U&spw+p~aai5h z_<{ZjcEgRjew_}bX$>Srk4>VQG_4u;X0S{T-KRTDLrME-d7(e$o7=T!w zqVGjZf8U!Yjhrpk&>8)7=nn7vw1MPq39T(jm`n3pYAN9&lJmHZr?<5FN!r~~TV@v; zEqfjfX{F7w9~X#}>L*$mI+q4_PAeOD+D3g=k${Z4Y<&i?d4$@HJ!%a_s7abt<5l?J!bIJWsUK`b(6c zDO$G&$^W7x+G|gl8eBioUK^+;NEBX>FSYyPSxV*A;uOm@1J4(z_ib7>?;8B}<@(aw zv=nJu!FKXxXw!=1h#vzFNy$G~E%rT%*XLk@T$*EZR0b>9*26dYgv4@ zkZOOlIJMWK4qFty>w^oQOMk=H9+3ZcJFb@A2levVqa4nax^J9#rhPV!->(JLr8?$W z#<-IAA@4IK=sOSeS(RlB?e3_x;pzr5Hbxf+=d7a39bs0vhFhOKhI(geZSDd-SQ;Nw zoKnj1QnsC~Qu0e}HjbyjtA%}h@%rj<89DouZB_X4$Qk4>w;FrTRk2i&sU`9m4(Kt4 zPG*AdLN{l>NJBemxzRB&)C>De%sS7fCH;Ep{{-b0efYAzyOZ{=Dn-P$nmnDswl5$r zAqUH-rnB~qAw28!{av)iAp+x+lCf0NL+joS=ojZ$3mo=}KV8W%o2f9FX{T#}br3%x zuS4mxO}PcGpp*jFrr^<(*HcTBl9f{~6p5Hpx`SOFi`4ez0G`i*a|>uiPYAk{f!C;} zr?yetd{S*4EA06E@-g|5wjf=~`CGIuTiYrC)@P6Pf^)7-$HwIMv}s%u@WmG@%+Y=} zMDQ&d*Gn5_N*f*O1-i+4w$jC3+Dbpz(%z=nW^bi)y|wKw&M>TRILzhhC1PRfEVfTH z1C_URU#^BFI7$0$bh?lBu3f$#HI_E?)e2(2QpuIDxXa=Vm~&#CfW zZBPBqR{xWh-lwIvlFa=IrD_ew>S1#!(v>_18&0ZfaPMo{GLR)w@E~orfnN@4#lkcOIL9Wt3D_Wx;2It&x29J`2_Ygc_a&-xvm9qC9ed@c{SH zJ8$22w0f{MFt!s{%GF1tLa?27*qsJ|{R{=&uMJE9d!Y|XytXpMVDVWmfU+Pfj-dVD z(aig`0*Mz$b^3lSGrS2(SgY>z&xO(+&@y9hNc3VC!>I0in)v|6nC#7ucEq+}PxJ*W)~zXQ00et1NO#=u1iKho?6wU_)AIv>)yL_;AJ zr5jWP}r`|QQ3mv^Lp=LTCNyKP@KQ( zD~4+&S}R%LSFx%kfB)hr(SVVEd0~+h^wOWH_edCs6`Wf0_fYF#_L#1Y(podS@Z#rP z);ktJ^WD5gJFFhQcHf9Qz@E1L8so-lgE=)Y?EavcW3@f9F1w<;$7y>sBc|#>e}iWj zo{g@Slob2fv3i1*5_>~p9XsqAodkd(X}?p@WAFk6Z%P=oeoPx2jR@FlHHc-ATWg(L}9;*Xghx3#Zi+wFL$(qNw#Gv?dADRL`5F zO*1+(FIqqJxb`43Fp0;eyx+S>)Avu)tU{HbpYe2bhW3nv%TA+lGo|gorfMqX&C(J% zp}nQ4srezlg|VEbupGG5KML;vjybN#E=8plx2XIB`RK(gEh?nCr%bn{((YM6PgL+* z3e_MIDk5i7@-4sNQw_o#Ps!JQ!xBxNJwIY!>ZA*g{F|XAgJ>yw&nL7ht(Txd zNepe_zNatTYscisda*W3rni*PrRfHV+wet7hpnPkE_y5FGJRewfz6-Sd(_sz5EDV+k3;Sp=$kZ*#`rN0rwOWE8Xg0pN#|f=`ED2ooNEX-!)i{cJ z&VfrH#)S1WjM|@uewga8_q?uWL1O0ZJ0dk+(BEkB94I5y2z~Gv9hzf`L}@qu!W``l z!-=WxOY4fw0WrNV9V*tUcp(g(e)@{J8ZKWF46_fVA*EUuuFNs(dcY91`(@|s4|}bL z@#%%o>bcbU8Ew1K;^X?o zXSDAvMroBLiC*0`46zb~LMoMM!mu^p^3a_>+NHo7}hL=XZ zs5)r=Qq5e9-T^k_FqOjDZNY3zl?=5`*DIH5s#;g@`7WA+YL;n<#wzx$3p$r;)*B1D z>AxuGA?;s+)(&g=44V2PXuXW{vSbJL*R_Emq7&uVH)urd_S+N5{Rj@}wqGqR9?BHb z%+=aUPNNJqU--&RBwG(d9%O4MJH~0Sb&oxP+%IblXyi+pvxTsb))+58KCwioj}7^8 z)-b+D=H>fjuwIVf&u7qvmrPH_I-Q2T42M%7w0#EoUe=b~&}_tiYIg0Kn>ITa&EgiK z8=5`0Mk-;*^mLkChV>n@*@`l_w!*doyFqKAp3O+tSF|HMBJhsHU9VOW>@iK)aFGxS5{T4Sx1Xd`%*BSf)F zh|gz8*CA$h7Um<4&_8F&dC8x%^q>t|fiV!4fxR2Glv`r5Wh3wx-Gm^{-=tv^UBsHq zB;V`Wcz>k*W(-x4b7>~!ZN>!5=o^)7#2%>u>1jHw z=&|!HvoUmI&|A=G0t`8`-;!#@Va=RLJKxgM6C{GoxlHl_Duk(_O_MTQFmw49bXAl- zgMM$(y2;UBK77)JHAnIln?(X1n@Q`oXg}8t;>2>T1yyd<8vFZsa;w=iq^s%MTBb|% zGrKK+!-L_Z;aG*AFvJj2%;rIm!ndW~#-N);Ti(_>#L6Deg!ytBl5Zf}WER!Ft&KOe zh8&gdR`sjQoJDiDNmmJeHmcl)K`lMkc)Gkzdn$Grgb9iO#E7Y1v}zVDsW7oQHj55d zNH5D_Ju?d@Bm#6u`|T#tQf857JDL+MRK?Kd?Q-@ahM04QS=*&qG-8L=AyoElIu7e! zCU;*gjVgC&Pr1ZEX!!(sY{jB>JcfXzQ$tLwM2XBNXta*`rfg*x?bJ~$9Qq0vvhu^DLz$CQrs?o$DSnjE)z-g(z6SzTcQ=LGoRQ6DK;>s(U6cfYf=+(V)Yi*p(}efT9zjT!ycfWb-S5G)8u-xM_f5$_ znJw>|Wx)8O?`vIp2+WSn;x3C9YZUUtvacw=k+qR%KFIbzviUQ!(6xBHT(8xaAk>=Y z!(NNo-hQ7+^<^`bS8AygzemfG1OVvJJthJWTF)MH^dM)qKL;bEW{*i4>r868*BtEd z6x@5Ybd%PGjq)2^@*q<-m5sjcHJjpn-D`5Zd^SaXV5*X1v#Iw7+ExQSj&HZRv7!Vq zT=W9zv`Gpyd5VTq$~mSG^~y?<8`)1$SQVTQKMkt1bZKv4Fkx^1y-Q1^xaxq>G^Dyt zD)gXz+Lv0i;6%3J&20ditcL7DZb> z(pLD_Z}L6{?Iip&H2-6*e+D8L{V(XESn2aw-yv?Fx6*4JVRhK1UNgM@1$+!jr>b;` z9`uRUP2<(TPkd4DcSJj*CJ2WsXSH!W0as@jE0AV--lqY3Zu>ulc`dto9d7Pn!sT~e zY28ss;(4IHxOEvFJ_--Oi0B=U!D$N@jg@aUP?{{~vZEOO`@*g-S0?pw4jBWvjJx7sd$&XQ9BIlE6m8wl!^yhV|xQJbXJTeRgg zR?JWVrt5FhhBFW@0cL%h4xK??L{913)c&lQQ}Q+qI&0?SY@?n2oa}9M(w|dWLGJJT zWh!X&cV-!zPW$~iR-MixC*wD;#FmqW;|rR+p~wAxRzRAAd$>;FhrMg2>$A^k4I11f zI-m2A1K%&<$H$FZj(#+uM2(F^$?vgT$%@nGZah`f^>@jSoI|w#lGeQF5|@bV^twW2 zDtUMz_Z@Xkt%DIOUX> zdg)d$P^5dB)=TG%mGIFLS(9=(p9umK^13{KlX)e3iVWmV2-1m6-*_X_q}=Cq1(k6! z&ri7;K{-**Jx1o4l*{>AP);^DI!lPe_SSXCZs9Na^DB0IqYNZY%9}kQbg~Dbvd|53 zBrANxDDzeQGCsSJ{?Gd9ZkyRK*dw_k>PhmL6@BS|vR<9;Y7-Va*!azeno}4lw;jzBp#@AYUA7VkjGjz9E)1R%PtQ ztdnsJ7di{AbYs?#cz;%=gLWpcHWDt|LFW^guoqDDjVRg4GG)%02pZvJ=`u3SK}(#> z(0Bz7s&KNcG6%IyNDQd0ERl8LIij|j#DLo3lJE&8f!wqR>Yc=dniXJWNdaIdlUOqe zhIVR`ST`A2<{-C=&Ek$47T03Q=Q6>j1?x2~_6L)SdS3|Dv;d|;YwruzEotnSW~zF< zrX|CX6ESLSWqMp|Hc-$D*0BM>#wF6SHf*s(-`bGU+OqU;t7vexTszDeu8(NTmKpEZ z;G|P+d$!CtQPf;t(E+D>CA!%W8$IFpi{ix7m?S&cYDs@%W-;6w*sD$Ydd7j&iyooZe6pJA+IU>*3 zS*j%K9H~x9=L-EN@{}xDu4J~%vw84-6HJF}Fw@9<+^BS_Fdec%!yJ`NGxBEE<@q`o zX-{xVAQtQ;A{~wNCmlGzS(on4km5a`_N?9lsz)9q{PTujHZn|)9WZ* zQXhTyUW0zm2cjPaTi`SCr_24>HoUFLV3wlUFC!Kdw3bFZ0F8u*cYf2g zRQ3QX;H1Hl=~@aK!g6~_>qQdlYBGNRVf zl82zYL}dATs(6TvmyzoAl>9JzzLmhX%4jubE$TF}{Yqk#{fcZOr(Cajm_4Ir2&s5z zy@O!^JOCrHP<8`Gx`6Gop2~&=V03s`9Y*@aVK{>7N6GmJRFgod$yzFW1R7c5hc^}; zVNL2IYkMsK*)jsHz=_We-2%1D`D3I5ek6>-Wb3jR3={6m-!1mG`dRHV`Bp)xo zO@*Ub7gr_+uR7we_58zYoBM}uM||GA*^VH~6uxk%sD7Cdwr(w9?uq74KFlNZo1&q zy4az2-y@sNN#fs$lWCrSG_H3{SRBxi{cwr2MqK=r^+sB9U7By5k(MF{KFR}Dubjlj zGZ#956{VI21ST&~$-)!F_KvJQjq;|jCiP}F0>C}a1Q1TM-#M-;sIQp99y4SzCruBV z#{DCq7%*#0o^Fa&L0cL$on7_k44J`(#acngl9JgD+uT|y7}c{3; z1Z$H}*Y;(zZHL|Rhrz$6$oV82+`<6LIxDu$pMaQO&VrcZMZH;&;6J1U&o83YPXePL zR39{djyK4y=x=jDy?c;8VKz&z@73A?W#6}4-|#d$8A9cklhf;ZyQfv5iMNG z21J}gJQC@(cs9eciHCkz%I=To?Qtp5h(Cg79G*{l=-y@Q_J}Qr^LpMho`*d2@-h}5 zU5j{Ar1QTZ1Pj9Mj}vLlJFF{(FJ~zct>?IuVMtwwERJaFIh3=U9n@TZrwC#bn?Lh+ zmy(P0wwj_e#*_c?T6oB#mxz&edH{7=!Q$1PG(X;xWOws&3twcoq}bu)lz4!yy~rY( zEAw1R0U#d$o}A|9AEHWcYO|WTqUHl6-bk+_CyiOn+FE_cYe`?OW(m~sB^GDBh!tf?*1@Svj?c#f!N@Si>If3VSgi3@o#JeIW2!{|x z3`_<1s*Pr6Iu#Xe| zwy-`sD^V`YsJGuePKw>iavS^sAl_hKgb4cl6;|A6{KP3!Cr`_tI)2i`M@EmFI+BLI z$~@Z4MfBCHEIM*>!DExA7qp!`MN!;~T}lkfHK#5cSVH3oh;k;H$?;@ehvd~r=8|kC zC((EgedvbdR4Uob+9lQ^xkUhU27Y7j(O)`?j%{YGI`n%+j!v^uF6e<^{cng5q7HAc z`x_KwN0O&`kLpl0biDce&v#l;PY(2{jz1yFVL0i}3y0f-#G8dJt zXZFUkpRZq{B`?u8*sLI#!}n-rMw_5+EUx;iE2Rdnv8*ObUT`Vx0+JWvx0M>d#xSRT zjYW1if&9dP{AYQ7K-`Ppj(~VMZAGFxq##pTDgI>Y8PS>?nV%1)xK8=0$d$7OQl znP4;M%tm%c<8es7Eui!)>adAD+@b=>_XQ+#9na->{xkLEIQ(_ik_NoO8dBctECLtH z`qAh{M_y;`smtrERg=Zb>(`dWYoi9Q<4!cQY-EVPWCvcdR|6AKuAW2ml`pYgnzn8w zeY=L;ZN0qGrDO=^Q8&Cs6Wno?9NQ`MU>W3j9HOmJ%uG(Fm&#aHE9UEkt6f-IiJjm zIP)9Qmup$O#wSo&tANV-Qu9~XeGN=V?mdK1;w!9wcy~V@+y@Au$G5VCsH50W=P0Kj z@ITmV<-%%Ozm+9vK`+t4t?V}I-7j$g=iv8^#?KqUJxDuzu1>u#El;W!Ka4m}TLHN9 zfV+$^4srhb;yEWpSFq+oj^3o=3rI^#SCpFX>sKBaH!BZ&*`>_>!Kutg;Fa^=a}nss zN2~)q_c05hLSl`W()(rVw2j@Kunh$`9sY*E$CdfV?Y8^8lb+kgGUH94LL_nvUJFcu z@Z{F9vLSuDjiqYaUZ#)=)-qz|nmW>ODlT0kskmVcJzBw1S>^Xm@>XEtY%QaIRIsE3 zXPLy{833mun139D(HETbX9a8XhzYa;i476Vc*PCz14jIGTB0%`JyB_o&=VmJ!Go|A zVFYr*a!cHE2g{?z z+nAFM?P5-E2h~aEcd?3g8(wiK0|9gdzF07a#-HgvScY)@S{J`O1YRVu`SkEREVJ#d zS6xb5(&U16QzqxPGjxaWnw0GI(u^ddF0R*xg*p`O|!bp8FrEYhVfT0^@~<^R%Hx*>fnv%bqaGo<>;^rAYK*^t439ND%Rki1V}+ zDBKm#&3{W&)}gQm&!LE49G3N>mP`t_uiZQxg-FsfCG3 z1V-bGRgqQ z=~sv+r{4xV{~Nx!jk26?C>taghr(O}deT4NXX&@i1_)Ql%MltNJce2FoqV2*-DswB zXyRTLla%*rqOud|jgT+6GUqQG+O(H-vaDW{sL-Sf)@F2dFMC8g`z8(lfW>IZ^XZ8X zz(B+|@i=;4{Q-Mgd*?06sbr(H&Rb|xB})oF`h23S9?dNI!05HT3d8KjEi|!;y^u10 zt4kS*+*c8}i=tSZ^=Xa#U{d!&|IDmrky_Z>^lUYY3h`jwgU`9=y-jacvwP!LARZ_} zqAFe;Lgadi--ikF()9)gWB0Lwq`uqaggF@y-4V<<=ekqG>8E|{?gnQ11f*FxCb?9) zpXF%D75c~f+0!cjG2kFp=~F!wbz0Rkhwd$%Mk3Jbltxh{j8A*bcqEV0)@pW7+6I6G zlJhXSVUEZ_?-ls2zm!h*u(>_c7EGPsejA(x>9NA9;EB-5S5w z;rAB&_Tae=aQqJ)6Oy1D21OB0AEcKLv#3$e?v^8&@Kgaae&W=Eu?3TzBk+5}4S7MB zl=Ci_u=(RgP9B**RX`sFY-m89VGflGyD91j+tgs>y8){ZT!!wX(Enl0w2F5r^?z8O zHWkRf7v;IeNJ9vW^VxzKzZ1VxX<#LLAYv}=iVF00P?had_C>#$@7L$tg>UOP$GzXc zxaqVWMVYWuFoFo&Y308o5&YZ@rOhXx=NtKG@=`pCgFAYD=k{;-{SNgf9&H`oBjq*;Bq3}ae_5>_)s~=md~DfFHY`t(Q}`%7)tz%J>KoBg)Bp6?DyQhM7luS43sgYO&k$lcw0^c{3>_a0C{<6dzoPTG2uHK9*@ z%udHnGKaQqKmBl$J!GxfkD)@}{0qx4L%(EkTGs>g#FtoLU3`Gv`x2U{@Bn@BC2JXT z_<+S?W3sA*O(c)Ka}G7Af6omhd-p!uUSsSRK&R$ndzPn>8r2d#vS^QqH0)9 zh~W+7iD$nQ^gB68Y27YK8H5njD#@=RdLunADM|6Tkcaf! zosw>7M(O%7jrta9Xxzv2?6>UhrrST3>WSx>LNgn$V)CJNJH^{94U-N7q&Kp^h1re7 zGcXR-fjHfJirw9?bFU=ja%Z5`1#1Z((<`Ug^oW-~krUKWfa7ZrFMmQUPs1UwJ7O52oEBRMp%rAE&nr7s>veT8TLexazr{Jd?|(-5i@@K4e?Gl#Q9u| z>nIbR&ycyMG2?~!$u+GRpNyZpZ)SW7eq!aiNV%Q2WFYZ0eg+n*KwK;e82Q@~53FP% z;@nX%%P+!D?vMt?`O>Eue+fUiPuw~^?ar>LE#1lyx9t7jc_M-dI2S)t5ZVT$%`?(? z62_VwIJxxRS=QE1Mczx!+1<}z@I05Kq#^V)p5vCtI8VD(IQ%R)jnLZ&yq=SQuUMI+ z%tbi73KD_9pDSLJPy8+t2|V#uVf2b5r52&50kdv(9qc-!^L+l~<;~ybv(RWbFfXv3 z(JL&xF#Yr$+`KP7r900-eRUkhDbt4Lon!sANk{4UIW{@zlcRF)id$B0HO)BZk&M%$ z-=lD&N2v6BcDEnCFY>wWGvOb??=%soA2|FcN6GdBHm%J34&V=8YexEjAJ`K~J&!|Y zAU+?1fDeGD5a(KI4W5l9+z&snJMT8jzmM`>-X%^^cg6;`!5$m|~tnI~&lp55e}COQ}Je;mQAg#qXaGt|9Qhb9i1xI0@L*2q6X> z&pU(kO9&@Eg~w;4|A_dX2*HSVU0 z{KS64Q`i2Dea+zA|CGBA(tD&X*BX8 z%b>!GtN|^($efPZHBz!xVn)UlI^wkNB1;e2jSTL@(!1ZpZy`4Y;W3sBqSp@er_zD+n{rWrK^L8F%wIb^n)go8tcaRk4e{9Gx1~5HI^xUd~l7mu~z>8 zA*RQ!vZmDFItyntKe#C2I_nnO@ki;nRzR6?<=fkk?z?|<(F_2%MgxGm9+U9oT{sW_ zJP6Nah;yQGz|XF;=CLMVB{KMMK!&iwkw3bYgAqsob4ZOqk0C?0EymgryE) zmLhs9%yP`t^bbj>JMnCVqT}&|94Q-6WD~;X-(B=t150|8<-XeMoRa*Ht1#~3%>04Q zHn5~>Cx4)Z4K24>eLr5kzL}cESX$78hL#{(=kr&uk7M-J?G`7kYG{d9htjTwma*E3 zUnwaZ<#zu{eZnoB)IypQZn;AZqIbhBS+;YRu3pE1&YzMj(bTw+C04ueJGE_Oxm)x7 zL6aMynCA+uYGk=hTlyz`%;T%YGs!lZVafeZif?R5wQc?rs3`PuBTE#GXlzN=n%2@! zjV&!{OJhrrcDXKMv2}zbow&+#Z(}>JU8VP%SlUotge6E#rUxS|E!6fjC&F@cB{?iDwF?Rja9Hlt$~1b`VM(=?Y1gg~k#HYzxcwTP z<@x6{N{s~emo*yR%n~2W7gP5`IKpU7q$SHb$a?MiAZpyql3+{2x}e8O4Vzh#g7ffu z1G3uFz&nsN6VWYJUJrJkf({oqMfwTo9!)aMH3b6vNG^L0rOAI>LCd$%En;T3IMOkjct@zJGSu#`$?TNCqu=Wh)t*Y^s zSW(Xq2wOjD9Bs*BOGB?wLawEG1Kx$5NM8cbrL?Dsr5QaNZHdv&htj5K%k7#kjLt?| z?pB9TdQ(eZ>yq$m*L%{xVlDARO)VWXPa`_m6xm&=K{HDWZFFPm6JtrTuERhcO~a6+ z&g74T5I!fph}6Z6>CI*!;g-gd0%0-Wsjo3b#Q=LJpwj|JaBv^YlxpqC7`p2Nxoq4M$+LPXhwcMfY zZbCoAf{*K>IG^Ji@WHSG9_6|yvji2!0iUucdLqu!$#yjQ+VzeqJ=+%I{81bP;b>Dj z8;9;TqV(pL1deZWOFKMfH3tuN$I$xbmQ;w|M?7^LU2P5?OpU#EJ&wLfgv@n|w?wNW zXmGrxm32w{wd)?5)5+op;aHr5p}!C>up(bPP(b8hJX$(WYva+e)(H@l^9k3k_oHD+ zmgaPSf+Yf69-jbmDfD~-kV&Jh3BbbRq^}Y%vMQZqb7EM;C0?U@dRm%r*$RSuJm|D! z0k`L!mJH34Bw7?0bcE-P_)kuhotyN3xVj%WE2jQ|<8yC!SASM2TcTvEEn981YO5_v zTWyL$2t`6{o9-;$sDp)-@AICWrd;^53Ny>_Rw5~+1vS(z@$O>`#gj$Fc)_Dg-0 z%elLyU#fW*dcA$BUl*EHnwrdi;uQl@_mUc)J0SI@{CCBG)X!ZK{j&-W-JM=4w-%+% zr>2IKBs!*!>ze2spEn|Pc~>f1a+DP7kXq4|hA%%V^>)|9G4U3o{X`zs#yuH#DLJVj z2PgVw7L4AVW?@*@mdSDJ!Ay=C{$zM?;#?ZoGLP{uN)5@QXQrek%YU*`w+4wT`A>Ys zNvU7+IL5K5F5MD6SVWKOMr!r=)HU4_M`SENWp}zPb!!{ezuw&w-BMZI8T{H)ZQ>!B zTPEyIPi&OxFeuR_bz}F$!1$IkQg3!o9K{f~?2))QYs*>8X|DbpX-TT0E$8(^Jy-&l zP28Q{7Mwl5_eivhO-!}SPxQ@5oVz={IY>SyKhZ90FFN&w0Jd`mxq$guCI(1^t#Hg$t|6zTVyM;ZaR`z7#WT*b^nK&V1;Z?iS zwQ^Voq%Q82*q;uX(D z)pKOc?UY%>zjp@zZc@g-vu@CpHDfl+P7Ntw{Bv(ez1lj_Cvyi$b8nD!gtwAzOnqCx zMBH?vKc4>5H=9>m+isMeZP}b9^|V8{W@X7vMWne@b8Ri{5z3~6|$-<2K9ES}n3L}MrPPvpc3Q~&Fq zI4EARB6V+n`e*Hm)T{iLUyS~&KVz|^COD}I21p;)qy`P(hM@Y*)YStL=VmNlvzz-4 z|GE<|N_1x}?OBvKn+bJm5qBF~)}{U~N*t9jtJckhcEPH_?au7l)I|e1?CRRoy#o{d zGs@qWE7Ltg5}i{23``stFaIEQz#w{c>H5^UgA%9OWyD?|NfroMuR(+H@=1}ed7JRfjJt0_Z=O3DAl~IFpQfD$?sr82@y2R&wn%aFJ z*AQ71Ch-Q*!cTXn*QS2z#EEuzaiR^g`@~{S?d;TyV)~%&v()p&%)!;4r+zMG%-4SI zmu^aLdb4;LS@(JB@WVL##;M7NF{VXd$V}rANrxp8%&+GTV}4bAq4O(q3_D%;MXKrH zG8w-}bw8Xg8u!)i^s=BMZ#$f&tmdoKtB2FkRa;W=!PK0U>Nz-ZXvTzZcc<%uTbmh! z6Z>T(zT2IyN*ywoYsyQ5xt}OYeK<+29L;NewokJ4C;+)~1523e^u}I>o7nhLOp;2E$lP za#LMOSx-l&jxHsyG<6~WiPyGD-CRodR_~j7vovuEv#8^6g7Q*F4rkv>xu+SrJfp* z=*V%rPfaWy^&=9;#w!a_Lq{@P%L-E$jiimWg{k=?S)_LP?$AUgNYSBk|5rbfZm;Z@ z>To1sv-`bp#F2?#W3A>TgVz)>-c3JNCQ~wX)TqP*4EIl?675=!X_e!@EQ#~V;1AaG zF{%AWCwg~UI5RADF-@Fnd>5{mnL2-TqE|bQ+U2cjsr`4-NA8=0WQ(Pq9i4bCKKq)~ z`9~+Nj@Mn2`r&BK#`0@Y2OPtHH(#AP>X<}_Ry(f=Uc5;K4|1ox^_tXwNssrRnYv5< z+hS(wCHZfsnW<0Yzf)$W{+9plrk-Q@@5q^{LHxH>84Z-nw$#(1F&~4wI(7cBiC)RE zvx3(?l0KF6Qp~NCA9uIJ8NZ41t_}0+@dPaQUsAq3x4{)Ae*|uOUGULf$^Q>7#ajP8 zO?cmWA_)h(3RV+PX##%3bIlGq@V3V?vx6gXu4&*jTxfhB-ax$Eqe}zc#xd#2PQR zeX`!Ddtg~_WMlrvyUXiM!0K8oE3kS!mK8PF zKMmMOf-Jcj@G+JZR=o+!H9`FamTQ9gD=aIp`Wq~l2=!Jhmk9NbSXSuZ@0~Q@XA)$I z)_{7<5`Du-iSEhA+i?YNoa0R;Gaiq5N3@T5SzM8GoFB!q4Eq=Uo$lSM7)*qHC*}GU($QFW6WOzgvLUS?ZBL(qw-?@ zGO7Xj{Dkw;y>q;3SK(gWF*AN&*PtV@OhAqA*(2sn*e}Q1OuqEs4Omt|ZQxowsYQ-g zMMq2iBl$6ZQS|eZ9AW!jG5?g~O6(u;=~zzDy_^?f{R*D+$j!ZD9^aAk|3)qq?!&Ly z$W4@Vx%fc-MmYw{O_um(Jln+Yz>Bhj^6Wq6mGy~vD@Z7FE&Legw8`=2x(ZG#Vod3> zeO!a)WBsP3H0UENmuAgxJCGeAa1glxAmv9oYxz+vSgWO{G~pNm^n~eWcYWu{F_*jWH>ecMpm4%fjQpvgulO} zx1o>2$Xg-$S)J3`uZ!h4qkMYT*+UKYsk+-lHZb*UL0&JeR!Mket4NVfFZd3v0;3vl%K=; z=8r#BUPJ=l$@LPhN7gy(4&KK*%v}2v%a@Kde>2{~4tcFh^Wt7pR`w010fkt;l&tXs zai`=B!5N9QMCX?FYoXlkjNrWlZG&W?bs?Y@j@)$-PZhvuzaUm{TP<-bgQ4j ze7}2-W=)K*zcsEWsnq0bPJ= z$#*@(i$4A_&*#vW($wQgU$RJ;~ivwpE>V&@wb@-Sr~#X?tP8r z>Zkq|FEjog*BEcZ8;pO!axKvEzhYTw)xTp|+BtsN;@(aYWGxT2xc3k4WV{>8Qmpy0 zoM7oyC$Oyb>bZ^AoX1q*zKQ$auQ@^3%0m-6`q1wApJS;u(Rerie=?fFTt|%sh`3N zFzb_F{u5`-{|qmyizI8d@u=e#6z7m ze>l!fvNCDHND^deRgc25w5pH6qj4t^q{1tmHGevml~bL>vT~}g!Lo9yuf<7O8Z}`y z3Ho>r*}=2Un$MTY{HvS#MJ!i0^>VDw@sRT0Icxq8Se9z_PaT=9k5(H)E%*0JJfti-@lrw55_x9zI^LJE=HQ)lMhb&*JDj6AV4m^>b_W?t|1LN z-C6U`#BwcAPsDO9P@jk8TA)53@5Fk)aYxc6XaJwU_SbqfAMy6rdiA|nA37opTH~zw zYq2cl>i4iL724 zVxu0!KjmWOob(Rk-*UCmfD-;E?-$kk2@Y~`PFwNwAdKjm_&{+WNunD;sf%L!QM0)BUfY%y;qo^VT!FY!OPaBk?` zc&u@(3kwlXT+utGe4LH-hU8>C#?NQ}GA7rMFwO)#flKCv71ZI8SSx7Ml^v!!dnGhU z%J;%K^TYh{cpmv0KMPkfB-)@S@e(X=sQ4Ask+8u8#JOs0k^q;Vj}xXrC*ds9pbET` z1{~$$AIGJp0UPmV^0fi6JQgM_@5uNK$S0w|RB$q$jy3-p+}Kp`1a4vS>+n?5z(y=_ z<)(qX@NDDpxOQIW7kQ=l5ln5kdJ`b;C41K&7n{#GnQs{Rqnkg9*i z+ma+`3)}V}!34C!GUi&K1C}vYcf|UbBx%5CXU#tr%OqAGk7W|8PsGV_BxnOFNDynl zOe|xnz7ETns^?%CQ*|Y-!u?2)2EE{{`7dF{d{6uKfn{A#_rm&wC#hh(v*u60 zGAY$(V40Nav+y!}0tr(7rld>IfVo&sGxhCQPBZmOcrUK^JWfhizMi;-eDyfo-o($ulT7}TIRCD2sjb7~u$GVariV0N zuK)QYEHD8l;Y}Jq{tUduPh4)|$KeW>@4x<^NkW1n z&}j7#tSLH67SF2#39__m>u-STki~ya6I?#9m@9vsGnDIJ+?(Sn z0KO}+|41?Gl6=m!JVNu#B;K7M3wqUyo&s)i>ZG zd>9GRpy!-5zZ%ONP``|24#@u5;@+zy$gB^xxVI9^n5%2BjJf(PT!&dv{T=@5togrV znN#YWSmu=aAIw?g_D=(LlOU&&2E_UXr=>c94dR#aaUZlHOEEphf}e1GnMuq;FpkaE`iyD-nn^Aaxq9cRs7hvm6?wA(MAcGmp(0A3lH1I!q} z{F4Xw1zX%}Ou$^@W>_BB*Ma~!f_}~#Uxeid)rVr+V~68#t4|k?iuv{XD=n|2ij#ad zRG%g&FRiY|(jb3M;31|0>EbhS{`WbqPRio;_l8}3Gv*O{d-89^jmhU?=O4h!SRNdx zLy&y8C`brO@SzJV&-be!L5AQ!-Ub&38=pA9@>IdbF8^3(%|9N?69;vOW;$#Bby%KG z=!Piiz2Fiw;3d4A0QD<)+K-`EV4h64=Lqr#1=jf9co9du4+%14; z$@Tww5(-JsF@6S5GX4y2r$W{zzrx0c(qmZT`{G;^e>$!;`E#&5*D=`QUM1eHmh1m5 zBzP3ifZMQ)nfeYa4|dcYzUHj?uVa}5>NoI6g{6npO|c9Co2>tFZ*LN$%Y%(Kqp>}W_Ql~=pFUv> zpGMMI%su1XSmwxDg5(}@pX2y@F>|Qe`BW@D;P)VB)dDO%-dOf8r`;9D$NVvBM*(p) zmNC-P@GmS~dZf#5V;Urfs9X_)>S4zh#ioHf51@1Vk#BuIT<;VoF_OxEFyIpsBeA6!d* zQm5qMdf&`06LCjK%!;ear|9B(=>^i^0NPAUz2$agZFbc;!t zN0<0xPQVAwK?CF7hgil?U56Lr1O4Xnx}hX6WQ%(lCBYc`#Er3Zxw;wNk~9g;Nsuwr zfR;FeBh)c1cGmpCScXJB6zhXgdpW41*6Ksd=ZigUyK zkFh+8GuWsc%cEV@Utk{Zy2oGPYSZ9tB}vA>1k@9d|6uqTj`l-1E3nS;BgEap3P<7d z$=9>!axBlB4K_aBhD%NU!(x;Fc#?#Z2*{>{jM+vk52)1&KE(^k-`C}54yB7tely(1 z?4UoE2iRop`Y+umIO|4=cD2Z|M>G0bH6N z`XRiP`n3mZaa}kBNpHObgbCh8EDzxgHa?4u%Z)eTxyE1M*~}4*{|f7~c%?_Ph6UFA zeXz`_VB`AVii9j$r~$39jJdikmN}trho#Ha9k7hCx+9h$Rp(-vBkF^(42i$V^}jm_ zG6WjX6U&&Z3$Q*LSdQpaXU#ty>obHUe~z=}S7I3g^(|OWQ|5oBcN+=eR-bNkA|Lc* zNP3VcSHn^)W9E+`z81@nsNcl?X&VpD>r+p{oTmCoxj(TCncNdfeMKj8b>+0JlBOh5`R!B=Xqh+Bc1Tl z0inC#Nk!)RpGSf`%R1QNUJqPm+zZh(g5{S*bd1vINa*fFEI(F2U@u6eP1S>^iaMVlI%12 zW`T4`xl6c)NjQlfDRXXlE^7l_-op72EJx&D%^0GsSPp;}wf-#cb{?Oh$2!Z;$8rGb z$FU5Vo+bND=KW9U^7d393(fx~^ECwH@3D08B>p4$XPr+2NAdJm7vJ=PnBQY^;4){P zGd&=4W}|pCM=bFSTH)}({4ZO~8;~SHo{}DHF>er-hnuSp!`;l7pNHj1>Nx~Rg|9hl z{Oeer!mfS;%ahsFt0iAPNaAn2|NRaLi%h~gT*40ZrgJAQ&@N<`osM8qn)ohw3i*3c zp;k2U@POON@RT>n2LLAp!})ZtmipJM4k&Ho%PGX4@vmumhNT*uW;{T*Iz@_)cv zoVotRy`Mrqf_zmY8|AB`a|Aotpcj2kVX)I6E*ZSfkc^wg${nLO95^799 zV=QB+1)5}<4Eiyid7VB%j1CI2(65NIWIf7E0gZ(*yFTw@JRhVBI z*;C)$IQ%7$n0GHuPN9H5CRDJR1o?Fe{|MMc>!Si|gW6*GwF-X{kzekt`B!22MGJpU zk^ix?=5NB%;9!e;UmV5pON%w(D+1&Q)!$(00rgfa4Oagsc9Of~pK-X=r;lbxqz7_H zlp*?<%eVA^yxJCzxrFs!x?C!egnCnfOtO}v8txz)hg*GmKVyj>h)13pc6l+LJ|XmA zoPS#Ap-B?9azr|YQ}8T&HhYmVp6?v&l&{6Qc=ZBod*D7CZuRLI(^v;+P+=@Mzz0me zG&orkso*UWAgA5i#!_G#t~fnBf?sgSW8ncDFq%Kt<0iC14q!MQk29U8;({D^7j z87AOOEI%BwfdX=UAAfY<;HdZ#Czf9{(Mh__S@Yk=@}ngyT=^4^39R|!u>5F=^f;e? zNP}15_SnDJ;Gc0;IH|n-kK-}XILpPCVj0q4i+dxm{CZ9c zS%0O%|F{GVxD3k>sLQeZWKIhbB>q8X&3_onkfLM%)i~3M33yb=2EbEAR z2%h33*M?FYZuRNYuHf=~I@kYcq{`a=5D9V`$`FXRV>#{AhnACuWl~B0Y%Hgh`a>*d zQL)QE=*pOXmMn3egXOFm?Yth(O_H$KB^>tOm_Md^i&TMSOx3HfoMuy9e5?UH%BurE+bUj2mANp663!2pAH*<(iLkP5zz7Gyl#pW43^R3ykl>Yt1W}2e7_! z;TXJ!u8&kch{{#B2VOSbnEUhFHpf?yULAFG-LeuF|VhtFeJKpf#4?`BJyV z^4neNb~t-V=ni~GTHr%0N1(35B__VniGejg6Uzaq zn_znuWMSP{f9uoVPUE#5W7IYloCSx>;FSzVq-RA6OON=Ih_mD$EIpD#EppaOyoN8j zGbak2@4zw%HNOT+k7@Z{GxyXVy#GIs1iOQs*zVxWSuDk72e)CngO%9spvSem-_M-d z>>6|$mNCzB2Y5G@IW|VFe{uxxlOU5y3p8ORlv!HmDmWC&q$+Y1T#02;j&b=z}O6`K?B})CfkpA z7q2FMe_woz2Y-q6F1hn5^q8st7@X8!8k8e0CqW!+d<7HB5U8)l_D`)du>KmMfAMkF z_$RUSsQPIvb4b1H6wW`HWSZ~-0WyiyFX2MtSMXHh6;ws}hER#~pe~M*Nsz1jvDb-(MnUv}+NfNe_a1JTbh5MWu zSOZ#NnS|=rSmubjEtW~9Zii)3sykqrbn1@y9^+{Oqv;9xAXSlu1Vq*3?8GRf2h zSSFdeFXp^i9bb~qN7 zoBR}(g{qjFMA>2cTd9x_6y&%aRNT(POjswXT!W6E$Hk5M?@r=Zwjdr9L7- ze?e0MYVP2#-*lN=PGj+e*M2@b#6bfyyuqf&WbHq*VV8OnO}<bu@rdP6p;93CST%TFqZg_@fa4WV52v2^{mie;N021{p+9i6$wk83O}>C_XIv} zkNqR&tSG`0g96eg-l2G5Wmw_ixaOA7L-4m|QkLQp>I*hr|Kl;fW&iBpC=$v{z|pwU zcnp>XX$2=>X|Vbv{IcxpFunkr)5yCB zhg*HR&*d?{%cnF7CTX|ZVt$Y1IxoV~qsd}!{ACvZmq{jLHpvAn!_p(&s8uHA?~;%8 zEa{)(om1m0uynEJ_p9RRNHn;mD}M!+1Je8#F+Gyplkg7-GAT+ZAPp+NGv;?;maE_; zEM2A*?7}j}T;%))9(GsEAA&OHB$giKjTJxt64OI6NpHs+ZZ+5c`6O(*HJn6u;`Voh zUV!b@?>@Yg9Ryq4djPL6ehB|)ycmy>FAMt{FV*mrVEiS8SEnR|TYY*R3yn0OgxAl~ zBP%%~`AJ*7jXvmZPAy#GhHNIb3sDUoX%?o81^m&92I)$81Ww8kXqR43g0xWG`<|G8 z1QThM%z>v(1EmYsNBkw8kP3Tj3$~N=yGZ=+6PW*FtHJ_13Ak`i7i4<>;Iai_{$8gw zbW=RZFWy;&GnyG(6qJUvV1!zeSIj)9?XTAZP<`Fkt2}@1F{@9LLdmL`{=`~mLF&g4?NR&xg$SdeE#`j=pkiHgN zhvfit(*BF30j@j`w5#BHA0~M3V>v>tAU=aXG@1$yG7XX*8-i;oA8fqEh7-?(xA7O@ zso0;?4B?%4)1G)*vw(y#_l6bRhj%iD`WK8f&cP1i-dZd>P``(>@R=mY9QoT>^Z&)t z0JV39>ER@kq7ezcvCST$!L-*rctxrD_Deznv zz(LigtBoZ-HSw`TPI5~mwP{(y|WZ`?!*d~X7zz&2yqL8~(x9&u|NZuRN5 z#u9&cBz}m=XX&m_mzo4AaDJq~g(hDbG}Tz*=SSl2H2D(0z*yp6H}OeXP~R{CQed^Q z6!_T`kobC&FY!B!C4T?28un0o9BzD2By`fBx+ReU!@>Z{)u)dzmK~fIi9g@uOZdA?7se8wINSA*zkj-PFA~D7 zKHbz<3iQ+heo&@YVDe=LeT^mlq)7aDlP~cToc;Yvfn=n>HIV|>8cY1*Nc`g_Uv}`M zvBbY0iQf?92gff3K8h6hJ5u0ZlP~d}+)%kqcF-Byg{Z5^m-ueR5D!u$C8ly zKu1?)%sXBJbPo*CiKYUnaN51RM7=+Jdvct~mmORcDSx%em+~{jdNU^l7DWm?5-ISQ zvBbX{iLW*JvV--h%a$evC;RcXh&_%Xd7EUYN~)&xj_^~SOT@4SXb+z5voAJaCL_`Z?&{wAL@ zjE~fq1SxQCq`+j8FY!~1CH~Gx`~s6N@%I@^{Ms;H&hSj{Jrf`WJ}{O7>9BwwAD(?C-5>LJSWT|HJe`Q8K7AMIJ1jdql6-j=sb5fEuzwkXlSs&VIBel~ z9PTsIn-Icpz!}C;z5-{P@-uO%@pX8IIlwu1iXOkL@RcNlTYdUrS}XFGrvO&k`UIv5Ax2B98nJvWLA!RkPlyB9rGKo9Fcl0mN9MbDmZcxbA%z=>2~lK zwr{@vgr$e%hEVE%-84|<%$Lc?5o|F5a+-Z-ECu2hH9X=B9Bw=(%UI&`Bk{dWzSN)W zV-lpmNs$8MO}-SEU@Y+!k@%S=U*fMbmiWgS#wWceOn?+vYAgjdG%VnKWb!5c6Jv@0 zClbHg}NoEgpc2p9wt( zZzA4bHz|K%e%VzZpV{M{(M|34z7PO?@kgnn1BU1mmxUYRq&QGWa9~b zScWXv;@-PhhD=?H|My(z^;o)G^EYDYpk@%S=U*fM5>;9#{ zgOLIcM+!V@Eb(tf;@6mb*}+<4iT^$lzYXjDX-a+imq>xEOB;6SJ~-TXBiUGX&^r>} z$K*@>{fs64_)FQpU0P2x0a9R`u@txr+xT*mFY#9yOMF!%{%(^m@%LV8j$aDA94YW> zq`*pJiT^wj|E0;79c(d{_}H|D2argT5N^DDHkJapkpc&seAz*FV~HOfi9golOZ@T1 z65nxJq`(y>KnnafHN1wm30{tby&4HyX)N`Afy;k4rrH zBT4W-D(M{LbDQ`z2@kQu0#f9XvG*1HjTX0XF2ddm?%tA!+nj?6_%;j9AwQc0*+J9t zz?#1|-b#IKNs#)Ba3S&jCYQ-WNhr|-d^p~2JOo#~7=GPl3Z9D_y9!fy8w+e(=asmM zd~RL+9d5%*O#FUV@|i76hsqbE_~`-?vT5M}S6~WGm>!sq=NhlTvcq8G`#LUO{U(A>Cr)k{#g9O<@u<_YUEOS7;3(F9x(^!T`9sh68#p(>~afIr|xUF$B zJk__qOz^Nr66`k*T4L#Ptsom$V(BtDg2B$3KNQQ5sE1=20`*9oXD+&<@LlA$l>JME zm%9Wla3z*8Q%}b-X6hui3+6RA-0IWIme5q<{W-zwlRvN=u|KKt<4^KcNt`^1Qt|@k zClX{ZoswV>pIZ!s=z@b`799Lw!9-B z5TK!Q+RO?P+(E>=>+#rE!}IzZXRTnX#FMZ75l>tZ`e)pJW$1eRoaw6diK;g3yyB%p#$wv=D!ccT#~C*o1RU7k-P|zZ2&Fh^xrgN!Eso zN`=Xnr%)gJO8BDr2)xMU^H1K$;(z-Ru#aoN<#@HJ;3}L;K0WL=@L{~o4GP{SXjZ`yn1B{|sc~yOlmdIZ29)3pCVx1tF%6iCv)>IHa2fU} zuRXjF7y0?LM2_hp5|)_?YVjgd!H2lU_!GR7c)bP7n87%tv2#Rs!Pe<@~2`{6Mr ze-NG~_V-T%29r=_0!ndHQ^Cd9&Vm2nk`Mgz8BIW5)SVL1!bKVUhp)jwew zWA%0{L#F->o2A$L1H18;koxprBB3Sx4eP>l5guz? zg(n)njvE_qo5}vOHgt6RjCsEhu#P#bU;J`)df`@oI|vYKz@J!Jto|EI52*jea>Q!y+Te)Qjj;5PIup;rdO1EM z=@K-c5X%v&2Vm&|^&l)gq&^JWF)hL2R-YbbEJJ!GF54XTcyb~MZNCf?&co%eg*!MO z*BD=j?GC5naN{qu&+@{8`qq*tH=WO8*`eMe#+UKcO6qf$=cG4`1lgh9172z>lorp$ zTTBCQ7Zab)4rCI(g2%21=fHP(`&Z!$kH4-995j*}Se*5>zJbC0Uytj91P$ngvk6GZ z5wMFhoHhR}+?M=8mw&sn=Fi8Y$yeWrC(^(JNRS4v!W*;)Ea0i+QU^m|y}{<9WvK;w9U|Bij3hhWV``ZjEb9`2%o!-Xy0l z`2P%V0?wm{TLs6@Q|d_=M1uZd;~6~V`>@3?;9bVcBVHMC4KDg2EWZYyCOh;Sz?<-R zBu=(=2?yQC4o!hvyu`R0uAo4+iyw=Ne-3vr9#17-m*QD?p~;`)Jeu+{WEquyzTf|T zl}&>L{w-U~+Z%5)6|{=DHQr_N55Q%=gbg|fPc_cP<;LA`-7n@-mc9Ihu!6o3_s82z z1&88%=0vdZ^(b6oJRFZSJ_^em()eS=Ns}-(5^yqJZt^GKM15GnnK;|{T-@IH0x8dF zsY7xHt}*#{;pEi>#AuSNOf@8kgN@52mh)QuHm<_b1c~3_toeUp*`fMxycV~2@wqnz z*8GES;`+apfIJs)JON@2I1#sCQf0aP3TMrqiDjWuUx($iQqRG1R;eqooQA=c;oWi* z^G{9#4Y-W}IZf1eV42nGDlBJ#`ffbW_+DIXd_P`oya?ABKawON@p@R{V>rwB30!Kt z6i;!xm(R95i^Gj49peRmX?=~nb+7T28CF(C!oM7!yo&dLIBT{!CsQOy3*GhD`xwg( z8xtTem)q6waUkQl97tyHvV`lk>EcFsl5r-M z3W6=eYl7_%WZ`hDPw#{65Hx=^=I^k8pjbSE`$g`6IDnEkLz0Zgycs0O4z&wcVQEl1 zzW|TVWDKPN{%J}Dr{b|#ZcwDcR;B^cgT1irfxZ#<#|5s3nE(6%f`qN?Fz6!w=#3Zs z9(LjRxa}XIFOGOx#8==v6F(hqH=cpLKmGcG>)&-@f*g}~W5hS(_CWzZ|90GXXV{=B zJkt1{h#!dfAzbdq``4eC_t>5U>Zbuu;KioGXCi(M*O~m6B7Oz$F!`_JtiQqrzlHO} z{{GqFS`sFjfcNn%B;a?v%oO+=xA-Tl zAdQz8CvIuzCJ|@h)h50r&fUfP|G~zyxk*^DE8Ic5h;t(Dj5nM3Jlyu*uzXKE(YQ~< z1AHgL0)t4HVhRk#RmPg%7h?Vq>(#GmHA^!`tV{FJ zSWe4q*T5u}(@Om`ma{_rHI_-e$kqR!7kP7lCz?2KT|ad(8L`AYn{R zc=bCAucgcNYIqagpmTt`-fBG0_-mX^`4)bE@VDe!?GE^*iiq3b(b@oc|Fazl(_&!@ zb8vP%beD*`N8A$^oA^Ev_rv8h*q>7zK$)|23F~j%JDUVKqG02v4Dlj-FbQ&>f2*_R z&%@F~>J*k9Qs0HQ;9ew1`8S+3e>IjKW0Uni?!7}oE(yA_{o$+y{=y~X>&ljUTVTyU z7|Rfmw@)Ph#I^`-Z%|FQo%Gl&y4Yv5l_d9 zO#Td9ZG0WxVSJ-=uzyBrZY1D#oM;qI!YZ6?d=D-%ejwsUB7O`{Gx1LacKfFR&yX#y{fkjDN=4k|v>^gk8ovaMl}P1OLRWjQ_@K9}4sT#nt9RCf+=r zenoss=8*J24`-QSa@O_2$vgt~ff6vD1aYwO!@hWc$-mxN^KZaMkl)Icf6iI+tMNGU zwES@WmjIpjBW`FA^O z{=IiF|86H>Zx^tJ0I>$F#S2XZe>!Xa-}o_8zRUc;nxBVXAYTvg1ZT}ZDM`XA0wm3%$R z`a1jh^8SB+5*8A$FDWvHXF6*I6Y;a;>k!=HtogU$S55va&YHghuOVN1@JDCKXa4hi zZ4x$`3iiJ%uvX9>e@VWcMkAax|0w(;`Mj6nAHZeKnqQ8$n+81SOunrDaqnRg{v|*Q zJc?!QRxiP_cB`MlQ=H^ouxD_%@jXUtUwFLyI!{1hW%X~-;&JaWF4uB3E%T3`>wCwy z`Q#D_rPLzV``K8oZpF?oy~BMy6~wXJmhZw<_lFM(K71`-Co(&z5S#o}SgsY?fQ)xz z{sCvp@k@mxNsx=hUd}gSxtM5ybyzMQeiswpavksEnf$SMk=bDi%e6$ye}d&&lIiL{ z@V%ISEs^)X{05YfAeYy%SbAV19!CYkTz<9bV!0vN5E+7xOuqb0>66G1d}i{c{9kxv zW+yp**<#-AAR!=*-ObDI%<%f38F3RlZFTrZr$W4%cz*~fKf^hwFy>ts@f=*2nGAPu zGYMPG4sXXLOhWM`CZOTc?XZA{4}|zq(MCv1l9%>h?8aqeMy*NT!gC{ zhYdIkFE<|Q?7z5V2MZ(l4@JBfZ!+bdz{%_;;SQc5q0IP&h?htF8m=($HF#&!u)a08 zv{~qN5wBms`DX(*5-`>j_!Lhy-i&LEzroVw!Nw1UVVM)^AMrTz*6q)@(&X1KVE#>d zAS|$hfCVPtPh4ugZSyx?Wb*&TwZ`5(4Hu?HINW$V0=5g&ugR6HOjMw6IP_zsk{vQ< z{L``=%MSEBZuUO!h%iaVkT0j{aahih0_QbYjyNcv;f?-)=kihBzj(23+=8XYD_neX z@p|6jpa*hDkcH?+EJv8{+-pO_0+&SG#2lfV*Ilq3qV5s*#GAt*OnQAtD9Z{b$pAdt zxH#e=5trhHCjLk~Y45PUWAGB=6B?M;|Kl1Y#Jp4S3R9pAXEzTkJO^*4hk`BcO~UzW zLSKN3jW5Dw#+Tqd7cY50*fbKttv-DPwv%MPx48Jwph*PDnE!^QhjL|M!N;uT4+?Z? zjmuxg5J`h{&isz00qXuAa;@P2jwC)QV}1n*(qcIV@qbN&WK8GV7SrH6O}?!43nC4^ z&*V$_m$B`^6`}p>pSOyHQq#q&BYp>uGx@c+()dGMWBf_PUqt*B-s;Eu*B>sedlKjZ zPM#ld<9)(0{{@dW-hrnZ|AqIADLu3chZ_$O!FEW?YI(na1{BEtWenr@hT+m>9dH@v zu|H;9^?PHx!@`IM;JKzj#W<%$cmP9irSTEY{_)EZkBS5wgBO?rC*bAA<8ZCp7D8jtnm~)sinF8UlJs^Ziso8M|>q-U@Ev8FJsc`3y(+fHk?BZau>Y;FWfh5 z(8qX%o(1G5?jwF*bNz2Z!c+pksl{Pj(DxJ=D&x(C*QvokpH){=KqV6(q)?9 zEes}I;0&)3wzE1DhZ_$(!FEArIZg&)3|pRE@&O@;J%0#Mf^yTgwdwJ5?p8ev=nF) zR`@)Y1_xW*dlB!03rUbUu*F&Pzr)f%^$*w%Y4Rr$!mU2N9osSe4eKUdywCj&8`khv4nT{c%CtPJRb4|M~kr31eJ>xFq7?5s$>> z#OJ#P-R11pNcsCBegH2bep)OzfcT=o#It`2>=h>XZi-i%2JM4)>>spP;n!T^2^Kqsc;qvQ%!|)@N(muovYmrG9GG}-!$UA@n%!L70z!LHh4cg zP3-TV2DEnxC9aF^(Ew>5`42?=5ME>|d<@TOAMW5Oyv%r+bFMppqKAY0VE^pkFqh!( z50~INDp=+UyzH#`D8h;Qt8T@DqJ3RT3h5-{IJ_A>q3MS&& z9l{+<#>rPgYa0E z;yjAUQhg4dlFaE8{CFctFOV?Z1bl@@ldlcc#y2o8{G5PY+sV#3H$ZfQ`jJNINwmZ+|SM!#R+|sH4t>aFZ z{4p;7I=4T6|8igd00|43^}!bN9*Oudyusu@g_m>>Aj7^jVIS)+e0_;PO2P0iQGZaL*ISQyIeF#d!W{omjm908~5P)Kbl(Q zzJ0<|k`NxznGsLKZB71UTwr_=9&3E5v))fU9?4%SPMQMGl2C439r4R}g~?wL@hV(v z@>k>S#_!_N{O|xjz)73%Q6%6Kywnu+054eg+neg*7ynUYz@<+Sd^kbdL_9Mndd@|l;>YIQUu)h|5G++Bkk}$1T*d>*C zxe0gyZ!!J~=hFkh#w>UCXE{AG>6wQ47e+i4?=bZx?%w=@PQf|G*W%oQJ>`?$4Gj~#TOz&>$E<({`DfEnjJQFM>HN+_6v7-I$maccEpn+z5v&n_^EiC@nyKmU96b@{4gL1 z&zY;&RZ_tCYP`dE2A*e@>RH%6J?DBX>p-x@y&JHs1L~WwoONt+{o#&;1Ub!uEyKGV zUrs=45@d{Dbq?~mA;CA2-`wSIbJqM{u$*SshkP zS>w}KCbc^L0!yzM;tb5?-R+;VxiJahR-bN$?e%@*V16c#SzJVre+RUJZ^5v%Ryvn( z{g+AUH;DI&|9zd0bh2(#HVWb|=Odlc0RJo_|4jahRxa27k*{=yQEd&4$2{Bh`Ov7A;1QeNK7eiO@CHNd&KIY7AqIRtM@azush zVsfb@nDewe;;V3?f4DAG;9bVo;+z3t{tXe|67g*~DMuS@ncf{Fgd0!U!*&SnHu-V{ zD{+b0;hPb!!P8Ctx`^L@f$^_20UHTeWc(@KY`i(*ZzA4`t82qAsSd8@G&ZinMMYr` z-BZo{vk40cC^G>MMZ6eSnEWU33TC-pY(BzuCVvy&Y5Zlx-zFmo-{Zyu!xsLGR~!F^ z>x_3s{BOkGi@cV6FI>oa;KqZ(`jZ8bguXb(1Qg+N-9$n`aoD2Ua1kxmE?tiEjK9Tgja$6LLS@Rgj`)Cx55y&h>;8EC->E@D%@BX z)*gBrw>To)!Fytp|2Hl-`DtV3Ki|oDxnaOwxY88J!ZpS%ah-9Sh}%Wn0dF($opI3! zzrnKp^K)ong72OY7vPaW0YASVo?<)*&odqzacRUO@De}Xzy9!bOA>PEvbKKpd?ErD znT6v4Tr)E4;z#fV@&~y15AbNy<^SS&#(B$Gx{nOY_jE3j{mW@{TO=SA@m+Wk6}ECa zd;`nE6Kq_*aV?gMncNTj>a6*{V>xToJF%Qq{_#r_{vkn5I}O+^1u8?wUSSBx&mcf{ z(8F2dd*P$W&vN z>esNGHR{*#z4$B=A-4ff&cQy_;9^ZrQ<$Lxw{O~XfR~D~ki8SMX{FAvC=&9Kb5J+J?plOU5w16pD^uhrRDCY^deEN6}S04%4K`ampa zkva$4rMffrH#vU!2xV6i>{|Wnm%N%~C0x=dSgX5f0itDTJ{HTQEtPzx*+R~2WNhR7TDCP5@zyF0Tlf*{e*RD-lqlIXQu+VB**QDs&fR-w>8)0O z=X~coXU_ZaowJ*@1pEe`q6s|c^65k;mF``i|27|g1kcgJ?|?TxKg_Wmmr8i_YP#Ze z9$Q!8aE}&X0lY%v>s+SpI0;zm^Z%!h*Tbu|@GrwL5}@i-ufNjMPOIer_y2LY+;a%^ zb6I8iB%l8`e0(~*NDH5bmz-UTAXI@jXgu9zHcI#)*8jiq3Ec1F-@@B81rNa!r+X1R z0x!~drOPVEKJ)o^ds>s1^?wA1WtxJX@Yoq%1TlDu#(TLuzPVZ?U-9{$1#TS~^-O#JxQ`9^(Q0@Z|1iPC zVS}ddaCo8?;Z(R~win?{m(?-cy*~eCK3)!+TKE<4#a9mvT^uHUX;z=&@GT-#9moD_ z7{9duqu|XN$Klunixu)=8_)eQcsc7|sK7$WB$4g+hXBliX?g7t$tMQY7-Ef$r3G4x1t#N;NwZ=nS zRtY}C=U?=31>UHIpAKJru4ex~2ZuY)^-?@v6li=QyhdXS-mLNE@IiCE@ZWd2gHU9Y1zPxl@LG-cSxf!zevy}=VF+xzj7cS*Ed4?S9(%FpKOLT<@f?>o zlS3l^8=wD!KK?ztPz(R4g+t4?y$BwMPuKWKm-&|y!ES$V@4ttS_ku6h!ViLDmw5X3 zh2t7q!(E3BZUkrf1ZMbnHatmFFb`g<@wecZ)~YUX`A)Z$Jl5Wy`~U47LVtm?nu4d{ zOE2}l;BWAQ8n1Ktpyp~04gN=a{}vw)gE!a0Gyadj;Tf$GPJ)+G2daNfp>M!aClsII z2eyBz8AUv7zS!MYjU>UC!|Ix>P_VJVOt(yEZ z@J5Z-!kZj+#=oY}KXKTh3H%!#@k1}d{|Nuc<4y2JZGHb9yh4-z2)>>VY9_^!qeK5m z$99bu{s8z|`Cy4(1Wv+XjV5pk{1YulE`t}s5m)|Ka9=G!_rqf~UJkF*Mo%d?CC=legdpf9i$59F{4X()WE~OLMr!CvYviO7s6I zyykjO!Ovln9g*rE&u+t|MV|j%@U0r(3*U1i_k`VkWE*Vl&;&llVb0Gy1)sr}Yus%; zGZ>9~z;l)i4Q=mU?U*LPe<24|owDGuT7oZ!w`=_U^^E_Ee(pth4FZ!Fd;AmlR*e_I zD~UjDsr(6kQY-U!;J?DnWQnw@fiG6SSY`P>u%2VBFH-*`OO(L=z5oZpt2O^Nc*;$l zya8XXaTb17OF#)8Lk=nZ)8MuEt2%a_g@a_F61d*SH~IJ$_#RFE4tVm-Uif?9MH=4+ z$8PcbAAl!nZ2caGD>a8l;jwHIjUq*og>S;9wky{6-)yO9d;~o8HZOu>VA-at{xye= zh5rQ~=jxl|vg>b!=Heg|5^Ay_&2-$J6u-&JKnYyL;Lto)CHKh^waxUBqV!=K?_eg8*_z;#dpH^AMru632m%Ks@iqWOR5vhx2J z-Ua_A9HfYbzfxu8e*nzlmi%}AnnNRT=&33En#;<6GAtX3icf=OlS=U!uxwH(&ckCg zF2S;=r2NltWe`SNxJxf*CH#OJ=XY-rv@pufqDdV3cz~ zIRjeNOvjB4$6>In{kE|%5Zi0<6-Y_>&~yhdIBeE{*u6%aIf2kx;s{Bl{8W>dA{+2(HNLSj{>!%6$k*B@;1C}t z;XAbiX5a@k9u2S8_$ZgNk^uBC^!fj+#?JV|6I?i~=8M&M{RG_OpWZxu3*7gYUJ-oY zGKo~J3e-{o7~FN|$! z@4uIi2fz!p@O#6nVdwiL2}5xhaJQGj16)>>?0Y`{t9|?}b1STu@q4fHQZ_lJo?iP3J)PvxN&-nw_Y^E;PS57>K5y_e8xcC| zeeQ%zfh9pL_{$xUZBi!cPby8HH`{-4KOYZ-^#l)ry}zwH_l5NY57qod|B>)YEk~`f zK8G(!fTdoUO@K%L*5ec5C;#Q$@4E=z1gjm5+u((o{9Qi2w>?{-`*B#W1z7Imhu{GZ zcnNp}?)#9(E8&S6|Ha2o`}kRSN==^q&wt>suIA7bdI8>~@dh8i>f=rDc1`|mc+T&= z1ilAfs_{oU%lN-TcYt@o3$y^;-=e2m;VIk&9-#5=KHk&E{ooOr{9t&A%hdm-Pzw%A zHG%znJkrMp!;fn6NqF=hyaZ<82^x>~@lhU2|If8698T8)90&J(*i(1{oYnYbA5Zr2 zY4CVWehM6V#M4)XhdbwnQ({Emp$@%$H-4|GOT!e8Mgz=>ZvhFfr`W{IQ=+ioA<1&`6P@LqU35sq-Ac|#gr zrTM=PZ`61@-134q*d4l=O8Elge=k?T#WBu7X!;`~dtG2^!)iXan3s^WXIynkl@u z>u=o z`?v=@{v|JmEdz({|M3)NeS8=^Sqo5s=VZ=jqsDu~+ca*0rCBTaVX#xFW&JM+*k2r|G13cT#HQm_%0TCMnXc!o=|ZTBYZ{cYX( zHmnclzk8P_d$gNYTa>(fzYM>-ZDSTpvs%?n@`Ftym#a!KMDp=8c)QjNXTgiL1fCBM z+2}Rvi{Y^ve+RzxRc-zMT^yF-pd!2qUaj#0c&*0Q!5cNc9=`H*FZ@mLts377>j}K0 z>M!3ff4p$*3ve&IUQ@8l$IIbfo4g2Dz?upzD3hliwF!r15Zg&1TR4Kv=?8|9IxZ$A++_38ZnjQ{%(nEgFx3&38P7 z<9vL)kG}%X(Bw~ox4i3xKLxf%Z1EgU$6=zzd3dG96(3Lc@hmvB)zdc@K3(Gr;Kdq$ z`vcnlg!jDwmx)4+zvtttef%Rhw9N~@5FWi@SZEB+(#{`-=Y8P${|R2I@v0A~f4ak8 zeFAIX^;&?x`*^*7k#_|o}&4`3dcV3K`5o}s?ViG> z57}bTIO5};KDKtpVVM?SPx#S~J%t0{9UAZL!y3;a zl!04zcnU`Q_$VKbg(qtA$HA9td;&c6Gf&^i?U?od$Oq3!@%KE4cIpaS6kJ$OsA8jRR*g72Z$$J|=~0K8b^4e-2f zp8TsCQ~!DGUULwB8@^Ku@Scx9fLCe$pTLv4dlBq}=V{#iqxQUu$I}0ESb)RTT7W+A zB8~gOk7_&^o)PvUY=JMI941FRg&BCB#-n|Fl#j>4muvFJ z!Amth0bZ%`$?(-t;&b9B2PWgNSR9SFER-wyaSf8U^6Qp;rHL;hsH?|8y?OMi1~h#lVIn_rnxyZAC@8; z;mUt|8^=26JIK{{zm_1GaXsTC*!_N)!#$@7$d$~$`%=74^A`mlz&nWGbcui>JZyWF zLH?RTV|;uJJh_J_f3>iML-nsIbge6(cpH z;#&(_rsnWZ9HwggZ+Ha}40OJyIkd~iRjwwGS1@5ofa2b;UI+Goy}zwH_k#60FyLdi z{)>=gX$k>70f+kdaCid|jzV6>_p{&yT7qZzcs9I6^PlJA^FOBi5873I0nZ~Ka6vDR zzXLDR_`5#7%E#BhYc=_wzTurWj_9$ zk5|CAYVy`&I4si~o`Ac@JcUoeEgG-!@!x&C4j!+`zX)I6$J6%;e2>Rg==Jsvq0K&i z7hdTF2yKIB?BOZ=7`|NN&wSkNllJ}*_@0_P<9|;aw(aRDjKM?tdc2p92l;q!IIhVL zg~w`q0K7osgLIbhKcPFoCM>nQ`qv!F!1}`@hr+#H_WTcr*J@q$7c`3 zx=j6V4jqTXC{17j+@|qY;kd>p!3mAO1{)erhE0u6gVP$H0cWZ#{V%_Gh(lHrD8V_6 z&w>xt_-t73XlBCR-`1UTV7;R`h2Qm+1UDljyXV)#@veE9 zH^QI5QbdaX4oev-h5bL`7A360p9)K*ixXZ(&$(I-Nl&`~zVtQh|J0=MAsimnYUv|B z{v*6Y^Zzrv=yh+>`5wHcMODhC&`0nBB2b&#t)J5DU=`n&;T5m3|F5>k=i{(m6SxW9 ztSR^l+(V1-eK@ws+a2F$2OSTrA~+6Sg?vVGkbIg4hcy42-~q2&-uC!kM1dB;Hh40u zw$Jzduk3Jm5gZTSsquXHL5-KdqlbDqa+{Cu61FsfU*T|p#`nW(NU=Hrc~JuF=P7&z z9;5N=@OJGB_xOx`!2^edHd0Asf-(cXdW0AL9N4;83$R!O;NfnT{TW`W`M(EGhFe|# zy?0V)H2?8%k2ky=nhOum_(oU~RQ+oT{bDEWPj|S}CvZ2sPz$gW9R)r{2m~fl>Dq9RN;B1E;TCN)=%yFM_4nDF2_s((Dx92urh5d^0R{MDeY#)G@_(z*5ItwnBH| zAeBrB{0f#zrFbbUtw8Z_V5#MbAAqIODgGTSl}_;rSn7o0M_{QF)j#(C|A>QBDkbnZ ztPd`$VDE41&Zl5~aCutum#+0KSg&MTeEdEV7Cw1ZqSWmzY6g%;g13$#!axH~FhGTEK<2fDC z3OH+cU-TF}UgIa=D>Z%!zKBZQ%2!E8_5r*YR-@y-e8fGlwXZ9191g2Bfw^#q1gHQv zz}-zR0k`=04jHi>bLb)XB1?1l0}fI~O5jmg%1H5_U@0QSPr&On{tGNcrun zOz{?2%1rV5uoQvf58)?Zb#B<&y~@geI4nh=_yAb%+DCS0{P+I0?mQR)z1{ctz^SF7 zE#0c^d>kyTV64jvKdxq}nub3QOOXsksVp=Gep1aLiADHySaOKq4&P+qAX%yeUV$ac zl)!$UR?=%HPIeYR!T2hcDImW*^_~<6pvyH2Giq_&)fMw>;bO_3&7@ zMeCR4VKwjnCcF(+UGbIh*kimL`Js=0?Bna;Nt*oiaA<5bJmU|) z*N4OC&0Yjg!Ut*m0bFtei2Nr$-s$7!2wk%#AB8W~xEH*j$};}Zgm74_3G{>S(ReVt zLE{#9o5uUWBgT0-GE(?hj}P&&Sz~AXW$li`2AWOvuQ_xm+?^~}d^p?}9*l#tE^t}- zPlu(970-fASdA4wb6NQ>hL_!pyc0iVeiIJkuksY!0w0Y6X{{3BUtLxT*1%GU6#oq_ z!9891&ss^ok1+U)X@r$rNcx-^ZzpXp}1M6eQWy}es4ymqq`hTmz(MDp@Rgc>44!km%8{nfUU1*{ynf?Ic(}%A!=}d9!DBUk zvx0d5AenueYlSP|fO2SQ0P@ zCDLjV?^Gjnx@!2lv;z5neO&*iwD`J*tgSmY;qV#)&K!>a-DB7GIndw7gW!c)4($tX zJW+iy6%6ivlE(+aYcy_yH!GI)zo9$8Ssx!JOah%RCV>@L5?uXj4o!nM!RiARx~%+d zH@xEOVO0e5zmd=lICy_scP@eTB8bp2Nu8KS3{nKY(B!37KMGGhStY0`^tg{#!53)$ ze}y-HI4pFfjDJ##hxg>XmoIpi2!!Xrt0#F1=fmqYzR;CdU-WJGtq+uZbLdi7B2fPS z2dgiZ5B@G({d2~jtvkPugZ{-=*958ulfQ)Z1pL~^_rX2BrXp+#J>cWt!4ozAhZR@H zzoyV*I9&OWSH^F_E3^PxeEdGVNR!{E7yC$>{4gKy4`0sldoMm)a`+s00cY1y zDFVgM!FR%{8UEL016aEeI{ayJV zxUA%V2tSGcF0TKBE-U}v!X{QL3+-rv@p zANmx0toe(A;j#8#Z~*N6ZQVH%)<582&0oS#_Jy}j(*)!T&hRP7YyP6(YIy9aDoZh1 z@$o|VQqBKo@P>jXe;_0q4`S!PWOdBQ}dVbKhVNEaJ} z_qTQDL9m{KhiLv1{?uA{XZ($XzNraF0;c#B6g7WQa7|5tL>mcRtNBa#g}(5%<}cy@ zsKQsr|48U@O+XZ^@+o*q^A`mlDh1AGM?xQK{t|wNFZ@o;U&4>vvzmj|`1yi^aq#}O z?u^5F78;trC^*AaPz@6a<_T_N7oDMIdtvOjQ^5=DM(3~{YeWTDSpSNaI5AoU%bty@FUG% z!Vlf6eS-Fby+3-|y%_)X6phjZM8Vg63cjKFO9D=Z_3&qE{u2HNzVJWP{3ZMX%ctNc znt&*H*r(tz&0iF(^o9Sk<}cyj^M(IF^Ox|}cAtVzH33nuf4}xwcp&Wk(bd9w4jiKS zOZZcL;lHW*lK^Yy6rX~kCLju~@hP}g^OrAJ=nHRa{u2I=zVMH0{BVpM4qpOAW9OfG9W=-lFyGNBa0^Sg*9>wD6L^@vvS*2ac=iTS6+NtN(IU zz8b$ocpeT5&i3Z<7y0-SSdZ{KRR!)xZQXe}tVh^dtm+eEHi__in!Ln!KfLVh+WNmK zwA^v<67UebN=wiq@aP$y|4MknERX*J>j_*9dw*Owfb|5vBI^u`2o7==8qa9~B!&O= zDa204(}#aISXUTra}D+nKV`Ej^qX!YSSk>4iaNzhc+f8W7u z#lmE`qi@1s#{acA-0C`f3jsaA>+tp`TSF_mRRg>^gvBTCd`%%EB!V;cu9{}41a#kr zeZm`BL-SmHyR|lj?i*MAQR+USaA-CxPdq*9`hQ^IF!mttiw_*e7R*V*LKnLNr^E6> zk}84)@WzR)&Y6!SU?&_ur8TtHm9Gq^NEWp^zws#k#(p%rOIkxqT>m!?qKIzs!dnL) z%olQ-?Q~b*JUB}P_qhBISZ=GekY}Rsl{ON@eZkA!960b0a`0&)bmjjA%ZwmP# z*6NL|p$RT8OB4RrEg|#3YJxw8CoO0R?HE$!M22m?ueXHa4paWKak%x|me5M7v83=u z;e)Bw)f9%_f#s6P6gPpbS(;Vvp&?n;i~KpGsf6T!s^wogoFY1*H8jcfzYShswT9NK z@JEniFY#uS=$G;Th9glhp~W#25`{b9rCOyqdJJ{q1XAoOxBwpVRgXs<)xHv51IvR$ zi(L74V0kY{@d-yag-*9yu{&h`BN2WL2iZJUS-1$k`1ID$QddF0W9S#Y>3vajEIG8L zC3FF2E)sqbyz%*#(4<(E4f=Z7Emw7*1fRaSC4`tG-*ha8PPc@50|Igr!FVjlg99RWsH?@Qo$@nJ%AK@Smj|_16k}so>FIedEui=fOT5FZ? zQOZi5-5l-uzw{NFnZ`R#pjE-D2!>Cj2;U$=SN_ElIr!vmxV6Bo<%gb3v+CIz>fyHY zbKzwt(lNRIM^T+O-|f|b$Kmn6K;Bh&+^J+am3AU5J>4bnmS1^wD1REe=Z93UX3Gbk zFcp1kTCGrvo8@1g&KLc5sPnG32;2?JBT}2)2zt#R%O3XFm_=T*;uX1ILRd=9y+8LhQidj$?+P&nBYcm$T)a3frvaUT7I zR!4pX%VRXE&TN4f|H&II%NNlq&T6gY@cS22=G+}u&G3=+r3J8 zE4+=-P9|1bCVx4Q`#bRA_xt={4CgLeB`zG^XjIay4VahmO% z8`vRP+zN3S1%>Csp&tC#ksxS-J`Hv zMn8xUlHz@DqSklEsMPI9rov*rH{9i0U@=}(b>auN@Wtdv+ztOIEEX1HT(%Cmt!k^S zYUPh%y-41J^=5eT?d_Z4GFaaE$hr!5yMrQ#dL7d-uw2bnIeb2>4eyjc4)VajJXgUc zSS}n=^v)L#zmwH2_y5+p{&{$GbM;55B}cNqBK#Yzp01Fqz{=98y;maIo9iV{swQ} z(`#n`ejEb?y@;Qnt5|L1U!^LsidC%~}3k>at#oF592FCMv$ zuK7ztL-d%A|My@y+nwPi=$L=Due5i-G zgNBB#cKsK=+~oYQ=~B0nj(mlV>nluR<@{X|@FQ_Rp&HMhhcAXpu7Z94L#>4;yL=X$ z&3fyC``~q2CESz3or3=&S3VDKhc~#q5YAGh*6FT8&sR~9^OjDd;U0$$txd^#zs7uE zG+*Rq@&CbNj_?xvH~7k5R9L{}aFQhz+JB=uKE2w;Qor zmFK?0#Pt=6TIeR=FF43cXo~lKm*H4r>jMTKhU1lP0$+#aZul}c{B0kRBQImZ5w3PT zZ^3e-@?tl_>~<4S@B&2Ni`hF{?R(>5VLYxb~q>)8$0M z{`>Xe(Xo7`n9UbUMmm?P#7o(n-TL$J6|rP7S;=KGm6B zELE%&5~)NbWftOzd^Tg}ZwMdPw-7I6zn@d^^r#9Dk*5=HHhubg{2qR&iczbwHJ9b|<+7i?s+xb2{2G|q79XX*<`6t5r z+H-CX4{lJt?T+xE;8u}#`X#z1{%N$lGt7S)3$TkjwaVlqXEJ^1``Y}|HGA-#VKZiy zve}%ON>|LHSvK;9ede9vq?IdV%Y|$zo;2d6M5S0!Be0v&RGe8;HW|<6ja;QrO2kV^ zGoL9GbE!<;%#XxDJ%}&1|f|05XkG`4%Xg`kbjrSbF^nRG+ARZLJ)G1GvTL z6}>OWxQ;nWikzbFG)%`J_Qc1-drk7G?kJW>w69gc0Su?P4K!01Oh5O6>6NqQpLgDj z`RC4`Z=N$fJtH-vY;U?NJiK47#1uM_Wxi>qm|45a1N+)l;mi?2apP(~~JPnMhai$xE_Jwla5Qo&y?ZOn;r(J ztF+a+{6NXtG|zHIo+Rq{b<=ampb@8v&t#LGw2Gd_n zzVryRR_URn;7ohUk0K-N_<51ArAJmjE&?@J2(?LAuu@eOthQj;TrKg9rNgWZ?18#X zde%liFZDS@YctoN6j*Jk+Waa=wk_GP+O}kad0~nGx@RYw!z3fs#YgzQp}G(ZYI#m;^45XvQ()DZ<}llDG{?OS zf%avR)VCsVyl9of!A8*ikU4%MFT?@aCI_^`(Nw6w1j ztS+Xz-hNYH;mV>?CLLXLKwAIfZOjy{pgFgQ>4c^Ea0C)JjOw=V5GkQ)1)PnHRCsb@R8!B5u0 zAVj+`Gl(R;*RLbPC;x>Pm_ zX|_D#Ni&_Vq!Y=PbmC=QZhVVV9ERG$WDB zrL&kixz!|4(yOwXs8wI9*T6K{`l8<6T%f48J6IF7I{PlKE!Jc^6RkDyK*?IiRg>&A z{#w6P6YVVeTBi{x=}lm2qMgRi?tP;L>-F+AwVkEa>*ZZhtMi)Wb@Rb$8_zATmv^*U zUDfSm$MWjz!&m|~nqA(8Iw`QaZe8B|I4}>K#XzHJsGWAYQ5>dM4a6X66(5oRP|44S)ft znYZu#Yj~zrNtUxoqg2Wk6J{b?h{v<(T#6&zEJ7J0U23b%qyr_rNoSxa-DY*`%bEEG zihC_ASXAZ&Zea!rCqwz_3c1k$bPN6^bxALGw_$NHAaeSu1Ayqqj@c%4p` zE2%_2l`7>qKsSw41+$J!JZrX@%a3|4+|(2^)0LcAF>|F-n$z^GX-|AMJkWl$Uv!rk z2lzS6{awD`HC=H{ym7 zFQyGU@dmjf8P+?UP2}@&T13LYnjmH0{5O2shDLhEitHbhlktR@9>>W%$;#m|BcClN zFeWXU=}e|}x!LHq7a%Keld_Q~R%~6Yk;zob;!h#xgNT47(!L2%SwKJt6hd zVQ=|Y_&|%j)wr2SWD2EtxtvLtI*bv8WWEs37U@rmr97?1$X3dwT&f(;6|v(_rrT8R zsw}H#Zq=z0OKEYeqMUShDyu}L&3Fb;f#Ocr+nKyo=YyOzOlJY=$xDOyJn}N>cje{q zEcgp#r}gthAe&;1$?xhEAv3z+C1>w_SYTqRr!cO;aFBG>V0g~NNWT+@?%e#D&gfEC45Qu`!u{+^(9^H3 z09T>j4Yv#}7fKl}Jynv4thA(3vXaRgl|q&&5SGB@R2!}MBaERXLG=}->>FPQ7YmQg}BjP`I{N8Ys!$T&;r* z6n59J9Ge7+W~rEseVErD1S)lHi0x%Bh9|KwFDKKPQX!emCdzC-xi+AUMan@*HTyru z*PFE^yd-p=E=$Xl1>jL)5WkDFWE>XwZD!i3=JmU2b)pzhg|!aa&HY?9!_tGhhpaO4 zxl*1SD^_v|X6|`2n=d5Wobs=&t!B-&x@;r*)FheCVUEN_f*gyFVlI!Fa=MT$VcS{E z7Bi(H!-boOK*`!XIGMHrl-A}Bfl8efjaR&Z@;RCHnf9>{u|iwAIx-|?CJI?IUt+$O z&g2S-ik;{a8EdaGqrL4j`bEySm%JR_T}n7&|Mk`IF1=YhCUPn2V!4uccgFM z3#XqqvyCy79e{YLkTc~(Eg_wxqm5g)kG&J#%N9+sVmz1RfSmiinDCqNoU@rQC_Q)f{Bw(CuHG4y zOu{G@4I`5_isZVtqhJ|XnprZNE~Qe1bh_X-wGU2*zS0ktcDfYRl~Xg0@3LyJdFr*e zAm#SEZ-(bunS41{D$sb?9!bU9-ysgt(57|CLABPiIc=xas#n9g4yk=|mtQQ`jcXfU z?KIa@%nY^N%)OMi0vek$Vf$QB&`0Y=Ljh@OO4%DWhfh4FZug;24!AE;HuJP0E|C{2 z9Qv?vX6DlAwBc9;Rt_w(8uz4oa@cy zWImTllnR-6F;y^21(T~Ra-*u4iMO$L@N9TML#>C!d;8X7Z+#~m|4LvKwS7~uUk#A9 zXT2M4ofse#Z@&86PmaY?`9dLQ zF#6}&Kr6(nI~M68cYyNjofQh))}{|M3Z{|Ba-Y0Foy1DJHYx{7>Rn2pu-l{9OSgs( zwgRPVJ$<00cOVxiT03d9+Ja>pPXVU=)k&q>c?9YQpqZYwk+6Dq36F1c}}OrjzUfqosZ1)7tQg!>G?KYI z^Xf#tlqzvCkvp_3vb|&4U{Pn)GTbh`z$t@sMOnUaV8?HCdQRqP>;vrEX+A9bh|@b3 z6M2pwSR0s?crlx)UBoD4bDZTA%IRc+GbH}E94}(p$d+0qk!8cUO`jkI3S;@_mAocB zpuTR?u)p(mcyQeTAz{ew#X!5;$KgJ8*9tNpzK98cihO*E3B)nHAo`&PuF`{>fsFNV6uJo}9(0OER zgyGpSvKv3`_*M4OCik=Y)%~o5J?E2fzmB@D?H=jtz=HBKmbB|k{lIGF% z(?Hd5N;-e;^fS*b&&bc4Hhb3Gwsbnly1SB0af-uH4(EzH!u>Nmz>_K`Q^|ZLM@L?$ z9&xJmttcqWVrtsv7jpui=67{UR_zOR9@r669jb^`7}zqEA}hlj^GGIDT#|nHzcjgW zIl(d+>u26s%CN&;tvdEmpM^&(@Bdl&(WY3AZ9<;b$z;=poSAYQ%Km_TW^-is{#XDM zlV&{4%K-6Wu9T?;HtZ9d*@f_XUN<2!tfQk98PT{814E25BXB8U@7^skxWC`EnyR!Dq!Z6nC;EPbzK*dx)Ojpy6x2}m5*OgqX#$5l?JI%_&!<{87Ud{bZ^rh^F!;xY3AHtDSW4ye< zT8~G!@%p}36V&Di-!&jUPMTz*y+q9vhhL=yN42H0tI$c*lLhd ztlEM-P}u3A-1%aluyeMuF%s$9&!04>`XuFCU{9G??Ar0G4vR(xb#yI9BP~{4Wxi3h zl4S{3Nt;HzQszT*NlYU!%3$y-a#)@(_}>}{l=seltzg;O&Rwu*ZSOEx)SVUDFbFU53$jU#!I|tk;>(rELY>h+^P8_ zRvdLC)C{{YBR{>IDzDm-386Dp}02iD$5Jk}73NZ8DjwO|Sx`Ju?zlbV%o#v7ou;CG47m zl-l{8kwI3Fly*x$ShQC1!J_VV0*6Pzvd&`nbL1A+6B?D~$f(V5X5sCor9o+uGj!*H zqXG7VyF~^sZ`v)=(i}^b%9V182l@&bBbkVorMe7A`(4{r#lpAdm1oW`PH!vZleuI% zTi|?;#X_-YTfHNxe(bDaQ^gx9r4(Dg$?6<5VfTsl=>OBzk*K|?cjW7_JjPy_ZaNTlibATgFGwGOXq zg?7sxk(Hx)&L~we^4QPi^K1#W+Z7Lr%Wm0|g<+7C92hs4q&CkaH&CmxOt;zsMLp}? zK+)RXQm|InGF>bK0@c>~%|OZ8c21xqjYg*52e%s#yDsuJW~H}>hsu@$w{QbwlPTwd zL}10V&)6$6=u35LzSH%Jd zX438e@2;3XMtea2$ljLU)oH!X0h!mu5Mw;W6Hwe#EN3z7G&6=_78n~i{A0LHwlk*; z6xO%)N>-3+&+tA_v1jWQEUK0{-}Gijfq~SqbmKwn1p^{OV~Iqnj4fv}SK=s(bJ690 z91!_MbUJG&tSC5nOtZ|(Wjk6ZrSh340abK9>-{_)%_qz z*Mt@0z+$|T$G9|`Pb7IE&ok;ZFx%x-+e|T)udvMXjCycJG5DBbO(KMXvqH?pWkz z((H()D;Rj0_OlN}uD8q-w|uZfW<6WZo0V~GGiIF$g!>n zdOWbr=v;wVR_15Sn9UQpGv}o%v(KHGpJ#7g9yy^maaWR=WW11O2utPd4Muc;J!E#Y z&HmAYkpm73j5O70r1tn{A~WnWei!N8JDyL=LY=46Fj`J!?7bg~TpNoUSU@N8>2e{1 z6?ZZ3xLTaBW{h%yx0g8wPozuZ8vJ++<^IR)OJ>l}uYL*G<9;8xBbMjkwgLvO%=qJJ z&XDaLzmJSKEbvV_RW7MyDo(&emYR@ei^bp${lk$x?Q1qfTI`>!i1a@?Ft?3l=U+(~ zXXDqM6CG$j{9^QJhK9ZL{4ogCg ziYKyFEBU$Qb4%qji}v~_BFj(4KEF(VN+({3VIVdpU|0!g#F7^kv*zU4Fq;;sm_~EgI~cObiMBX z*v~P1rn(r)WFct3bsz=4`;(CsTrMl-SbTDGDV@$Fa|OHUnaBVZio@)MPe#(QT$*E# zTsltV=_DHy_P?Httg>G_K8oSmCDGkRa<&pL$FU4Zmoj;7q;+0j>}jhb#gW9p107}t zgMv(oGnFpn5Bg5zr zm+bqtMF!XpJr_BU?QYf^nG_QjPTw#bwBLU&GAsD~(?^znn37MO^lPT+qtqu}d zPsJD1P^}Zz|FA?!)-BP`Q=rMD^}l{c@_(xn`|zrJvhxzPzxRA(a&RA!{GW@%=sXP} zd&;`VgqUH*^JP}YGMA0#d2gDD?u;0#_6qh9=@LI6!^VzbuUHpJR|o3ArHmSs^Wi6gzDS0G#uxy$Qn(9%6m;kZA~{XI>i3Rzal@hhu;y2*^j;y z>9YrSR1!S7l}(k3<+3SHblI(Uu=EqplR0_M82J)AY|Muuq{wseT-tv1#mLB5#pGCoJ2GjLTN~^X+b-~D z%IFACoH@rn@jsE7eYm$!OjI&C#!-XYHs&~SKEpnEBhz5)K{J(fiv61$_v&-@A2vk3 zIRt}7Y(g>YW`84*F1jObJSUeq?Mq*b46;|PkDS(r%QgJQO^KTdY#-+Hm2nvTL@phS zt#uJw@d|61GN)!t{m(peereiy^QIa0MK48C_JkKBSH{Y@d?sV^#7Tu+z+x$7k9;|D zU~i@a{AyFa$lYajrb>4H-;r!ATQ+kAF7#x|TrB4~cY9xcX(xu=P!W6oe4ba+%S9#@ zy$l-Q+C=*s$hkrwID@WVl+FsgV55M8UaEFOHg(0(#RMtMBjcoYRcOnPa zXK%oIRHZ;kEBToJ@;Yr!wTpwv0RA8@@g;9$1 z6_ZIrR=Z9vm8RK!-ir(voj$5qoIQWmyos~t&O3QteqK45oK-&m%;Jpvw3+47nbRs~ za%_^HKVzQ!$V`$|7W-_>X^etQzo;4gm*2fHGQNqo>q`}ivmn(q!*Qm4)mxE$v1YAg z^Krvu7l$m(<*Tl#L?)GEODk0}F`+1??EGty38Mq=&%5&*4Es$cT`4MTntWq3Ht=-X7Aj6;8&_r ze0A2q!iH0G=g~fXG^a!}F*r`9wE5kN&gHA06nKYR%^f;MSWm&hb)G3u^U;nPoFg*( z^tU7DS~MG8XdvA@uwWE&YKtQtPo(z%cDoDZ zTqZ@OuNa2>UPU8;Pd=%@;K|i!-pfwWIi=MeSKxQMU2>gNJHOI#QZkoIa#4dtdb(6e z%VQvo<)=G!tEX3fo^B*9H=E`sYq%mw)6T0FUr+vDJ)&P7+2MCJsx#br@)J*qPU_F? zxMY$CYx&&|xuilo$hse`(V2^nB<4+W9X>T1SdG zb|OocO~1;|n5eykdU5UXUgSG{_^}c;k5eh^fjFy3vs*W1|LCBB>G4OMJbv6s3?<2e ztl>-f0!QB5(6VpbGg`4*qtQKMl~jh?Ty&9!oY?Vbn(7j>F)`|4gvl|Gv%ARKEzZp3 z->vMB+`db+|6zee>-I?Xk}W^t!s9T>IGuEy{as#Y;kk%DyG66TIrV2mVXjc-)wWE+ zZmmRfRto#1v{@oYc-I7D#zt#_>Gm3R(on5OftODWsh}3ix`cH0Sxhf6fk|W&Y~y88 z4eC%^gT_{)gN+~RVGD&`LC!0tawT=701iDSR z>ja+6)hAxrGjrUMHLyJA7XX}&B2c@#(CAuwpCUVj9E8b3yv%L0#yETKN0Eyrm5T9l zAy>&Uz|c_3tQi`Mw6-khGSdfEWb=^>FL1>R3v<4S6~N5d=aud0TO#v0rDv}(iLouy z&VgP0uVa=lY-UnCl=zqQmh(gZMyt9MCX zoxaqozYQisRn)FiVRiLXfZAaBA5xKUr)r(4Xyge1t_e6>MV;xG)y9QSvF64!Gr?gx z2R!tY<)WOFNjVluZSI7lW2uf+#TuwWC8AEnu+RA{@?Fd1B!!yCi}c)aC~%ddTDgN> zd2sbo&yp-0QjFl7xbTyyX|q8E?!aMvaSd+nd~pTR>&tOd9SxE<^X)6PVTH}EH1F3H zlNpRJ;)x9Q_#Z_c=v%K;J=>d+{>$@j`>Yp}c2ZE!TRSP}#Jl53K|R5jk7pSqryeJ9 zou8vb<^t@CrRw0d^*V0+9fk$(0YQTC*M z8jW6HN1uu8XTKPZPPO;DBhuSGq-T$Q_OM-}wzmVwgo^?Zb%8Xik@(vCr-q9c|}&MvWt#ObfdDMaNZbB&jU- z(3#g^ERoEZInEbf?-?E0o9j46j$ht1E3#m4_JsP|ExmdSvQO+4UD}&T8Wy&gDqsu5 zRU>B-9^;a9i3=xa96w?fj6)XIJdL_wvL7kTJSOisoIzSI8 z=28Z;OZ(K_qAjB^yDf8Do-gC-Pmx_l)uihLcxSih&`~*qDGSt~KYV?&j96>}6xHf2Avdvwewer}Sn5X<~@lJsWG zuA9FU-qQghU**qdUDTcDa(-d8$+uqqHnjMs$Hj5R2>}DqAfe@zU>`U`B2dBWX zKG9Px?tW6y<##W*HHJx#>JoxJ*IAW0&ADTJ>F~Mrzt*Hzb-RR)IwbXD&Y+P=LU^S% zgIQ*6!4mLpM5@iGO%Xe4mJQ*Vvr8qm%{_yKKkpG88hqhjb%UH|mKaZ}g}bclUVLm3MA(ah8|ZXr0qH zdRi>UOOp9?R%A<+WQAV7U-TP&c%?T@ZebUYO!0_ma-2Nw($9I>wGW0UtSveEXFm?x zjJ)HwSM{k_npY-WVdX|k$7F!pkrD^zxLHgrnSwH$@U~1fj!LCS9Za)`;o2>8FfWdt zv3QmrZq1fis3u89N{@nvWsNe%$O-Pp@U~6SUNSIxq#Zvd+CRoy)~HXi)1T)jVKYhl z$o|nuu^hLeSWTglpE)iW6$$W-K0J*hh7tV0aR$Q!T7mY3?342zl1VG!(PAz+>(Li8 zY}IqPAvTpcGoKc1U$uWfAj(U~MT47@+~dxgOepgOEoGHVmctOH(L5eiNwLUtQpUbz znak5G`gjG6jXDW%YK-N4ntRt}`WBv3YL~DwcfaIJh|?#N2Xflw3l}1ITsFf-K{>&? zqpT$i!$eMPl3WjB<3Ns*=<|ohav9!3lq(e6q2Q3RY=;L&+hQEqxKN7!KRVz5{}tvcbT(+5=NJwctEsTOGUM$zgH8mBL2nm2xnJTXSE>g=Fd zOfyon(jvyf)H5~!s%Z{H*{DgRF-OH1onMf1QXHtknW$QFF!O~~sB!Fz zYZ$CbuZ{|5Px)l>hU0eTMKn4iQ&D@$fuE z=x6LNV8P0C!v3%&YWJqgu9(coIMXw*Te26oMz4tRm?67z+{fp&W;%nkvz0TlQs&Ac zdwEz4^4M5XZ3Huw;y8~f6x7J@HaDf58XnD$VszojEDq|WE1`GnDu8U2TjsP` z(`1&Cr%$KUz=2hn0JFjQMaE`J9u;zI+htDk#dJ6-YFnkBFBxZRZyVKS zf&W7?)J|O;6>>DOe;-bnczU{oF)p)WP9Lf#7IwEpw7)Yc>m_!zn6WVRxazv-Np|YM=)6&KD4fc0Op)adENhRh zs-2qrrGw{vU$9WMGF28m^{Un}4bB~vIaNI!cAq}11XsKp*~Q*Dl1%2rizn&1v%;?! z@v30b8JGH)yi_5tR4`wq>lLGNX?yk^qoR9`GEL6nm}M8awwdL^;!pr4u@^T(*$q4M*mBZVwgsP>x#!DVd65K*OlWIS^ZA zT$go5#y|ztp@Ux!|H2yF+5Z<;z?Nn|nUQqVU|)K0l$U$3n3mzbKqh5)%BIo0$+$yy zN4*Vaj*L8K)J>2JT>7X6C##S@x#hsggygVAO=TmN5Nh1%Hp zqBZH8ZKivc_{Gz}+k%~Zh5h|_G&Pd9TIogQp&EL5%rD&LoaFqJgS0doVhN5Kvk6|X zc3LwXe+!!dWmZnY$@D>`U!%ez4hbriUT)rbPC{zteKyAcib6}W|6PXR3>ouBossk6^dmCvMaj_J?E#me9fqCuPany;$KFWxGxp&zpXSoNO!c>uKoE7`$Ml{VhQLI!j zEMv08bg`6Nj)_60ImVyoRh4l=x zNgn(nW;X7ySKzTPb|ZK@h4;*gJe%N7J37~pqQ1*LPM*{?tVBA_y|^qUXL4N6rg$#i z=9Y7sA(DL)OenKVcbVDqBkI+~S5O*U1@*pKY){PUeWc+h9Xs4!vMM}c6zk?xnL{~) zdoU&oXt%l5OMqtx8{=JTOdR z{k%X8wK-)S4M$Z6;h>jZY8z-BRoK_(qSN|f1kfRQHq*wvZR61BKz?v9#jhq6*y3gi zz!lNjB&B1h20u#K+SiM?g9_{bI05SLeobw9*fACMeJ@AGEZqcx5 zgPBB<*_U_hhq-8u2L&Q3w)#}`?F%4GTw62aXL1B+&sbQ4>o9w*-hV$?rZ;UTy)`4 zfm+-GucJkVGb{twJb{V+tS@m)JLZ^Zbou&YqoXEreJ0x7?qx?~%^NEAK6Z4UT{c`Y zEVN-(x6lfEoE_aay7=Q^p~Y`>v!~n9*2v^>!$Xtzvwv(yhenq2|CjD(KV(PuZ|2{x z$iHvi-`;gmbpPE}@83PN^s7ywT|=SJf9=B;MF%%ue4c$OUeUjw7Y+?nd3;pW-S<6n=FVg?Std*fJ4|vWlgVTTW4)-KS9%VTZjd8^f0>-+tkd$Xgq&*%N` z{Ue`~+;i@^XZh{F?>Tw?-3eRv`|cWRyY+jU$B)i^EmNvYQ4}R}@8&sIU$AN;SLjE@ z6UCz_48^quSFYVAl8KXBmrfCOb1W<&9+K5~DGve9UD6Z5^Y}(ROxU+t?!G?>Q^S z+~QYw?4J7!)uR}>9>v?_Qrezp)Yn_at*%nevYOrKH}`nl*z20=%upMp z)p*lYZGKz%x-mBQ38(q)E5@nZdCnbpxB18_BkZnp-bC$_bBr&zCttW7{iyTS9F+C* zuc^U2yiVthhI$kCI(~#Cr3IyhkK&!&R{bDKqqVioNEVE8J}B4ubz@7xigB;&)vP#?+~@YHEXPn; zf!Cop+GLB&?~LNY$!6==tHz?jN6ej2)*E@AQuFs@qcO!ZdxRX>{FPpez@QPBlry94 z!CB02?DdrPlEkPG8pKSJklUU4n(?M*oO2hEMBUX!UeOHmgBh=}sHoKX{ZixRqSYpO zWUez#6;<|qFlKI}{9w#y_=e4PdbzSj;l;*H!$x`K?}tY4a#a~|38UvOp<&XmpITa=og;qQWfG#x}~+<9lpTllUD4QQ{tobS0(kbAOwsdmS<6ZBo&fLm9zoY=>^}Hmk}(kgU;k zc$N8V?p;QscdGLc^>L`d$asgFzw>(I)RI#3cYQ(IsSq1$_=@A^V#MOcwZ${c%DJvb%}Di8STiu9@CA2H_^+WpL$wxvs0(AZnD(puLNqj<#B5j|wpL+x^p zVs7J0BVMX7H~DIFbCsX*a>n%XII9`(Jo&isg^}CMwvMlxZDXAS+x9%q{Ma~EJkp4b z%D+Ueqw>RqVz(1Xdy7HRu8vqu2iDwfzsYE6bPE4w>=^_7q`(H?L?5kv^4DHh%LhiI zOX(i(`a9KI&;Q5RGRhJc&C`rOjvA-Q^;U1SM8ki29bZxmM@nf^HS^LAx{c5_c?-{q+ZT|-Cv9-7VFx$=3ypBoMGyP+FHr;4ieQV##bN_BO zRKM+YB&~-0BkLo#dmWh`V)@X>jQ+N{Yq6V++A+77zbC(%&Wx#My_`j?=Yjwr8D(#W8f7`KkwXLa(95gy;v_g+6CE#FJtZ9F~xjF4oKe39>RIgF+{hgUtTdDYoUJEo(_z&2yuh)!Gv+yn4_oie^Qx)pzUQ$ntNkLhpW634^Q6^&IohA!_dJ%h+W#Bc*Y-Wn{M@jYrkqkl z$Br4BN~c{z7Cg(l6Utg&FOl4c6!c%)v?{hv#^No3pU?64c zb7i&hU|_iUdo0m6zsyME-9Wi8zxhS8zX5wWp-t8$zhF$SSZVcjnX#o}l=b^^Bh&l) z#m1@L-O)j8C8lkh$F3J z07~0QK2QG8h*gzZi?IEm)UHQ5%tdhSLfe*)7%wl6~WSsMP zX_+UCSj4jClI_NqB6X&@gav*uQf*P(663W_ZY@YF@>KW!DWTt=W z+)O3%Eo0%NIW}ch-?Wt3a$08fH{`U;-*4%gRjG@0~Z<+Rl%R=g+gYC-zsPIBGr5{2yacbgI?bTzD&!1Y}`}?(1D|>(c-qcdj z(_a0Oa^t)I_3?oI)SK|^-~Zlr*WYXrBX?Sbxj(UA8q=puw)W~5#!b^^Tg3aU@lelm z<%IFaX;ZECM~z^O)kZmFe6{AozKN_o_e2_}_f6#S>3tJ9HN9^lc{BPZa{i2eY9hwp zXV-!6h~Czx7hT|D7K5aWFI+g=nUv!8>&BJ~%WTQt7+n|E^*$<&eOQHsf+uyzTI@s8 zxs#iaanuZ|Gp5I<{<|c=*iW&5?+>Y0ec&zd>hqs`0*QSPZJr(4#&jUfHpv4us*)7G z4m(WN4{m&S!dW9Z<6>LvXU2;&>i$iRJo7HEjOX!CDo+n(^PubPhUuEw+syhu;TbGp zW{10GJxjimXmn50x4RVKgBu5T&g)OfI;sYJxgl7e?6A;8RL(0uX27#iY}kAw6@OreT=cCb{0D? z{hQjg>=Lt^mwSd`vQ?6M)kaH2&F@!7pU$vz*ZE*V)6kP~W6S*Q=BJdi#-at*XO%x1 zKU^?**1Oauww2FI*%EdY-gDMw*gHX48Pg2ENe=gGUbP*1oz@l0CZ8qOrgIj)!Yo$1 z#CWrAhB9vtd{jzb>zQv}9h&^Q7^xvgUL%Q0X#vk`tf;qX*n6!V?1gR5~ zd-U=yCDE!Xyxh*b#6+g9+-+>RbCf3EDMWv&*QH9m>Lev`_b%neNy+iTw|SVMZpJfqq1SN} zH|*>}lYBGUDG^>-D16J@n1L(N?1BXJ$QKR!+896F#q`53GJfPWrXTqW<3}5re)Mj} zpXy-xQx7ry$y&w_Eob_nRg6D-Gt-~7GyYsL)1UJ*{n!*{+=JCDaWLcFW@falSE6UO zE9o;wl<4bkDEjd(g`aS}sOTqNQ~1+=F$&)su6ZYXM@he)!=h_0QPOK}SEASc9v^B{ z^e69D_@NF(KlG4d{8u3}zTd*UV>T+r58TWTs@1$+R{vX5&KB=VNxB*N576#L(=+9z% zpX*RG{TTMwz&`!gcj%*vcYJ}|C*%G*A8U(gn4Z zG(!9P=eJn&PtOuzf)0w6^q>FMx4kr&KfQwft?hknxrY74jLw|F2#;cBmtddq!8JE3 z(KnyNhhJpEe{!q{WXFnN=UD9TSnTf@?C%)t?^scGdMq!`wdv*cHXdlT>4D=muB^`lTf8ucK;_6tO)^8yjhULYbTFF^fR z)Q?5|IMk05{`N8msxlGGmWj~GGOm@U#-PC%G#HBpm|eRMqxT6P8kC(ZgP>UmQ{+Mf z+f0G;t`s;O7&M+MHfc_nUd3*6R-V=Rye`HUyvX!9uQ5IsL^-dK@%bRi1szOZ2%=nA z%k;U+nZ9HdTcKZcGt=ioh%6~){31|g?G&b0rbhFs>}b7;jp5<=81IPnit$|=^Llk` z$7BJ56d*_;LMf464dR0A(C0w7%!O>JgKTN|i}B5eLfS&m+1$GoeMyI+U-S@2>rTZ> zBm>SyS5hQEq=2J;2T}4GOJ9xMPt3wFY8AZ}WLCEdUEK`wMBDp8mPDd=H}<{vrkAC= zAr0^@zX;@Z5y)-TET-4_@!k}rn8Zo+&wmCJxJY)f^o_Ha;W;=;16ift{4*22lh{q{ zq#wH)z^(?1E)*elp$MPF?wzLH8@Rjw)aGQK?%kZGJmfscUcCoBXf z%;^A=fD@o}rNAUk=%-ZEiQhwb{sl^PmQwz-1E?51B6mBu_3J89XD&li#y`mznFg zbi4>NKO|Nu>N$B3ZKl&P)o|J2-^%AUnbDN%9=k+Kl&E$XiFUob*3JWsc0JH#kFGup zh47LRU41}7Jp^~7BQcChyNY%y+No%#4rrI7;sd6VZ+o6ZWafUj78A)EN)#V}JYPD& zd&_Xe+UPMnk}8TGct+#8h~b=a6XY0MRPP;diu{f z7tE7B?*?0RLk`n}*}`lLrQ5dfiWWH0N?9z3v8EdIL%u+BL!MntDKqIv!S{ z{O712$RCpI{3i65#S z<5HC+?ow~Ya(cRNJrMQ|A8uvW4!=wv;q#!a6wfT&D2(FZUUZ4x91*Ydk&rB{*A-e|T5C7f;`|f+ZHJUq|Er zG;V$T3iS&*>%PnQ<>OZ`NEE}8-sH4ncS}GWCBnx>iZcB8+ebodjugS{NGP+B#<%{+ zyqBI2*E%(_MtUJfUOwnxiuaboiudT>jg3!?S=7cvsHo8R)kr1%-Funw@(3k;&ppie zWr>ph)tgHCW!QMXd|ioNHHC_+1EAW`^Ad!Yp_q#!;1G+7(+0KyqD&)^j8jGo^A}xt$1N@8_lrX zB?%_qk2)^p>1k7WwE2jVZbs>x%8k42EbVwT7X9hlN_73(v9$AmE!})17M-@;7InO@ zq@C|8#>jjY-Qb9)ZS?FO#rRc@apBMFMyKts$D)o?v2?Q|?majX+0G9>Nw0q+=6%`N z`tyqVdy3&xuwoG|9gZa|!4ejW;K^bv>u@k)F_@|ZG&+tA?xS0&_&8eg*16wn zgtz77lVM!Gfeh~lpLkb{h4;jUVMfD1D8-m%v2pn##rP|>`X}#!_}_~e&eSj?nVpb7 zOa$78fqaI6e1;i&v*(NSnvqPDoh=}H6-HJ82>~=Jh`#hXoV50W8u6nwaxg)p&Ag?v@Rm5tGjNDY}_7;{^#p(s>UeBWgoHV`ZpBgQYZ6{z|TuA7F~VD zqNUi~-V(R*Nmo?6jHMs`HHAo&wBv{^{qQRa?Nj<1eE-E_B|7z&pejHPn(Y6GUfQN4 zK+rTrL@_~0zl?cDj8KdtfB7VO*}Y1-^uA$?b4TIr^3$)umuI!3OKedrf;ufd`An@cN}B<0hgjb zP^a*nEsDPL7dYO`1E)YISYptTA{3{H1T4ta--+@?aU3TnKj;2@DIt;r<@wz?mnsRM5{eUgrJUl1w*$n8ENQ>L^{6${4=w9%s z0bcbIk1myw$OI4DReVT=jC9~bDvV^5T`JrGl!GjE)56yJOzh7$;sjXEbOFo{et~b# zQ}peN6ux7VqVIT`!U29*<$hS@0a)b$)MF(VVI?O-gx zp+1EA5bDwYV)TCp`hP~@71;u8Rft!l3Pc2@RuRXZpAPd1?0p%PDX14J<3%DMpBITB zm06Dnoeqm|XEo|Pc$wbu;N1x73h{0PG!zj5`~>k6!cQ23jbN}o45sX4NaSsfP@n^= zSlTAjhsjl1VpFaR>zMo5yVw8FtJsCSI)0(-^%UqDluT1SVF_8N*5eb=# zc?GP5idwr~)@bLV3l>A8g9l&{1Zq_tghdeSQgxA)Fy(q(; zXDp8J(R)T7WjKSZQLhgj?H5&PQDgIRGNSa*1+ihImK8N!i z>$tw-Ne(_;2$8xFBDDb`wShliv*{1avGJYjZ2Hb8ZJ6;KY}XuY*Boru9KB;5W_>y) zLT3?kVsQ~EikozlxlM#u=AwUEojksM4ooyE*V%;@qFKd89^^= ze=|R`_V;EI!$wQKNoXiZgwwL>UnVtGfTF${UyY~2kyVR@p1%B)-L*lia(@6%MVd$%g~wyI)3_Od+X78`aW#MkPy zgp1u$F8{zw`C{+xT(rp-`>BlQi!HlBbSxj8qvLOoQSKBw9?ciNQm5D%$`_H%cCj0? zZ~Ss0g$4C;NKrXp+W%#BB6tIS2{MWx6k$(LLhMGUWJNSPNIf8Y*ms{E9gLoKD8f!RBD}f6zcLrAoCD44g18?jZw4?>a=p1K$=Q;D z^79pAlM76wFvI$t7|C!mV0(y}QbiUsNm=!aUTzA5wuqamU0|R(Rj+J;EII~8a)FTs znH57A$puF0XI6YJBPl1u7VSP&Y<-lt$!&5GxJh!6#W=f(vr=GpD&sCN2}o`vYM)Ngu>j zJxmqPvzQ9oB$*2K3NclD`cS6Ig!`CEIRvI0VsdCmMDD?hGOU4_=9xB!a?G$VRk}y3 zUn64|k%x0eD0nzq#6#I!L?|FS8XYhXU<8BEKP^%*UhOj(2y>_=k?$ZxHH>95UJ^@K z>=icLso92l%Hee^br_BZ9bV_V4#OE!y*Y}_$Wc^bJELr~!P4i4m2Lb0`pMXZazNRp z3}=F=Y#Vz|5rN6Gv2y2&(B#>AcoPg}n2KBWK!d|n+)AYeQ?Y}7fvLD-j{2jlXzTh!^T3&SDSj(I605higb{B`Qv$pU z8zh%_8B5FzSYmQEax%)j#!Z(G6>Q;DAtpI!kf#S)0~Hu#1qKU~8ay(-7eX zaRKuMCQQeD&hD=KZ&|yRr&-$up(eKt1d447x994WiyYE1Ys??GbyA=qu4hhq23Gdg z9;Xb!DYrRE)SHuR7JH!+$pYB&Xd$o4Q}wDvu$?wRZauB)b$J>DRvsiB9I3!2X#S_q zq51P5uogk{Z-VBBBlTGVD<*B@+aX^_o{$XknA$&EXlZ}Yuas2_A2yvv+>RMDvIo8(&eqMFy7$D(=B`v_vx4ZmOv zBcFpzF};!%CK_D>_>IJ%#cO{9uU$aq6tyEuN-t+_3Rar4QWo$aT#51=NU(*FU>hL8 zo`P_g1xdLP(h+5N4@f?T^9pSt*DE$~9(;<6$YYS(Cmf>eRoH=h93t>Gq{l~a2i#7* zGVcD20iEr(tJ4gu0=1*)DOLjJfA4@`%fbvRhZz=t85V#U7M|r2k#D+$=9}fl(tvkd z7)>1p(}Kakjtf1Oi>1oNQsoNYo;+F^QTBG8@PCvi0`7cTKD{!fCf0r0Dk*P*MItmP zb3kN5^$ut%4?-1Vg@Ewrw?x5Ng(CFLLX55uD*z2fOVn?L0*`q_@C1S&uX?bAFeu)J zG4atbQRen0)_s~jNdCS%S1qCKGPf$5D`meVz@!$IE_go=9NsZj0Umd-mBTyc!v6z= zdp8ajL6p8dCCL6`iylKb_(X{ayjmiHZrMudHtTd&N;9@mo$ zN7+gx(jv#nqP4+ibtIa}A=V&W1{@)Sqbn&p_9B+AxWCOV$|eKi1&3J15YWz?fscHO z&vJOBv+Mij7!cnW;YS(XGg>EKBl6g2?EeX5=3gBv{BKiso^&^syhCbv@omH&{U4Qqq6M#x4@;~YsAIiNJ^D5I7zSwT zBcc?D2zBNbz=+J|;3HV6RE{X4GM)nhM#*wSfXXabS(Z)_q7ng=FqK-|iCNGChsYtJ zkj+O048If{S1RLhWcT0$4C;%@IJQETkPq@XbxZ?5gjJTr889NUd3YZsd;s4bm}T$* z%4A9J3}H)sR~LvT+S-i2pFWmbdZNWZ{hh{y_1G>tloMBg62SG~zHgH{4)fIvtXvryat zGh^l$Lz++bXI(Nf11uce?WkVvhSf4j5j#3yO2yq`XO|*&cUbtj1|Uy+j0ojNdbzgI zg$|1JN|vjKQiXaIbDChh6Ry67$@|c0q4~T4r%ZY~_`Y7gvDj)~-1j`$hW4Ya_M`ir zEBB)P1grf7`COC2CV4krD7Rj~5tQB!7*MrzWC?89BbYLq6Pxm6xEQMhR_!&r@ABeU zl7;;JonFr5fT=Gmx7)Gt+un}A1(#usPu}SK9 z5aK+zSiJ*mAsnzd@cMqwlk4^E_I~|kd-`kE%U%7Rr?etV05$66`TZ*5h1LLcz1-{w zNsay=Na?=pMckjdNC(c5SF(%r%Ip#zN-fbt@g=;9Ezzs8i#afldN{tASF^=>b#{@L zv89BW>~TbId{-;{KDO&Exum08DDa6}|E&TtTb zQc-lUX`7__*q_Wk4m+q1YJaYN4$1`HJSXU+)Eu;OyJmgd{rMk1>NX>A=Es2`05)5) z+*@WJO$DFdhZEdGQ9P@UraaB+BzERs=)^Oi6BSmC9Eft->_Z*?`2$&xv@s#Yw4T{O znaEBuzwu%TK@T>Q9%3U2VT@owp7r+#lU|Ym>+cftqlW>W``o3U(6{u-Yrt8hx&~q! zNN7zX1`*6?$N=EFdk78idL%b$j?l@1BYEU@8zdV{;&mJD{&kcdq-2LAP*?9eG(nOZ zc#e2Z#_8?fAz3)&aF`uB ehHXO!Las0kB!k2Hy@S*+1M0MQ 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

ux$7dQ~i|(7-5d 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 Zw)RK0Yse$3AciR0)i5TaI6s!0a4MJI7|YF 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 delta 129225 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 M9_PH`H^2J-0kUOMbpQYW diff --git a/artifacts/program_methods/pinata.bin b/artifacts/program_methods/pinata.bin index 7c7c66a58126b2996ced36db023e0c5c9e26ba38..86ffd40f69df4c0dc24a34707ef474eda3dae026 100644 GIT binary patch delta 130245 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 delta 125449 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 -^YoMVW?cq6oxHZ2@9I z)ll4i2O}dXq#E$0*}FB_iGl#1y1>nNsA{aKmMY|;4$0D$-l!3Aw(cmvy(+kSmu5tY zXvFSxq>Zc};Y!g}@R1P}kre}*k4hx5zomnuspVg=FkQ?u;x`1-ux8OHyPy%15E5%& zNnDz_sF+$U`${8ALg>085`4Yqo$Y#-jU1ruqxKnhLDC3T`8p@&O(Efl)8zFv+|48g zHqjxTg=`dE!S15+VeG5ZTnR7q)IEPk~-Tv2Wt5)NsOJhr5C8!+3SKkErl#nl=K`?>e$;NIw~< z_dz9XEXQG!hel{=E(|skR|gW}h#qSuE~kYEkXi`kCdBcb2^HTYfv(_Xd_l%Gsj7xe zsSlxT!bpLopAd(~=i@5`0m7H~57%d>%#xQcExRMoNTmhRWBAe$Dg$-ITXAU%wF2y+ zS@OcZkP^HQNi-WVLu#{)*U0_c6;{}X_s9qDIHN9qqPNe1o`XAvqHbtpVz6Da`;x09n$N+5ANqQ?GHNOMg4Jp`zw z{REx9e++F$hR& zQ(?9r??j>t3aO56pGFU5$1jr4JsUa*Nv1HgY#wDJuyOqQ%5eI&*@4;qg-+n=|*zcZ@`gXt(ey0c3 zV^9ewgWx6r^oNn8T09N*BCI#qR`5vRI&+tIk*}d5g7D8Of&FlmHMIy#Tw_GG#Ngj~ z#Fb;{C5i>g(X0F*+ox0Ido=j94qLJyZg8L6ti0M)DC-+)hrT5~Sdj z2?dlj5#%CKDd!M;M+YDFaa0%C93*oP;zl`TGcp1PLPsoC#g~p?lEQHnIh4{dq+C)o z21rAV#-$u{&w3wQzgJqY5D6#56MT%s)O}q`qn${h=HDOJKvlH><~r)eFb8A^U^Pr3 z5UZuv3PkA5P?2!v8-X|mTt?&@M8>(4fN&*>2^@c3sYMNN8jMIo zS^(c~L)60#VBe&SRe+yta_LB@5GUPHXcS#6X@;cQ)^o={sq*&TnvR>io~B{76)kif z0?k+8{~#x6B36|QxwN!bh%Xy~CS674FV49EDb99Jln-I2ujdAt72x6% z9wK66BT{jzDKEm;1Yw6Eu!03dy`Guc6{W8e?2><-X>>VUvDeXl6G&a6{U#6}!zt?; zc>;XJrZFDo!|i4Z4g#_dj^~@2mBvW&J-VJWu3N?CMVADkf&%V+BGBGnaAkJ`II^gM zyaS(^2D@jgY)3AOMvt+|V^59{1uzB-_&8ya3&VyV8 zaaIe*5*7Bmu*6~?Tq>_V3*i_~#R?(Zfp1+Q6)KKgS;@U%KEwc#2!z-{RS3a1ups1b zJx2cKlFrraqB33Vd_n&mZyY0Ebuv5d{$81_{j^-|z0PLWd|IA);B{x>*Pxg8R($rA zPs_8$^WW+D!yW9APs_8%^WSMW<0x43!jk(dr$l=`!<@!f8n>|Dp!4O$L~HP-*L_V2W9;#mjD0& diff --git a/artifacts/program_methods/pinata_token.bin b/artifacts/program_methods/pinata_token.bin index d0073e59394d7e8a2600200dbf3f604aae83870f..c8282bc88cc98fdad6853de65a0c8c09ad1e3d1e 100644 GIT binary patch delta 130983 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 PR^0l)S+|L|T=xF}D43Ti delta 126725 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 diff --git a/artifacts/program_methods/privacy_preserving_circuit.bin b/artifacts/program_methods/privacy_preserving_circuit.bin index e5131ebea1a2d46b7467aa8415e7149d0bb53e05..bea4f12b90ecea970c131353cde9a7370b3e072c 100644 GIT binary patch delta 169066 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 JUgxhb|Nl+Nsw4ma diff --git a/artifacts/program_methods/token.bin b/artifacts/program_methods/token.bin index edd100862c6df99c557e2abc8aaaca8d3ef9cc06..8168a115e31c6253db0ca9be1384224ffe7e6d14 100644 GIT binary patch delta 164943 zcmb@v33wDm`aj;)Jv~Pfl0fGsAx9^Hgm4++fPhSZgi{SFii&G+L_kqM!39M#VVIBr zxDt55|<;EavyDGJ)#x-`h@4J^kT-+@f#e6QLAS zp><7*y3l#C-7G}E zqT6G8SquD}o{qH^;5kWq$658^kLi@SGOPcGbbXxFC;Tt^McjAUn26TdQw{rOm4fV3 z6{Ve_4^cu^{nGee4(pNjiO-5YkBcveKG(+=MW46F=XQ$p*Q=GOr=R<=H8`x5J$I4h z(zFDV45IxLeuX1SES-@sm<(y*MfgqnUP8J<@Jn&g=7izavyF~Q?3;>tFGI5(%tO^e z`nSYvi$R^~sl-y(-ExJM-e7)vok%$06SQZCFhOMvT*Q3IT2XnNR$LqBFWwnv=)^{K5^vZQ8J-%3 zTIxI<=#JEMhiDH^qVJ{NXQ3LVRcYCzf=)|I?3$95!Lu3cf zCjjjPXuF|9>gAy0bW_GPUa^9vqR5JQJ6|<}3V!PI)VOuU2Ttymt8eMYwP>p1BbV0a zKr8qhV*DdhPv7w-i_;uwG^Zqu4l&Xlr!QUv;6A~-jCi7kbLotvL8>Q(ZcoZ`h%w6D z^u45Oc~wdBImwW^!k?ozRSDbW)GckaD&?wMJ!3KB_m?#3ZLlgwpTA$)r)Mk7m4STa zX3iSh@lLL@Q%`4~q17Fqlw#!ZEzO*nE!12o2PSGO@#qu5lrGC0V2MXd-LcGUTAFjE zwa~eATFyOcxCebNr$A!U)IB;J^p!O9C4+8r77Uc+5R6t+vl&pF#&}TXp)1Nx^QI!hXCwsbtsMy;=tnA-{T?C@? zHC>h2tD}&j*6k7OJ)hGrGDnh+XrC-E>AE!YH}rf~ss!)(qAmEk(o4a64%7afdRbD? zsyzbUchJzMDPWUw{3+Y_VABOUEU(Bi)A4jxUamujl?ycXr>pWT^Q{>4P~Jkk#QH57Hp}EJK7}@$J(8<0(`ym+ zj>xUJ2Ke)ZX(0TkirLSXaOVCMu~WLH%Gxryb3qnU78muI`*h911r=N+S(-q2xiDvpGFA zB2NLX?-8S++(WB2S5eUEWsQH{}BLrdia!Q*pZ?J&rxILk`H{{P~a2DLt-K!&7KU zkAjX(dE9F~dzo&JqMO?_!Jo5J18^HVMo3?JqDRgzAs=+_RfQV6FU)?(X@z^e&#$%x5E4bx4GCDaQ;uAu>>@TtpA`Dsn6q z!A&EzUD0dcuLd$Z3EL!?b;ON82NdubFk>wg^!=V4yMg4>l~?2rwB(Pb7lYFtuq#4* z<*--LJD7Rp#LQo32M)4Uj4=bT`zQBDA^z0P_$wRbHX|5&P+i7*_1i2jL z4R$b_6s1ZW>J5Nz!9fYoxZbzi5E1|6s}!32uo7%o>!CWAng|-<*StES+cBwg&kK`X0`r6 zSC+kIQT_!w_R3t#$FHKkEBm%!4LRo6C_?te(t}qHZa0eCrqrOqHGCb-ac2z{{0OWu z9JMOdRw?dIpnLpJFNW|-pLpU0BjKPDLLV9ktd%_7w$7b~KF<2*L-?ijU0$RDWHG4)MIpM}2*~cgsrsIm7O=I{GKby1*(Plvx1p zqE-EGx5VKCx~2bg`5boA^!h-ENLz^oyQam@Kn*+?imSd-r`GgcM zrX`iPcb5KRgVgz^_0~rCk5u2J8us#Xwu;*!WhtFjnSS}cj?mBgK0!}c_L6<|gO)A% zvt=9Jq582_aDDYHeH$Cw_8q#P>QyjWQ5^g&eFHn%_TBSWs^?(ij=qaIzP?9W`c@oh z+t=|H@NLysnbp#_G2FKAp50VG-KwweftJ4dp|*V;N1|&JI4JkE>U*?p-=Y8WGkhn~ zvBR_6!Y?!~fJ7ofK|o(6k|D*d?PscA82878-=W;^_#dUKhNqjFu%!!9<*zP(wWL=4 z?xLrL-#{kN{v$fq+{tY*y8?1BcW%5}n7YdMDCXs%kKwQ@lJ6cW`wWV+`n-Q>A7zQ` zqsCZ$KDe|`_z8oMuMm+XnkBV~W--0#=3*K*a*(Plpj9K&Q;%_hRGvcI%Wam9HK3}BDiMcuMPRPPxb7YE`Uk`pwZq>Hc5a)|WS&`;@>>vI!Mi~Pq^ zvOVx)D};Y)L0CCwA$Ur1)&4ofMwfZGc6oZsHvQkSt?mmTZMFHXu;6|r+bT~}eU;S~ z?kU?E&x(|v-J^gQHW0%`eK#28qa_K3o})qzYmq~NjLPi9{cW+S`?3WaU$HggH+&^M zB>}I<~%aosqP)DShfE%$}HnhQjI-o8VA&M|WH_%}>-*atvmsY`} znjFO&x3wB{MxR<2R}YDQ_#M>ovWBtNnv`8eg9{=m>XDs+rV6$2j95B$f+W9ZKbjyR-=%?@t4^`?I54+%$)KBGp{zD z8v>3GtLEGbXHwhkV=M!8MT-##bfVAv#xeqpIUFwY2`_pLl-UI%5QB}B%`Dt(vpDfH zBjD%(ed5Y&ljA&@vLAGrr^>nB8IU|~JRk*5>iJEUG)jRI zj!#Fa8QogpQ*LR-k1hD>-CNpy11$UsEgR4Uo|CYid@bQw7EY$6=LPWAR-5wMh~!AY zQI1@G-EECn5;o1 zx~TfA4CP1fq8O>D0pwDUGGLP3U(;pd^J;wUym66c=rKHpY!3e$dhCK8Lt<)Om$(H1 zLOJeL^%TRULmy9H4F32ErcrEMp2f~kVC3sz=+a#XNfLFQ?q*JdZst9yo3!lCYR56* zS3YD1?* zTict(OWK=VR=09UtdSb1D_Pe!`k#-sr^9#uN&i^`cS6kR| zhD$l|c{B98w1OC5Hv-5l0CM}=BA21xsTC}+dsFl~X=ZiS%_(}dzuO2qUF7-&B*LeE z9f=4Iaf;Mk-$UL^{WsJ(HY+w$AE&Ktu!A7u=$!kqYSQ#uwSqT^*0~+F>FtPCcn$Fv zK2E?vWH)k==@{b3)WzmF%u<9~Mmw=2{S zkd=lNT-A;O#?d0;{|Df_Gnr@~HYolNHz?XNAosy%iuMj*f3Si05A7q`k^6dI-&IVZXh~GDgCMgCdX?3QKa|}4Og^(PFDCTgZCd5{Yy`EAV#{21SdVI(B~3J z@Z*}V2?RUAEN-6wGY_)Byw^iPoLJdhtSkX3+*gL%X#x}?@1s~PnGF~zBN5h1Cq?=uK z!i2nSGfU2(&vZDjw`(*r?~G>Vx7WtmdW*$KtND^Ut z?5v8LO;1Bh92O_zFyX<&k7y+%(O*)Y=&Bf?Y6bsJ#OA*>spbegXgxy)6QW6kGpi8a@6NHAY&h&MM5PcUD7 zEdg`c%=!(s8gt%;7}K{Q(a?J;S|QS^IqM+lSHkG5vkoxIMb6No(A_}D$|Zs&*mPMd zy9)uE-HXr`?RM`x9qxfRaCD83bEnh0h`UPS;@i-cF`n`MoSpQ#lesk-Tozc?9u#bk zU@g%gB#CcLt-zyHguM9(c?)Y1>OxttV}p2DA@BTt2zC(i)`C+!i^jcpQ&G&Le>VqYujl>6yjQ)|jch-Hh- zS-EcJfbMyqdwzuOj*(b4Pw|Q^niwsXt-NlLZODoo64?b0HLyjn&W8GE5Na;$k&U0l z=P_-!B95E+77cUga-7c*62WWZ4dA^Dfb%!wB!V9U>{K8VR$95@#+JE!y{y1Wzm6kg z3IKuYS~@6*bmjiW;?V)>oc?U7AcJo>`o%?KBT*ObLtSDI!|PRXE+M1(Fg-f`ONSii zrf)n@E1#7f!5bg6Yijtn!Eq1Wu1Xdvi)naPU&%XVk)K~b=(ZEr5Jt7w&bu}+j(3wp3_kNi*S(ml)1X?_nrw>P zMYry%{AdBaTTWOxNn{Yjgr3(dFf%|1GkK;Ufn1EWL(*q+R>TKpw={WX(s^^bT{oDg z?EL>qeTS#?{C~23cj3&Y?E&&Gp61i8<#sVt$g@6`IN4}*G@}VPQ~vnq^F&o1#*uPg z`u=0p4s_Ml+Ux0%n(1v$DdVt*gwL^jOBy{`^QdDLHweD#=#9Qg)psj>#y8t+Y;`*; z+C8iyko3g+hJ%FBJw_a+r@%&Qj0Z!LE9DF-FDgUriUy zjcmLR(^GScRnMa|$$y_iN`sN%$r;z zfcxIYJ%!KQ0->g-TXKnF%o9@3^@Wo3_62UCC3}`qaaF9AFu`r#PC4HGWb}kp5~JRN zyQ*!yXTCwmXEY};fy39<>h;D$-z89+NAaet!09)?{S{XIYb)xZt%=A%z)cfm@N3&! zL|jjI1nOb}TO|0(4RlmpH@Qrl9{K8earXNQ!2a!Zw>!iXfsHhCelPi~*9UK$-;P8I zbW;7fY^#&N133n7(!0e*thj}ir4>}xQ(ps)x$dDW8{DKmc(5TrEU9^wj$8QGtc}2x zyV^MHJfUVg+XL4)86t!|w9lfVgvLB>BoLn5Otf%W2bxm)*(gd;6gF;-& zf?q896Ouf$gX^ET2NLcLCM|xPqzZPecuvYs4v|xN{z11dDYA?)QkzSH7GhmM#9~fF zju>fgA$F8*UkW6Ignda*FMTaakWF-qq+s1f8n>)G`h4TEyw*hbE$h~Al`wFf0UEiX zDwwmK?N|;6>8YQp9Gob4n7Z&9{rjJ(VkmC_96_pZcfOpuB+beF?qh*_;TB z;EZSc5%6u(@3UICe(1Rf+^|a1Rt*LVqKMYU3q+;%{YYo5y2cQrt2f+d4Oc?+&`UF|hCk4%m&aHG zHUu}myp;%R7{EcOZN^p{!CA~Tl5?KkIFZS9$hKa= zHLso|s_!;f@vG_nP1jj{VlI0{NZ^bZrfTzv!GgebTbaadix#=})27}Nl#H`)H|(cd z&h~`^(vp{MP0wzGF#>4}K^mNR@PwlaQHPxBbGqq|qvd6}@Zad-t=CM%@^OmsHwm_K zr!&$ZCMEa5jqZWFbTwWjjyBbMaQ@h7LfK7amak`w!R;TI2=Rj>OpH z8pT}mXLvW<;}ho@6=|iezU9Gry*G4SMBJmcMOKu+S`P_>b72o9FUOepux8m^V9a5BUogDO$lO&QAFH z9c{Q7j2m7aY#1)N$pbfuR97=^qeA~RMKR9DHG7|lL0p525^>0wgTuzd;P3))n8WQl z3LGAT^utELjaA$ov6$GA;Ba4XxTY10t1CK2c1xVal(V=+d>%oHK8*?vN3rMfy-(5= z9IlHX=gZ|sa)QGF&^!u5c}#HF;)Cd4BUa<<#0Qvp;|M+93>IUx`Wq6U5cu%lqU3~_ zapX#Ik1Ztb0PY(iSSCmc7D(z;Y9lOG*(;!I`_xi>lw=jQJFQstN=?u<9NOlw2W|U2 zr49Qa3!F#832cC+ZN8U(jXgrixD1Pl72N0BC=`QdO^iBzt5eAKHq-u$t+j|EQ=@A6 zwQT6iq+2F!Ev8YDaU+ID|JUFndQT&#?M%(Yk< zCOjsLQx%=}?M0jp@>etDHBwnWiLIJVvgqx7GGqP1h2AdQ=BR!}JYb@Ab#K!-{jzF= z`)xdF1?49Udo|BXV5i7|E4zSw%hfZ{ckSl}zbUp$T%(v75_J`)TIzN^DC;JC2Dz~M z`5%yV`d0?OdM3sWp3dv~&_KbbErYdbvSZ`FapB48xa)pdSMjA`4=Zx8|313-pSX5; zbb>>&V+ghVGk36f_Tf6!euXE_aB@ND@&X~Cl5OFE{(=SM_+0&atzbXe#-I&}I0@rw zyx8(B3qOr(!UsQ1pd&XW(@ifpYy8FBn>@C}#JRAjt$6JjujQ*HB+A4DOKG zmx{ge4-tBC%L<7UA(mWvcSty_W(273E#A*u^%VQ-)1)9RY9OP7IFs>yP2&4j5E(9@ z!`|jOb5CKV@}zJJl4J5uc7 zJIwlgohAB7M>=uGd^LO(J-wqqvda@gGhZKIvCdAbU(c1#2ukW-?`u6@qm( z+y|I>knZ^vs^#~;!4?G6EQbcHvffqj{KzwIAzks&z)Y}pYl`;rJO~z2&Krh6CC3w< znUyLDZp1-zBq#n9i3YUB12!5M36_SDsNY{)OSEkxJ;qGT6l3!u>h{b;?82!D1#% zmAubh2Xtyd8v;fu#Bji9CyHfk*9vM|nAu@#hE_71XlreXzsQBNp<0WX<-ibbF|Isf z8CJRx+8MD2RILKcj2#KsU}paG8sdF;s~XffGZ%rGabV^mFfMQ@Gwqz2ac!9yBbgao z6k#SNtQJZi!xzw&nVveq%)lkg3_DB?T!{lS`zuB!&hlb5wqhnI!I{ZjlwhV0B3+9J zVN7frW;z;(RD*5cO@w-zBD}#h)mD^C*^0BFeX8aK>9nE-)yx~+hIB@hbiR3lWRhIO zJ8i2|Q0v_VguWX?j3Wy`tubw=MO_emdp{jPY79<6;_0TH9chnXJC-Ql6t^xD-T))nLVe)L{H#SukNu08(yMQcV-rB z;!8cAS@8|Bau*EOaNF_UyPDgGT^35I53)hRfxk;|i^WJQDN8Z{yy< zbj|+?$lD_ONc#7}0V58Y@~7)&;dtDKKvtwCe=~ngLp7b7HT>x~i`8(7sF^vn=rA59 z4CUMkV!MZBZ{h~ucf{L4$LlZUs=uIC)i9R6`#4SlR_kVQxgG)jLhRc(!bkqGI}kz) zBPNT^#oOdOI0o(Y3lk}Cdpqg4LD_nub~rTt|2NSu%)*&3H)L%gp6=c05lYpx^}8o24jT#L=N}1Kgrj&8V8x(dH-H8 zhpVAR25jw{sO>u>F|e$jesFG;)ulLI!1YuTpj#H zwTkutS!7{X?mxhQAy3Uc}&K5{Xnxy@LvsJtgS-$q&1{fR{3{C?KPFX91Q`3lK zaRuL0=~$@^&&|fdR!$bSolj^PjD_573A>EFjWjNbgMMc@S=5QWj=8N7%JQsijOaj!B24I`TN|XWoy`?Ta4MOY_eb~}U`S{V2k7i3gbSiS^ zAf}X$t}OAdq)&}jJRe~R4w8$9f+gj+^#Hq%Fo#=5NiqBeu-z4Ng)jbsS8L_eV5V<^ znZB8u>55iV1JP{UOh0Y&CdTlWDm#F9H8xZ>8?M&W+aM;l&i@~1G0hQ5;GXDrHp?_y zPO3_Hz^MXwOiY}A4eH@fXk1t`+9@^;9}{YR9NCxJ!JT&lV5?5(k(vN7+NQi<|6Va2 zCzTf*?_!fDorw{1{vutFp?K98r`8w)>a1>|N|gHHueh^<0VK!oTz;X{{t7I3MRTwn z+_T<#A>j#^F2wf{?arM{;B{yRUkO$yR-$;hlZha3yhF@c%a_oBopRZ#zmXhvl!r2Y zWR?6~B?C3V!0G=B13mAD_6w(?YK{AC#=;R;5)VtpO9mo5G~Pvs`ED%e!$ZuOmol*K zDVujO4>6S*Lx?|TV8i~F7_;rV#p$mU{|Ezp2QJS*J$l)?K9|w|3Ep8KHRR#=-{w5)+j-I5jvGew~TR;5JOWQbr1Y5s|_rO!Ron zRtOwl8hcqLb`eZ8Tn@yO_*%dtg^Xrb@Vmt|rJnD`JvOToln zvR%+Z$amCqxhiU!jRlf76@3WLTQIylFR)wWY!9dgv^G!Y6Zg~ zF;^iXSdFlT+b|%_gJK|WnW{~k&O+iiva_}#ny4u!rGlHk&dgRA{~E&PWe|Su7ZAn< z1(v<$*D+puDaQX#5l*YQ493fT0pnz?VBh~n;-~(P2-if7-hWBrc9%i8;TI4_k`bGv zU!`!3^1J^d#{XA@5n{9wVtH5Su_(edZKe1kr1*cqSef_#65*Q5sND~j!T7-_#%&S) z7E&BV7~|lz%W=5R_wiuMC|b!*CFtsp@D`Ri9}A3y(K6bFHOgZP;g)>Fh>L?YBgo$;V<4y( zvoVeb_y!V&h+BcwR<&BPI^!*T-X#|H|+gF&RSTk1Gq#YZdTdU>mKmOsh!S3DSmd z;6iD_tRBB>?S;}hD-K!2O}dCfENX=JUrG&MrIanC3EGAsd!v&lE#RO3_)la@>j3u1 z5w2y=eNP6k-m`fu!s8I`zDf{-!1`-NLxnUT#)l{13dqB6{Bk!YP*w(ARvHTb%UFbm zX|OCZ7V*?12}$7le9N7+?DK0QlCY&E6vsYaNfN=g@FVp4Z{B>hs%h zrr4w)$#2v0Yi<7ga+_8}a7FHWQbP0lwD0T{CkNN_t%%%$RNC9zoO(f=0!*ii-(ISQ z-w!6fn}Yi#kKydS3#~em-FFYqJZT%|;nPVUp3~L^6qN8s&yueiE( zP3nW0=|7VFnOPEOMHnkFuQFZ8o_X4-B_b-?(9k8yT{lqFs}40__Czcs^9ZUxME*e4;;c z(eV0o)erIDF(MCGTeLg;AM9i4)Zz?wq7zA=>vtumLLxr(DJLV@0P8~{gXp1My&Q{0 z+Myeb+nw%^2JKT?vb)S7#)R9^NxMfoJbZk(kcLq&`{3B%U`LwTXyob@);>2`gq%2z zG6D{~QOm*l20>ccAABUYZSpriLTx+Goq|KPAml+wC>h#+pcT}TsN?KVhP(MLWWR=E z%?+y7c^@u|aeW2%x`T^3$Z+L-1c}%QrT`ui$@2E3QYLgfqpZdSF4*M4?G<8DP+fRx zIpNYa6K0g*mbpvAgc>H)FroHePS{;c*r7~|=rlk1o~mSpRXzdy5tN#!BFO~nV=1{v zl&^Z2#IfElk^DBaq5*NoJaR~IQp1fwZWP4{M~AKP{^2f%uw8|{EZfCt0E-`sgoEIf zGQYL8r-2b@$Idfnv*Mk`6D}{on)4(})OObVe5cZ4*<&Lc6#$n)abBj15cR-{TUS;e zl9s*IMn&{h&WeDvFqcHqORXZMn?MRh(kugKH!IeHtDJEBK!Jcx<-ijs zThT#v()y;(uIZNarPJ+AWnHB(pMcb<1|b@^NhZt#_^r54=3wEK4_Kx#g{JN4Wr+Ts z4_o)=@0VNmn@nl(25Z)D9B-=;_lNx5tUAN`MT!>RMiFhhy7~)|C0mCRL`QpQ19Hxp zCl#sH1zF-yRhVM`AAuwCk?kRemB4ee)u*weT+^O(cNgTFoqO@FYc-*cTA@{m(Bu># z96jl!Zxp6?lmIJRUDE25O1Y`s^(M@7imEk;FEVX>d%8nLrYX|)dbU}%H{Fo+z@^0t z&|~l4l7Orhgs@oRFv%Tp8o%iABX#IO1-kys7hOWCM&zd|IUCL?I zv4*y7_A9Nnf%NpTa)(T{T%dhED&z3*1ujBoeAMU=pYIu-7W90)R^<&^LF0ws7oR*! zA}w_B$>Adl1vZ5S-VkP|g?Y?z3rrdZNxP<$TIIo3`3hN%VmidarXraC>FweQBC@bu zX#FXZTthdW>N=px&}#9?oK1?mJ0^?&>G}|U=@ZvpXC(Br#GqodTz1O!QVfP&8-h5{ z`n}iFq|a_>f1_-@=_X4^ZlJS18%l1X;m^vl$81V>-*h%VboaIbx8sHi8aVt3$onT+ zcV*acuyS@VizMZQ^dIuvD_*=eWY4j?Zw|Ld{M;M8I^i%m+i*CZ6}{-V&&LZw;nS7D z-JfTx>9;eFAPFohfjuj?4x*ZFr_En%;0(qMxgNCYhb+l#y^J3Ga_i;lgPXn@W0B@( z1A3mm>;Rg0CX?RypR82QIN)RGVOSmbPGMa<#kBrE*Q<(2pE;A)$x}pipUgb#aQ)K$ zbO`}H$if{o^P9pL-zSo3n0(YXS%zrR%ebkqUgRCja*mOVJg9O}Bk>pMsyjNdul2;K zbnF>?+@ZakI29=UeBu;2allL8JJY?F@{j1mJcL2m!kw0x180Wo<0hP=iEu^^;Ruo7 zgWo($G9|yaLG@tBU{omL`BcBq@n>k_cbz&6Zb%(0qN}Oa?<_j*yYwDqoF#!p5I91$ zY9)j+?r=UHx)Q&2DNnfjpxs%&Foa)PKkEs)=DU5DV;5cd{pQy7U84kpFF3|U!gE@# zOUD}nK9$?vXnExi*+uvA8m{qjWffC-*;?g;EzkJS(6Jx7tKmeNc(zgv6MV%kncjCc zfhFbxRzm=p}=f9?%bVMD>EZD*37R3eV2&q1R)EA z2%LaxD-auTJH!H^KSI}^y`TQ&+^6IXy6*gagwUi5;~j#2`dm8a!gBr$`&1uHYkr@| zLSPouPLi7-mRs?(1^KDaQ73Vc2sC!eMM}xIP-YC7NgRD4K@G!S z3ayOAxt63;+4JmR9JxlKQn`WUwjMN z>SST@woWd~;lEtac}S!nco+5k+>%q<++t--e__>GBrE&7IiI@=x7UU2=@Z@ahuuR1 zTW>S$E85e#n;eGY=6#l-E~tOrefKx}Ln*yH?)e+$L3^(=?CW;pTG$E0@!}tOuN3+h zcPjfai@4Yaev%T(>_j3G*%;=pgh_%0_OSdM@*q4J!a|v*jZGE|R&K~~p@rQURwsyPZx*rYrNGH`opAPqw8xPdI%zyDFTFBYWYqRIQckONY+ z1&YfDKGoX4-QE_)HbugKI$(SR25as~+F2U=HB0P8a$6VDSXD3La!4=p1*`5w#t#+~ z25g4?7$ST{m0y?(j6os^w>}jj5t@KA-W+80UJOZ!#cN z%(u?TeR!KW$M%Mr?m^Fd2Qcf6O9WO=w!1epNWdLqtSE!1N_i^|^(iCesuYUD#ga7k z?yTM&F_3zXP}ohnk%Tc^r}br#i!H3V51C+@gg$IiU-TcBi!5Q>GPbHO=_XfR*OwjY zOWw4YSiZEheFSHpl$-DAIhKMIv7Q4+S5g%kH-Ow? ztzRExt$#S%J&+VhqC_i4u;zgvs6e>F!-jZ>KkFvWf#|Jr*cOB^=dGD;VxM@(%!p!! zs>{hxl75}_xh#C9$_jmjW;I>M!h=Ax-+~(RL-x?OgUCdc+#DKLK_;}A*u9m65%L>W zJ&gQlU~hz&>{%o*RBMUVY}#;=O6~~N4<~mJawj`Af@G87%sG-gQZdo`tnS^wcX23;VU4nnX>4Z#%5egZs4ed z+1J;S)EI5HwZ2JwbTU5N&Ns9Vh3wpyRC-wAb-;Xjq&vIzI&zKcHrd)Vh^@Jf+~&G1 zvi)SvDxfiu^{ygr@(`O+MK1E6(TGiWFvy)zcr+x_Dy+C3y?@I}t|!-#$Jm_f$-hYr zn{)#?5sMCn{rk~80u7D5k*p<-kw9l*?BmRK6M6Q!O5WVGREidIcRnswip?$S7xO$n zPeaRkpK8@Fq53LKr0`^aBJ1soLZ@#cWi3KfGM1c+O!#!D=pCrTQ%y$pDJrxC7_wF|CrMTA$i85YF`}Q94 zzG!sp{>D8F!=298aHA~fUsD+jow}ElMYyz`mN78NV&wyTa}?k`evZHc^}S-dV@{FZEskK+&i!X~Fy zSO>@ZAc7}AHw$%qM@&bOKj36L9wdFU`LH$XoaVZ1PHn9VuUzd@j;s2AtX1z}Ni$@K z%14A|%piCZxB^%f2i{uo5DfNPp|pp{KUH3bp!onhJBt*_g1(=1nH?zv_Oh|F$(PY? zqaG$3cmcb|BP?+a9KQr`gylTK{iA@kmsLOVOWk_UiFCs}Gv@q4x6rUh$&#NVeD*Q& zqZ*4T`~^Dl$rUG8%td%1kZF9M^`A?!28;PCJ}~ro&C(V7%BB8R{)?v_*fC*9-jCLC zize#A|6|pC9C~IhSxuy(H~ky0#r_Co$CWy9l#nmaKq@LM_4*pc56xbcc*GA@%^aN4RzqUqx#m>$nqotlc^fjvrkd8$yP$A(Q zvV`he5Nb1a&(~~OfOJi-#)Zas8n=e!{(FO zvU_Fc(BAo$LDedByk`F0MLH9&&Aafqz>mvPC0b2ItoH)a*P?R~MMy3D%PL_|r+MG7 zb@0~NqF-uc%NCHG24vn}VUNT2YoMaY`zu$rW0Mv_&Lep4T?oG@P=cOkE&`b^QSn6x z1{M{TgTMrr(j7 zH5{wLCLD)heW#j40^Pr^5<3Ks&UHD2KdrDb!N0C9p>*QAFb)pY&BNuw`HB9*J&A@r zMWOB#C0O^p66Ec39r*O%9vFusiM*d#yeD4#mK=!>?Z#YdD+u0lz?Yx)z$_e5oS*u1 zc&>SIY~y0mjT;Lnbe!Z8g4k1wt&Q5c#yHkz3F$Tv_#mx=kBrm-hbAR>vQhEY+3g%p zfmi4Gz_l`=v~rIUY}|%##G!qK9y$IS%GNA_ETc1gX&ifF3HT0*BP{OEMlHpT@g;cK z1q`5KOlA(!N+Tt{~QY)fK}$t4MC= zO1{iWXa#J6B3SD(eR!jaGk+~QFXEkt$FllWQ9&QZ4z3~_#GB_$ILG8!&P8kEyh(Pa zRJn>O+^8m-MTd2b?I<{BzIr&$JH)PXu<*<6SoQPd2U5kxzCdn|$Qj%50_jYyXP>-4 zowJ9IZQgnJdOSPp-BN#tjbmx+$;e*!a93)U;GI3Y?E(Z6cN2!356$G8 zDt=D8`&>xGL`_xF4DGpzEn825q?%jPOm^1>GF*NT0>>eeoD)JjHt=1-RPNb@3w9tz z9=4HWx%pC>8b#>xLIN1{#M*fHLGd;k3{L_-tJ3moqvu<4dB3ElyEh`Cvqwba%jEw7 zv1bsoy+R&D7(eS3#JCTzHLn2E-?E;sk_`61t0Y^{vLZlmq=PS`ZNX=9hx`;h%n{f( zJI$0j|{zX_g_1XG$b%#*?pxjgZh7&fN+hTRflSu(N-F4Usjq zY|bY5N>R}LY~v=fdZ27sVA!jbPknX;yZ=J1(MG`2Bz_nxvj&ZW+#o&l&@E4pA;mXi zj`@4)*`m#4bmTv|2;Ic>%pNctIaUWp9Xq?3+?;+bPszG524CcyPtoiii)ZKFdN%2g zu-z!dlFs>(1zIA}vVDI{vJZ-~F-xEnt&^&<44JMQl@$9Ct+#WzTGZ?*>9} z3H9u~Eu;seIBqK$op1nqs@R3khHeG23l=P5Q?`<4qd*e3k-n)-+(z1A>kwG4u)`+u zP`vWRQ1v#_O-&Fm>o&^8Hod~0*$&Tg3xGAa9uM_-jo>2_lEN!P^?xD(wW}PkOe9_8 zGc^J#SOg!R!$U#eGj3VGl=XR?j3l>(=Dkjy)Et6d^Pddm?}RbBJQ#e6Q+Hav)-x~) zCTe?>>k27`Ev!Nr`D1BJ1sY*v7*^PXPG7i5)~CRuoP)d2Qe0;t+Zl7V5J1yG>s8 zdz@QUIlLYA6ylpkUu&4jqFGa@_q(J~9V%!L__OszwGI?tpLjw4w%IM~56Iqi`z;Fp zo#)C7`xdwjAxbaG`uX^O(f)}WA(Cvb^BplVN0In(iq+{atzTfr4Y+1mzb9A*Z?&pGK2L>39As0i~mg7@U z&q_PyjAL`&hq)25hd5xz`w@|-`yh1eeew$70s>3)1zYxEL?0gdf^8~N)7jw<$wodB z>hoo&{up_USnByB8}>2MucApmEBS8!L9WozO!b3!L1@cQGJy6aTJ_&?$_P^|=7fr7-$MHsmDsBm(K>7n$!Q%!DYcy~u`riX$q4v;8Nw=u;%#L}A;- zQ20|GQ%ZavL)e~3RsuVa9kv3>=63oGxC|uDkZZ+Utu>Wn+(np%C9jU zX2#QkS_&I4Sg+8`hoN#*RoYVkkK(> z=C$}fQzHB8IeYHXFy6dAD_s`)wr7*hk{2?rMT(#2Hj=b;@VicXyhNWPT>gzcoAo?T z+Og5+NMUXT)p^tic6L2d@?O00G`Wo!-pF& z|4Iw(AZmNHtAOmvFk%#k?D5Yu>E$!B+_#};?1l6Ye(Ays8KJY9I>8cSE=RiB^)j=s z($%*kun;h!oXd%a`rpv;2>CEF)uY&+AcB*&a=d@F`D1)XhE_EOo z!6v!XZWh=K_KZs%iGHVC>JnZ@1K*`FUyRzVR21}duFuv>eShX(e1+A_YfU1d>jEqA z;aH3+;yXjfq7q{x(*WNgv1+cI6D?C>RiXEWUY5?*$ErQjhjG#3dL$$x9vLA4azZ*g z9jgwP15aRWaq0l6nQJfNzl?m_tJrO_=izj=EKWVsqHOJn+L>)>r>0_YZ?ucd2OOR8 zYMCh(SMe6VHqP&K@&AiY%&bIa1{JE~Rbf)0Dj955yxOayTxL2vOO7SM7M{r&?2CAH zD&kC`OP;Q6ft6*j840QgU$FH9ump7|_;4yg^(S-dk@8!NQ5Eh;|J9 zL=1$QT?VV_p!SNjn1q|ZXIak|@v`)m z4(g+(5aHsESd)&VY$ph>qy#>PEh$^pk=QmHQOAjE@n^M(*muk+6G<8E1(xxfHHN$o3?6Oc>q*TrutjVv^_IIPiWEUY_*WZ zXQ}Qej-#?7b3@{$WkrM@<2OcIAlL`9A~ev`nX^+wG2wQ5c2aw^k2r*=A7j%xMW(I5 z0y{+};S1~(VdL5?X3LH!{NXItCtKZYAtq2A%q3lM;y>EM_upN1x#HwbY*>yuAYw?VbJZd#yKqUIhE?-=vdla%;952;uZ7Q{vw7en{cHP+IET^Ke1Y8~nJ$pAQ>NMXm-5N}!Vuv1s7uSHwd4{X(P zXdslhij{cOr}4Abqy9i{U}3y|j-OA;RWE*q4HBg(gHXDW9pt4O*|)qjhK(JJ(ik>p zFiKY;qqvHd@W9naTNEu|Lv=Q#!(YyuWXFOC9bR^8K=a<2&A_o*%kN z_#aED-g<|{it&{H4?_Z0c!+EZ+-bGlg#cQ#)quN$t;Pwmv2tR|Ku@`BYkbgZ`z-`d zvk)98+bX8Ywx$OtUPHGg9ALFgvc}zu302vq^p7k6xwK^5j00r_mWs87ubdJ}yg}`! zk*d(Bo7BRiYW8S>-IT^l5^h zvt?W0&KheCvjx#aqcY2CjL_`imVus!WE*I9w-BCMK{GMVH$%38X0pvEXeK9oz%7Jf z>zggeZsKp(@=sbQ(=8+(l^@E3RLK>@%0WMqAPMk3YfMesF=2;QKc{WI#~zs&jFEg1 zaPq^_e8Wf<}YWb zz3Nr$FJ3kKGOa6k>n)cy?0HfSTXC1#!vU({MB^#;#$9kpw}pmGP+!EYvd|ZItLgEM z$!KiYw73V++FLPT5sb&X0$wCP(y;oqw5$$!=J+ga)@|6R{% z52L3;%uu$49ef0CNfau!FxwoMcNAckH?#h8;37rK2^?9^fs+%3nOoTUIdF2KFkuUO zV-Ea-C;-~LM_WPL{wUlZS_HJSkG6u=`!SeC2`$K~A5%w1yKR3=E$b{=P6Rn+c-r%L zqW+10?GWVJZFsFOLLE$|W(A z>lKNz{s-n+p!RSLvodCbLbDdAPvc@LOL`opet2lp;|Rzk2P=YzBazAGuPu!Lukq^Y zi%m*Mh|IPi`}PUMkr8qY`(1=W%Y$sj@6@u6KO+i2Ijltm+3w#V-W46tJ83ZjS5f$N z;bL1Bs|~W_Okn1V^=8E2rJ~`Wv#S-IAr{q35PC*1+qmSi$Y>H7$UyTF^-YNkMCIU8 zDN!^4emN;Tw!my=kgcbZ?a;w3E0(Eaq7#f;)=E-VE>j(RkVeNS#1fjtq!RJI55$s47Fh9S#1SWuYn^Hjh+hG7|4>1_FQ39 z<%EN+whq?7WZ{V9gymLSiq)3h(x!Ne`5$_Y5t2Q9VOy+ES}at5v@(5o|27V3%OG zfN%S9Dtq3tkT0~_x*v!MG4#eGtpvq7EM_D6_SXM6L-zFIJc%WGv63 zOh2n_06r~@|FeL%g>$U7tF1+qhqi1{aYx}^pb&f8P&R6tnr;Zuyn85i1$MV+7&(;9 z+6E&m8d3(a_1j>&L}A5H_Qp0OJVc>sDC-|mmvj}VHCj_t4x)Na1hp^Z^c9w*R91%0 zhE#ltT!_G}L)oI&+D;!54I_rK?XR_({?uzN(}&{zq!y6q{C)nc4wpicJji^0Jua7Q zSIiYo#aw?BuWcZ;eEN=4774Ju#HpgyN47n8@@M2h_9Ke>E3!==E=gB6lIm5~y23BF zK5ARB1G$Y+ENzEc>Z%EWGB|9xHgqG3HiX*sVYRPm`G3Pc1O{T>xe((?=8!S!czb>#Xo<7iWY#KlZh%s&))U^qpXBmO-FSc&8!smxt z*BQ~UT8Y95ZF)<^*W#@}J(T}8!m5aGXZ`;HxfXPs@D`i$5B0}r%d~e?Z}Kp>kY>sF zx(bWFZ?RMFfcWw<=i=yj!z^g9v;G}6?vOf$f0Y!6vd@MDXDW}d@FDC<#Wam6q5Q*K zW56t&xgKFv@2ao21eWuf-J)TB4$C=$F#_wlTsH5BIv_y+sPM=I+i~IHh+3M?Q9K(# z(Qw$#Ni>HRu*{?CZMnnT4{==Vm5}qZZpb-e-3o~CIk!Z(Gh2BS2*^Sab$XQ06_A&? zfBQBx>7Qy*+fZ5Je06Be|ETy6;C8S_PpJ25K4P+epHS1uQKp|%yQVl*Q|Sy|@_$bJ z+3;6&8>>92=4r!Jlihm~&U+djo;#`LvxHC8B7F^pRIt@2)uH;gcr0fFK2-W;^g}uobkX+?~KV)@4w?NUfbt0^_kek zHdD-eR5#g&pQ*{Q-|D6kkAe9%lU@8w%`%hhrjo`%;a>}$xk_ZD6C($Hu4ZXB+D&%H z=jv!}1|EW+tCO=%Vd!8CTTc`v8^4kAUr^3segCaa?fQ(vR1(niGJcVvS0>;8(D*5n z@5-4n;r@v;CgmvqA7gIyrDBtU4Pnc-!wBm)w&7UChAq} zVRg@G`%g}4om6$>xAvdx_!BDqjQxG;dv#N-=~#^A=)-Xfd>QA(oa=Lr)J;|Wzq8xd z$*-4cwMB4L&Hc{q=9JV+RS$nhdF8`*-?6!p4};Fy*Sa6nS$m}W;fu5O0QW;`mH%Nz zl|8r%##TD9UCq&iLxS`HIZ8%``5W+N^>&rrRGqA{TiEC7tLiE{rA}glRI3#>^;O63 z?Vj~>!Ooy7Rvmw_+o?U@+wt|andq9RMc>=4TWV1^5os6BL)72Dw^M5)9;kl%-tL^7 z*f7;fGpr`?S*k_HGEuGh#cr;q{b09gJPq4SLwB{h`v<#!`Yyyh4e?|?OCLK#F?E-k z_^>+jgPmTR`sJ$aIW8J>Doxe3=j^_AVWWLp&e?IHmNAV}tuRp}aIkH)G&fhz|7drP zJ%~D0g}%3&^_V|*L2=i`ODyXwGPlBf7tPYSB{!N|tM)(H?doXksjm8oTG7}|t^COz z)V-`ps@2gx-3&&F0WuNP}^3pX#dR-M(jUr0i0 zyGhsU)_5CEGLvd?uDbVEdgRex?2N`o(MdaLU4K>oS6tGXr&<|?_&RmfuOwf9SO$u= zo+vT(ZCsAHiyyLqpYW^wioTzwYh7g24A#O`%P?-YPH5$s@UczhKpB)-JUCB zJz-7Qs(?!?!jKo3AFZ-g>d}k#TKlUOD(N@-W;>^)y6rc+lbm1p&F*R+ZmB-~%}#2P z(=yePG5HuyQnBb8RNG_gX14NLd2}l^tJ+SoSGQ7kRNE=n>_D#bBdJNADv|9VeHl%X zr;Hvcmv8|rvLo0{cs^`RQOYrfqX@mO zzwNK7M;&Kt{UvQvt()=B;pnNRe`EJjxjmdZYD!C|Ro7D}$D#N;i%lKQ5~T9wsQfa_ z-+;@$Qd_>YH>%OGPVcT4lDzTw181IZv5FQioV|GZ{Hb#biVCJrT{3fK!IGkdONys1 zDV|8@(r1gEJAJ5GE={3W9mI4)m2w|MS?+2P`aVfH!lX~~?0 zOA8Ca3lD^{5Ts*VelEpK+P51KWE(})3WN(X;MqHT^DM7cy$=`>q zIqZoflb3Ez`l;9Xf4%92ILquKK|2+crCh?NzEndTr)%?r)Qs*Ud0&UE6EL-JiTWG0fkfCNjzRlkrY(J1bLt6z^<}Y;AvON8Evfu9CD) z$(G46u*gp1a|*lF9h0p}&V`)M`U&Y7VHkE2G@ryqWEtt6?;g)L%_{btubDHwNAEsU zGdj9%L5?SrGjmvNTJ%Q^3|lP@Wi$uWMZPWrx5D)E(4 ziSGe?)7W;p^;uC9)&iGT!y*fJNVV2;K1Vf_;B<)dF8D}@B2yx13$Zg<`%d2r%eko5{?{H~cmDjv?jSnULA_kh zNw>2y)JOH4J}LPb-kLdh$&#h>i{z@qt7plW90i?Jj|3;B>BRb8yJ@*}nAr)=BKun+ zN^n})m5GXn8oRdpmI!aa@mdZhA~$F!86HFHJ8SCyp`+Kmt3tA;x^%*|b33W@22M)D zIZ5HL22MTuhfeC72F_Nytg~9%&`GkbO!a6(XI}fnOz#q5I38^{ zhRvNlb4hVV$5Q0X-qt;wLz3Lp_RdVTwh`Gb@1Y*z>}2$G6IiIy8#^f}*L3lQQW{Q! zIW)@}7j{|AYwQfMuj!&*XzV;>XLj8;s)@5UBp?3V)Ojt`A#rffv-S>2w#LBuBfUB# z0*iuMS%XRQqP@nxribd(%o&k>4cDr}P`ncB?NY^1kJv*KlC9i)A{nP1Xy)A9vWGiA z&XhUcZP;+nRO>qI|DqZ8I{&?$o#6=&2rP?rds1 zs+X5s0>eixm^3E}yVcZT4<_bjp@1UjY2ehTWUheRV#&@TM}60V$kTeO>K0C`dO?1Z z)u0&XT6bt~(seZIGPprw-@*>gQz_=aRFlVc7?$;4!9;-qBjBuBZ(Z%nr0ImdIJ zjP4}I0d(1%hapeooDECR<9{1Je9pZo*;+x|H?J(78J@m)@${89FI-qSbNYhtv}q6Y z@#gHu`lMd(HUZo1nX_ju4o@SJJ%Q5ImHW#H#xBp8Gkx*&8O5&kab)%I(K>%Ev(EQX zTU$Bv`fr{R)RXMUOxC-!!oI0iId*$FWS1tN_e@~{p)Tt!DV#fFrZjAMU$wTiv%qea ztytDkC+JD00bNlp{Hyq}tqf>~$eUn}Nx%9)}VU8XgyZWnn?VNu0ss3tr zJ7-{Qn;iZ}ktE(!U2NwhTsIkRjolZd)|7MMhM`qbTv zT=o+1vSeqVeQtny6@Bww1A}-_yK&_YOpR*MIRn+e6elSq;~uZ`%2Xgn>DFYc6qz1h zhwo8qQ=C>!a-Q_;WFC~G{Gol%rZ_L#kpylE<gGu2NF?6wocnPM=g8-{iDNFuQjQ$-cjl(fuX5-hM^6|( zcqo(ju*Pa&y3?cn-XY%o3TgK`-u!)bi29qT#tikk(T5VX*ImLLoV27J$S+5B2S@u?bG&2)FFUos{<2kw==kT-aEcSVgg}K|PN4BsBx+~c#!Y1KW>^8GE;wayuhGaP7 z2ks?}u~BhX@FSRPevcwmVy1bV4kAI%b_btO|HyDUHOU{IYRQnF%USY&%W&18qcft( zdRRJ>mX{4zvpPC`?Bm1Lqv-1!+XumzL}O}zjf-@_X40`orSQ^@;;y&5KJYfPT{rZWR{MV@Mw=?rQ1Zk{)T ziB1ojMhDe`OeW3~=<<+%&LW%0*<{Jhi9GcYaWpvmL9(^^UGl@va*%cE;w)?O!btBz z@n-B~GJ0X8dbx`;!ruN*^-C8fFSt)vc2yIxyNP2iM=?hpBSwPGOYuRqrK@vmq|s<^ zpD_TPEGL@#MX}uPH1)G!nXt6|LO#ocq`8RCGW%*?%x5W^W^S{|J+|3aKT^`dwFph8 zy>PnW^a`KNNH)Q;H_-lf@ma1-OqRQ3jYg|8-JE9WT7Da{Ov7$HpWAbEb!Dnk7Td8S z|8%!wnUUJqqzKY%`K?$fTc=q2Iga_~i)}m>+5hb*Kqtp>{N<2%itx)zPqA8X6m(#f z=8$t{hIcOL5YZq0@8|PrDOOo~GUG>*-7&DuMlO0eOT_xKKF9bzrcOTV<9r?8IisVu zf7{#LY1HnUtGrFwZmNS$TpL1sI`p+$aa~lS9?lp$GFDCL;Vka>pRwM?SQc8DL^VtE znA}-?mf$qCcl}Q_=;;g@sLe)WCIepcBtB;tEImOc*`lQjR?b*hFmqLxHCg`|tG4uX z`ZUo#-N~KYCq@2YPv_Q@3HeMm@Gypk42!$r6wWVlmJKU*i+ec(hiLz|@R#1DnO(no zyGe5@EdH9)VChxF^L;O8lFfN+Z!UZ|FYE0ri~K-31*E;2quIDr>nz-qvjm58HQd1G z^L&oy^A2n$a_or9%oSrGx367mTQj)#fGej_< zcVLj!H^n;2fq|t$|Kq!atG~7D*cZpEXZtvQ`Rl zRoSjasa9D1J)JGn>b_2*eexQ$wXgFN=Y5;9ourU`_*(Vs6%O|#uT>vi;dH8V_*(Bi z_6qgVFsE-1jjPC&^efHp@L6VV&A;+lnww~r^<(zq{3hp!)~`fo`q!iBOiqa6`cb?X zPBYS54ogqf@vn!Q7(5FmKdH3_V-QGR&<+h@F9Z8__jiVb+N9l(>c-HAvlyPIQDvPG zR;Lp#%ZRMtlXTZDoTaSCim+Ss|9zA#PO+wOXuDG5vzGn;Ja?~+B-&x;|4XDr$kb;8 zoc`+U04G+p8R&$YY@X!pmmlOJTxRjjlhoLOERlyNsapp+1M61s{eRJeDb|?B_q{XF znG#!n+BENWeN2!&%d&sj zQs**`HA^E)C&F*iaA!mvEq`8B4RhM5lHuHM{k9)ht`hNZr-z)AMmRm1Xv0tZMnrz| z2&d0@E$?Yxnou9uOUNrvVHC>+gj9(3|E`wRHzSI~i&aF&l-co+-$BRERMqHHiqXr4Kpsw!!t_Ef zo2sYaIL_Ej8R;ao(soCYOLrd6nLJu)Gt~nlnVl17d0#5A8F0T;O`Nsw(~-`Hu|r}D zy{{z}QDhlwCd<^Xxq#GUpRIXoEvuidrWT6}ReC;`ujdQZ1Nlymx(V~WZ}-yYtAD_D z-u!)W0qC|sNyC%Jz|gk_FGMbYFyxSsFRC!KgSp~f1)##*8sdU z(V1;m#Hv;|u=pH_RYPuY`h?c2l{Yy3c~`(IH#mLmiolc=on`s&OiCnYY&;ckWdIo+;w&q=CivJ(@x8O4G6YT%8|z)+@I zbEDHUl%QUc(`h;J-^wOC@v(>bslhJwQp?L)sNR#E)}d@QZnD!Mc39);nrUj$%}!W7 zg4ix-q6Tho($xv^+1{kOX0>|hCMQwx%g*NZ$tJ4RO-`rSn5NY=XVtikP8&7zCa0af zH&MMg&q=B)wRDlb1HW(+{or__`t&BIjf;sYX^PW>Y>k`ZbO?pj$|+9Y&>Zy=WN&M( zKAPgB$L?=lU6Z92ZE)Jft>C`h!RF%AsjlpJE8wHe)s(5+_B+c9&ZatjVl!LTmgkjK zPV=}NnrnMYbp~B%m})=G=^VSgb#=`_HTXt{-w;l7TG$zF)RfguC$(pq6CY}!em{-8 zOjMuAX_~4t-RbL;x2;ycZgtwKY11kGuC~=R+q^2m8=%r?2M1wmQr2AjmEC4N$!)IDOi506f7lnHDh*#>N105R;V>InDQ zZvii=FK%C38UHPCTF0J%E7jkZ(m=^G$@ye8V5T#O)0&yYGqFQ;&0bIYF51{5aEA1O zB<0L<+S-*F(wr%EwzK`K%&4wOQ;Tk;RStlAGt}Z))c&cC)iu4;-&Zh&y*rDZajKL0 zbQX1zrjlnn?Igpqoo<{K&2~E5N4Qfvn-1l84B{8SRZtJD1-R+E%**kCVr5fDA=BkbAa*H#XdR=)7BRfsKa*NY0 zHm9G|P4XN@&9}Euy*d4>Yr<;!RPqomq#!x{)!G^4IET#c2H&eeAL4QfFVu^pH!e(AACCQEN@ zdpmjhUlA{$OH+*((fNC+D;AN+Fg2f3{bSRrYxc-0H>|;t7&U#9ldS%>$mvH8>nx@d zj8RuC#-~J0ms416^n}0XWFMWQzFAC_%u#KZIGveSM=n8n_!f2R5;mqs3RQz*XGonq z;-1XxaZdna3)G}y?x&t#q~0ucM$zDPmO2aV^Tq1crR)L@EmMD6>hz0U zvAnwGs5kK2FLRpHnFcIl;O}3dZe7MCo2GuhjA=eW{kDuMou;l@P9KO@4=#6ZB*q_? zJJ-bSy}P>Rh?>6IX{Bbba9UEFbt^E6QGb=wYSnV36Nx?du-~!T#WhM{Kl-rSWHLL% z6ZzXKoz&QA$iu4ft+af`4w)Rf#_mUyt>z<&&E8Qv?Ae@Awp`u)^UE_?h zk5;I$Yv~?m*ElhD?(;6h6|twO@IJ@x;ByO=yp}>9;v-AvT88bp7u4>xtSft7R3CC? z29Aw5qwAmC%Q7XGs>2$T)bqO1+K7`9YNQ^II9EHT-mg{*w>bQB6!tJDe5g|b9DBdI zriFU@UZ;88o!}Ahpe?yhSF1~$F#Y?H5|+1Z|4?t1u=Jexhx(K=i|lVD43h&Ny2C`} zucMxhe5fX^dV~m%8dUX9iv6rQ6sToIjyj-R_Kv z-Tt|>|KRz|t;aiC){f8BmfI=a;m_5Zw=>6X{z97Kjk}x_)q1_tmO8v*y)!!Y;D2Qn zWmRjY9$W8R9vA;511Y4c*RzCwwBAXIE&fX8yw6G*QAr!f?g}+v1LLFOYqfxtJ$BF6 z)isk<_qnWcuWoRf#2$mgYTX(N{lf;Qyc@?2xAy#^x^5!BmA|O#HaTPC zPF_}1lX02XL*L)zbg}m~P}Q4Q!6vA|cR3v#t4WReZjzH6d!i@zUe&$GsDj_$#fo#R zsj9w6_UIW+c|sk^FKl6dc({E{&B2fwxQMAF<{l?U z*4BHl&QWvkAu|U%s~7GeGsiot5AR|6%vFuch;oIxs?51Ec2|!YHgN75T2aQVVyRck zsEmr9>P#8?xO2T~=z#9(n02qKzT#e|os-eKMm<)-fH}mynqpw;RPO7RVPTi`RuA3l zq}Y{x)SLIxSo`~^Pw%C%j%U}@6nP2dZY8EnHF7JRW`bI}mAn?IN47F~>=0_F&SGF! z4p6^rCEt4o>`S@N`99>F;t|~D_d9K!B0luJ-x-j)!}cz3LfqdzL-#6b9_FuvkX6Os zIXr)>?svLG&LxFKN(fnL?B+Lz!!8MTfQiv(+v)`Kw6FWjghV{SXV1X4u7}A=t^FkU zyumlY@^rAapBCa_fGk5W1A}aXmJdvy&-iNcDfd2u@W6E0pPq@V3V=#{`*Xlop4;uWb z8mydlk>VyH>u`LSyz>>99kM=a9WBod$}ZTI~@hozia-@aYQ?O8hhgRs=2r@z6rE(?d;uA+1N z87y6;gI|KB$sxC)hWlIzyN`vzGK20sn= zGWc0|n8D9GjDrb=U=Id`2LBE&HuzQefWg0qDM@Vx_QUc_y3WvBaOPzJzXRtO{H~)G zKkOt$Vz}=o>FQ=10ZYbps~m)-V72;YAuA(==Vpjc`c)(PZLjw9OTQbelUC>ywhogK z(f#^f_X!L?AVz4PJ*U(!*BRk6mLZnNc$R= zuEXV|JJLF5&@W-xQHg#&%r6dVYwSfhkqpWAd!ny`<8_U6LeR4#IW!EG!qW63eTRK8 zO{@Ao;#}3VO}w8oI&Evlb^^ZzP>(ooq~`I6znf(gyk*$RHuwmf!K44nA9cF4E~RWz znKD~;=1$bHzF|m0NWJx_^ORG{uL@>A=3M2Bxr~wWnA5iD&N|*5GjX|-o=}FxS16oM z`Ec1zK2-9dgM9ciAFh-SiKI7MKI}$vr+hfeho||_G@h)vwMTSzUG4*s&cAj#U7D8j zI|5yX>rfP;X#TjfCb9z$wtQ}$UqG?hDBQo{48t*|9xH;u-C(P}cb`)VFbS?S^!)nC z%0jOb-UClg;9Gq^y^rfLRCgiJ265#55D~~1MG|3m_@WV^+=|$XeScqnCw$iMe;H1I z2l@I>;4y|io_p!JMuvOV?@ft}98STY1lAeY2=6uYdts@%_nvUtMk?qqZr3BH|3x9q z?*-dB1Z zTQgvWS}o6l8S1qhnTtT?0_{);=NY^Zo@nr5SbjF7?U%yx^C8VEV17na%d21+j#|GK zmf`Ai#9D_y|1L>7MTO7W;YC=+ujZHGY=d8c_0N^W|Af!l{tH;fyXG%p{evWSoBW@$ zhMqthB*HS&Xl@S6grK<#Hw!JDnn>Ea>H3 z!&VVWSx@5{vHJ7~_Hm!VW!=KoL4V)(U}M(Xo&nEIWS_?f(#u)P%hAK~5R5EuH^MUF z+}RR-1eOuybHuuhoox#eSm9@2WH@B)XAP1&*OH<8VOf)8$01yY1zU!oj&LH^Bs-<64dZHA;jbYW*&E3kQRHRO%}ZdAG@xF41ds7qMVmAwrK?(h@* z43-f<)w=en-9oiLw38Z`3CoCKGIaH$_*y?E+b>{*674|{z9J}bn;z^y;A#FI>V9|! zU(}TO3G&}c-D#RubR&EZ);}_o1mpXJYJXfPJQB{NfH(Q}n_!vbhQTV~87I3*ivzm1 z#99l9w&ekJ-80-vX;ZB3c*aTLcG@$~IISCR9vOBY>awkn)sy<&tp53oGqp+9DlQ8o zZ-`GJK3HFkc$TZ%qxID+IiIYr?%*6r;CFn|iZW^+=XL6trZ?=|=^oN;~Fb(aX< zhfkr`{=dKpO#=V+RK;0?^WjW`BdZV`LZBnq4IeQK{tllo_##{Yw|4VyTOD}Tw8YSl zhjU=^;a2e)c!HrXhuZ`ku|7bMIW;KJhj6c^L54!~;%Tt%WSQ_zLw`M7Zs>1=^JWC` zZGbBc{T}#GEi=`8j3Az$9O@c~Ye^@Db%NdDf?I+Jd%@*~{Zx35VZRB^GxV>(MTY(a zJb_;&x}8v#o_c&LLZB1u1LwdxL(}15hJG`A)<|F}P{yX6PMgiV~ z54!%0f2o1*5zIkAO}X4QiHXKYAP*j6Bv1@bFcR1aml^uQ@ODFg9+nx|3nA-Q_@J!* zq))J|Y6M4(?Lnv=_c{!YfzQG8RX2lOeRkdP?+(jUuDKVif6FWdoZ_?APlsiyk7z*w z0{xqAaoFOs*53=u+^u;VEK|2;1HjuYhH>)SLs$YN>e;EUTsFA+RjJnuo*gZ}K@w{6!I8 zpbeJ5vifOW2J2tri^JnSYduf$yQ`z-r(yl8ezE_D&sxvx+1=GsbL1ETSw6MkV_23; z&7Z=uTx$Ld*1!Lk1QNK9AguKbVOdQzH-Tj})qFYZz9;|z{t@2J>?qh_)T3?L5$l&F$e#L;;KjE{se+ri6+Y7A!edT^_{(*+u-410F3Y zEc*q`H^Q=C&^!fpU;ZHFmk2ib0&Q?NEE@{VWw2~0G~Wm7*F=c_TRv<3JFx7CG`|bW zj!5$%Sl%ZQ(QSCn7ifc@VcFAZ{sopjo#x+Q*)wXEXVhiSsM&!Fed2{_Rva9Js+u|; zOZi!3tg4#M5&>JJOjs^j@ATOYyC%XnW68(RjaVpXTj$fIE%s5ZK)n~20A1pSQs~VXc1?&NS>#!DR+F z?MMNP3=D)Lhi(rOorI7z7{N9S;$5=&g*a_!I4Jl65ptF8X80ZWtZWM05VGEdPovlV zXW?N_1o|J~1G@wMsUzb*?U_Ju0R#R15~-2YP9D4Q!|AZR&xD)tZU*vw*7|E;sdCNN z!BV4|Z-Ax7G*9kC|C1`!f~gpM1rI|Y8QAEv)^CQTiZ$N@>ldPk{cApJ{Tr|}f#w77 zPJ{mtK_G3c4gLrphPfVbGf?HT)}Mo=iZ%ZXORv`a3oK2f`8QbFT(ivC(g`(390dB+ zEmDH6K5K*S@Ms*`ArSp!pS6A}EPX`t&G2eicjCK!*7`D7`k2oV>pqFVN0}%dfP+v~ z6CTWWk52?&l5c^f6BXDDJ8slnfTa%|_W41>U*?t9;j_<${U}4$oA3!TAoGlS>-iLd z;AJ==>woZ^)cWzzb_V&+)r&$dL_)_)qs)>kD9c8P2qjr$6Yk z=;{CD2!XsYN6&QayLqf5$bi?s81@kR&T!72fV;x+F9kL5kk8ux5x9gJZHPen(0gzi z_5_*#sR0r2q#tXFYw#nS2siRMoW0@SK;! zcuV>u`3r(_!=Zh53}Eu%W+)%tZs=FR6Aj)CSNtw4kr6`HGjM#{AVWvtL)epy8($54 zUi`iC^9&C~sWc+I7TysI6KkUA4ZaaRWbhPN-j>wJPoUIi$&R%8U9j|eFK~Ge%L|m; z@{7T}2qq%X2HRj61)3EsZK(MnSiizZ+Vr5$TK^s_Rj&EZur!h8zrr-3pFR;BK_G3W z4L*RS4`}`nmOi5S->~!v&BtMB63zdCr3p2E4sSR3zi@dQ zVOL2kGSf93%6A}Cq1(pTe*sG$;qIIJl|%bse8~bQ`23eELv9<7^!XPfLozeA?n(bY zyElwlLdZ%&kdqX2qCEKQt6^6w`q8kwpU4X#Yb-3Uq0&4K-fr*&xP?(eQ($?mmA0SJ zlm1sog6yE&VX*~+$wme$VR`SBc6bAR7JU=n{uC_l$I|+5;q`{T1yiEDJ4@@^!VjQN zL?E3uuNVDKUZ$lDuEO9122Fi~6|lU7OY7Ibi;V=zVRdS6;a_231(x_CV(=FPGLAERgDXad+;JQu z8wMO+hNV;T^r6em`CY1X%COI6SBKm_bhDq}^!$*OPoL2lxXdWAOgtHIxz}lB{%1ph zpwU}lK1&E$UEwxwhXn{Bt2>CZ|H3o5l7V_Y zkI?B!`cfscYjcEv49(L9g6QWPEcRRAoIi$Lt<=c9aN?f=-Uc5wSi$m6J}=nTL-0=6 zEkCVlJ%Yfi5;2LhcEUlZs%bQqNBoG82Ls$baPnGKGcs_@uaSAz@dO=uy;$W<47myD zPP+-#F9nnud(w;FOJ7QK5W&emhy66!l)~o@2mEKa#rpyO6(08YfRDfvJ`DH+`0%lS zKZNBigkA_)|AzBE=K5a?jw2`t2R8`fxXzZ>6l#4PSYBPIIRV~dRB1!_kikvhV+LOi z%c~8&U|TKV2@ylk8i8a$8zjMIlO)4IsH#~?CzKj!#4QaOrf2AcQbU=3le|wSlp4{G zBM+d-q(-Ls`olCyM5?@zFSz*zo_iq2?&>9N1WO4dU1_tEu#`}@X?va|pFoB+&w{1N z^eFkqjXdK(4Z2rGWH5U&6P>}kCi9@TRPh|YQ?=z$bgAO)Bq$|%7uIislnkU9H6VRv zI4o~*%oKY@!IM6FwG^^;!}7*R&CkH{@m>oe-rmGOaz3?7`_rr$_{tBM_SrFkj zaQx>1e+wUjb1km`W3TWSB!sMS@PuT)$w)7<8bOOM!me5jB5?7^fNz6O{x{$a@HQfd z$3sf62QD!9V_0g`3%2zsTx9TPu+)IBk60%WNDXL*ui%{qe*;U6X#KbF0fW!NQbSt* z1H9eXu>1rcGxQhW%vwF`|3w5R41*f@yuo%qs+bb$1Y%)%gQwJVbmw3|uZ7atYXoEqpRI%nEqW4Lr=HYM7h#u#$OdL{T%~KfX((A+6%dm}` z!sBU-k~Tiihh^Al{s@*)#IUFQI82zzhJgsS`wmx4WAPxt`mki+Ff48E4jZ`PbT%l) z24g%dZR`$X^sn9=s(s0-_~#ilCiBMJ+8TA&pE#?~Fp%YTp~2!%2J3g^O25AkKJ{go z>`4e&55O(H3cDoyAZ#|-4mb!^HGgNvB=KcQ`ceaFFI>Kb_ruNbmtoqxKi3ty$>70o1srkP5Wy`7%8UpXz`+Z8L)Ier6b{m9 zB*KSbdA+RLrbtftjM}yMA1tq%b*FapqjNmg`mr#tq>XrOjzNVd@bvJDu;kbaw)HYB zIoA9NEG5)j2}=!VejSz!Ykm_po8)cSzyBj2s%l!Y$CDZeL((MMSbU@g5`A7k6G@dz zB%(j)MgS0`Nlr#3@RgyL_`fk&>=Oo1BayGeZUj=P4H3w@ZRIYQEI#-7>>1F>V0lk& zuCM>uXRZGQ-kIXPLPwe?Z6Hkw>n0ux&%s~YkAovGVc-rc99AL7`(I$N7H)GO)tZJ! zh{3fL-v1V_4stohdJ?w24f96=%Pm}JBzOeQObasbE1Y9+`XI*t7(*~_5UZQPtKpm< z!fy1EKm7x;e!$FvVJ6q_62jXVhIx%s!PtXwvoMg%v) ziRj&lh#I;BPB!dcf=?Ru$Kg!$jwRXU_fvz}AN&}$#=z2~YkUR?{Fp0(UlZ#t1|w5^fp(YxEBKBRd*EH91LTm+vpcnK^ok@ocwYZ-$4)LMbH5}s!8YPiVY2rO@r z)(PAOUo?0FoIsOkeJR|=;JaYylwM%{--1ATrFOU%mQJa88!Vktvw{oZnFyo`-|<=N z--V?UYCZ%@AJP05So)Y7Wc~je0_m07;P0?>I?YF6>2#X^1xqK>{1GgjSo0^a^cl@3 zVCiF;zksEWNudAR)|UumTzetL`WlvT?}b?FG;B_t-@!qss`=+qHWW-`?!?8+cm*`KY=5?^V@LThGc(TEF!ihhJ{q#w26N1w}2M%|` z@*;2@K^ZJ>4A*=gEH4b#`~WO33fKG~EH4w+yaUd;81Q3oo8KaV;0Xj5siI6gq>BCu z^ICF9LdZG-XQv1HUtxL0xfeoKH7u`4*Blzo({cvK!19W8t-lPO7cs_VT?F#FdN0^k zefYS+jo{O;+o{N4f1kDeKv)W(c`z)mqu2I@K5P9#I3gv|g2f2TalRA|LRC%S0k=u5gyGza7^9aX{vUI>ndj7s6)zA4CwC5e{G~HLJJ~ zHZ!ooXcCzh9)gdP0WXBCN1~c=r(rLf&|@>HQS5v91&%yv7)XTg!o1$THo`;jE%Xr^ ziHwTxVcwZvtN#%$F#6DWc%H$(!lf}mAFCGsfSLbCcnNqh+Exr)WJGWoY<9}Ja1g3$ zwibrm48$RnDnANK1}LD*&F1s18VSbuJP{7AhFSj~LLen}r&ikhb1{H*n|7iXONJWx z5!5#_AT`!4DuX=?y;ON`gT?-On1A{}Yy|oKe-eU28NoQ+03U4nu0|-Qa zz-O)h11$dpLTW_x7kt+Gi^9}c1_H@&2fl%n|2U!TZ}J(n%>S(22zFu+4@rb&K7$0V zgkbqs71D;HKj^cohTntbKS^l*Gh9gq^i=*MEdNkK>(9gITs`Sa4pT>QZ`Uy3p8;E0 z9fAnP!SdfIbOaONLPH;cPa68$;BZV}zd`H`E`<~2X=EwCWZ^CZ2Snh8khKNQiVOH& zctU)@+u-cF0V`PkwZ&%qrG~809_#oVxRgFp7l9PGE4&Mi#QK685NtC#)q40DIKkJy z2uquKfy;4N{u_xqDv0nCpSAu3EKQ*K3t0XGiMDSr#$~VklIO+6W0Se5(Sb}sh?X|fiu ztOe6xX;RHk!ZON=eEaX`vi{33)8AOUIFAIV0k;zo!S}GVnM_O)VeebmFE9*GGQuPS zcfiu-TK^|l`pk8{eFBS-^bwtbt6}LAU3~q^(y4Ti#o;Jis0CE{zYM)BCLb9r_7|h< zYYe^E+gH^_#_U;DlLi;oisGzD2g5)dIvFeuW8jlaEM5p%SHoi(2Rt6GObqy1cyGtx zS+5d!7wpz3!~8k;d|)53UO>>RWe~wj@WeI&?}fjm%DiA(``|nx)cl&*8~g@5$KV6- zHiQ2FONP9_`u9f!l4Bj=pJ4gFKAI21sht9TA3kIZ+ke1WhW?*$uEEFPZ3ce~@6s&S z|DPf-+vGDi2vs$|-pV)L)KHq^b-HD%xE)Uw=CB+}Cp>sN-{;dLg}%PJlu<;J&G9*V zBbVb8s3Va|Cte9ljY*TZ_y1o*AXTJ${jac8vF6`zVv|aa8~YLb3QLK!e!yMydTK;- z1eQLLi@jvD+LT4CJznmKqsOfh5E3|CAHKlL#coxqh2nwng8e@Y*a7PIK>Ac)Sso40a|J zsi8l^QUKiq_3ojK$)M)n!BT(%-#*RHpj&>a!VyM}g(tvgQ-dnI9yUujDaw8hd@3!l zzXhIOTLp2}0{C1;pug2)z5a7+6v0KqV52Z4aQE$uk~iQvaE6os{t9l?F^KRR__QuD z`pd8O?7ckjbvs;!ezNaB)MaD+AAvw3&<-PE$$;iD@Y_DgYIrpqgsPhH21^YV!}34Y zyb!XM!}9;yG~WuZju?V92;?8TX@e42{;izm+hO@Nc(Y&O|Fa1g3$ zJ}=>pxC40W__84 z0!C7UDqoVoHuMtzU!(jZM+^gr z-~)rj;X;(dMME$4H3o})d*)~}gBdbs*9Ly(V=(rSnsHGM6AS}M;Ch24fi+R~C5B$? zZ#P)%pNX=sF!Zc{RW&af0&)0fl*2JYFA02Xu-J#jUs~cAI0#iWml-VfT}=B36G@g~ zAPMv|SR8IJ9k8El=*51j!D7E5%D&Xli~U^&N5tW!D2Kg<5|ut7;ks0(Tzh9p#X1=*7Oj!IHrADEk6KFZQzy7W>V$_U`%3g4wCOU>s3Q9_P;k+>_3XK|HROX{Rz#IzBq&?Tv|mja1iK328(@0lznGI zF9~!tSnS6{*0!e_ z9Nsrr9KQD){7Q+lel+xAf8JoRZ+-2hHJStmp{gd?Wj}p!7#8JlWt77xgT;P+lzow* zmkcd2SnMB&vVTzYy8Pm>Bg)||;jY2l{|;Pf@Vl@%)gChZ-5Mzix&D+~ds4@&Bf^!CoLvt=`P5V}InOhsGYT6ns_PJ5^Lk+#eKjJ#0{Nk`Q%3(#6!zzQt zzC6nQIYTcAykM}{e;j51>2*Qd&!QX}Tz_ea8^b~1dpv_Bfx%Js!wkK|f2F}< zUmS^YSZ)}I!>tC3!_!gr&l-BMf8JoR|0v4-6GJcdkrReM9O_TJw8V|zAXL>fHCXI( zqwI$odP!h}!D7GUQhUDtHw?sKrNQE``%(w%8AC7j6$Xp_zoYDr8+x(-kHImr{wHwN zY4+-daur$|s%n}TEC~#XvL9mTC4u1vi~Zs#`=y4S{$EwI!VrkVBT)`J4ZS4rq`_i; zD9ZjXhF?4L4N?Ef5P|JPc*JN~O`j?@ag<@m=ahx3MB68P0% zNg#aVr8Sfa2cfDa-C(gFt?j+}C(asc7)S!+3>JrF+QE%A&RS{c#eTKHV*hxQ{Vqc< z_D}olrY{bMqa5Cka`=bAV*hiL{V#@I68Ozvu}|T;+Z<)>3nA;jaG7z9+VCb;ZR2)f6IlNrZ}*ziXV0H&QrP|f-U!e~thv5G8x+ElfaZm; zS+k4bAh4(!ECqi6K9Ln<_(6Dk_kef6J8R?T2I*r6PS*-}qY7*$_!JxjI{SUxg(t%J zkhkx67?uPpF_L}ADOlob1k1gvTek7EFU*&6E|(ke#mEHtCj>it1UWn$m4WvS2Wh!~ z7%V0J0WLTEe}a!0d;z{_6!0Rf3+PUeH3)*hO>%N94!Q)-!;(N2Mp8n1N?XJzcGBt%uum4Q`CQ2p>c5 zW{~?BAHjzVj-6^*CD}oI@$k_r0TUaur^0LQPA7Sp!AsuUI8MgCB#|R8wS$LCmAdbOFakA9Qzf9UhG#H zEcTB@**{_E#r`RmBVK&s@TVw;!%+_J8!YxeMA`pj=p}&*28(^$X_q!x7&a~t7)B!S zgE(9{?NWzPa1g3$t}Z`+ESL5&&uI&eX5 zt$oBwKrkl|SPkJ!nt+qrX8nAY?8wYF0G1~6f^Fr((qx*4!W+5;JOY*~*ZPsL)Q}fg z|HmMZD$)j5!xN1i&3IUmlu`f4R?BCV)Zu(T|A;Ul%{$j8=oYD?%t;AXX zGxTDA#$d6p$GU6QXaiY?YeQ8{W1rph#i47IL-#0$UIvT(xG4JxhF&ssy}@E%9A&@U z(|hF?hg+i@RFuO*hFd(5g zN*lpJ;MS3PDJEu6WIW=8!Tz^^%wTu=?3uFjf)mlZ8!7bv@>%OYg0l>Lm)Ra`eHL8a zBlro;BzO$=b3!sZ^2E_=zCb&?0q-4>T>DG3)^j}8`XqSF&}1tQfjnDxjn7(t9sE2A z%I;ql(GvIstT*4!!Q1c;yZ#Y=Nj29K=m_HBy%;3A27DFnv(}fuXNj-{0!iRG_z?D5 z{{no};FsX_!vg(YxU{GL{DnMm@*f1-5yblu)}6^@Ukz^2Cu-X#&l!!{x>W(wp!T=o@1oHS)F3+Ws^wO{V!f zSene=Q1fUT0&@cV5e`CC&GyISf+%=&?IT!9tgnCWc|7FSh}zBX7(kT;Qxqv!v z#3!>uGZM=kne3-eo?9ZwN8p8!)do)J9dyDg;R5t}9@yrywpVZo`Z@GM8J0i$to6UZ zr$zv(uUGT z-yx7Da3>x(yo2X0Ngx5ewCQwMYM_NwG5Yhygu0q6QRsp2YmKQ z!K07x3iNtEaL#9~{~0be+B~_4H_^j&F_0!2BaFYczZ%ZeH7M)<4G8ua22G`=f8@`+p5jHuPuUO!QPRPn?p0mW!Br4TB{3l#zjv z@JT~I7LLCm$j~)#l98dcaHgTZ9Uf+IDLe}M`m+8>27ZTNj$u#m- zpsTp)V(bll3wXcbKNQZM6l6FLp6If>{_w0F0*eUs7HkE4z;IXtcSG+^#bme~K56Km zhvRPy5_lQTG*=0FwQ3j8E6CN z-V|^mZOOTkEsduY(^$AM*7TK5PAp zuykt8FT;EK@Wx3U;U}J;*5CvzZKxf-fTd4p{t`Y8*Fzu~YFzBG)+fT!i8VKe&%=7^ z9pbXF{trhWeLy?p!P3bzkA|fUHIId**J~aJ%dpZs0hT_a`FdD}rRGWSsE8rB34x4j zZ7>a%Hr6}?mNwHo3pS_Txo{BpfvCYUGj4=Sj6Sd#j;toaOuVEDUqx^lZshX`c=MEC z&-eXOkG(|rPo;1R)qv(Uuq3Ft9c)&4 z3LFHUw=`I)d?#rPhbSR)9_yeml+({fnc%`;UD22%z~c}|f;aiB_0wP}q2?K|)PUw$ zu+)$jnE&P?Fx#{c4gzlHoZA+Ykt!fy;=n1qn(Ox44zXW08O1fnRjq-m?-<3I@OC4@?(iOi`@m-n?hj`y2{Moi=dO_gk-j8Y5@oO$xc&a0MuM~9iSXraY__!(ww4D8Dmd5R9dH@;kwo9&Jp@N?4IB=`B^c<5=4ZIqsz86y z=P~$84X#*oseVlqm%t^4{|1k}@=FbrA}BKq?uO49ycLdF9b`bk2?p`ol-X1XoM-h}8{BL-V z!Jop1^|+_fDC* zAilP68-v5}1cOs01BHI_@?BLr9E7TxjuJt!j?l4QewlacF?VmqNY;k_ugc_=Y@POb z6)YLlYr`9`BJBUlGZiFE{jfTczx3v#&~TPbgs3vM!9 z2}=pHeSM};09kzUV6&56bty+I`O(h`qZeNbA2o*MBzSvC(95U7m9)8A0xOm+6!&(G zKClFyY*g_wc!j|$eSh*x;1~C+5tvONO%jBvn%iKr3BKRMWJQ8m7=`RuEBhsW+(!X& z{W}~pVM$Qe;M1^VsI_a)rWBR}xWhC;1cPYP{Rm{6ED>%nG9Xp>IBeFy?kIi+K4{d? z3-Eao^lFIjyy5KIf*Sk;uJDiqbR;Sid(=58v_5fQ5=SI41N1rmh{O$27*Gvpi2~I!KH@2 zH@wr}e(-*S2f^nJ9tO9#Bgo)L&2IW+V5}Bc5_mH#+{t zz4C^j4( zhARx-37%$aZ~90VQ$hRvC9&eJ?v%EXiC&wQ`IGO?V(Nfsx&oL{Ch&htVZ zUk%H!mYLJNuqkK%Emh)PXt1~($3VuhHt6sS-&h#>xv-35t=|hvm23Z>U>U|0ege-u z%kQ`;pkD3Hz*68w=w&hM{#=B|2pLw1ehz0m$J>S&7MkyeWmIT>50+lN%TM6C3cfLc zd-?odSUTA>KfdDU`9Oj#{RH>H(j?dU{7VFZnd7n-F69m{UdnGq@kACQ(|_bTV)lcq z9W!CGlg^9c$b1C5j9$DLK4$Q8_^iRJqj+5uuZQC|C;M3lSsURA25*521Li+YT`I7) zNAbgON#J1Zgm)SI6kKWWv+%Tm!Rq%<__*!^j2i1UZr$oWAoo8zBiL0du&wLhG$L?2 z2@dOEGl4szcq4qm$iNmjeoJy~4crHp8@%0Qx&Qr$DS&svM+}FjqPQF`CBtr~B7-0J z?4`)R$b_Xpn*R;&g*zaSc_ij`k44Y?%X?7~NELa3|B(qx6=|*ypM$$1kO;DU*82Xi z)R^Xha4%R-Y;%3q`a(D#JrkRE|6ln6ZSW8*ZK(MX*qoSl!a?9SIIuY}ZDdm_O?Ecq zO*GH_KID#q0-R*x`So@FM+cpHwOf7!S^F7AIE?WProz%@89whe5|m-}PE>~8HT3c& z)1jyg{l(CW|5tFvJ@gT8{o@IIEpUs)cfoMB82Ee+9%JwYxYXe4D0bFgs*i)W8}{|! za@b#gLslaMhYf?vqqtQRw}s=&f()iaaeFw;(076-Yz^$Y!KGV`@Be#wg4z;a5yd%h z+Tc|8?LyKC--ZtxJaPlym>7L#3|wLG)$o3U$HNB(8u$ONMR3G0me)XW%-Ywf+WpC3?oSo5A%y zYyF+@2K04&{mXaI|3sh-Ucq1stiRJa;j`9%0Y8XdfA81ePLH*|G5jQYzF2fKkmIw~ z4}$j?{`2mn|BFBy%*Wt0BZBQdYyHFUd+2ou|LC*U{|Wv8y{@5iK5PBY@JaN#hEpP? zo({}p(CZ9V_^kCW!s+OB4M#rm1=`>fxH|^A zjp8?Yto8Naentd+eAfCa;Ngb8z-O(W4d<~f-A>`!JAx8)ybO@mcArv_} zME~Ej)_V7PW;N3u=f6Im;0X98mBBcdjs61oF7#%Y-RH8=KLF1{zbyh8ri)!R`uE`% z(c4`h@Bb^Wb_B*C2)}6z(1%<$`Y8MXdK2aU=d#gf;4fABNiG}xb?_SWn#6EUV)|uKk{F3rqggnqTiAXcVxowt)ezfy4ZI2i9FMNa-bgBfM0t?_+#C7Vdq6 zxBj2!u$@17@J0*4!~?yTPWQvZNMQFN`n4`Q1>!TOK3)$usthWw;T@9Vw(vB?TiC4b z|Eqll+rnchklo~j%Kq?D9E`1ykgW*Z;j$^vJwCn<<}b%MYV03^d*9^oEO?Nm1W$?p zo=y_UVB2dQHW_sB@s99lmA)39p?DW~t>Qg=yfFd ze0&(ZQrRB~S55K!4ZfD~H&h9RVjxZKT>MpVSYpEP|H1R-84dSPiS+F;l6ho%CMwCW z!sTJG_&3A&2kS*1i7;#iVIbo)KA#5&1X;-ChheF);~*Fay~H2?!@*Xr!?R%Nk_oQ; zq?h?2B`r|v>feH;g1ued=9Q-Q)-gW8cvV9g*Hd8KMYsES8a!5Y;l1!$#Sg+=Z}Iy4 z(WcD#kEVja95|*D%!Su0egW=#tLN}#AHVM7H{l`5{#|%Ri7lD~!D^bwx%i+n+~**V zKY<4-UJj2|yaLuS@)hh|{G}OK$H;F_^Gt~XjKrwYqR-!dhPj*?_N0>~1|rY$LV+fn zF9z@wx=0FSg60EQ3SfAL1uQmH;4thZ=uU*Cz)}U_?^J=LOE9g=Mo9*?dB5*Q->Zx7<8e!e1qhRmiD{LA$1lJkW&bif2zK(P z0Iws+D}zPw48{M3=PLdXUa9y~c)j8kKK|OrtKiTb>i&NXg84-4X0(88I=fEBAzbV7 zp>S-PSL1>3A~OoGKNp^$^y7umn}<;MxokHu_7A{Q53;;*J`=%g5*UL=;c;xi3_lJ_ z0S!M1O92c&1uuh51wMD#=)Z)&M!yvTsbI(JVM{rvLGTM)=^FgSW#iyL_`m2YT>a@T z8~tclTFmfSumqiR1q0{6I;hWs-ToI7K3jr7NA)Tu5^0fYv@((G^=gG3bW35Gm`;VI z&nHr1;h$h>u`1U-{u+xF>Fq-)q(29i0@)SdMdx#`@%(=g0%y4l1}q9-E*Unr!MabU z`S>1qrt0$=o~BA&?R~S7o3#+zpl&3KAs8xoq?&z*0cNC&9W;N5I~-W~}a!jZeU{ zNidXZ*xT$I9Cm8Ow|RYhA3R@W@DRLE@ho_$;wRyCC1(A920@4EUJajjxu08r4mUQ{ zcl2=$+*PID9`3DpXLyj}9xn4ga$uz*Q1ls0_3@o>qjE4Eo~ZZ%c)sFC;1!CW@bOcM ziGMx=fS|*@b@nDvntaQf95zk9jgPm3Q`nEKaJuMhmyP}TKE4nhhP}~W3}11d%`*S+ zqf-Pk9f8f0T%Ha|fxhwSfAH~-@IsaT7r5$vFT?flAjK6oJN%T)f0DsCS71tbp^qoP zW0iwT;dzR$g4@sVGQ7^^z7>xD>S9yI$SdQlJDpS!K8{yhL$dxb{J>fCszW%dPQiKK)xh zeg_`-pj!XmN6_^l&*4(IzvAUC_o8@GvYB25Pk;j!37o4UFkA$R z^FBTqu2uR*c!^m~nK|Eps}A*N3Wcs*S6xL2TxsZH6cLeN_oYzFtE03F;WkHKA@@EoM!kmCJ)e2|Y1f#<6( z90N}~q!gr9U@C$}W$+5z!7~W_2v2&_E5I*4Uhm@#@DS3Q7}?`?{Qbjyl}i*|<+3yC zSpTnUBH%BE!7{F$t1@sCEaTYl6nHj#BmxP_7hN{`mth%(hF^tcm^xQ5un?A@wl8`9 z{}uv?YUip9yaP)N82&dbU1E3%JP6(%ffS(49S$3PTlf_8<~}0qveC!j)6iESp#GJC z;jX|KWMSzN!v%OEY+_=v%SL|#JQ;lyf%tpQWut!qp0E7PhnK>8$^C~U_`wyJ1V6$O z1BQQwYv4Env9G<;VWaN>ABKJlSAV3-Mt>A6F=2QJoQKo0{)qC{3qDE)@=9>theFGC)jha3GHKHCAUuN|HU&N5xCs%`oeH??=suoJZ>lE(;>lWG%=5q6=#C;LyCK|(|RH;En|JTg*-gxYIH%+P> z)cUvwyk6;h!LeuRN;TRGzK{Z%M=(R-u}Xgu9C*QfK*6xR>~7*u3LGv$Pf>(U} z8a!D!d<&jQhGwz(6>k5mSD+2>LZ#p19!81cV=M&oRDu&+wxgUz{>Z0a=Ht)ds{UR9 zwwg{0;;%Oql~M3_mz^f!Uem|ctq7zGjKQ5gzFU|Kx?&)G{stUUybgX!rT^W>mG?H) z2jSJ8y%pFT!E_wjZ!*as4o`y3o^J#^2sTZ8H9SJ;{{fFz`sMIUrSEVb!y2ZC?FuB} z1<#ubv;Or#&~F~UQmu5F>^hfCi`?krTYNkfZX~_2zYAVKhV9)97s9pw^7L=R{SC|d z_nsEOANlwbIByc5{~Vs6cqKeTEmq&cFDd>WUaxo!TtyJdMf_I=){23etABy@=W~9A zWgc*@%E0fi%mao4_dCPRa2r^LnR5jLZQ;wX-wuJqP}pTq=6_BuBe)F%^JsLq%Z`J} zKo*u^X1D;)g||c?4kx>8^f$mV>r?+eQ)FuXr3qrmV1aIYZ0|1*Mq2wuX#43kkV8~vHEM780w;r6PJ$H97izX0~G zH5)F1_41xe@>k9N#r=N@D|-j@I6o|6ZlC0GPu714O1nTjEMCs5Q<-QcwQ=lEc$zOF zQGoW?%dch*eufhgtcLyF^k2Wht36l>CH{AL2Y-wL$DWT?!BvOy{NJ8fcsjk?yS#d> z@(fOaWmxTGXHXe<5SC$;bop=8$Xv1knGVaaH242sy6o8SD_b9b4^OewIQ|L2 zq6)MKp7^Hc;NNi9w>~nybKP6 zYnA?VxWl`i{!AaA>*Mn!y|TC9p)M2ud?fA?T4JQRKDFHYa#3QU5#;FB=u zfIzlbue)sYZ^Eab-@?_ebJ^&BgU2fUu8%rw^t;3TtN8wp5%fkNGn?VPVHt*oBd`n` z!*Tc#IEz3EIKpM4&%rXP3^%|siVU9u_pVa!{~HlV&=`YJump|aGhvAd!)L=1Gls{( z5+jB$fTfQOUj)lyX83RLQcDRYB4~8gaxCX^*t_^}GOX9{#wGl0gNds{m9xXy?E`j5 z?CH#g<{Fh=miH&%MFj0ooXWl7cC(0o5jYp40D`4}$_m3}XH@duth;^U-` z_kpWF^z8rg81c6bhi2b?Dh4+W^mf5F!DlI+2cN0A(PLK1_N$~;jD8-HN8H$S* zg431YUvQ)1@8H=hyb}KiKc!k=rzc?S_jFsZKRg3AEqWHbLh&8&0+rr+6~PiESPQRI z+>JMe9h8Fs@C>Ct8}6#~)8Mg+Ux#}u{tvv~OK%10o}|x}!9aMT;&b6XitmO8Dt-eV zrg)vC|I%x*-(d+_=c1$k!GBQz=i>Z-8w7H;+qw7zJSHlZ*JT44i;K`pCKXq!KJmZg>PNO>Q^`OOqRJfEyK`0!vUEeIqPUZ+H|eqk>E3 zf4={VK!%NT@%>*|hLz!QunarH7r-(s4POLH&>8+4EHPwwA}qt&@a3??oV)&42ChON z!^Rj~1Iw^7JQZ0zFo{8}o8UZnnQ}NCUZ663z~vP7Qh~KT{eOMD9$t9_>%W;hc~hraXt zT?{Y!tJeY#!xP~BT>B-kHCh?8d6qs`Tn`UYd^|it@kF?<;z!|?-+Kj^?c=9?Joj0~ zf6pJh1TSE)8i$*?C0qsn7p`!*^IV4IkDh&3_*bPr6ketZbS6CIC(r&|mxtj{g7mq$ zj6ZGgqA$VA@J!|4b@(@x;eX&oYrPD9gV(D9?D|h0Kq&p5E)SzZQh==GGdS7Dr@~b~ zdl`%p{ZT#a!{ZW!Pr}2F_V^FDud;9R99^imy~_*S0$7Lo3uWlMe&s`nAC;k3&Dz#faCXY?{!{=NtaENjq&Nv@$q?Zf0h0sc!}am;I)S3`TrHJpg&Wg z1jRgU0Keqp1#s1Wy#l@guT=aFJV z+$=4427DzMR@kX41Gm5<*VjRE@zX7Mg3XdYf_o55R|YfS8HyixQN`DT#RPhCH z;190=6W}Vvm%_D*uYyOwPW}|&I#*yy{I<(dAF0uMKK=k6ryPC)*KY6%@HyN^@k&Xr z_&YeiL7o5m5y1py@C!Uo@p_l@?hfhj7n|w_`FJqAUZo!jPpj_w;c++)Jg8!m|~p;MI!v zb9u4re}d&RxYWm2z}1_31-u5HuK4fpe8okVm$?~y=+l4dW9u^nE0u$<;E`K+8Lon- zD_-OB40n{oUTLaN`?wFhP^CWruGzBW-wGUpV4x=m9PV=ON~a61_33Z$@y+lAmHsyP zQx$}-!2O5;=i+zZu*8IOSrvh|n+TZceEb1CyOf|J@CiIkjpNPO7`zQLXzXDXgYQ)O z;qaqMe-+%=y?bDhw4kj2A0t@Q(UgeA1Ma$w$6xt)m5+ab`zrgj@bzR^=@zKltNaN% zRiFXzWS6Nwx7!FtclI(oAD*Jvf^SeYco4oBZs%t3Z}<+CLEyDO;C97(!mGM?{zI@V z*Icsx@T*r(VDmmc-VaVW32gm=@HoYX!s8VWgeNOL3ZAR@Sm7O|0QUOFAD=<6R^8th z;6XchB|a5?kQ!Cm*>ffoUaIuB!gr|}zXa#)3`jr)UxV*a`k&$Ha9gMTm4VvV*>I=? zyTD5n?*WhQ>J?~jc&2iA0{pPzOW{Wp&w|&h^iRTfqo@C!s9lC&*-l;tU%;{!I2S*` zfOQLf=hOe_KPK&Vpl#pM>X<-rT4xgJswm`!8%(>;E@CgYV#pD#4HNz#g81Utrmy8HekAT=7Oz zeHA=R*>48tt=&8aTOsIoL=V>?pWTMnsRTR0sa-t#?r`5dy9egGQ}N00WTkI}t9JG5 z$G}|_p95R{mEZzNuvhoMx+-VteFgqN_1TZ`5@r7jJV{kxJ>0vOmtn=5jC;jx;neP) zev3C5e~ZZ=NS$RON?`Dz>hlczFFs6k5WHL!;C*^b-c%yT-ofR%x# z;cwu>T!){#>=;xAzJ$e};jdxI(C{i)3gogC_yK{1pg$5R;r5FhHVL}I^4QIAH&~wQ z8SW0tQ!vB3z@Ney1mbUy%SJyKmWNi(W%0c~1oD*27#t7FQ!c~9V0lVrcsM*kaTcDZ zxBxFwJQ7}}_%v7^a@m(W|2zYMJmoSOjDh8;mf^9mJajUAE-Vk344)6nvt7d%!t!j_ z@B~<%1slEu9s;Kk*z5lzuD}>PCJEFVk=gJyB#@|(CjHc9WB(caDEf}Be#^HVHu`E< zo+TUJ7M5qpT(bUE209^Fji3!A864oUSctwK{1f_0Nc5vzw$<>N@Xsp!?JgVrGkD!w>IK^e-pb_34 zz1c4mT{ik#VY$0Cd^^0O^0&ZcqkkRdIij1tbO8c+N@Wb*hUF=h;l=PE#qY!NP|4^& zgjcGd{TP-io{DDBW(Z-;HyF|H>FkA)8jfdfOuxvUFZw||z&hVD7Y&s2B z!?Ni#ye(|WuGR=TA&^a_;q77BR2uFI%cjzBH(2g$40nfRk7sxnm_1&Jd%;~*7wx&2 z_?JDJNl=f0>;VmjVc7#3j=^%PWjG1T{=x7*uxwZi?+43%!f;<$_7jE=T1@=O&7u(; zf`P2}h7W^feK$N1mdEdg{|d|Fcf&`+jV{R%j$>f&TC-s&tltZMYjLPl-uWzGYLio{ z-4^pL81CiPwsrVK?#{0yvH;GeK}t=TXSRxMx!UQ`BB!e#I@mBAN2UJ1{q$-CfH)`D&R&2o!c#7h=E~lgb_}h9(Q+8HR~D83zD3`_oYneKK4Cdev3bPSBXosTz%*C~fv!#&epfotIYinoWQ$(@VO z`@poAn?JqQ4Z(U0cC?FA892;klVBh$U1a#Lur#6JqhV=c!^gna!d(!^JTbv#qrU{6 zF<7ntmm$zme=Wk~? zrnrZXdwoRwX@fm67^V`0;HPM^j&75k;Ih*#+|9z$q=rYp)2lts!Hbo?0oGl7%10*t zY!7_J5(C}G?|sOp)M&DvGW9aEg_-H3h2~=~{3tAaZqICR!EU@1_o z%cJmbE{T~*76M)4>wSD9tV>)}4rIN*71jm5UFju*XW$8{MW6Sv^)Cc-mBB0Ux&ypE zTnK+S#QXi=^|1ffpU(W$+ic z!=WDc^YLLm9td|;_D8`tmYDVbSOn8c0-go?c!ZC0@N8v267JpKE70k1AH`?-_*~7h z{-2Lvph{rD^A%5o7c0Kf$JhG!dU%DhzZo8Om{-8t;6|5;f7Wg#5Wd&PGvM*c!Nc%6 z#gD`72Y4CG@$p}CA%OLhc{l!I5{wTj>L@w+~L53V}gE5JwaT*b@aWs1Lm zSJ?A{J^uN^F@gY5?Oc_CZ{cdi-^1G|UIWXhF!pO<85M?qf%UNc751(*8-9oFVe8C4 zZ334uQOG!5#0|VmEdPcjLtf?B6G`Wf`3@wbVr-S8e-4%cR=WD(pD;tgX5v{6OAU8) z^?{GQ>}6iq36>Ud@}~>By8_3IpUc7PRg>)jw?D=^KzIr~aiG`aXTZ}Gp9P1oH>=%~ za0>1q1)|u$!2OP4{jYHa=}&lDtuh!7Pk;xy`sd-kgS-sq!_yVN>f<+k{5HHy*}n%5 zIY~YL{|Lc~W4)QJ?WYVo#bNk23e?pt(1~ytrN0#J1@GkQABFoX{Ri++*rac>j7_bj z4E93M=eQn$gzI3a7{F$#y#!v1ebUuG0{2$>58#RD_j2`ZmNQXl|L}ap$H7+ZaIZ;+ zA<&%haULF~>`#G5oa&`N1D>b~bPIf=;`#7&#Xl@3{%VGLHQeDd#f6zGj6pPdH6n8R!hlJYaYSSmptjt-wwQm;L7tjBPA&_xu42HupP7P<_v5E_@3^Su2 z3Cl1ud>Smn%<1=zdRY#0eQ*@l1C^ru*-DSKIduYjj8suoynqyzW{ zxGQj+Rs@#&cm+IL4a2YDnW}(4!b_C?7dSA+8@B7=5odZ_@g=ud`e#yrR;9eJa{@#FRj`#Q-c!lEkVXMQ1p21QC6BIA^@s~dS z8lJ1{zlXbAJp9j^53=fiy!zY6!f+S9-3<9C}d_y6x9xI!iP z$j6_+vz7jHAAbqYSNd<^rHWU>)swse{j6EmzhAWg{v95u5>&2a9AD=-Xa~dk#Y zSoDfdghP`(`w>1aD7M$XkqGiC!RbC84Np}1v*GINy$sHWLy9dQPxSHSaDT^M=70V+ zAA%vu!S(QX#W%yf{_bUX8=O)+&Byopcm_N~**^@|+#vq!^`|26ID(KZKt_S)_;{|5 zpNIP@`}uIA;#c7bir<9$-{@7~U3jRloj(~aF#^dS{@BOM;EBq?7d~DI%S`B8Jive_ z!S?+>Gvjt&J8bk_;QP@#`D3sng0bq|?9Q+Rl}S(sOVAna3F{rvZm@T)*{}z!cSLvb zK*C;IWW&P)j=}7Zs1VP8NhN}12xRVG#hs7v`(NXbqU-3;~TBx_{Z!c9K*>Vl=75E5S@77-)r4I6yc(BjGX!t2I7$zCeMgMRaf-_Me5L;@yjt-P z*y?$+SAgRYEF^>N-3%tW>=dvva5*dmFnkrPW8fOtyVh)&4C@%ULFuJSW_?5a=>j~7 zf##>+)nsT+uYCp&R0aOZ$KSv+mHr1G{|K*C`d{QPo5ybPT3|f}qZLW?jJU$5?sW{t|t-#4m1%XrH2`a%TxYwPY!?AE*#pn6> zA|L+^9;xgvgJ(@M{#gI7MzEwLs0d8<@l8IS0Lg0)}P;d67G7Ur+*5*QBBp)!ZD?P4o)h50ZuEP5AW+T@n0Eu1;PHx;5E3f z;y2&}6fc4gQv5F5Pw{*3A&NhM4^_Mr?(eY7zZ@t;aF{aq3?88P3s_GyD`D?iv*BA< zPc-{}USSuw5+hkVE`p^(EEP7t080fbWc?F^suld%ECeROp|CW${qh+7m9Vss(JzFh zM#kaRELKuu!$-r?1;+kHSSo1r53pEC1^NDyQ-Ju_eC-witD{|@b7AQt!%xG~hsNP= zur#4@xc@i2sJzQNg7Lj-A(?8oSj9v&!rL>(;qll@{*q;2A6H;_KlmvO3?B&3$aoG; zhbKMk>Cc3xk%4)-Jr$m-GJF|c2%D$ltKn56c>Zs8u{(Un3kT((AKXP{cm`aX^`4I3 z0uO~v`uXq@?9J2hAK+@G-{E`a5%hc6)#cSJJT$}mf8$^jf|1JLR(Ogkz)SE`idVx6 z6z}*0_lA#nEmG^_U3}aNj#-a-3HCy;j1u>9OE^>#Jm%?7g4Zj~!tHZj1+IZ>|It0L zqSD!*d=rsR(+y86JpWo-#Nc9tqdE`YG@trGF9bq6+Xm+)MHH zYn%d+-1e}uk9({k{-ngt#n0_97^HYlc&KuCEWCb>XMZA`Qu@o_{)!)itDg4k{{atT z)HoN1+1C*NBM7>BB=P{^a}0!y!I!WM8^d4266J^&hYlI3_HVJVTlpL-Czka!`)$tF~hsS5@Rk~fnEqCsEom$u#5u3^{_;_;V>*g zXE+8+&>2p`5)+2^fh8sk?*~gvIhR!#=!>AyMLDy15bRxRHXH)$#pN)im#MV@)R1ls8FEA|Y|2PCoi~zpS#~1tfQn>vyUQ}P@<7?nSO8<8s-vm!|^|Jm2ZbeW% z*K>F$+)wdzA3xyZneaqq|Co!#;6)!V@bT+#?|*s)UIZ_B z&f|Z>q31pR5Y}D%G3;FS`p2PD1iFv!;^tBc)VGqUl$+52>$NoLTK-e`<8Pbt=Ou^4 z0x=Qzsc8X%K5h^9l>*xN(*;{1sLi|UITKM5UaM-*2de z!qrq$CbnDQxo|g^=fg|k()WM9M^H@xOoA?J8K)|PoqXKg$GgC*mHi&@)EB)1?+sVY z_c-RTQ-3LA+Go%QPN@V3z@e8t2Zz8DRDs99li^+58cv0uQufkA_uy?1NK{XC+34?tr3(z-4eN1#FYH}w zHq7{$_|xNl72{l@bafkNobSG}!X5?oXSo>n<9IqHOzDmM)Q~5dIyO7Gj#P zx$k$JhK6xx^ChsfsL{V{A&@3B2Ah4)U&2-f17Ybidsvdeb+B}qy^Dq4fu+lg{>&fv zJKq#Y+CU2QkgBmvObg(NDu}H&e1b*rjmqHP@W@xasQ(b2q4-lDuki6#@LXlT3SR56 z6{g!ZGq33TKxMzvE|L=^TPf5UipO5Q& z+!G$6?05HZZ}=|-@26PDi5{+%E+KL*hF8J%y`{YWe;C0`1ZLmA1g>iErs6igkaCe% zgZ4h&(#O?swX)w1o~w8Vc%bW_`t!A01btM7qv6`Oy$sLx@%cW!5DqE(i{UMlZvG5iMqzlh;+33f^7W!RX{rxT*{ey6f0=VlhL5Sd960~&_EOFT+ z_z0FDHT(&@81CfSZ}wk@jlKgcQEqr^Sc2N{HgHV?_y1(~4En+nlqSJJutcrl zL*QYG4})hb9tcl7*|YyEeCjD49}PcqiaP&)41%SndIm#by?C4md)Jx`{|D=}qk%o4 z#E_Ya|GJvaWZ2d6KeA`M9hL$N!ih}HpTf^r2)bh+g1R-F1EB!ByPSiihC|&1_rg-c zMJ|5@OAXnp+Ua-ykxeU6UFYgEs=zY$Uj)~@>y462U`q=wL(oqdTn+br-%BtV?%C)~ zOwYhE#a~Ez#nrzOw2JqI^NJgOCH|JF3{Jy9^JpKR1qX4^O=?Kg-|jNVRT-EDO97p$ zGH?$p1vGpgECn?Dz^}x=l+XxfVjv|n{3xtr;BnZy)@*nZ)-mvu(o2*78?IgAwcv+7 z{@6kgQU;%i!AD+#ui)n>ka=vj&2MbWmAfy1f z1;X%+ievC}#YtES=v8f(Kr2y_!Re9D%K65BsSV%P+hRoDeE z!)g*N1=s;EGHSM4&R@)dcXatwMuAjdXO|CA8A_Mr;Qyen6n%jE|7#HF7Wli5Z-NJ@ z7P=Ll_KDYGcf#`&PlqRc>ggYVXDEI|v)unbp#|_i;PsTyt}*3Y4)U@l1G%MTsbmU8469gue0|E``S`Uhd;B zef%}N>MXB@HF%w0?ZrrEcr7tw?w${TEfF{uuS5_?9~nLrmM$B9JCL+hwC4 z2k)Wu_qc5I_rbl--n~B)7^nDTc#7gv;emU5_NR-UCO6ycDJ~m-x53Y$-xGnf*vl>( z{i_y&uQ4D5Y=gBf8-rh9=~KhM!V=|%e}^T?4F^~;^*qoE)EnK0XKgDZQj0=}Ui_(o6a?nx?k`W0Zk7nCf$Ir_zgqyPG-)+^h7GevvQz zyGk$V-)oYd^Vc6J194E*hM!KUVYiu&JHTs|z9Zc4TW{EQf>WzJ-VxSavNK$|c>b}W z4uS5I9zQt+7{bvfxpC;J5=a66>T`Is(n}4G@%bC7^pgG(mEMxY;xc6*4zBb$n56XL zV2*Mi>7P-0N&in@`guw(>A&^TlRpl=R|eu>jnBbar56X?s+u-wci6kuY}f_XE!s=z zCH>%1ddZ&x9IFhZ0LS|r3{!e>aCymrlm05Dm-N^8(oa@;N&l=#Z|6?|o>KwOMxRC;mnyyL(vbKAhblwQ)mk37bUed=) z>FxQiO(3NV#6iyIph4-y!6_vNl5LwnqtZ+IqA&feN-ybeH|d@Ew@qN0G7tx^`y9Nf z^y1)c z`pX{hL*+m+_!!nvzw{W#p`4bJwPKmFmkhV)zDfC)@jIADzCjAm+r4ktQ`t)akM;RG9yaZd-!&VC`5X?1Q-{?C`l8*2 zc_I&2?_OvB0z$YE9=pHCHi6j$6lV{i2ciOfDGl$sqkBHFU6n09k3tm>c4~6<6oYviv1rQ zSpOGMgO#qJW=qcX;2`Ak&hYFTzvHv7+KMjT zqb@Mk)n8{J=<`!;V45q~cH4@;_Vb+Q0UZOuKnz|%f`L@jt}!eh6qsM>@UL+D&uZ;= zLZW}D2Kz5+1B+dM+iXXR_H_P6r073|5_hzZYFffri=k^nYzVHC$e6|L#|6aR1)4$fex_6Wt8IheuN54sHg6 zLqz_?&JT^m{t7sMQk{MBS-3-#r(BnJ56p7Y9}UkQRT~)3yIRp-Ej*w$Fp#HK{QcL8 zz+43VbG3o4?Hz-TF;Whx4fJwbU?|*sIC{5U0|Kef8y`~1TzSl zk*>k-@XRMXhj;A9+NL;{(3u7D@*Qx}-!Iymh}78f}Y>GGTK zgjAg!MACvs|CM=T@48Y9ZFV9n}L2P0{Qt}Kes^D1!{B!4qg4Ru>4APp{u_gmNy=aE+2d<6VK*ejSm||Eq|#E zEOGTOoz;{dJ&!MMSrMt1e(}=LLlshDVR5#fa)&uD<%h z3j4?DCdj&7ggxokyZTq*xz9Vt{X4Q`y+H6;@*%LPu0h=dhTTElOm{3iv0q(at~;?j z1TRK!Vq(B0#0+P}hPvthfc4aznb@=oUVwEM)LqK@FW+ovbc5uCOR4d`b@rcRls&PM+)>o$a-#k$mS@-BSa{%Gb%EJ#0k^z@iB658Bd?$d zxm)`7}q9>J56D3S21x8tmp3cVR!Df3y`{n7G%9o zxel*~r`=Fjns{D;<)_*vD1U?H=X{{sldp2)a$ zGu&!A>ofDfXxHH=_{L%U?N*n!zn2;?clUJpC0Or>{`LfG!Mk;(iER!%VH%rQ*Z;qs zV&8AN++wQz8Npg3fOmVEajbaCGxXuDb%6n+~)6pKChICcVge zz`N??PT%gbhWWIx>)(>O{=W#;-c%P@;TrtoB{Ep<9KnzvYxi=6eI5`q+rd_^Gt3sV zt#K zw*`8=$-MB0*CKg%(bL|h^g(z9`jDGG_7?tT@s({i{nPMLc(Pgl6N?Cn$Gm;{TzDBA za}y-qX4pN!osL_>GvP^3dIh)@p8X;*b%WeA$~gYL`?5rovaa`k&zbuTmqoiBJB30>9=Jcn;k4 ztvdT8wNz*&EN9IYx)tvJAzkzi>%WV6h9d3 z#rtq+qWckWB%;*keO3{4&$B^sn|Qk)=)+gMsdhFj2a#vGHJte)G4WOLz7MKStxjfh zp=`QPNEXtGR5l(f)_zzOvmy=QNFtnXNaP!G=~y^?aG>Wn`KNwh=8REi)W-_pY${O* zCv&+>EELK|qYbfmHl8a)^6^9@lc|sV8RL-a-1Bdh%^++iYHe{+UJg=^e7SmTUaCmA z`1VIt+uppgs@>6L%ajz)<(-#&r;7)ytlFj1*ioky&Zyt0AKEOf8qy=3qEQR6NGO!a zXXDveBAiO6BB^9Fp3B7(*=T(%TC6xA*rz&?&c)KPY&Mz5WpZ((p#y{cinH1WuP*+! zb8z$GogY{2Yx(ooD|hnQPFFSQ-E1V1P+jc5G`AJn>bvBtU#2WI+ zhIl$kaD|Iseo}R*6%~$9yI3+uk@CKHEL)CfwADq9Mm9Db*g``@!*2cDKrCAhiQ3|I zLxKag&c!o@d?cMs6%vVXE?c~AS=E5*WI9#|MRJLFG8;>#!-eA4%c}ZsouuCip@u|5 zLnNP1#EX5GSDpHoLN1ykZ8RLE4a2d-pKOuh*UPJhR)_M1R6ZO_hm)CjBos{*kNT`? zN2_ctBCT)Dh_q&?cH<^(p+zIffc57R#Q$UliE{Q<(_oK=$|Y!OABp`*dl^l-g{(58 zFOrr?h7lFFXO7tEnN!XPCr2h3BB^vCl@7-vxk5B+2SjV*GA`XTV8~(7=t-))=wC*u;bM_qrR-$xb#fxN|0z~P`40)aXYvzS?0=?Akq4P5N~}O z#A#Wpl@*Iiw6(4c;xbZNXPO9Et+#c1tQE}_m$BEn5?JwMt8EjlZ-Yc@+h9bvKGFKp zCY+^zT&s&5j@bK(Vs$XszFV2)wz%fNc3q0|CI=61o%v%ct7?Xn4c(YMi+H=0vI*j0 z*{3AU& zbEIUKkLMb)g=i*|4;3QC-}?r87C*VT?PkSC+Xc6+4mT7EY&@gsTp|@uWzxlee^b@N zie}^NF_NihGMZ%PlxLBP_^^T30J8Q_pQm z>ufPC&7);oAl$k>uq4F8r6sDo+tTD%-n2E%#a*P7z}qdBb!+dPS{DW3@?*v_!#w;a z;-K{%7AZF&SWV`dX!!!0@zl#b-!*aDoY#1BgU4!q(zo}ztqZbPYlnKKKDP0+WVN*H#9BYlVyzE_SkxB^ z)+X0JZ#!7Nbz9#IvUhd1c+o6-xJ{NI@u!yGL~~u-d=I<3eajz^%|(v4c`VxuY#v)2 zYa0)>K`mU)tox1E{6(lWg4_Vy}P6 zKh_uAMj944(w^Oa3_)@K( z_|h%Zj0ZUzl^`5yZS-d9(|^LWxyh-8^(P$KWUn>ZG=xJf)UBDSrTr~twS41~ZvD7S zw|+>Zo9;EOP2GBhL#_844mEYWX}_fyD}VpTt)NWl&SQJ;UbyT^z)Gv1^tWKYuXm%# zB-Dxoo_$j8wY%TEQ?Pyaa`&*|RB_DTf;GprPzcW_k7ECHMI-Uzn3YwvJ<2+dMvDjh zR@He(c|+fGhq4KH1<<-8#CV@V5z6;E&&>W@Z}8lz^$FVAJK|I;%fb`HKiw%jm}+Hl zEcZD_g1dx27k_Nc>;(L~wcCy4##JdFH_1dR<0i%3)}N|EDr%35@B`cEY?FD-lS+4`Oi7bhPU+-_&`ah~?&Mx9xx zk7dG{bTpm}B~tlBCYC9NH&oqKolizW4Y71S9!;gvkyJzRhy#Mz9u1K~DiY5Bxd$#t>18{c>Qz1?Yfs8UvcOC!=Q1&_EtILh&}JMwg@~)Wn%E=pt5yj zk@6OsP0uOz>jVARjaLDjONb;Qg@$-I6OZRJp#rBL;tlaoBpFJ@>X{Rz5A7~&!FaQh z^_*^PgKa9djwKq>F`2aTiF`PnDz5JvJYeIAtmzwwt-`r*DwB&A5_#soY;jS$V9)AE zHk{7Iqxon)-jIui6UA9O2YYUvjD|w#0wr$9$0Dgh@zI@wI~FfIsO{#}pl2&TEuy1kX5Jny{2#tNGUTZdH|S z3#O%csJvH^EgrGmcrtM`5 z(KLfi+uLs${!9W{h>EoxgEc+Mwtg(7-p7~eRp)*D>Vt!wjw;(0Wvye$;^gXJ z=T6NAY`A#+$5q|zh(4rQ1G9>ran@Ox;r5oiSu^`BfjsmWXJ=OJH!61Q80=cyqhoOM z?uBfggJ>K({A?rmpBciYP_ z+x|o-%Yw+608X$q#N)YGCKYc;@_*#VTY1_0CyUjeR#g|z{d?Pv#hp3^J6mOwmA1rX zElYE7SxavK?_J(j-ucTv9L-83i`TbryL~aVUE3{+U+qL4MtoDXofU83RwkLxMpCJ8 zAs#L0JDIZnc`NAn=ijYuO78`hxbL>fW{<_?p;J=Mx^^#Hm{{?;>R=bkA3XNdYBqpn z0@0iel}g!bK^c3!i-{!CiDV{e6_V+OhHx&OiDg5HY$_j*Byy=-GM}q2MT2YFvSn#w zQr5C`e`YKPw3xm9*1_v2lb}WWv~!F%#<}WPCLd*7B-7b2XJXuAyq6XC-Zr>Zam35P zcE!Cq2isS(*A1uRgi#@v$%k_d#m7RyZEMay?VQu=nfAF859PC&C?~qp#nU?nFRTv5 zGudo9n$JWsu|zT(D*oCzIND0&65&jSJ!Lk_DbN@PWwNm-XN(I8&V*+Y4fUnQDQjuh z*p17w#_o2d_;r`yUgZl>y4fu2*E?}i*0glu#HufE+xil4eApSKt!;`}>6lLWV(497 zS!-|XZ`#zNo4xnvo3_Q&dm~-mv^3Ff%Jc*~&^V9Q>J}^Ap=`>ncr7;W7#wMZlTpsm zXE-?@&P2nxsGfDpc~EB?%A1zvhbE@`H#e@lLkLZ5n=vh3-!-^xw=!16>pKKH6-TVB z+RdK6%UCzCmAT=T599IW0y7fMG8;an;j;^zXfP+B*5C=`oi3Xx1Y9?oZzp&UPI$n(2~SRo${ z<#WjpJNL(S4tCigan`7_&&=@?labMeWH_43MLEM4%@rCV_FZ(xXo?9xl1k*`@oXZI zjU8NEvvaWP&ASBK%KsPl>KJTyMA^K!ar5TrGS$SYRwO*CP`iM=&gA5RF16wY77#)o3?Tc-92_9!9 zGleuigNo;QY!(lNoBYI~Y%#s%u)Jw$Eox$FH5cCAxvwU+&6#qZ&AS;aYt0RQlZhms zvC51zd2Fqpyq3>`E%l#B&?a6VDPDhAutpA}hgw`W`s^0mKH2Q7WwL8|eksn11Z%7o zXCCKQe@*sR4Y_zS9*#6b8^VcbB%NVP9M0t9`Ft!H%Otr+^$vfQH??mudKSC)3ij>P zTn!kOJIM`iOH1Yxy@ID(?DaD|u4NM+YY631$%DgQev3#E6%HGH*Ys^7PFPfBfm*#!*lfaI<1$S(|T2UEfJIId&gI3F(V^97PmZjmF zNyJ#g6ZupumE>2D{&5sI0`BXGfi00yvWGYwOZ_i-Yt$otstZ;C<;)Qz#+jsV9a?Yw4 zE{@(axZTFiUclML((jPA;3#f8YC)N3A(t_|o6F^Pq#IS_(TH1-PR&*%TpYD$u+zpR zuG_1*9F9QRd{M(uyQmvwzdY(@zi}3COBRU)zdX$}MB?deI-KVH%kO&yJ10}2P`nU{ zM>5GYd-$yLOA_-GIdkS|!?S0w0jl?#*@;i|OYIIb&&yg)Y@3-=4Pw^7W-8f`W2sNG z`{aH)lq&wSo>5g`pGEkj_#tI3$#Z5WB8q+Y4)&VUY46~?it04a&KmNeWGWHOHt^#X zxnJ*kb2QktnpfbtNGz1drQ@MoI-e{OFg3;hiv+jcSaoH<5R^g}e#CmZ~{E+FY?7ZC2Vb5!|sl zmrm!Sg(xQw3fyz$!^JIQ!5usMrA|X}L?s@qX+g@=^cK&u#w<;x!!c!zWfNBXJV{J!RJ3*}qI4taKB?di8%y)4V6El1wd2uU zD9t+Az%PDd4T)GZ)KH*yY0le(5dIk3^KAh%pCtC}CM9A|@?rXF8Sai-y>EPgsW5e-mI?v=8;($>op3c|} zWLAZ%Oo{WYY(!AHOqpR3|+csNT_0d8o-jLxp zjNDx(*x5K!f@ys26SE;UpNU*F6_@n<_BzeeiYPbb@q990FT1qTcB!nj_deY>XgM+m>HcwYF_}=~B-R z)*b(?O_a>fd1SxfnU&S?e4(Kb=i?gLWHb^E6(l}t_K`zxeod43%bqv3aQfM~)9SOC zNIJsTRd~O})<2gkUeq@j@5G~;7_Y$+4SX{tnu|EQ$Z+wlRJ+c_WqpGuRcFHK2%o!% zabP@BC`7XM*}2+uIFoG1B;$M^Baw;3qq#&P#wsX}iUH-!yx&Ha zvn+NyC^(;Y&&ha0G{fPFOor!6O&({I^B})%^f!IkG~OWvF|{^T<$CYen`PaWj%t*( z^p2NdYHhO3>q{>a>dU(2n<4H@T-LNSW2VE_raQg9^-dWy_HC11(#kkz3tT*iW8m^^ zxkvd@b7q_a>16}8c+w%k9S&`F6u9%hX{d0R(;E$Z>V)%AnJBO4V+lTyl8;@NKeM6Un=XZSCaS!txw|>Z3x~3a%wwk3 zCn>%?IM}IczHsI#=M;vYE)!=s9OvsliAXxnQ+!@k&UxXm;O@cGxsBp<0ncX>-07uL z8z0q)XOgJ`Z#H>_z;~3=xqOx_VI-PPavmWcN+i93P}VX!r>-r37mAPIByypKjC}AY z6OKf~&LiCK4r{wvb(C{@*(l#Rh-VtO*K-c=RcBe+|za;F+DB(n|tvZVO_ zPr>7g!@dq~WpO8zE%4ce9F3pjLE6Cq`?N;+FHnW*8yk6}z|%K=P7~$jGOy-CycFVx zL#^`=P2izZ^Dc@Tz7Fm=n4?(vNG6`EIGXAz#%=02W%GXUd*ftp4TxHPb8A@NFg1KCc?==!@-jJwdy#{#N9+X z&9kpmJ{K*1vnqJq)^YAE)3JP*=Xzg;+kvA|f3$zWDBs!RZzI zsIi(UsDVeioB$3HB|QGJb0b+NzGugw-bAQ@2U@W_hYQ_~F8fJ2xADVqR=ijw9gW2z zFX=XQA}bOp z@ZGjV18-^%E)M^1@Y*4vWID$#G{P=a9@v@KEnA>S#Ocds3uJqa(CEo%ju*)JWGtMI zw6?LrsZDt9`)e>=9P!`aHA6V;5{uh05zTNshPTsp5SA~v8^$db+-k^jY&)Cfq*a=` zod(`dwbHXYg*NB8l`dpL=*$$_oQvYqzXtd1$SNC2WF67 z(w;{jQXG|PyL)vc!hsQnA8*DvY#nbXp8iMhhvd@kemL9vKeu zWm92ZD6tdVWP@=x-gevKX&ZvIgZU9gB%WlVibmqxAjjNbF29Fy=cH!pQT${>@W|>U zr{owY+>rCHEH9fskgZ?hL}Rg^0LQ!T;{TinP2>Yi%Li$>e`3gk^t9HL{6d zw&(G(EfM`6TY?Y8nD4np|9|RXS0no8N44eusH{6B{!fkRe3o_-Eg{FF``r;swFB*X~=^Y0G@mq&Y~GNtt^O%>E=8f+Pb>LTAl&rZiSNxtNHS8an?AF$)Df8?TG3mzXnLh z;{`rC%nM*XgF7PCHpT8LmC5iah%^VJGf{p9>@0xI6|8mTGGncE9{8Hd#$Q5?wj2qq zZC`f^Z>|v1IPyadiO+QL(Nw$5ia#9Hwx+n>=4~%6CQ__=JST2f{C}mLTaXmzb;lP3 zN9e+CuedD&VQxmih;iR9U`t?W!3CBPyC77O1@!cEBaj5E)dIGh^4JefrCg4p#8vuS zayhYHZI_M8RiaW+Dvpy%gd(~85LYD+k>k7&lGw_n>{R)|$?xmw9xl_nJzkzzc6Ltp zcR%NU{^$Sw@m;b;{qRnCTivy1vAz9fDd^ezNgdj=cv79YTVz?q<8>9riC5iOK73){ z;$!OA(pf&uLF|{8%2A{3LU4&}^uaw7K6;{lxl}e7a6l7RbIn`O=Yq7YwhYU-5u*2K zS#Ugk*Cdw`s?QBeI2;4{SXSz$3B{3)`tY!9QCEg#?NYwZK9PE0(t)dt5!qz;1bmT| zBsLr%GP|*Qctjco;W5~ROPYq*EDi$o`4MRv2q+^d4ONA5ff&hY_11{&8emD?>a;6- zjfx&;%IHG7+U=**aZ*Z@rL1z(jNuYQ)VzQ0UHE;W|PA1yEfqI*JglWGW<7YK>Gw_LtxFuxKQp2WL; zN`BN<$5zN|Kz*c89UTHkfI8IbE?FtBjE2lbB)T&Sb^xCUa`h`LQ*W)5uN%;8tr&FB zg#X!c2$@f=l0P(39+c^%Gnv>pcH5VhjLBauXlQ-y1bGA`p^!Tb%wkdE2_xGM7D3_$ zrZjMJ6sTXWmIsjnZ)dGGQ=ZbOfP}94%~}~-=bT9|fIpCu3}X|ljVX>6~5(PF9*PPCeOQ&y?fYsC9_ZS7RSDQA zaIKqaa(z4Pz6n4Jf3Z^i`*Qk9{~4Y?jASkvU|AE~J8c!Ol}{UO79Qyr#55hKe%O}xN@^z(43W^aR9+A$`f!!%w+stAHR}Fz~CSYdnq;#v2 z)Q|3yXL$*VxnZ7a(ys^HRGj9uk1FH)svgbHs#*)VJD_2l3KN&!T_>k+>(tsP&Z;UC z#j3BVd~6m@iNh%zK=8vM#Cz)jv#YM0fAzeTUVCtBcpG<4w8SKYDh$`ys#HY+3mij$h!HFS5iu zp!_rnJkxVBeZ55&8a4;E-nr3w*tI?tx7%s^xXujghY(3Jr~MG_KI`2tG57jH(e4@4 z-wAmi`s8UjeK`Ikjow%>f|!0g{uU)d>#S5XcJ`lzLwVN^h%%|{}%)vxx; z?$zy6C({>an$06q?RX~D1L>d3e^k~>i`VU-k9Eb51&-^mVl86#IUd&;VUKKVmeWQn zh7n2%2ig&3Cw@y^^yS0oIZ)Vu^VuTX4yzvm-6qM@fk5sta6za5AU_Ts?*l=rFRYdW zh9(QKg-52BX!O8WC&qZf`%lP6)ZZPJrRq14+@mHp$+Xd?Y_a7KE$FmS0;2qrO$;Bk z=TQcUDRU{LLEeAR;VX9Vis9%=Z`&NK30tcV>5#mNlRMax@DteB604n>CI?tD=+oR{ zC#`y1-lgwuk!L2MLWhW2AoopZN5>Y{Qz#BN){zId0%tHtB0K_spHweC-mzJ3(_UcV zuXvUZ3QoeriA+o5*A2av$JIY($ zpWR7)?mJs$Slw|KL-C^(_zti9V)5;rqo-z`c{H72oM&P^p(4W6Q}J`BUed)#Z4Zi1 zU|Y<8%Og-7v=zmIqJe#_$hR%48xd=$?AQN+bJT0pB;`>6vu;FI&4Eu|j!JF6^`O!I zC*Ig^8-}5PGI3$cWpU_?t8?4rbBEiBnF3fwa8_A0X_<1XeXLcUG8HYo@ww|(bG;CV zw1pQIk;w9B8mX!0&z?`!3mfI!sOGVGHh{WmngMHXT!Hj$?6kD1BSD1)MA!l zXZqY0I&+oImtf;9yhWL7o6Q7NuIqZEx+O6Gb8vb#8)usMcbdozAJZa@P70s>2(e%? zm0Uap!?ScX^#5)g)dS_Q)|x0^qR#{tw1WpVcEhi@Mu4@pUw!f;GD^;ZB@j_W?vwRv zQMr*1eyt2b@gOFijW17DI6^^H=ZxI}4HWxzXZ{un&usn%bWFJd9Jt?t8r>paHGr=O zU&vmN_B6?TzPerBTwXQ4ITL65&4uj6BJH=%A=(2Wsy^+35LF*u10kwD-EdykPe4bo zVdj%PMYSSlWDGW@g`ZhvS6{f*n5BW0J<@Aob%zyATyjtU?xT7wtp4gZcgVf!=_PWX z`glWDbTOg-Ysl7*)-KWVc&ONHNK33#pLsxb)N5{V8CcCiuYHk{%TUpCkM!@p)%#7! zFsQKMbz8GTUQ&O(NJ4`woEL>Uf$v3R;=J>P%(rbIz@+vIaSJ>I*TV{-T){(_>kHresMxEV=U+UDTgDcj zf$_v)$_-dFU&SAj-HnzTv!6pZ_w{87fjg)*ow`MC(v4B!NGRgVt#v%7l>o;04j0+r zHal}zD`rn^achaRRCHjU3A?(y+Aed?6*knt2W4}^M8l5mWEjY-v|Dq%w|f5}3Gek! zox$au(cP*`nDIFw(SUxXzWU%nd9p*fBG4QN(&IoVO0|FSU#XA1T*d*$PdujEOdIZ1Le{1Tbt-vD3`}?V`1Bk+6U$8 zs4&qDg-r;L$YsEvBYY1ss~ZZlcY54Qr3p^pv&0y4H@f%6O7Je}G1V_O=0fABc;Ydml!zE#n|8^8sV#@M^XXUzRU4TIAAZRQ1UA3rIB?$E( zQrIP`!F~Ic*K1)3aT_-5#}pgD8BAQ22VkZFiwlG+y+VAj{n18##X z5u#ezit^;|dm@U?|NDq+7`A=#El_!>dqk*6?cPg#y<}XBktjfIPuDC^v;bL7y>NtM zY-(JV8vq|>3(El6lZKlxeM}H=P2@mnNq_4h_2ZMW>X4UZ zK4a~Y)K1zKS&Z&fs_)=p3HEjHbwf&pQOnnw$i&11PQkUu8d(s=aBOlxtc-E*wl1Rf zjqq7#Rk+jDL5_K!JZX@iw%R6XIufo(X`#S!6qh5Ps$BABLJ8#TGg%0+e{**r0b>$` zr-;H)AVOK|+5Pf(qm{Z5bZjVx=z^GL$#w!d!K=Xc3An=6_VLEacKqjli94o8Sm8k^ z)RTr@FVEJBFLb-FR^g^}%m%UmoKvBFRZj8B*Iw{Rpoo}eGk?4mJSFJQ<=ED~TuGU! zvOHk>Y_^*2Su;=zD;rocUgrB6>>9+2MFemQuTdU(6(-ahJ`v709+kT%LF8=^!Ia&N z+;LnYQuUoZ`wMoh|6U7FcE_jW?oo2VSsS7kh^>KP6*^--d<;|F+eF z!^eiA!QXUkn4EonYC3&UqxrDa$PH;<+m3uIb(C>X&W(jAjs~s`!U2vA<+uwSHFBpk)ol|@*V?Y?p_KjWbiip@5>Be7)WZYXDA{0DHq?~~IfNK< z%cR7@X0*6JBC+#B8##f{)B*wQDjeroOT98F_6VUw<~jKCEfSDvr2b%%5&gxa+|zJf zG8j0C3F$;G)$XMfXPt)Qhh=pGL0Fx4wlxTCXJ(oDsC?ODxw0tK2DYytS)@Jq(^v$u7S3SsObc&f-$alRKvd#%n)vCKR@ zl2jGrR|7c%Q&FLs`_{Dvx^8BtIe!bq@i>12;Dz_;P^ZcQ;A&*6pHB$x!a=TRJ#bv^ z=Q74P(Gf(8UgMtg@~o_HYY_!hJ!rt*(virqS>AOp6aE}8L2Cn3nO|PKN@XYHQKZ7> zJFI>YGTnj&r`gE?x%rzY&hvR2c)FQ$if^gAkpY~g6>7L8-u4VB0E%}wrEmz^y%dm5 z?#4ISIliUYIaOWjq7q#m&(aYz`%u8XS|0^516 z%hrZqYGgHwmmJW5b{228P>lD07Ag!BgEfeOPIV)Si9LvgY6C^SugU-`!;jB=_L;L6 zymVSM+VY7BR5+-G$7_LG?1gC=Zr1j7L3yiqiu#+j92lV}kRpM^L#G--VW!rn;^QVH zSq8HT=bRH1)sQm%-n{hfRQ`Lx2r;x9wV-A>+%V&`)R`&SWgwla*;}p;^vMzE=W+6O z2Zzve;sh22(P;Zx*3luZrfz{ddji)XS8uDooR-ZUGk_ZdpWKw!TNQH$x zgPG{Xoc$)$hn|&F%Sr$Dy`By+{0>d!0;Lu}JpO=%Xj~bz^nYQ%_FSuL8o&fOcoIQ< z(lNbwpx=awby@;Pt9j{%&&ieBh>u|QB`|_?@eN^8PUf3{pBSOdXL{`fS1c}BAGHBI0M5JBW!kOc zi530UsZ?(0&hx=6R2e9y=pY7W6OWi3i4oMQr4& ztb8dhR}cM;j2KDC5fw)Smju059OkQZ5`v9J@eo1cBqUlY0-4(PE9)<-UhnE*suC`q zm!*acRDmck5G5cpJAr!dyquT-*M@%vmntSV2)Vj=X07@}kNh5*Y^PiRZIPvdLB>Jd zxgg))RcoLaZce|O4P1KuGxE@53#YEC@4hYT?wDGzX=v)d77l$!{p4-=kgT2AG_M(kXm@Qkv37QIzsMi-z7Zxcn@;r5gcenW! zUjGc85uRz&4aK3Cyhm4s=g4|x2i+T9c%7Kv^|b+14?SyXp4R-$Z%zRl_`qj16k6N# zzSD-jwmJWz`gF}(oxxj4N9APfNl|lPNn)UuvIyJJ;giogHBTX280zDRaA_WuCTI+a+b+bxA_GyaJ z&Y>48KC^yt`(8Hlk@jn!9D2U7eP-ynu6<7Ed3*b`Ea_Q2S#0*BdMGtN*SFIHHNoGf`#c^H4e}x_><8y#&qvWEIb; zS@hlL6x&|TIR9jNG`hgPMzW!FRYOLMPUJX#gXVV_-%X5Tog_(6J4uqoPxv|{Us|JS%oA^iRh!zhg}wLwU+3U|YS`1V9~LxK{9W+^MR973GB;&$jWmCA$-(OOm!M2KjT z%>u)h>4e15sbI?|Kd z7>Pw#s7~5Dtcr!n_E^*bTViRcb2;cSN1{!%`|qHUv3HxaZ=~+n6cR>P#U^$Zt%}v5 zr=h1G8emuCh<;1M{@7oM1aKX}&|w%FfLNLAbeJCKcvYofNz?5Y5{<#8eD8J*zEGeu~;QZ-HStF0vEfglQWNzx!w zQd;T`B&E<-Q~Qx5TAtF8o=d%otX-UR6MZo)zMC{4liLngJ2f;Mbk$rT=+o(Qsl93clsHwOMo)Cud4Z*52DPWU!0tTTnXOX&PjQ?k7}t0cT;1^Qfgu zeQ)vX&Tfld>#>3~aQ_QyR3NJ?r4Px8c3>ci0a-M+n*M`yM7n96{iEot^fVjX3H1gZ zqN~zPYp#r?`_t#!p9>lVI>pH82`Go|eYn6|uV|UNay#6T(+ZnyEq$6=r9cR!6?*Pk zLj6Xe=^F;qGe*z2XD)_vze8OaVL9jeVFfhm&!%KEtGJ3J#s?YU<@N>oCgpiOTX+>Ir_Jju>{t)T>G7NuofY91|E6U& zDxOS299FJ;yv}t!y>ZhmG`w3`+6GypjMf0*$t)t0a#pk6J&I2MCV?*K*6teNW&Qms z6^q3Y*GF;0&QJ>MYh6wYC~c|PPv_RyjEqI#1h*vBSPy2a5VJk#u+Ke3YwQXP)EVB+ zri=O~S^gX~g+}Dv)8g*k3bnhXyO(z2LAoTbNYcU8NWaW`iEN{F-RHLSh*qcw5Q3)1 zJ(1@1xPSbs4lj4fyp~VqPml|1+T=i;6bFF>Xim-;Jz`WNt5Gqs_bJY6(|~-_Hfn8D zoKA?3ZTD;+LI65v&UQMrXJ6I-BF*cW*?F5#5-nP zmq*z(n5O2ZIZi{`=gytzh=gGa2UWx0f18fWFO-XSe@z$WcejbfC?C;X`ENNM`%7A} zGlMSgoi-#Gn+P{qM?K`a9 zJZ_reslpY14^4F@4-@S09(35MRjRF0obAE#_U8`!@J*k1;(#M+uW2y6-%6HlJLC)l zOjzAFK77-A@MAi{c5*5tS;j4>cGmXNaHi?`^EhV z4UL0oJ8yR@un@Y%v_KX0k?te185|K^J|7x{v$EBV@C%{S|`b-b=0^-lh* zrSs0U5>WrrVRf5;o;9-0`xOsu%mJUL8Sc&preWt2M81Ip2$O;L&{4X9D22#>c3V| zZ(J81GO+_(Ed6U7dQlMu9SdZ_WS#qYx@YhZ@+=J-lBFtLX#S8PWI0BTC(HQ2rp+8h z*AGdFTYPbM*CP5QdOS{(Tu)Zjcs5w9)LV=QjZfifDcLnMFmO%<3X7tFg$FMTTl!X>L*1&a!njV#O;l zT7S%BlRaFs=+vUg=6Z7I=S4Xw680WX2C&wHSc5R4Ub&m54mH>BPp7V-iE?b^juvc! zu>RZWjG_I_9Y-bIGIWw0+ci<^cB!%bH?(3}j97ixOXa{f@e-@Q?&A5}*V4LS=6vp} z>7HSe<$V5;m!8jcWeYDAg-$I_HrG;m@!0-iy0&fee^zfgCH zIkvyg#bdh*==KtGY*$ZurleCx_niQcnpZlps}%O{qDQS?-zdH z1G=#+vFGo?b-WiZzl-Jf&Z~v{@^JSxY-OwGx%6n+HDnDPcxBhBRoq&$-jIXG-c55_ z;i{~qP>X6)xnqxy0JCTT&t@ViP%pKcAi| zPwVU#it>oVJ6Gr1Z4rx#I{)8kpRsq?tMPu zgD$)}*(UO0!!ziXtJ9(mh&;pRvfX<{D})EMAdGlgE~u;IYHg0#{pE|e^F9;#Oxf0y z1*8cRZSLvjxZPx1X?LoxGTZ$3m}3@-T%pyafEX4K!$RHHIEtQ>BpBY83OTIS9ehJB z9kV%VAczed81|xa#wq5E`Ftfkg%0VxTCF6zEk@SfEf~2fY3jJ^&HbX2y2te-Z_!QT zZc<%@MvphQo~|qCsPPZnsT`t1Blx>a9BoLmPgBlQk6 z9ATGk2b&a~2{CeacX;PX(bBO86LqdUns;rP6fNZ&`tY?SJOXp*fl`VH-bh_-HPU-w z|F+p`WI>#=A;OZo*YO<%wGyZh+z%g5(9YE#P8|EiY9jk?wn}=GTyud4O+XF|xDl%q zJvZzSf@58YKoBDg(IPtHx;sZJpJ^pL?nzZDBezz7&VZ@5bM=t;`(seY%NqKcYf^|~ zu3a_ZkjsIl3Qcy^EuJu0lHV0Zr%uRCcfBM>&sQqLx88=4EV7qdGbyGuY@cv~*raw$ zY}oR*hlr|7rujFidjdrMgt0al3_QC|Y zXVQ%~CJzvNP~J7yVZmP8T!-Ip?_nEUa+Nw|O!(xg8~3A~DeHki__NpxJh4HYBFnevzY)PAjca)jK-uIyAKTe8bt7A$f|0OSsrp zZsJnmzT2To2O=a%)VZb_sdIHBeT8n&!doh&$SBFI`5`he=o_Zf1Ggkf(`~zdab?GF z|AUgm`hzsJ(rlUYAazxC?BKt@ErtCb)BV%>S1qt9G}5Lx=2{hMu_}%l;0Y__n6Ilw z2DcQ|+!{$um3R%M_Gsh-U}0ccj64GSj87__(}|TzcxW)JpH#s;l^yg)wM+}Nq}ZZm z)mS`PyDSBh14_e@Pn4>H$y*fwJgjBbSS!2e4*?KfuviD64nRE!DB!y2v*U%()zm>2!NVO4U7D z{fER;AE|iOMH20WQN;7Y0;Fk*NM(&4=7>s*_KdeHPD}ZuFe4hWkBE# z#dDLLXgB2$?dCG#x%m#_NqkSy{`P~yk>L|HOx~{W$voH0B|w^J6M?{Dl{6gfKs;Cf zK#Z#Nv8p4v9cj4bZcI2<5uLvMofz3;6-P=G>OV%d2+vVzQS{mNSXE36gfj*%G1}(Wu*}8a;q?-meOcLfZD34;AgHV~S_#D8;jIs^WQOf#O-YQSszh6fN7Lc(RL; z(ShLS{u)tbL^g(FfJh_#V5E`pYoyk-hIrEP>AH((#x7#SzDkU^F(93VXu0@wFD4$N zm>ALTC`L?*Vsv?)Qb88e&9zI#S6i;`2Qi~NMqnBo6#b_Y4YUJ)yJ(-bc9|Z&! zC|b`CIl@(%(POn{q#m>w>AzaEu927+GB5@*kQbw4RXW-rjK5k9%da-AYqjR-+Nfzg ziN({i$YSIbq5r+AkvbOrCs{n%)v71GQPm8hc?`5=5RQOqWG~W;+|8PnK%zZ~Y0+Az zqG&B?QnV3S)o5K4*=RG8iOuNJ%cga#j@A-Z1E?|DNGY-z(baY%241EEY-3iL)j)RmPNoWe0L;KT0&Zs)}<)Q(`8bWC#Q%QxxMW8R*fX|Nya!`Fiyv6 zz^#tL98pG9N~7I~-WP#M!ZAq%29LmiP`k!(OaR{V?`l3lxRJFw(#Vc!2RVr}@+L)M z<&mIHdr+snk#R7}$oe%3D~4;uCwsF6B!_V(F)(B{RxVuj3Qu zAsgK2L5jU-yudf5bC5|9`OFH*2_+;UejZZEZgfN} z_+;Rdg-ydZ>Kk?~-PxcY$$fMWF63J05yNycL}aj=RyR&jzKnqc*l z;jCuDSp{rH`X>mHkJ!)#M^XBg`P~im5;^iAS>n^O0Oq9^_Er*2tLK+?#DfuvR=zX9xXJv zvVh(?YmnR|luQ?!guK-tFX3x5(k69IkON9s?=I-lbZy-iQ$<~|97Ftf^RY| z-+y+S{@mNj{@<3%0lbg=ZvQ*|J`Fjjo*fmAQMnfx7R`QeCU*`n!8wCjxl)c*r_LwIy2xGF#b_E z21%j_-^`7fg>4d6;i)!zeo^ONPV?`nB6H}bds0Xp-Fr{RaQ6$&IKDUYR@3HtjCM7M zr_7Ty1v|@W@i~h_d#rfC*=$Sr-V+qi&GWY2KJ>@A=|WmDEhTPIOMlmma%6o0Mo#bI zUC`3xpAZW5B&kjy)O)627025(18|X{kWSROE2&*Nfxem|jmBkn1Xc9$ls@=9fUJ%Pu? zNSg2%)57FLf0+ncJbYIr>Xbie(ySDcLkG^fi!hq{cjKxR97@v2y<5v{jD&)>gIJ1e zfuu}{zb$R&G-9jJinjh`5-#u@O_*(@t)e=?uCzK5J0Tq3V`sWor2NmBP;X=2^qWfF zX_?ryBShy-TqIrBUm6kbQ*9Bkt)xhYv@qE{&z$0A`sM7dgO)gjC=7pv0-08boHUoU z+Sw7JVy%51iew(QyMK{w-Z!Z0AtUoiIfCs?ED0O_)}y$Z&AHZNt}a8XRdccp*wA0cYb{i9uaQmqHqNMa+ge(bRkZx?-NzL01M^{e z{7#;n9CpO~{>201*X97dfhQ<;&fTF6A5OL~At;;{6AzoLxPUIcC*-j(2H(J}|WNajlfwsYV6nr6GN?)nMt1z)Y7@oh1+t|HQ^D<>h^f->Bq^OJCizCWEt zRu8iWoSh&I;qQM1tev*ROhP7dU~Mx?rtJAqwM4U0}FtUDS{6|{uqP#tT<)1 z6{$W59FD{Tbk<{oY^#KI?M-()RwS*cOQROg9aWNMXK*R$2PqFtpSNUHMW5{^+Wj#Vx9zG4D;L?pW3s>X)6l83BvOMp?pJN=mDe1E{6J$D_o1mZz4#njy&iBp za3YFYTuNofWw`Qy#(tXXh!B_g zlC?}QIve@7+|}4YHzJrM=JA(%DZRDMNdgTk>%2%-3(@;G&7Sv8@((~BQiNzVYcsT- zcY=ZQa|ric)G|LOYAdc3cuW3a66p{fIKP)%f$}dpV}7^9)=Q5POBcOe6%E_xzk$ne zYa3=fekWAq@rDCWJWk?;ur2#i3R^0XQz>U@&B7ehQoWnCdHNvxCVTHnx* ztuR4dztGQ@r^#;qpI%$>Z?oS25r(*)1iLr5Rt_NG&%@7PcVqINu6nj>@(=uC5185k zOvS-&qY9=vq$VOubokj}t#PkzFK`zsL(VWjUlj_Qx|iAS=7v41%YuVk*^sa% zR4AlV*8X5ZWi?Ewx2tABr&C^dOFk>78}ioQZFa}ityLRlnhpP2DAzdMuF@=uUn8xJ_ms@{wc#%lsIpzbrO-ZKijcEmL&T4nIxIYEr zQm^-SY5ujBE;9cfaXxh$P3;$F6VIMoY4gUhHZhlSGft_}%=#M}roa3hQC+pTS~Zw1 zdv%NnQ+Vl1R$>5GH+jiw>ZYZ`1bJ(JV-mY>U?~xmYDO+KkKplsm4i1F43$Y`%k(0(z|7+>=+08v|`GP8|>5W^ix*e3j zedhCW{L*vMYRy@b z72c!aGWeM^belBv9|L{{?YgChEmcU}ERJKUxd?@G;ASz*;w-ql2ir5g~TQF0$EfTGNn?rs-BDz z#gpsB{w)CWv4|(Euro&6%5hE&e%OPZZ)Ht*K7WRZQ7fN#u}6VEzDUcdQG6p|^5=i> ziZc=t68WK<^7v(D;CzAiMPyM{E52mt(BqG{rxrr6m#iXm9`^g0jY{Q$7jw0jk+ za!N_E)~#46(7O?ywsu$%g;a3zyAlwcSPJZA*lAZ~kl=1rgiTVO{^1z^IQYyF*?b`) z>i;Ecs1fH%Ij?Sz(`|n zD|s3%%+fDh_z&t~;CFJcl;1sE6Y6z>jkl`3 zSVBB6dWlvafB+XEw`6Kh!rvV1zz8z1iuZ!}l1u4Ifp@LqXy*;-i6f#~<2e^v6N~y} zpwjitruL?);bjEFJ5xRj_^)$#S5A7Gs6YE4{^bYy%xp6 z`wJ;_zw61M&%WB3e)V=(fjEdP87cA;kXO?smN@#yL2ea26l{o@-R~Q989K{2=R4^Ve_FwGt`Pp)#mf$< zLOIq$K4GQdFftqA*IbqcZ-9T}CbVeBt1kZTU4=i=`nwSAB-p3Bo^er0>mMR)53;V-J3CI$1#;Kn&!Ko*#6M=iu%5mHzz$Pqn0LJQb& z7HJW@(dx@CB(_qEtLOTmg=J?kvB{XZNVoU86k|MNoR!3T#J6955BtYOA^rU# zqhs)K*qJ9uLYSHR`LazZiNA0cTSXB>i7?vEj|2!7OYprKMmi1gir^@+Uz{+m_EH13 zaScG`M9LBqNd;w)52}cLv%?IRv3ILR?rpEQ$R;lvxEoBEIA1JaYl>qX*6CFM0QKj9 z`g?g$f5ola$%%~(Y2_bE}s9O2fpo*7I@4gP&{7~l7_&` zhE$V?&2IuuEXt#%wb3=MSCaCj4p0?3R)mgw5mf|jk9)aLiJ-0OScs6tjw8)7Rm++S zB0xG{kYbF`8R2mw0>phVJGhh}OpX%d@BoZy!CJ3}9cp?^OvbT<$uLErPDpJ>?u_gj zCeSc}h6%L);{=7KS&3n;D^y%w`Yy}_w9j{iW?HNho&H^1)Tf}mwf0e;*y@%h z&?VmmGcj>=$J=SF`&A@Q64(FXrT3tc@;iNa(We*bDmNRctU^TJ_i1f6pk}>tFWuA= z&LX51(L7;=eE?J=I}MQ$;Wh)i7)7P_YK;j&@vjRCij>@dTc}ZXFT^;jq4q>W+=D|i z^v5}+k)CEsus4mX7*f=DlSD|s&z?+-ZP%;J9Bm^e!l9Q~2M#6^?BQB&k?<~_j7B&D zf`FoF} zU*a@U*J6_chrxp=gcL#&1TxAhwlH2z&ErN!?)LNy$tbH~YHc?f%ts0@?0ypOMZw-! zY>I{#NVN^{!dZgP_)!bQiVYZqE!1ub;!!P-ahW#vcUqv&W!n5z zhqXZQWg3-3T43B|+FS>M5_wyzf7a+Us~YsW!exH2aaE+&Hu3$u;B1_H4Msy zY*PLK7Pe`tYFWMOL-4RoV@sR+eem!yZT>xA;bq#C-C*Hm+FSv!uce|D|NAax1VS3JRM9gUf7qU!UEfP{JT&mDj*UOb*@HlHN z3W6pPFiFqC^*QJ~l$RX#)92~jMDbE%s|i`pIch2mDT&7J~rPW_jMXGoJ@+?B^%h7NpCcI3W|0zs(nKoqwCcI3Wi?vWfU8@M%v%`s1 z9+UPwp5#HO1|E3U$ylw0wg_n?{TEic?O~3k{S~@mHs0^s;0nG%D9+Qlm*)YlxQOg8 z6HYw3#HN+lZ7l(AtN1orDFZ2#`9^LU;ZXqI=s@-Z1BeLO6vAIM%b_31-sfn|f-;Wd3a^S# z2>ZyHak$Sc_LOiugj6nGXN9L$D(iH$vKISGoJTuqkxAroC=xfggpsiip8p_1CV23S zMs->hbRL89#0if18VUB_YUR9o{{EWMfETJgfdGgW2Y1ge>A8`LDk8ET+~f5ym20%k zII_Ce>MP-=O@UWJ@g*iT-DeMk3gRj;!iO*;?;viH>;tlmR^&hNkd3P)x%)5(Kj5sk zvT_kWT!WxS^Ffy@J8Z>jaDyn-0@Ym$%tgc-rg16}V&@Ftu*kq8hO0)3660lU#<-3A zERBx|t_P{;A7a*7v1!QRZ|KE>0#>lt3Krvj3noa1N6O%r>u}x7oP=)tKDl!P=jhIj zEr$^$-Q%g)!StbOvnFD39Wh;$xe1@4q$U7JmqlHO*tn(s` 3I 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/* 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


jpB!WJm1Gpz#EOe%>N4s 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 RYvI7;2bVs7Reb-<{{iD%t!MxM diff --git a/artifacts/test_program_methods/burner.bin b/artifacts/test_program_methods/burner.bin index bba11c265d84a9987ab4289b0de5610a800412eb..e9ba5229d3016f31154191a88a899fdda9dfd1ed 100644 GIT binary patch delta 126375 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

bl*Z(gckx51%SrojoX>=qn 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 delta 122587 zcma%k3tW^%_y6g@Sy`mAi|tA`MNu|BvEqSoeQG)pg+Cf5 zGM-ly{+NC6&T67KFGb^7@m+Vaw|K5^Txk0!4M_PBN=tDV5kNdZLt29pq(|5*SlY!#{=$t#98Qo#NWSSu9;r*kAEi%vb1%cN23*5 zlD;(e0P6BYZ~dJa2}@J0`+=t70n4u(&;~JYm?q`xU#qF?fG=JaP|N8Wr zHdkqF@FT?e0nG>*V9gaq@E2Vl(&9e({-;e-A(?8nSrju9b>17UqDI{d%l#FHT@41_ z&t_4BsU=jAcxMK^7BcnmGTxVS%XG!r*49XY2%(D0{YEEFPmBE(R#R683m9NZQ~g{- zvrsL?kNS5BwpqL|X5a-c_Z6EK1>Rm*jZx?PrD9*`Rkf8A<|u@N0E$KEK{h%<4>cL= z5-P4H7H842@D|~^S8{Kp z8U%I=B}}UDhWo3ngw4BOHpNydg|Vt?vlxEhe2M1w{)ldB(RnC*$!4(>N&j#zHG!@$ zHbqUot=?N|Q`K5Wr^dt)SE)GSPbkTIAe^Q8acZellH20lYK`&0AL(N2Qo6on7i%u} zH)jORY#H0iB5W`4Z)le_(0aq@*_LB{!weN+#u${6NQbqGvJC)_B}<;N1wvt?&~L!N zGFsXyNm`QgI6cs+qvY-GL$9~eLzrS`JMz^;dL^Q%RRoXfm#AN)9&3~e+9R^d{r_ih zsZ?302rkQ|V$z@I<|R!;#JY#*`s5f|W{;{LK#K&-h*O%Dm=&*?9< zeTcW5CPqa`*}Xr~5mDK4a=m|2?~VB8Ixl8JKMlOx-RPFckwcA{Z+fpno6c1#mXtfG z=Jw&|{>kO1MLS|rR7czfOd8y(QDvA%@b~xX%KJDuP;q;pNV;_38ak|XJ8Pz}pnGUh z>qlEFafKZghPf6kYh=?F`cZ8myhX7vL87#$*IOq!Bzap?>_WxVQB}Wh{bmhlA#Q-~ zamq}Z(Po`)v|rF`ZKCA6`#6oT_Y4*2DEoumn&)L!?fZvM-x@5#r*>f-I+q$#rBeBWGSXOv5^IW zSMg@K9xX;knF_TmRG3@_cNE$y75I-TmUD+Lysm&2|FF5Cao;RSSiIe4aqEO8m#ov!*sJIrj)hP)aOz-3hlRn8 zgcZS#_^1#^T$d2oOo$_TNQlEeHpJ0sMiB5pzy~?vHv~E2b_O{*sR1^vvXP_H27-`W z5QrIvbyPM&T!xn;E(@!0N5d-oJP3QVc(&qdvU`vzPBmyvGAuevIgM?0Q^ggb4J_1Rq%{RfFY=G4iH_%#87#E;9 zVos34xPf5G%cYvB?Gepk-w^1C-WlkKsSI?L1`*rp-U?kkU#TcAcfvNnI6$#2wJ0>m zsxN=u@wUZ5Fx~)#uU0Oy9U57vVgQPx!wJx*X!JH=6|RwjK&%*nrnrS*v;k7@G&|xe z&8}2)58IMPitRan#T94{NWL?H)UXQrz>8?W-hY26w=K^&v$QDpo~I#am%GNBDSXYAt*l6 zFi5w}e%Ojrn08Ks%prw~WNWR3acP@$Xq22}djr`wEyvN{}OFMWD&a zCL#7>S`ERS_qzhLW~R7GwW9c#v+JH?3i>1!C0{yCZBtBL7ysfcYzr+|Yn`U}h1SCO zN^4=X>SuDK6!;Z77FtZ5DlLVbRI90Tiq#Q6+~i2eHaR+!n;e~D;S|N@!p@b7Bl>rY zwAk$M)65kg?p7;Gs-0j+x>^o8D~flgRFwRY;;{ct9MM(85wjaf$0=w-gB>=728P4I zvf)g#(NC4?h&hGz?FWD z>GcloXa%~bB_kx;w6r~PT}j`qZ&N;`+77}4BvW`M;d}#XhaI@BEK_Vvrs}Y!!#O@q zg@J)-e5K#t_kFOM_Z=@sE7Fv5u?LcC>n^be;@&11Wl?vB$o66#N_!Ep2f3S~FfR{q z-s#X%{aO|N8(%N`eo9v*EhWl5)ZRT-rYcHvI;i^t#A~Bv-Q$R}G2Pp}4{-+3>)qpm zy;vE*DwKDpJV84owXBTq0 z|H70+#rAO+Jk7BT+UsT>`*JB*G~R8uSx3%!j_Kf+~3WNSG}ktx~XgPs5k zVCh^KPbZAfl8Xe!tk_EYF+m0s1qnJNZ!+9u3kbMn^Y5mZ09x*b z$4R{u-d!&#u3+c|F{x|7Ho|q%b?E?A>IG_nzHKEiFhwlLkwP7z!yB2Z{Ix>po6n7@ ze88Q`R(fI6pnYF9;4d)NCuRv^OP9Z!n4YfX{=}v^%@s?w(t=(QO+S@NPczXahyS$s z4={iKihsS*{kYP3kf5PMS`$+~O&k&_4?5gO=&&I}tQlNVw?ExJMBk;j_p{stwK?rE zGnCqY_PcGe_{2zs&N*y@y+}hp?qdS(HA1I`u{TR}RVhTSX)D~!Jh3`}5P0t3_k z$e@XCmyOx6C)Gyuvtg}6((O1dDan<--|rl)9hTI-OoYEz5P689NL)9?q&N8-t>~HtPxncsIqu%fgTH5E?5RPK*cJSLd;1gw6|}-@)l*1bj9Cc#llDzs`@$AjKWy-?XMLmuB93#uM&)m zwAwk#)!aY8l#n7KS7A&gf{coFF~x{p*yv*(1Dv`ODyMny;^_=OA+RC0lk@97X`6ko zf-FVpTC&Y4104RCVnxIOm(DDzi9h`0r_Qzkw;d4OhVDSf9hKn8VwU4LD^B=I|~!=O#?y zU2yJ=n8Lf@ysu#j3+{qcHee3#f^)u#IlK$by$(}&7o7KHOyM240%P>bOPIqukOt1V z26K29ocje+)yccyysI#UcflzXQ;5CD-@21?1>g4R9?zyHs4ZxIM)L`#c8it5jT*9u ze#pk6)WS^&1;STT?(kLbQkNeVqm5<-3-TR_l93ggbXd3QmM;eHpfSO>Iq| z&af2}mLm}G01@}U1PEoJsXX<+tx{$P1*Y<%yWrgOP2~sv4p+ca;b)M({kIN9r^;L~ zybI2m4~BQax#xi4U2xvK22H3NrS4^d5Li&C>!0T4d>Y&3tbDb3&7kU;t5Pl}Sl^OuQ^ zgeYuXIkOa1#DA&ZLXjkd^4w_2b({YZD{`aj4MW)|j<%_HKsXZArnGFFAKm3@+}0&_ z7B~5-Ay zXpj=;&nAz@uiHrkK0>r=_@N#+bTl56VM}Vx9rOjpa<7>uOHLDU93Z3J5S$|D#IR zV&v(91}TJ~aeq}9`z)622cdzc(7^kOtC`001Z=Rhs^E&E7`3Z8CWTK2SFaRA>Eeif zL!l$H6x-A0TG(=+iFcClpwd-K!e;6Xbb|9Karl2E*!Fuj#g^0*{rz6&y1CUNO|PoX zH9j`TIGUmS{2cj^IPMXeDsV2s;dlVW@ys0(e#%Xq>b*S*EIrMy&j`DQ6 zD2G>CAZ_M@6~asbj#x@ z)}O&=X+RdOc|3{thp!uxXot~N@`KXh;EL;`%LzxoFtRE(KDkacFtq>J0T0SePkZ<^ zVdsU?o|mI4?kA&;^J^XMuftzSxL(o$x-U)DPGng`O!bqJaeW@O#aV9VTdz0SiSTlEqQdi&H5jW zW@d%iJ;iyyC70x;da8T9nB4ZyJ(#YpAgZJ#-TwumAP~(Kn#28uigQ^lNE@lGam>jz z<=u717I7R6o3K?%f%EERxw;0bdeX}icK=;{#i5DA)xSf~{*(W<0gay$!D{@}fM_f< z?W)wmb{a9FnN6GAIDu}-!H54CnmHl5wKoB=4##Oc))|4?-OeMGnMFgtZO-@N z{&euvpnIL!a)L1g{?P*82l)mR8&iZWY*MkWyZ9oL-qc5qQ7;Wge8YvBJpKb7#hM;ET71&x059fP5U5fmEw07xXZfVfoS$gc* zE>a`f+tj>F1P{;zS9q7r*Hv5>qIawPrUtJwQ|3$aevG^`V6S0rf# z3(wclg_S|!ClCVE$|0sGxVj<|O`e5{43-BUZfdkxd)m=y_cRVW?7MTBm*1*!w`c2l z>3ooX|D?DGrPrq=Lyz#d_mjnhlzhxRfvp$bfs0beSYYjR8S`(G{Xk0c>A-N$`1P+R zpBeTQ;`p~V%jwIw=Vh~5pBf|Mc=^mD$<5w>*7N9*lH~A!6|^{ZGA^OKhOFSa%^LnX zC&DRg3+qrG1`5C67Y8bm)|}Igvbc&ie<@OGFYOrZ_0k6GFm7iDrc_*fX?6YVR=C#! z5Gz3X85;3Qmyp$Vz82Z!7^**^qhI;Un9YjJSG%ZfzE+@9+ zBn{k<#NTlYda9!ThTU?><`?VC8%NgnnzeDi%1sce`(9VwC7QUYXH9ZL7 z!WB>Zaq@;^cYK&N+a8->1gKz|wRx;=XlFcPROzR6+0N5*n;VS2!F)8c{xOiv`e-qW_lNc=6> ziijDSqpf@+N;b7zqZw~Br_MM0ec&joTo zV=)g5e2VU^=qN{<-iKbP_(Z;2(y4dXe5;J}F*J4eaM`x14_&`IvJFBcG<=Ltguaok z#zjA~6vpDD=XUp$(v~=B#Gam3$O8HZI(pB$UFGZ~N!s*YuoYD%e@cneNO7D;jI<q)?u=i4ABQ1@Nes8`m(Bt&{d%|20 z79OXy?=_^O`R}I~@nsl0FM{%jJL1bQdUjt&>t@Wu;^e&*f&0e_Nf5C{hucIx^ebC` zQcbMb{$a<4Aa~xoLSJmsT{QorzuIeDd&PlBlZZazY@E5{;{~o}l;bKy`2a=NKvu>2 zk4Nh3oHk))RSP|WXw+UcTOV8wU0c-Vl@V6*8Ug)sa`8j^Z&eLu&Kj zGjaDbriJ{PV<3#!9|`i_wt=j7WgHM}Ok^tdj=Q*>T+Y{(_vNBS0hMrP3+)q?{N zA+a8qkps&xO^2QI7P%`A%@6VLP8N@lRR{CvvO^*@ zpe1{rqUR4q$_`7W>Kz94O_a%P`Vs7rISYSNCn?({`j11c==j6^_|WlXtVSn1O7|Te z9`Xa!QCwV;EZ451)P6)aP%VcJI-+}G(`RVWksH$Py5s%m!bS)^Hp?GFcp6y|daPWv zK7+wNd$fe^`()k2b2zeO8IKR*P(tpwUr(0xOZk~fL%nx{UjHoB)|ju- zZ22^)!3r;acEjMds^a2_6`HXyRm?k+X1Y)CsHVti{lw8qjj;cB#N`HwTPcofu+r%l z7-lEKh9GYNt^I0-(HYJA`u8?c-VKt@J*M7=^mEHS&C>jf=F4$SfL1|>_OIXO(Y*6lIZwx;@?3sXAo(ZoPdoe+&#)W;yKXvy zx6YwO7uu_H=#C3Lt+OF&an)s7bD>3Nse&8H5FZIKzQ3jZNiF7Dkto=?3Y9hDyh%us zev$V0ZcI4dv1i_a-IQ3xJOZ}7O}BsdjlfwC{Fa=L{`^YcF_o8WFWgwYy<+|MNhUe8 zlAZM2r5g?ifvnOaGY)5dvVf~T;8(Tu_xGs#rwAH$d9_ZvN6${C{4MRV%VS$z!m!h; zpW=Je*F#R$I)eAialK&ia|B!F(EdMl;RDC!gZCTB`+x&%LdJ57Wr$qta(%xwuhzD3} zeyOFUBW6>+BW_PVr*kB1nj^{%d*%f4m%_N}TvJ?0F5UO@)(~zJaayh;M$1LO&ZT+3 z^lZZ$ZQPXW*t91X!CG}}Jgj_Aw14XZuB69)5xFI&ujp{4SZxDMnG&?awmCOL_>R%l zY!9@^|9-(u3KP-}R~-NKOCoJbtD-w<+R69gkLh{iUHgcJUj4P6#{BQCaw>|C({tA% z_4*U^?7wx}1by@0{+{N_Z#oV7?{MvJY2NvL#s6RE9e?~q8ewFGvBm#DeE$dCdm~8- zm3D^3N2n309$_I>XKY$gt$w(3UOI5~7yJN$9TyR1Uws`v>=kv+_w~B3>9Ctu2=z}?T;C;y>y3Y;J#Og{p!!D<0XTylVh?q~ zbw4pC(stiHPV5cLc)USt(K9 zyv9!3*!#vGq*_% z?*ijKlh3Oi2?ythvcs7 z-(Y65DmM$8s`A({v)YkMhXLmm#+HC%wNi1ZN^zA~EL>b38F!cElr>#=ks= zG!Bpw$w$!?PTLv9la+`Ojo_n;O+ta7s4|!&Su8`8(WZ z8EVQwyo?hMn8haA)D+3Q+QN3&)UDzV5~_=5i*;jJd7dlG;wRl8EtutnsXGP1rmET0 z(oAu@bt=!5Y9Ty=VL6%2oK02T*sFqBk7nu^!TZW_&^F`bvP>BKNSsd*U6jV2vgRs|KhPm^@+NFo3w6I$evg{X@>{CetIk(K-AwjF^5f^X*@Fd%miBMSuD4Xv^jH_q7YauQtacXjp9sjMT365q33J0>cwok=>B}R1yn~Qd_b|qSQ8#T;FNMlkn*R7kzi#f(mZcf4Z2% zo`_aEv3*hMi?kQ)fgCXlabBXT`lR(?_5d}CeHpFJ z)5W`=jdrN|Vxgt5We#=2{j$IQHcKXa+k(rBS{%PAg2@l#ADs35^U-9?3%-|ZrWStN z4Q?QluXL6ZqYg3tgh<8#OJAGSt`k^O*;x>@5v{BD^V39qX45E$WX^IZo%N4Zv!#&G z)UH@HDdcw;l$Q34ku9_9sBCpdCB+9Jy}SObe;iy(j%FY$i&MYhUzyNFz36OSTeYX| zeCcdoTWA6lIJWzoU1_Th326lKM$ZO%5Gd%-$U`ccosj%qP! zFB?1}jwRL+>UMEq_QpIYY)&0ilzmyB^n@m>l|+X!J!gBW#cD__-?yagtDlLS z`_$N0cT_gagmo<24g#q-?NN62K2>+f;&H6@K6Q9F<_M0LrR&KhC$Qf{HnA5%mXIoa z5-aNkeT&)DrpaAYiAh?E-&A(Kms-pj*tApASWa(siLQ&;thP6}NyR+nvG-AD>w{T5 z$FtU{jxO?+6>6fjA^=PdmoeW*8<> zvex6xP~TL!f#BSH8_RnH4j~L=&NjC85w(gpg6q8DnK)E^SG9^+wZ6~dhpRpB7btCy zoN~)_*h`=K|*~QimS6k>kzT@!@SI3xi5%;s0k!q3z zR_|w-BM~ly@a6ki{3x}z6xXtk<&080N?^}^&-zhntg6eqpB;M~$)aeK_Knn8_4mwg zw7Og8c-(VfwEB}-hrVFD#;QHrNXbs{*`USv6DTjwtCS#p1fR3Oaq8IczaREVRy0n1 z*H0iYVmsm3AXam+Gqe25K|nQCRKoKNkPXO#kX(T&bY%&o3MWSS%T%LFn%_cX>D1D95uGBAgz)g6Wv0g zC-A3zf&9w^?>OWR?QheVUa`Raf7^vB_OH=1lurj&Fiv zz<+VvJ57dN98sKNgQlxp>NyroNBRoE=n@DPlZ$|C0D&{q6C4mCU!0--P!AlRss0tN z>xJ97?<}*6v(y!BN26KbpyQrp=y+M+DLL{NPkTh)H@;3@3Vgsl@t~y7{(07Oc8;2@+x}`yX}%hJS4rIY7=W&3&xog0 ze4rFi(=)7Wt~$v8UU&x1DGC(p!Sv?U%nrItAE0!Sj>|0)ESmnpkBSr0o$@wZnbg!K)1UM-mtIB037HR%l~s- zwcY$y4$i;%wL!R!V(^DXoC{^FhIgK2?uBZXRzeu<43;drZuYvgP0zAp3)M+RsF2?1 zY=3)~NoU!xMM#fCFKOs<5u91fMX`k)TBOczrB4jB(en1DRcBddp&`wwvuu4KRt~9} zv+O`&L*RI!$k18rS(Z@*Zn94kn^%ObiX6ZxR#Rkj_WN0uSgdwwq+@Uu@j44_sm8Na z#p-;AaD;>}F<{L_{9E(mT_IR7Hc_HQ(wD4T2{x62OVtrpT7uk4xY3JPJQk}@->wp+ zX?=5jtZd(6!+ff~VpkT|kLxQIT51US1IALSiVIx`5gOZ43M)3oa;;Pyz!w;-j$cZn z^^RrdU2249;u1AVcPcnV*;1sH^%}k-ESz7eZmsXJ>{%!jOAuY$ZzVhStl?N#0nN+Q z6LLfv77uQ>&VhVH-xJFp5dYu#wE?d?sYsb68CcEeu<37zWz7 zmm6&`?;Dq^J^PB`ojS|26#kd6a+t~%SEv>$*!x*Nm+XHy3*T(*3iBsI(e>txUhU7T zGwS)RdEU@Eoc8!iHH!W8yxL1@0JI&-3<+Sg8D)m|0JE$f0}t6zX6Qyc!!DN@-j3`b zbcNc^P`17{)vvTH14zj#4TD`_u;PPVVN7}X*X-g7BbJ={nl)dk?$pH-0{3ok7RArh z&R>OnTBHt|o@4P8drHGVR#9U<($2AS6q$#i^);*1cGB{(QbM;Y7xiG~)sV*^h+o}c z7M`=K)o)0+=r!$inQW!MCR37r8`!Zmat0Are)e2ngA_eLJMrgflL2W|MnbQe~xI>&)Wb)_yGqIxZA+4ZNLJ%{uaL~@-pl2y4s$7 z_?r5F%;nN+ncwSJB4oo_w%!-$vC#)}d?Vc6Aj>J2s~5Jr{_I>iFfyI`dOb!9WD#2oOm!f0Z!y|b1+tCx7)vno+iGC6VAf%) z(WWGnmDOX4L)osas;lEd$}b$)#rpPP@+PR=QZ4Fm8%>e*-u*_sCv}?|6eN{e9cL@% zn-81}hl&L17lVrBdaz6j4OGXnGLIVRC>J4VkwJmaZulEA!PDQUW5+#ec!6Zizm&;N zzmsO1)Lf>^mX=iW>P_AHny0nWagj*!b(~jUi?r4fSKX$e9WFmeyX~OkI>V~;KaCsZ ztdq#9wi21%p5pJqq^$10bevsp=m0|^ao#_Tap3q6X(elp1BXyYlu&dM2Fw5q3T32(p=GHPl+=$RNX~r zNZ`E5I?mA0Jq_)Y?h=<~XsD;qkZ4!n>?VWFUj2vP5}7>w(u;r5QY+rU^Dt*BRw z5q4!)su149*7VT5p0(9Dn6ha+F)GHt6>^|f-)%j_)*n{yWz!C;ZT<%PFvpJkZ$!UG zWV7@mYG>)#=|kDPBZxf4N!GO^>IStQT6;`w5iB!@0b@M-zEW2ZnWU}G5u19&i$4WT z6UkcPrYgk)n}VDx$#?dvC@ z$0x;X!8x@fI~uKquv?8(KlbfKwR2mnc!<~ha)!eH?f}Q);_qC-f2*s*zx4ATsqf#% zdAj|e-Y~Tn0liF4r{_(?rQWN1vU^>n+U;+BC3 zlz?)7#fL9FK1^VT{%LGHizl#o|5DrO_a?rPr-124J-hy;t|okS#%yRTSc6@yHT==_K$uK`V%l7-pPzNlVTsp}uo{Xhx@M@fX%5?Q4F}Ca zSJ}eq_ynRWt3LWEFZ?dEYutf^Vt+@1EQtSa6J<5O9nO&J^6pCgH6`e+zPZWJjZUSUusqc$a>J9 zZ8wt^1p-z4QSu9@w4@&p0WXoy5`v+?rB&&;gCbB09DOc$dn8UfEpa7Z7KlJ887At;qk6+n#Zn>}cGhv9>A24uaL$f;-ATSch!b+r#+j(s zpR(~AF#P0P^64b&ODd7lc|O+2dn*1R6vbvLoa!mE5?J3$Fqx%GFL}Iv1XpUrXtbX^ zIRWIVdWXI)_>B7lDPr1pdiNKx0U(m4d!H`;KXlv=V6Ef4@9ARxe7pF_FvOf#e(@DQ z5GVip^iC?-tO zgc5wb6aF^7))Uj1>?Bqkd)NYVYCY#{B$im$0P-un$^4p;o*ba1Yi_ds%}6%a3}Wm} zwyPN#&`+o->8g}1{Wmc{J2xa}n68*>I_?ju)u=L!ayQX&|Ix>E!;>0LaKG(kFm3d8 z9Xr>Yw6F<1T&ly)#gZ%#N9&kh3)0Ri5HH+hJz9`R2{cpK=oVy>1kx3DtOZ%oUWk^a zv#7pFHM^1BeJj~l{VCa3-}02UB+uy<@Kqg)h`61-N0zbK>bZzYvz*-gK-Szr zdO9>Qxq&uI>J4fsy5ac|r`C%Xe`E7A-}DG8I26S49Ar$JdO{Fg;z!#h-%zXhX0ouG z{^6{~L4L3A`brGBaleIgEeWL712>Z|C4p5{HG@x^@~30Z8M>#@6l6X;WxHm z^G!$mft!wmjW=~&*jP*)87?(k-JH4Oh+%Y*wqkxBOcZ&i-TkxFOgicbGzU)*cir7T z>ODoUEp5q|aAC%=4@+gl4fDWFu(Kb}BH~FGiA-xPk<|`~JecUoiYH670x`|ibLICB z{MnAYOTSR^t$v2jqR!K&jt3*q%1`MFblQ2ME|fcrvPrL--%#h>sMjr!(E#m1>&fXv zCYh#`V>Y$yA|uTcaayK?;~VOH^JniQTk#)tzBqj|IMKJx#x-_FKOW~jWR|Kf^z7{vIr1H?c^v6$6%BYzny_zT_1m{#(3<2N=-QLVI)>aRSTg_28Ies?lNwoE(Z zIo_T74p8_awS?6sll={eV^M9gKv+NLiDMFr-J*rF<~?EAo47GszF>(xN$(ILMAcO} zj*@?~c|A$THVpz?Hw3U*%{QbF2T!v@J<0I4I#F^p|C(L$9gO~ZGK?Ne-Byp&3N4JvQ7O+C(R370!tZ6y0M`Cq!qc= zk0tacPjoEmAFYIdj-tewy)tRqoUu8Rvg|q8(?ddCjm^uRWzg$byF!KNPK`0p^xJa*p-QZjXrq4{Mq|u6#gsUIea#qkw-|UPV@TN6?1>PatP%)JiG8T z2iyTq4c^1>81nV%$ATXxi&=}oq!D@jVNcv(@~BDzhp+_?k(Q)+3VUK8S;8C-lcb=a zN1~NZU}HsT;nS4Pz8ynavhqhr$UTElIR(fU@NnHvg&p+amVoy|!1<%(KSTE1C)uS( z$fLwOl=T@(Mz!ugG+G%3d=j1}cy>V6ZaV$tN2H9shY{N21jTb79{wAIhj-j# zfL$^0D*-$381Soj=f-Bhui?ET9^=O+4mzSQ9NXhB4H!gy;lGaK)n&j@LDg;*)phb?9?$1)5$AZxJ2@*wK9mB>yL0%&HPk6|aWP!?G7G+|u6qovHgT-E4Z&&64 zc5mi=$)AcM^HmW_$*beocjHJpFB4p(Wx(}!>`Lxipnsb^e6}EOjqY@9$rQ_*&HaYIGH3H(a^-R(J_uJ|4Dn0=bWE z&L%$tGR!b(Z+E;7O!q>+@(g1hgkGv;HXWwadxDtCBjN zJv5%g6`bDx1$~cuIxpKkcIM2nPmh~EJtuqYG<#;|cjIOB|7CpiV?v*krsZW% z$ewA>LfWov-51{@zLCt9HjG-9C5sq7AnP z{)?Y1_Na|!ZelmHa$tvJEPdaboI;`>y9T;ez<&>>JO=f;&|q&dKiHM5e*i|EZ+$K5C!Rw*Jb!!rA=JPBd#X6&b+J9P(Jxoxnbd+BGP-dP_mlm|dMhnl+j_ zT@Oh1sjSab(mi0%RAf+~0lZ);#9ua*eK3_IG(U!Vt{%>T|2UV+sN?R@_d!LO7OnI} z)d#xvIEh(*`rouG`M)%bHs@C?A%Oeid1Uy|VNX7g()Yn(kEHZPFg%vQmQN%11g%1U z9nhX@3h}5u!96~WwVn=qhv`!5r-2V+GbR%o%biYQTF*m$Q`D8<;mJ;~+0&+totmB1 z2k)8F**nuoLQ5}bxEmfu$rHOXDEV-{oX-B3PWn7i2bd=~6EK!Ul;%GhWbc2=t|)bO z#i>LoP7;OaAEh)`qm-QBC{W5Dnknml#!~qsW)C#xpeUu+WwjuqS4a^d?z=c_=gL zb7!zUGq7Clo5B7Ge84r}lYnnGll7TN9?()}Mk_s~64%TmsR8AHlYuXt$u7+#n>vo4 zC6)RNO0F=3VI<`C@na|DWM=_3@N0n&lKmW;Mf}F^1Kb?=ENFx)od0|VaT|OVSHiRK z>}?XIoX4{Y3N>QuNo$mHPK#0kQJzQrz4iuo?~upt%_9k9L>?QTM;>Tio+sU(cWxM< zU#lo#ry?eYM|(liAL#FJy(4i$gS6!T-q5|^WK=Fd zrEjBMfa81`?Z&%rCrbej@WDTe_cnLHodwMLV>G>NF^cwX|3jd!E0)$4t6{M~qJ z{Pf20Y(*BiMciqaXi1_;lJ-uev9XyI(!!8WjvXnjmL9SujjO<@csjyLztmI_4=<-{(|QQo|q*F zWuW6@oXFpoMk&`yqoV3h7~Ib`5R85<3Qj(x|@fDPGqqAU9|BESw1> z4qM1>EhK&JF`7JsX56+6_#?dYKyJW);+@Yj+D%(T((AjO%e%e5z#w}XB);7=!o>N) zfp@?`cfd0N$M~>)3NRm$(SH%(CO+_Zz!1w(PcR4-d>)MkA%LX-o>vOV18U3dMbV;% z4^VQ#Fg@A*porZp!uDJ#juxic3?(1%`uC!gL;s&=#J(sc9*;qn;qz|P{f}jr`cCd_ zF!66X?SVRWp_p`KHN_-|g_RI{lduw*eZCkVLwZ;VOE1B)Ijn@uEFpaYl=D%_f$w;p z;(4!xJfV@x&$5=wNP_=mTv_FDd8?207ATIa+p;vA~9^;A`;F;eCat@oq^vj`Nlp^LS(nB z*>ZAE69fH?KIv#SYB}jX#;ET~ZfDyaurJ%3J7Au`^HtGk|F1jXV;p8td$llj<5?2O zf}SUB{cD!XeD!@PQfij7x1L8Tj`E++!_!d) zlp&o%`9K*CJ)bCp@k)kE%7~5Rm$6sMNS}yfsOK@d7vd9-H5YN%%2TSZP|w^RtyfGf z-guT_T@fvYv=0ZMVjrW2DUk&#`C`t7l+P+*N&HzHS(B7TEIq-GEot!|b07r!=*UwO&K;4`HqG zEMG%bnp-c!;OuA+xK4U7UhDI|qI0azI?^finm+IcLBsbi<52P$4zS}GbbKC9Cl!Nc znC|&SI*mcgcCI4@tn(}6RP>Hlq_$3@!OO&-9Lx{k%YN)nm|KKEB0*Czk* z@WoS}RF?fJX{&Bw&%H{zs>@g<3S#ce{&*E(D4z9PPbR2YY{Pocl(NI?NwV6D;jc^X zQ%|zq8%VNcSC3nD_?+D72nlB^Hjq~8KKAAY(ic5l-9XxEgL>bp>(44HaD3DCHPS-O zWP@KrR}*>R(6VrxlFQbiM$7MWt8P2HunFCqe~rYDi+$L%*GU3Pe4Y4_1NYYhX001c zXCs^XI>aqv8(xP*HSEjR(P=GHHmkm?hT%V9y~pv+-O z<)kxNmBs?Ll4xxh=5!x>4j6JEjlJ?A*q$#Ze%i^jTXnry;~ga2avUTzX>8gya*yVR zQ&yiJD+u2Tz z&C0x0w~Sj~GxpotFw=c3Xa_{y#X9aF$;59g8^43xL+s<&tv6sVrC1c~ta1k$#*E`C z<=wup6TNO>{yWKo(B$x)(AN&OVkdez#CGl^UA03KZ`IkkHQ87#Xvra*J#ED>dSMvX z5Q5IJj_;8Bi86^zdk0Bi;w0938_;~iUxaKpk?ns6GrfvkeFuC8O}>>{XH)$7e8Ep41jJt?k*ah4^=D!=17g=v! z*x8KTs7z!p@*WH)xBc{es-4{1*ZEoJ}Q1E~ga-6M33X6yCYRV6vV4;DM-TS<}7nx4>1b&t4LT+U&ig zvvzj%t-8Ie3)j*1y`(v0sM?FB*Vv7{U>^D+i+h)Jf=dm5m-K__tb3O{NOE6hue?hh zU>)9r%NDJ@RhPv+sU~e%=6j?E#`)rV81*jp!+T^ppyBV6q1v#Gx9YC23)_%<9)6#+ z(#++z>P~XMXwKAqBwX7F_`JmT+=r0XpAFwf?ho9t8IFauR7nlaU|qJ5R_y(KBvM zg~hMxR^4?oyS1CdG5d#P7;ztF%gbSDS#}(Huyr3o2W!}g4`GYuBRmLo5@vzZ3AkK} zmj{KTa$dM6W}!Nht;4-qt@K#E$3Fq%)=mO-jRjSbWK-g&x7e#k5ehOZiP?$W+#v(t)+?mg?$sd!4U~=z%OdckF|7O8Epd$ML_=lnc zP7YkZDlwS=5FIBSfbu4?-3Nq|oc+K?vD@1k<^< z3GWG^y^VIUJzujTk3zIVEbS;%dY#SSMLb(~6j~X?_8$e8Qg)R?WvuZr6vtVYW00~x zn|}<$-NmYoLCR9*{|RZY)i$rIgN<#3Qw;wEMn8hh_ylIMs%0H}_%#wKJbn!l@3rj2 zCy@IPi~5v2#uva((MJ!q|5MV|bg_$0%(Z?JJEAKr=rf?#vLT;A&|U25&mhwk_U32k z;T-$xGe{A`(vE{9hAlY`=omY39F*tSjpLZpus*Ei3FINy*q9TDr?u?G6F|nW$`cq& z1iQeCElm9!VXBPv{G2?lT~Dt=T#P!3JtUW*s4M={kA3htIw@u97ihhnwflnHXEHxr z$ENcLQ1}Jhu@~F$1-MUSKYf8N4>13e&`97gu5Gbo3_1z3YtDwB1lGxBqtKQCE0P0* zDvsU4cArE_b9{Im{6<9i8eWa?d6GP+U3;vqE|>lK1s3?sQ^brlH2V}LD~GK(1({0O zyQhRn{K}yno~EbCZz`GCj|H5?$Hba+mVok}Ex233(>E1otCvyk0L;^84mVMe`Zlox z;y+bs3iwJtHuo&)Q&5u*zZE~CJcxSZiU)5uTZavNKH!Py*MOe^obLlK0Bqd<;O)2Q zutEO@U@oTtzojZeg`h^oP7sJoBBo-zK^N>Mu{3*ck;dW&&m~%Ml zTYSj_d{Kw90Uv0N3lZSS@m|1ATu2d0CnQ`U|B%|zE0js+xv*^DSLC54<^c_}(+2`x z>(91*h1s;XVMo3q%Uk85Bdpv)32q2DFWL@>|5P^XYciW;4rD)njqipT{n@?eNb4r~ z1LYowYb_MJmWcz|WYm*A1KCnumJMXvc=_5uc7&H#(4LnI2C{%}P#zk{5>UpSM?d_u zhxhX=(%K9NB7gXQJ_EML;lrQCrhP+N7GyoB?-~%@Xe9{LFD?mjfOqbC?IN%H)xFz6BA2<^5L?74=n468! z-T`=l4;%-$%m;1<_%$E6paUxQ_*8TTe8>mB2QarMgFzDDD?V@!z;%H8f`F^srNajO zc);9740sY?Zeu!JpyZ%}8=*lk9q{vj$D)FF_>vAA_;rA}Q5x`izzU4gfL{m9?|vEZ zCcyj-m;rAE+_oO>L6q&N=vH4rl(zvJm&CXLU+J*X!8d?&2C?_fBR>7-q@vi{*p&lB z#*fcWVZK{7z)Mdfm`39Bx*lIfeJSljcmyFzz*o{9_@^%w@F2k4UW{mPQtMD_xJVpotz@a}&mmb3# z03HIEdt9mxQ^3YuL5@EK*tj#u;qYIiy#(m=m$)kRA3OgY@w;cVPsqbRQ=<67et_3p ziq`2hr4is4FR_;2W7FI1RW|T@(z+nar~Q4v=XSE|^s3SauwP;WoC0{BkFll#F7$!> z0e;R09tb!`?+usOmBD};epl-j{)!OH8Sqt?&rjOFBm)FOp{{l{QXs>E-v!JW8tQoI zs$^)u89ofm%GJ6VfUk71>pWE@4{+c;4e(R`2*KxkD&~S9v|9tge82~ALdMn3-Ej-x zRX*?+fSJ#TPXpfN1AnR0O9_Z_4zRehsrP3sfatu!AP4}=85(d9U|$u6@}buMuGanZ zZ#jT&x(1K@CP!=s4cBPzYf>OF02q|=yA&9wDMG^q{Lf~MA6HqoI~d}B#pLt5S|{!! z={21Gao{idXzU5VYm@9cg{q7N%x|U2A5pRZH-D%eE>I?*!gqv|0XO`v){VI$J2bK+ z$92hYFNpXEa{==XWl$i>JAjRAu-t{F`t-*IUJiIyce~D_0BIa5{vTKO183E=1#tY_ z+f*Zip`-}6Or$0zLI{IFo-ha#>5m3sP=ratDJ9WR2w@QNgh2=)384rfUI;yU_w?Os?LX(7eg51t_fKgbEyzUEaeiO#JMk>zyYaF^eEeQ4@3T#p zOf(a3GJXiJWPsdLC3EOKEbqfjmYAYt6pSl%1^8p!&2OUUQ(S8N87?5`4U z#!HRA!7>1i{|D<9Xa2W})==P=hQ>)8hO$K#w@5efMh-jK0>y5Ut>mziEl}uO{(HK` z>S#oE$*)*8ajlE5XP3wdbs#Rgr25Zv1-S6A{uI1KfvlnK!%bM$Kz-<6=_c0m_QO~< zv3k3W=_b|lb}g1II>QZUzfI{D($nsbO)Jd$%cLmS(r*&kBHLiUG&F8!EcyH54u|Jl zN+#ML_c1;Yuhun=xG}-~i6;YQ7te8K{bk{`1qCBWNY((iEl8b&aeFLpzE0K%k9OAh zl~_7Vmuz$uu5ywUx*GeXp)rpwA_I=~(s(5WvPL7s4SUi7T)JX zcj;vf-^ZPB`y`r;HsDRV3yF8(j8i~7*`>HYUVdaQU4LotL<*!rx@4o1T?O^2SUONw zU>Sh=OkCw8YdjeHrJ=FyPf3SSCpRfS{zFzM&Lx#(jfa^Evc}iqb!9o%Mkcxr4?W4R z!Bcp}(LVkR&OgTcIV|sQPnS$I5BD{G8TX6L8oWt?ykTA|yo1NlVJiyc;`19GX$Fwn zn#0WGcf|{c%io(MzZ}aO@6#m{or-6e_&6NPyYe;RItm^mLFR-sFbB)K^fmq*UQax^ z-6FmU%e(tE{vSNabWq4`ki6Spw)JG~p-`){wy5Nd_gBbHsJ z-i(t^O;8}aINp;3QVKMo80*I?B;j;tjh}&KldI3d_OKg@{nF4_{ZqONdQh00>apx1 zNyBlpi2~ULt{@uA9gQ4zYus_V6&I5t;(4xt8#r#|Fq1hVhwc7cD`b~x{HV?8VOiqh zn^{je47)jBl*uHAVP4Wc*Z+Ueh)jyJT?fO>8pwHI0=8>7$;2b#HyBHPJ(kamq)R4x z3d_efiYUl3n0>cRoy6t(zdr@?d5=<;aHn&UK>TjJmQBuoP&Qh`KUSJq{}Yzan`nLm z{+oDm7ft?7oDe$v!^d~Qb-XMXN(I)xWwZ|kr4&?9kYPg}iI*McD;$mInGQ$dYJQ1E zR$K;j51wrN7M@|;fM*+b;sjD~a?-w>|1;696fCC$z0E!r%NMF?2cz+tv_g`9B`!Dd z2k}_UMKl@Ed$`oZH{hX|6KE3OjWgUuNk09{8k|5uiK#FKS7UB~lK3nA{|7^6_6(sF3pm(usa`pSzo`^og z`e7znfsM|ZzZuIGRcE*^%bZc?VVP6XKT9@hO@U0Bbm8Fu&O60>D_m+^h~<+~n%@@J z8Mnvv#vSo|<4%|lK)L=Iz^)YZW0GitU2uhQS3JVF8e0A5HU(Ew zAhTE#uEH{D)K_DfWa@EPCYgEymcuw*@}fytj`MVB8Qp;GiL4gu_9v&I@o^sW%b6=V zQ*l=8(KeHuSXL30Q|${_=77GK{1eMQPYzRV}#lqrJW^ z-fkz_!vma8--+`dvoJXoN&}O)JFH}r^-dDOM1C|f+$<KvBO!Krt{wZ^;SvQvG0Pu%G=?_w+; zaZ8s>v^SQ|!a2v$J`~7j;aowqAC}L+srz90oSgb#Ty=)`p_mWUHN_9d{rKcyF(tBv zs<3>nE?qLwC3s>}oQH^aQy`z-(}a7meELs46DObkOA5GGz{#iood1bsm!wNJdKAlN zF4gt88y%{j!t(jbWKPA5@N-w7314Da1NAB_AF50$kiR8Y8L`H<#UYYeLl~{hw}zj*~j`wW&xHpOplT*H;|cR zpRaKF`(WAUtDGyb?DBFs|44^-Qy}}Cg2c

~pP27&)hxECH;>Epfe#B;q5 zh$$E`!WSHb2uv8elFIghAM#P-yCGS(%QGh1;BF1JH+(P&ELR5=>29OjO5ya3B#C%Z)A z`8+$>gk@5R`B|gnuu{*&auoG-@&95uYU-U&;pY_PsOqoR|9dHr!)UfkXw`}i*oPgk zTz>mu*~jV|u^eV2UH%FzhgnfJ9nkHqxnE$5CUc1T|H87%#XrGs~{&416tC4ZT*RcT=+`kjB)T$0o4ZzlSaf;E@= zgiZ3#Gu&UY#*G=ld)eK8hO8QvW1FTq;u|S+%0Ak_T_pghtZ_YOfvRKl}mVjcP1hGY=rYV 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 J8z1TU7|+My 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

NS3>CFE$(#QPw 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 H&FlUb=`GqY diff --git a/artifacts/test_program_methods/missing_output.bin b/artifacts/test_program_methods/missing_output.bin index af956dfdb48420123c25e6c7704c55ef842e1ac0..1a5e8601b1cfb5fba3ed222ff03209ededbb03d9 100644 GIT binary patch delta 124363 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 V-5^=|Qhc8Mts~!<4c_x>{|92(tjPcX diff --git a/artifacts/test_program_methods/modified_transfer.bin b/artifacts/test_program_methods/modified_transfer.bin index 48b55139f7028dfdfc2bbff82d1a8515f41dc5c4..aa5bb91006d61ea2e68e5c162885c24a965068e9 100644 GIT binary patch delta 133206 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 delta 128370 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

Kfc&{5Y0L%0~Ni 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ðDGWJ4G12vo9B zRG@?}>MyCYBWSm@vB$dPDF7g?*7-mP?>& zg@%>SP9Z)&a^u7a)l7jO@G-&tBWAn8pK!n=1J`ic<&6>h1kH5YW{x=C&&Zrw zyCn3Mli>6JLe39A`{eZ4_V^qW)Jhm7Mn5}=WM_R=`8%h=V(tCe=U~Jpa5Dvd@L!2G zH9&-UU~)y;+r%D9ybXT&sY6stH0uY)vWP-6JRn?-A3Dz12obpOYiqC5mubt7trDmjbHMG)wja z6c&c4977F-W!g59FvuUt$onN}2_4oD&SZsYCLA;b1q{8-In?4X8E=8rWlAkScmF=* z(5Z0OH6Ljc6&J}-)hNeI$QYlGm{U9$^^69?jejJMkgyS90<&2Bdj5rsB-Vl(381Q+!S zh?{Bfkob~Eiam3vEnBFMlr_(Vab+h-Yf0^pyc2Z zB+?`J9HNTog>CSOBZ_^Y$T4^pO7lGzyIf5&Lb;>Gf|D^?ydUzWTV3=Jq5P)#wn-sz zkv=;Gr7|Hp<})Znn#e`fgNG|Sa8w;lW=Uuz1HIiTCtA3zmku-P*OP4UXP-kXm+cV9 zE}^d^bCx&TWm4AgMRy&Grkp8kvcq591T%H`~%5y2; zDtdqaIANGJli-(^$%*`-(Z!QH&A`+Q_+H4~!a>vcq|V|QT`1x}%s|#**C1JiFHP|I zwZ>+ylc22>&Oxy>ll>6R#j+esEC{l0{qsUsFLm z5|Lym0Unf!=gmRnTE=Z=L$Q$!wDekWa$d22EN?ijWGGR55{@EAh1wS!&9}`cPU1#a z@wy{&OZwyUGlR;ep<{~5@qG4GLx%Bb^NOV*_f6v`&nr&+!UJ-IBxABL>zr{~KJg|-LnpZqz2>v_fZ2WiQbNnm#@2Hoa8&X&{ n8owor?*>oci_b3ZKjfsH{5xnG`h%TPVcAuiesXs4roa7P?ai2t delta 120587 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 B>QA7=$%FuKYv_Am@G`-x4Dt0M!UB50+TE~cJR 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

    @CZBZlbF5XP(ZVxpFDi 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 abW)5m^ptXC;JbjY`(Nv)oKn8_!v6ubg4aO+ delta 120716 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 diff --git a/artifacts/test_program_methods/program_owner_changer.bin b/artifacts/test_program_methods/program_owner_changer.bin index d85fb3604cb1a6d4e73c729387bc738702aecf08..7362ce8a70de07734b590ce231b4cd5dfd0a9fad 100644 GIT binary patch delta 124734 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

    82bFsBP=JpM>Um}o!@d!MwGHJKCOJJRPEOx*Gs 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

    _~#qJ3I@I3sgY_gyC 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 delta 120585 zcma%k3tUyj_WzzaXP*OziXISA)B^_)pNWd7sT~yXt!O^*RVY%Zm}F{dD#s86Q`5FO zR+?B~zF(ln%IcVckF2n3Uh7&}YFXF%Vb{892>_y*xoGRO|go`T$`N@Q>o~3p)-8@0vAI?%$t7i8}w7L}KN0;kIEz{?HdGGv} z*2%X;^K0RX$r}nc~)h1it^6&Ha|s)1CPy;mts@>6pi=S#rx$N z#hl-eXl+@&4tl2#YDenD=!4y-Ro2r7qwLbU`s?|wx3x_FSe^eZZM(nDs#v=Utt4t3k0<$i~xLD{L6@sJsucsYKCKVzyZnGZT5PrfJLSb;~LCRUCHG0CXRl zg*4DC0g9w6v$R_cXG*;&C$)@#9?eBLXFZ!5hI%}Zo3Fv^S8_DqCXo!TpV1I1Q!F+W zf|Z4S(oQuVI$Q|7JXIh2Bu?itVX!zTc21nCxGe+^}XTF7jZ0$yD1+B1fx4 zYZn81%X?R-78*3O_I^#!opz$(yonDsJWKIdWTka9t+Yw(W75)}m{s}YAAg~%c330^ zCOh2?JfHrBCpvhtZV;oiHNhdl`V8SSLsKC&QNJ>{#1rfbsd3YDE;dCTQ*t5+v01p( zc%A~Yf9E4@TgW4iivd`k((^M-;LC}O*Ck@)yQbR+sd98|L>*Db6i4(qCGIdfYsu@a zS&k`jt#NO)M!5T9dMvkQYK6^Wtg@YIEwx!>a|@pmNx%LL?=yA0u0OPk%_e(Kc}+}t zV^E$(+NkDXwt;A)pkSQMA6grPdi@5?*7BRj>dHE(ooL=cw(YcQx0~zk#6z^KMLin_ zC~j4`3~MA(U*(H5pBDP;cfF}~ZxQp@|2or;5vGWlo+b5?^sEgAB&}6=pGUN;(-GPl zdsyu-LfS$vPIxY37_J|*v-TENF^qu=wMzSAWVzNUEKIkm(^^Vcy40}iYt6&j1PcWv zEwG`Mx|WJ~7En^*$-PaVkR55iR$&j9R zRmY#xvJR~(Iqhglq*$CMwXEU&wMQbm>8|r>Ei4HmZPFnMYAkbm|T|D z=Gc!Zm_tM~CV10V*(`P<`(_&K7J2GRb$Q1J%Dl*xe0-8GXMoHrTVu0y()0TD=Xu?= z+-n7Og-uD4F?Y4i;?fz9C&)Y%g+02Ua{6h`sB!wh%vxboiy(#T-kA?&T5NNJl(Z&l zA5#bI^Qd<1QiWAia|-5>OUs?Bq%}L#-4sRqpl*w%Vtxp9yE3%s)`^jV-}Qzm($DOO z-l~`)2bsAQ=5$zLHbtH>JK7_!z4l7$?qljxTTpM9@M5JTx7dj;!x8!^wiOn|R^O_7 zde<w z7wWnRzpGc{O!KMNR10bcSBLq|eX%I(>VpL)*ybC6u`VS!9pVY6X}SL3Ls==KWk&aG zs>{k}u)er;)!Mg->g{snv?au0AFt-LgZB+zs5&Bcs*b1?sw4Vc)zP-6s^$4Brglpe zNBilj`$t%!e|^lvc*W6ir}lE2UX7fnSM{p5jdrO`R8X$T=92}daLD9n8*6g3Pd7O_ z7Hh$62U&#;z~N@JoyHB@rY3HbGbD-WvCmdb-B003{iH|qyowg!>0DNpDi)oII#zW& zLBvLwWmpI{h}eiLK=3MKF)?Z!QH?MIRnS!>F4B%R)hUjMtx9`2ixXdfiD8w&n(h&1 zIK_KL1^Ku4lYTZh(SthpEDSo6NnC-b**tV_+TQh50+EnuWQTQkEt3(#S+3Y}nf zFHfX#Vu0P==6%)Fcvx$p-i+rP?j7B}m^K9ql(c}@Mw0i!eY`d+%tmy}^(*I33yrOx z({>=q*JTXPW@9AY^z0Q<0v!B`4Y`h{@jMLlPei*=th0sn% zjL?z=LpCe6JYQ(W=((~&^t|zClg-bs+UDy^uQcaq7GlSbN_ zcK-JXF=uD4lGDbbn06+j|8k&Qu=n@LGw}a7*8bjOwOLOqe9S%Vk-~v&u;APBU}Rz{Ia>&s1dOg{D)UuyAat%EQ*ri# z5?6X5xKXdH8F&v3>)I)xj)<7Q(@u}H)xOlGI?W{oJ7^p_VDsaeLF4c+b&Y#Il?q8T zX$7bMwD}G+UwOl~iaSx8mOda#Xr(ZN_}EQRiAqjXE-V>Vty(Y!Sh&S%tf|wrtfIgG z?j+%C^?jJo5(3~iUMr^;8)YEbvZ`m-(&cldQ z={Wkor|o|{w%r;Laq|d(+6Xc62!Ly!cPI}0Hj5?7Ey9naBU-?yn0kWW`4Z>n6$ff- zPWfo5QxMj2DZ2{(HttUq8ptk5eJ6&r7G5aNqr2CAwK4sD`K~>z(;NanwoLjkzC`6j zS`g*oD&NhOk2v<8Y;?HTCr~wT%~! zFDK#{d=w#$_VI@E!&U~G^m7_M`~vrV+|LQiM~I+1(et*sJ(aWus?sHIr&Eu9zN_^JGIT;N(8l8InTWkZDDx~PKGAVvflyCKeOZo6J)ito9t2=) za)I~O<_e^EWylC0pqj0@r zDqH78^rm^-rm~`k(3HcbveJjpoTa9+6Az)e4w|yd&Oe0c*>5Vl`VgA3&s28nAvEV6 zQ<+(8r2eWV*Dk2=K3X={v97}%(BXZ=I-0T_I(!JtxeY3O2+dUl6+VRKc@rwkeh5+7 z3LQR#=G+1uK7{7l3>7|v=6M||e1Mj1j9z&SI(&d=(3~5g!-vpZ8%$;AA42o2g9;x) zQ#7a$8-u@{PR_Mr;gd6-eHKhYwf8y)WtiG5S8|F}#2@_;%!QGhZEyu*uEswwS3N7z ze6So9nH4PM55!qUOzFzE`QE9~3PO}CE%lXFcQGvM5z-1RHp>)JQVpH*nzoTXI1^Were}5ICs8m^q1|LFm&PRg}p}FRv!H3X1 z;v7zTTT&jW;z>>OSCJkH_4kqKJJ*(R4I4a;P$w-jCT%uI9n`qL;x*#aJqN+GT-Xv(V}KHzCUz({#QtBb z_T^{qJ8aOzImZcp*kF~L=qF1qk8VP!(iG%j;UQgQkyvrm zfrUxSP5dM{hgV}d@%POiFJr0oh+VrpbRKo})T{rGtUltt>eq}48YZfY{9K$g$Z8kc zjE!1u5={SqBA3*%3Vj{?G%f`jJfBma;q-%OR-AswSmsN_GOQINk<8hEn6;xZ)2yi? zURkfT?;Pe3_f9P*@(h+>9t-#pZGEKBx*iX#)v`JV>1AHlR(2ke?XXWKHtfK7^uk2= z=}L+FH(IYZINmhqW3x?F%w2pF*2SDausOG-`T3bO z-;b3pxrpC$c?^KPjNtK{&53*o9U6?XK^XCS{5V8G6oB2ATJ}rHvIx?}91+hI%*7`= z;&eE|cPZMqsfulZxeB)GZ{n4-9jtUwW3kiPg-URUAQ)RTn0~6UswrdU!_WU$I81nr+Mx2Gy3!J?1U76mYW*QILMaThK zZ6%(0IPIWXP&$q?N)aOMaPqRUj1tVtIKm$#wmG*TMOsjDg*P`Cz zVvc0+IimH7>`3$eQFpYa{#P2A^^e-4HECQf7}o(^c8 z72knSh(2fHWL{!*oxvZE<#{PuZu)=g3g>i{jB1rQS`&@*>mu`V?}?)|k!R|R*>VrZ z8Z>SLfqDsb;~ZSe%L~wF3)OCS>D@4k%gHqigAls|Epu$RHht`)4aMxs^_RTM>uIH9 zW36(M$7_{igXDd2yyl-05{!IAWmAXjUsr5=3A^FzV*Vd)9vEmF2d`|5| zN~HA%+*|T`YL(zI@&}BYBXSBUyMNh40 zd@QdI{cviR$Cp{fQS<3vN_I~urkr4k%k}PE>G-U~wLNXE_a<6flN!@cJfQ2}&SqLlHPe12?g@;xL3IZ=Qf>9Hwzh_y zbl;WOUXHX$2kE;8v~k0SY5Au*Xy(a7`G|3X{D|Zk6QldLj#|d#crIC+S{$S8pB&pN zcV+vyF@Gky=gr87`|q$ocnj5L`Qb?|Z_I9+^}nj-Ss!S3=g#?0TwYd!yS&${ajpM6 ztmS^u1x&}Zyl(#kruv*o8!~0GkP@DHmXuBjp{;~u%DXcsmx`zK{=HmzckRa19kM57 zjWp-17E<52!I~%i(BI{k6h1YY{2f8FXZ&q}SEhxsPN#^U_QdphwNIPGSs!9J=_K1~ zuIYWLD?;m@9^TT^7TyXcgV^7wy0dV(+PI}4d$LaFNmIV7^$q4ejh}RO5{@EWsuP3g zHKT=1aOVbN(kQG#(BIemr*)`n--EKX?FVbg(?(KP0B=9c(*(6X*nW^~Kevx9*Q^bH zBUr1R<{#r3QQIb-;yBu4l3K8pjo6BK$v9Xbx|#64EG#wKD(o7CxJ-`+@m%C;>kVxY^{T|nb%nW%%m`v`|FiWDDQjNMZbQ7E=%`5*YX@c{o zY3pX5{##w;KXbr4Uw`<3J|4sIsF*&}8F2&u+HK}EYXE1WtluVf`rm%o<$Mvyist6_V-G`snX_XIh4ENw$i>a^xM zoMuridd*`r=d;gH*DbB`)u2awaq8q%R1-y=UPYa|(iEd;?kKG=Yl^n_*&oRbZNu!D z#HpE|o6Loy<*Jjk%;(liL8)maK6Ad-EkE~3?Z(`%xdXy!n7gE6-ur?8pS4?CH~*9V z(i^40{D?TgP30n0>dDR~rpJv!L36@XPUkTkf6imG!q|l`R~AaX_37I71z*-q=KO^N zX|UA)vr^xAS-Q)bqg`Lr+bSEKrL|vtthUgt#s5p8QLef|8(m>?#Ymi|S30-kl*^YG zHE9=@c90Gin9p1uutgda-c*b#9kiFx>wM`sUKD4sx$6OU^7I{`BP@i^IwwQ=Z$%~JlVmb|`2 ztMtC{aTol9-A@(175C3kU%`)mW3ybij+Z`cHtX|~q#rMyeI~BSdoQ`ioXLv|_FJpv zMovcsZ)$nvw{6zox4_gy6(_0Mzt%U`ri2HV)ZcK4SVenfuWOa81;0ms-_!y(ZnX+) zGWRVxx^aE2zDiPF0}v*WbXdFfdQ8Lhc9cl`UG~;eq;=hN&rnoJ_sub+l^n(nrU+wg zUb|4}`C9%Pqpk9Or*`#?SbmQl?<%oxIV2Zm{-VvLt>bEI?e*sSMo!?eU$m=5ZRBcD_6tIFRZcDB+lzy0d3qI3)=g@UTZ}4ix89e-T4`~eJ)5@; zd??@4ZFPL5{|jH>+dCQxnf!iS?|Zp+_U*0NVtix%p;4%*;eO>g7^(1(I7-*}6D>ji zBhL4h9rC%q&TqKamU8x7u-#Y3;eW|GFac2Bs6)H4y}s0L(wSFwgw@?P z)tozgtr;+JpZt?r@{Y;q527{D|!S+DDic@t}EbC^=bP(pQ<^HkM;qp@+@M&$e{qJ_LzKz~4 zcdstF`tD?^ce8WJkoVK;eCd%7))HOFJ+x%cy>=?5gPQm&UO=GwpdZEIJDy@3!y`9e znCC!6?^Dl``NzhQ){q*UZ*RTB&t6f~8+`7_Ew!&6AC+CzZhtg)u;lF z=h~^QJ2|@HHHF`V1UBLYsK%jxILbpI%z;8is25V+0RG zORk?TCe|4k+e`H(Y3n}TJRDNQ>ODmoCXP%*5a)a=PUffbGZ%57A@V(2_58`2T4)ka za3p`B%(qM|ah;8=Grgmq+%a04QF8RNwQ8+>kNP6f#5;+{f77+Xi$QYz#>-4t9W|_y z@-+v~T)n-~+WCvm8ilnXU;eJI_s>f{*Q5vL#`9Y0SCPRMZVu)7aYASPf7SJ~pk&im zL&ch(Q&yIwRbC1vIhxPckA~%F!s$Z@6(V-}C~bgm+cb)&sF0v|5qIj>%gHkB#@CPG z-}c{x)OF~ao2|g($SY3buMEWf1Sg+3a2Sud9Db#D9dySqZQ{3WOw@Onmj7*!N9KwN z^&y`?4tr^pBfO}}5pkl*5oNA&M4PMhL4OwayfD&_w90Qotn-AT-qivwr!~ss%M)L& z+{i@?nX4_ke68VpaQOHXn2IeqIYmi1CG)?FHOXR@e695A9S534Y`IECAI|x40w=D= z+nS1gzgDZbc0lJ_sYfX@{+6%khsn)u*?)|& z%KCYoq21lWF_bOBwz!%li$(Q%ZN-&as^opH-l%7sPWwD|FV~yfOEcQ;7=eu#4BFl#20mQH_ zPaRUyT3V=BC?hSyb0U+5+teUM>lTDF!7r2&PG4bZ=7`=l%+dDnFwW=bxNV3??T3f? z^P8Ngr2g<^{k3)1cQi!hj<#x&BU(+un$uq!@>7piywLV-NsgU|li*&7qv*79g{r^l z17=#$Pa^2#{3Yg}a|sulscr5SZOy-f$(EAs|NfHlECkH2Yx%#nk@xCr+7aVEccXUw z*I#ORF8$9AevkUz)(UU7(DUEc_E+}M?>B0dm4DB3;-=1n`pv)nEl{zC-^cu0 z_h>z2;oSYODKhb}w&uUFvJYi@HZ&ul32rff#Jx6kS(Sd4b2&~}H2fHU5L_XaxTCds z{FGMYIp5Rs4r=Xh-;@I=JE}$8S)k8|_ezTH45fVfnG$mc@pEKt?(YpX-%d)}_p!lx z;SaQcsvfdH(g#{{Ro&Fhsyb%lT1?Cvl!k4$R)Aw)bGN}-!o6{|Q?BUV&w5M1hAE}d?B2V1Qi9|s?e|;cHPdpCkGt4ELYIIG>~A$sr=O|8to8Dk?8dB(~+|!H$TNIPv)>I)#Z+W**E63F*KM z8JpX|ZqcLi&)6kGSkAWc zp0?;v(NfP}Rc)s}xHtW*T?PG5)1EPX~Xm|dKC z;9%x#gz5xy($_4%5!oSLcrI6m2#@b79+DPl@sT!Pc9jijOb!T!ZHYrPXvy*B7emq# zER?$$8CpwO6GRR<_zb`% z)@GbeuHlQAYaGs*sNR(y-5E_t3o&_d=5?K|3?}beqMzSwJh&Lr6bSb*42_{T<<@)euN^?E?vEDGga> zD{}1qfhRR$z3fEy>18&SX(zhFE(>I9>}0dvd=TpzX0YW3v#DWZt4?Xj{KH9zzA4%n z2e~7h%a`wz;e~%h5Ex1emJm)x7#||YNu3vBv)Xlr<;~cBFtie-^S1C)KV5U78kpil zWHF!xvpYz-Y!|~`=^(KUe;1ppNk&Y{Dv;UyflLk02leV&F?$52jdQv8A?vLRP+37in7gtK87SrlR@?S& zXFHNh+sOiL#OZ*%kGADf^vKx4ISZr}TUxWq4)Ef5f@1R-aM<0eBYD+i6)~K(qx(_} z9M|7h#^2rZF%E^=*H(6-3mMJ53_Ro`%-)q8lXWeRbzcXdI_l=$A4hUY!$`h6P~WK4 zL_!Y|+5CabI!!E(W6QuGHIdt%?eAe2p4x+*??FZf%c=ONE~lPSfhYSgXHODVPxPw% zF&>7p{Y^*^TiTP@c@fAhL2g>|zL#c`-;W*XNpg8hHg$9&OL&wNw39-?j>pMQVcOc% zikdXPfu@|?9x&g^KhqKpQ`w+(nEUplWUf9~>rnTcK4hFpc3U0A&c{P}qS>-Z?ySB< z)k7ta7A25X28jhE%B4ZeJ3N8iPJ~kxBiJ^9*^@|+1REx>UP;E-@+PGD{Nb}9i8N_2 zFG0#+-h?#E9~PeFS8kSBPfcLElOQ-z*_a8eqPDW63GN$7q>T0#!&Z~!vXAc+tcaD> zTY9*wrpkIOPwL{GBHy(xtzwlTAkrPEbp*RTkc8 z($5VZ?CSaB|%OrQAE9VI67YMV8o#*KX)oZGK)`Fz6V7qYIy zNRN)FfuAkI0axhqHuF3Koddv1TAx+!|hLP6@S;~ealh$Sz9%_he zwknw%Brm$1Bgi|%x*UyIm#^LMIO*}E=w%-`wuOjvJ?C_KzI)^2WRl4$N20N+F(g)kpmnVKSoi@!iCniK zh4i)xN#(u55>iM93A(Lw&rczdgtNi3u46^x5YdS;WhGLwN$;}DP}|&_#*?4S zI@-ZjK1q7Cl4HXA`96>*zC!VEgH-D4ecaBjK1n7Aix&POh@EUAk6;BcXb%gWOk(r} zY9IgHke}QlHEZe`A{Cyy%bhtHp9lHrMG#(SkG&qmR!$+tdEdiJo|;0`zm&X@_J1fD zJ(c_-#B5U|(aj8qd9)DOK9-U}M#up~Ze#m1$h2BupGGztqrv$z--ZX8wwXzqkEMYe z4TfB}3UAgG4hUdA)8T7GrDfl-PSY_N3ebY@xIHX+Izk93zg^5c13{kvv3pp?46^=# z78*aig#npfEo5bSwXh}=9?)nZVkU{HZDHa}M3U%;R)CIF&4h0>z}08Sx!Nx7p99Z+ zZWgJi&Dows?#ah^iBO0_yj94KK1fbc}fs=`AOBg6XcE;Xc9yq874h~{La-?LFKV)GzJ zu#25~(Wq_iKIW5Sm<`0^%pp6hVp8nf$0~CmMN#I^KIXp+J3LWa*$$Sv41tcALm}%} z)iSc+{;?}TVgL=WBhm-O*5#5m?L=LP2e^&f_;&%RBB}_+(<~|qP{RPy53uXGMjzAn zvFJSbKT(x>mAUd@z{XI{<{2YS-0u!uP7?KLg(;AckLX)(|1aL*NInK?RFY8u86pzE z5qkzJDlp`M_3cstIVZ=a;=viWRi~JeSE%Kdv_LrIvnxov99z&qVfXlWLm%5mX@P3n z`?U#c>Hd>CZ;XRgIO6rk)ND_x5y#Lz|7D@JE{#jn(P z+6`Kr?YQ@A3gJSuSWxQ>aQGaABLFuvqYq=#U z1rJ>*vx`&E597S@Y&^;o`JVTUe0S(}QosIVVu(riZ1`+gyl5OCV$pvaT%tyi=lKcW zahY=3EZcGAagtbi=nU5AV*2eZBCLSMJN_Po-qT z-%Gnb^s8(juToPzdR;DknasVZ)Bb}^fuLpMS+Bl)<=)bJ_D5Yo><;9dpgPT>sj2!` zXU-Z)ORSc(a>QL(#usV#beb{RyJ(QgfqDKk27p7sAiP2b!HW@l^oo-HbZu$S?B>fk`;E)%QU#ZjK`|y*SkO8X)zjxdZczlJ>f2+ zqWWT&$Qu^~rM+H}A3Jdz9#QOj2Q+feIe~L3o62LXMEseN6IJ>qErR)NsBI#aeq%@x4$OWxP5B5vHjT9Z;XIBu^(&tt+C{l zIa%_zGUmh|g6PXuek&Ie1lj%A(Qge$l-`eB{#LGCqPC5fy=psq*;wyToBwxSwGH^r zSW@QpWplnWHilq33%1sxZ`b*z_P;{zn564I*^~MIh|UW?ezJ$V(~sl}v7F&(h59Qfh(oXlvU&wkYdw@q2(Un*( z#-KZS3Utx*Whu9$?6Jc2 zWBYI6bku0u|95YF{Vw;tT5fSacBz(9=5#mxgT$ERwDC!BC*L7MO;+Ipa(B3ks>qjW zHp5`7{V!|kGJHg_?2cwh_>&)3uuj}Xc@pI0S6`JAxBNBXg(NLb(#l@fX`6-j5;S-y z(Ms7Hl9pFkR}LOZ(9{E*mW_`RN`?Cp1zoy}%H1ssTJ{U~B^&G{3+8UsD=iX^UpDxN zPAk@F+v{k~4tm~B?#IO`wkYH5g!~p*q4Rdx^q05wQFoLDEF0Y$O%xB`av&p^RCRx^W5KgBVx!q=G}LH1Xf3l&NGi6{mv@%yZnTEdp-IEaY*!$s7u9LS@_zY z?H7;D(&HrUI4i7AW2Bv3``mr8KE?AhG3S2x++Edx9-vm7blCiFeC{r7L?fwnBan~J zId<7bdvKuTH$BJffi#_q2DAMfTNy|P_7^%obW(P%{InRMo!gi*P?yXZopx4JD~XJY zT#a?wC;Ff&+@V2qE$Q+)8m%|sf<|!!P%l79%ePSMn@k#BJ>^?J$^Fy?Y+NjHf_Lx* zcDV^{V-+iXlXEN}n6{8$!v)qgm`;(yILI)^%q2<{u%BfOO)gN85M zsZHrB(nVOs_zN}@4vf8e#9xMeut#pei|4oYW?nr?ZdTVLJRGEvq_#_i&FMgCXhG*# zWpf%LLD>Zs5K4pY@2usYUY*?{JF8xloz44-C5NI(p_tr%F;^(<(69+aY03N8jp5*E z_iOi2WSXTSZ-37!?X-tO<%&%F)n-Y6e^_?M{UeT~m-qkB=3~C=78)ObXTD){Qma}< zF#W*Kt&={~tmeCM!bVR0!cK+J-)pNr5l-(sX5p>kPlZ`e+>N`)pT7=RtofM#bcZAV z#TQ%IOsMG!YRc*Np{;@Wt|R)yT}RuZySiEY#PANzXep+*Th{v>NWkwT#~D4VilPOo9z%|hk0kI;tf=3)RJNNm(uT(rdYfK(@^d~WpIk4|c^~JW`00`NHa%}t zU7n{%&l@eLzT|Z$w5QWd4q>?0#_Jr|dLW<_k*Mb>Bac-)LWAzxn+OJHhQT00-rCT% zuAsYVCyGClC+$APy)uR(y3vihCQ@YF)ma2W+wI%WgEBnU>RRR2=Qls;=$ZM%y;4`HmZP!Hlu-j-#Vn>r8Rw{CRTH3E27V zIM_KFI|>uN6Sp1B_~h?nq219V2@YsJPQ^V1wY>PzXYL!_X`B0FQqk9wNITNYiEM8o9Z3U|7)_#2v@J>sR~mv| zf)w6FnfA=Q$(hrp+B4Iid3sKUU8$(0vlU6SZAc|>IQXXGYK6}^;4k#ecbf6T4~^sy_QoOU4jBS>!b zW=o!=ONKo^BwR@Vu0)?2AWfV-d)92E3E(&CI2CVKQh|*+c)k2O|IaY|EAKh3NMt+F zwMXV8*_A3>9$e>f?Zy?*->yX9x{iB)e(B}9CgG9VT-u%uA4td7e}49~Iq4l|KL?^V z)cxroI)=2Y8WygMK*l*M{?-^${xf_DW_?B-3VeY6NW-)oFko_u)z^m|wx=z-8bqxaW2R-ex0dGfO2Z z#eGlQhj&_OSIz&7>65}P-YcB6~(+1`=#mF&Kc->+%TYuNvqJUfTA zI2oAdZ9OtBI>2J}h3A z4~v)e#}%PqPi{sfw~o2A+X?yTGi^ z1lqU0k)Me?wYFRJ*o6sL3ocD?x130q5PtKFCiO5I#%q{pyH)<{z>vrMS+P+La>UPHs$1 z;Q2^LAsvNuJ7}G7?~nUsxLJOT-3>J%j!5G#wOv3A9k)6?||=GtSm6LCGK675f)#WCo3D zT$F*=fI)v9S7%&B8Ei!c?Mbg^u<{JrM-82ZzoaVL44p>($4mrn4!$dB%!V}O+d3O` zUa>2#ui;*i=bhj5DwO^eJmfd`=U)Z?M!d{>>KnFX8g1FQ0(J8~2jk*nxiO9HoknN- zg-n-IN}0~uPN!{Y{&Y5GI_>6Hiu~5#1Ku#5_Mx|?vkRa%?K-2b9*{*{$;hjn7dDzP zgFP{WHj9~h+petpscs1Q|Hex3vt5~rypf|HAN6G4_O;u1u`P1%q%Q?OKC{#-AI9{Gpg~ z^g33&YY;hj?DfKwlpiohajm<~cFv?DAFDze!@%cVx93m0GUTotw|9OZ41C+nYt3)MBiJpJrj@ zjChv)nnjxpLdU>W*U?)R2ng5tfH0*B*M11e@O71Hm~z_`rbHvHLViya<$~kCbqj|R&CWPgvW|s1*>hOOcDH3yp2IW*e&adXExZtX z#kdaOI*Q95w#a`*m-0i{AJ5T+*(r16BH9}??)wbP9ga8d_5gkgm`^=}AICysY8f~S zn7a`J&&E9;n}MIheKQ`C^+ZcX<`QIj7b*pg@+x!)_uiGP0OsqPQT`>|w|W3S;)OTk zJ{DK|Hqm{0MYVON%yG)mzsNJa7?Z~y3XjYg~f$N5z2F#Y2=RNG24;sHJQJ!DCo@LL5DHC4^Q`+O2zX%qAi>J=TGR1wi z$l#d|yZjf1DMh$$=#>mvQpY<4`JB#EUf#Gj(x!SDZ<=>I{tL~#F#Bd6qLa?gvyRWh ze_iUsCDVaD|2!Q^Pd?AepQp3KTh9+yCPO@Y-Qa71fw_((X5;6h@DV4QH=p*c zcYX%{c-%(|%)a9Mt>?2p=F@JC4SEc8(?rtyET9X+H{sRn9>6}B1bhN~0nDevf06Rd zG0K0nfcEKYl>ZRrxg8m}CB@qsUf2Q5%Nz6vU~Vp`XZ%7sp7-bQLPYIIzgbAZ?{5ejalIiqp3DdE6<{t9qx}EWVs`f>oI|FpWW!csz(|*@q@7!);Q0>^s^7=O z2iUPwN5#m?AgpCJ?G|O=X?hP^g*tBP!;!&SL8&5fJBpbep`tr)hufnNd`6}2U zYqXv=WyPy-;&piyJG_eaY1VbM3@O{g%W#iz9;c8z;_17ZHCRpigii&XhXAvX^1YIzK8qpqspgHjdpGb@w8ld^1HV#>nPoksICVYiww^viudjD+TTfpxw_G#~{uTx1 zye4NLZfgUd!mrqv*J#K1tNLh5z{7pq8Km5H{OmZzcxp~hJMImh1byb-(0K%}`BYX=Oyfu;3weV+O7hw0H-IwODkPSy zN2_ZBq5ZA2CAwo|i^UCBnAp`lEDleVJvB({1N zZRyJeQ3W%wv!QR&N5}xS_)T;^3)G`DTwMf(&u5>!iGJlX@)m7{KYbeZ7LB8q`?Fu) zr=3-&RZ)hpwa6m3+3B~?(2zmZH7D42Td=Eq-&`??sJXn7lLt)3lGT@%gXchKgd zDmy&jS@tX_|r4BTeDcYysCOUEC$$H+GCfE1(IxgE5hI(1xiO((W=H_ivz@1#Ct z4vXCh>Ca*5J83%-z}D`>Nas(eu9+h>d2S~SR*wRAWd}aP$hp=$2+U5gM!Qh1l*R8t zxvOmEE~qGht=ff#6WF0$v>$b*N=0*TRnbsUoGffNx35&zX9x7pw-W8)d`7XwyHR!# z+q@e!ooA-XA2mj- zU+l+V*F3{o?!#b*pg)(f@hf662k3B;%9b9WgQ93+6iq&{`G?JBVgBve8KB z`RCc{5)|cAFBMMqDm!oxOo8mngV1U|YgB@YuCvJ{v>jDm;=ECofS0OkiU{lTF>TH6 zd<5@b|0K0;D5YjPb)~G0E8`NJ-yGJV6m2bIlX=pVtuKYsNoDs+q12VE!y&ZfVWWAH z$`&6InR|E=$i6;=0^3=m!_d|V*84Cr{n^aJw7(kgdUZ`IpKwjsXNPGF+zoL<>fPB; zH%&uwfTIj{&rN3m%{)RMSAB}BYi>w`|LzD3{s_Bw1l6aon0KJ4DmL>SC}S$y^A4ur z5O(t&47rfSzl(YXuvPEU38?O;cQI3MvEJ`NDl6IC_drWv$9Qs-)jvwJNmsV&DAd;L z4Eyv=__fPNp|&Asq!+2ME6NcT_C6fTt&auWkITDP7*>z7Z1wvz3L`!QGCc7wNKD&5 zshhfugqit=bKOk(0ItpFGq&UdIDmERzz4A2Wfg`)+VCO#QQ$c~Z-p^;`Vht(3Jei( z<4y)9c6Q)H=*{&ZHDe(BUQI=WaGT$@gAl&vNd@!uAaSx-4@P)|E%iVoSJ^q99A#n0 zVAq(FJlV}A^Q4F^JqFHD_6bKB>=(&W|0DEQ`Ga-*Nc4B|N6>T;EBFXo+@$6<|+KkHLY zJ3`(w%h4w%TVD=?$Y7_->2S4sK#k#uxFJ`z#aTIvKM96QZ0YsuXvuw4c&^yH+K5P-2bPDXdSpgE$C0h-9@&gRC;uNNe638x`!V1$Xu*T4r{WSEI z0G!I6JqLX`fiZUmo`wXfn$*;kN;w@ojmezBzCMld_F`dp8jO{4=owhDKPxzc4h>+( z&R|f%Xgz4l`ixWT@_w8iYd$CE-9c@~+;Y}#3%47T``Lj{A)SlyHHMF^{1n5gV0Sq0L>BTHdYr&Ue1>VZo9+1w{U~K$e1-~ov5*R& zQ7pa!^&DY~c~Z&VsX$*s899gI^I6zA4Bx|sa&(r>yPPem3p93L6`W(gWY{%zls24l;xiA9tA3#&x9sWW8L$dP|W$;RHxX6!rdeyVz zU;ZOXA^sKr!KOe|IfL|413UiZKcaksfBlnWaLdd87r4T!zA%JxDK>vG4y$-=J%f*oznOEYvlC(J$$+>@2UrS7RU(BkiITFK0q*x^aNq_i$}= z1kMK*{Q({ayv~dN3E&H$^KA|1$6tg|wtLZ61Ml~uzoX(P^r#oZ2VnRJ4E%hUSMU>X zg%|x-VE=)5fkvl?AVj|EMaSQ@P~PxrU?A{qFZwXx>!3H)%P+7*pu#9SApa3%2^bVK zfDlr2Uy>@%|3);2j+s z^;H3L6EbiOFgGy+Q=e@9hEH7vK5kald0`*mA}?GIn2*q?paJk%FWddmg0nClpz)`^5HVoVbm>Z*k+XHjkGw>t8+?WlV z-5D9&c#Mo#U~Vf0?hee2)4-1cw*u~m3@-AgbZpS40dpHMa3(OfDFe>}<~FC}Y-Khw z_90_3a(IQCb!-$U1m;F);J1M7UU(ZYe+kQ=?*Qg6V;OiiFn=k_!25tl)nfMA*EBpk z;JkD#8+D)cZ(w^XJe8)>hn0T;pVq7nKX*~8T^Ks0isMVE<~TG0AE%@Pb2Bhp+}prh z%Lcv)pF0Hg%?CexWVUh{KJiiroU+VNLchUN+i*Pc({ToHDlqykoa#3COee5i$G(^4 z#4#H90hmt|1AqCQv||H5`MtDriL&(@)Y2FvA6XHn8zd9_KFwHr~zS_=pb}^&dO(EsbuhTn*Q; zs(cM9qVM0n#gWveO)UH}JY_})yG|!cfG=(zslztl%vz(ON)zDcyl@EcVlN!Z`SsfH z61LI`xbAnersWMF)PGeM-}k@3Q}PCk;g$ai13`xjiyiYnvOzzTq3D8*SC7bBmx3xSt;;bP$BUL)QP zT;zp!>HM+>RM`tG-g(sP`%=dS{ZckEc!Ng9x4_;a{2sXOce5t%rW`?6U4&2nCP!=s z6Sv^6fO&_+03fl=|B)T$hxc59*SzZE63fQ-()Ts!%Vk^pyIJG!g?WJvz?Zxv)(LoB zSG!(6$Gqy}9Zm(_9c$N{Ao!1B6{UNefwPJ76ff|okwKJcz?-~qCh)0V zb@W-l{AE@7Bg$;xTV8lB@L6;a@sF^fEx`O`R)hadVE%%u_+^8o7#U5yM6?~alNa6v z?DWEWf%zM-@<){ez(>7sDKPJVLC1ev=`C{QU0~w}`@dP^z_jBcIc1U}-iT?(C4m1e zL5O?-rX80+fR2B;h2o%ZLc&$D=65OLl{$SbRKf>jxY?lFasb9cG8UK*5Gus@p|e+! z!AD@|^k2YS#G!fveeXyS8+acu7pdWg+uW5R-Kg__4s5(5%n!mGvh}TA7JCfVvg$ppEpJfzYz<}Uq%)k2K_}H8|Cp`fRYM& z2J8>)M7gGC7!22ePsQsi3+PGy5*ze^z`Q~EqskCquW6+W2d?|wtl0{Q@D3X*UErT` zK-qS1aUG8ID!@nl9B^u1PUSzM%mWS|S{Ke20{a6u5manhfo~Wp#E@I(w~zmPwwph^TXcmesNN^4-=fPvcr^9~re18}B}xC%P~*ZpqR?7tx!4CNBW0JGpn z_<(pBj=Kncy?s97QOLO7&#u=&l(E3ccq>~NB|5kixFWHRzKmCpREL)X^OwZsk0>jE z@uGMw#(z?+boUwn1D=!Z#jpt(S!j^&Yxv@G5;)bX1HS?Dx6q5l9pi<3V{01TJBa4xX%DnB2=J{=qU2Z6bb82At{ zSDAs20CSZZ_&s1QF#~^)jSQ|MBjXq_SBZg70COE1_#`kFse#V`a|s&w6JV|~1M?>t z;?n|T@B#d(V}qVujSS-(1kTU~vgO!d;Lkj`$PN4mu=lj<%ym)wyIB+Ti&Q~7G@^N0v!aM!LjlGvd80Q1i&oSe?r|7m)L!H@}j3L-}WDpfY%=7^Wodw}`3 z8wUSz;4eY9>ioX|2MnyER|1={4M-Jq{GWMn7~8Ml|2zZ6`eRmtka22IU4f>Y!K=Z( zz@tXiO}m-EQ@!v;;5lCSIPfwr{420|L|y$iflDQwkDn@`@G##Z1B;%({eg?TDwqv? z0vHZY&^H60^Wr}Ryv~dNKfsrOO*(%|csTx*$`D|#l65-f@rPhx$f!br5WT=hz(M$o z#E9X30lwkYKvO*J?*$3X(E0o7nAgUeNCf5*ls~Er0QUAPgMqn9W&0>F3>jSKMu8E) zT&D&e1%;PJrxLm&fB0-o=MQ-Slna2oJNV150=i3c+H$3I2|(|{u| zVgqLaclE-vfD^p%Y~WE|crNf%FFYT3ju(Cbc-cs=^?wO6xDJg5mjV}g;bp+3UU)h1 z2`{_?nA?O=eibmc0RyiA<~C+v4fw{$?7EB%$lx|$FuV%PZNR{rfcdnMKeMt0m`^MD zQtz*+w-cLZ`;wZ38gZA^eGOonHd; zd3{9pWd1fHbZEHR;lN!n0E7P(-~=!H|G2szIIE^DfaB-h{um@-)TH93p^2gNLP&;& zk`RRu;)O5>Q8JuCk(81=$xxUGMF@is!XOEQ5C%zz*APP9yx%%!ui0z%`Ml@Tcdxbg z*=L`9{@gS7&xcs%fW`~*Gf`Y<5>BN+&I5f~rX8ArW!C0g2TtTQnHZ7oHq)UAamXC6&q!{CBbJ z^E&4Y?<|#lKG=DGEc;x2A(mY(`8=fL0R#oI&!s^8IhK81Jud!Xh5j=U2Iid|N!g5&Z z3ctj*13kWTPkWPU7_Xn~k2LpwztZsK)le;`3M<)COL}IpdeH zos`S4U+NpS&11yK=ggj5OOD0T0eSwA6ilN)I-s}J?_&EPaa(4!Y_aacldx=YN9xO* znS-T6ZCrbAm=4H@{Sb8Ur!?;FKS%gG5KI_x@4lZc-)EpFg+Ac!ty{Qt1EVrf?T>jd_9)W|0Y|Ae{)U~n6Owrx4V=A zsbAh9wZ>z-oVbjL#Gi83cs1@3Gh{`S$QFD#=;KSA7GHN6`U2mp@KH-Uy$t7+0D2m$<;hzs7YYzD+0Y8BM$m?#Ks^ zwf%!|4-@a(iTPh<3JxWq+PD;tJkximKW=rF_dr~3d^Dar(#Hqm3FmkZ!SaFRDN(vh zmULqN=_izBC%i;LZzhR6{*ztu10IU?b-<20bC{Y*Rf12(tz7;ExCbMWF4^cJET0!o zjtbhl(^=z{F$J;a)yPUZh{*d+!0dmjIn!%QZXRH*0wa#*Pk zZpI4-+{eXl#B$UuaNdCBs2b#aAdf!eD4OqlKbBo6C)`->%fF>S_OTR*yYe%2a+r;F z6)wkem=$Kz4)tuw<(B+p5|KX!%Px}>lhl72%VD@Cljd)+1zSwM#*f4@XHJyspH#S+ z0+}S*fp@UXiM?Ed7nvcIi^;9Qkk2%6xqRPYEcwp``7boaW7a^z(#8T_58!Wt3TsVV z^1nBh{8l+8?fLvCSu)YK{BzcY{3ls5(f0ha`6c`(Su)X%{Bz_<{2e%^Ku$Cz6bz*x z8B%-!E;SV{!WEbEpJd5I5~>=7yYNusdvIB# zOUvk9?3en6Ic>RwGeU*U(n+^dJ8ozgraoK_#n?nr^7sLOX?5CvOyZ3fn`M0wYYhFNiHg( zg7omXBA#xtf>y49+pr9oR`?LhK0evS+jh$&yI_R#FwBr9-#a54P?aO#7MY}P$=b!ee)dzT#*(D$0amJtE`;AxQyp#Pd{Sw<<_;pU_ zUnC2EX4^57bf6@gj>v4bNO~+M4jG|8v2?h^?XuJNX!?L+F0M2WEWXClL486}xF;`c zu#V_CdvgCPJ=B72i!;dI23rskYdnvCN(1Vx`KNS1-I{;C>?9ksoraRK`i6XCMl^2N zp91*`opi}W2V(hJ9QDCizAi^yg5|4s)cvr0HIG`}NH^G6-jyZa3Z!xQ6XWzo-|=v> zX1m6Rbm9drWs)WH>|rczsCU?z*Q2bnmy4HT>7&le%do6N^S{77jQj7xyf*d6VcBL^ zKaRNeH7+vG#^FUYkS>{s--U~oFv?Ov_R2h5bc&m|c%{Tm{s*|njlTXzIQh~WS3l~K zI&Ghupk@@v3eqJTwZzNtnXbY<&KmE9r332yv7Pt_V!zZke8m>qliyB-nPdZ7k(As7 z9c(Jd2#mnxlX9*N-nM~f-Q;}^wktf()R$AqojY;QLVf-7Z<&cp`!h^^E`lwi+f9Nr zFw0mfyl5&&{>vsV`OAzY|A!#|CliWnz-aIHg zK~`{*u~ZnBRL~|{Mpv1*Yf`E!E&`%GN&=ZSUwQsMQW!ka;b<;If#Q;@&G#AOA) z8cY6mU7L%R1%vkcz4)RBtxa418Ecv%|W&QR{cB@H{ z3NwwR!ZXiEcrcy{C!PaR?yp6 z@=p!&PmfK4R5;UEDontGCg)rqGSQ8=`OV&wu^o}AroObd+g>~@qkc6l$mM;yiA($O zlR*Pdn*?d#S!1cNI>`Uh#3lc0W65v9YYN-JJb8`LxNsA+wJDGa2L=@mHgQ=&iLvBg z803#Oaml~TSn}sK$&Xt`_nQQ%@PM&Y_@GIJmeEHhF8QArOMc5enr`uy*e|?bHf|nM z;een*ACn*}IK)_1P!{B0Y~qrCsj=kG3G(kVappf~B2yq0-VZ8#XyTH;%2@JS@FJth zK9(09jZ1yQ*2a?G+vm&i*D^ZDB*+T-8cT%>e1#z4`#1Qq%O6%H|${E>llDOM`sc?Hx;klr~3nni4 zOO0g(-v;^XOkDDRG?x4}dox0f>t`42K!IPlD>jx22T6s-gqBfX6PFbnYApHZ1o`Kg zxa61N#`Q~uTZ0NSg9>*TOa77||0NTb6})0B`QHWkKkV(-&vtP~6I9r`d($m$js3zM zjj^ntdywDL#HIaxjU|6bcedXS>4_#mDx7RA6~<$mf3=BAeuc5*--~N+&bdDGXGL5z z#rwgS0{K$mbm8SUE-|leYw<|)CxDN!eoL#o8qV}coz~Ar&2jSWtrSRnZ)c6~gQb0S z+=~LcMf+pFa5*-XEjkq!PtCcMOmsS4V|*r-?~F|sK4OR~jnBnqeQ|U?1%BZ;?Vd>* z%*&*AEX{jlk`?M5%yC#6Y(ph^PF0KbOKQazn)al_x8U`+YuS}usi={qk0PLW68fI$iFp>C+nwUyw(dUR0kEFH*v{-(O6dSb&&t9iA(-EW65vD^e^+* zpO(?Kay&FH^$pt_ONDAO5+#sa^t0V6Dw%V7Rna?h+8rO+dH@2mp>`sot+QG z`{C1_%ka|KIV4Lax;Unwqx`)uS@=X9o=Jt|#K8*g#?32zd@g>8xIEgC4!n&AnD`33 z$oM_H*tiz2=EU=FS3hoW1@#&9-j@+jZ;fTh)vd9Nka{~TBc#s9 zh5m*nj@nTmL#7EkVHq-YCoChP&S4n=br(F+yccN3T>raM;1{0h z7|Sd_wn>GS(eWlOhtUbfl7DHCf4PZE{y5|0_5bZbg;^#+D%@o(E2s|gpEq&If6-X- zKMV4|FmdKTf1xl1QsI9=h0Okbd?dfQvE+Bgen?wJg(fcfU5zEb)aT3jr)AXNBuIsU z#!}&2Um?jq-^3;VLSxCF9OO?mamkz`C5M#+7?()<1vkT5J2~y!K zW2rE~RY*J0GP=>kC4aK9pIG#&`1r*2%M&o=FzYOP$ufQvfuf)C2 z^luTY!UJ%gYwz7YtiS3Ezk)wW7)(OeB@`aax!qJa7MJ0Si;u_4sV@hQbg&99!8!sf z@BlL+o3N}eUHC}g!OTCYpauVP4XQJJc_Bgrr4+~t_H@?x-dI+k-UrJZQ1`;Ji`4sL z*+uFDV+v%5wcub}ZCrxoM@Tf@4;L{4>Lajyv-FWzhFs%=a4FUi8|$p`csvENPqg4_ zEW1Emfft*vdAJ@QPkcKPWJDfy*8In@>@xLYEW1qojM#}&e;hqWfnRuPb)dYZ&%Yt= zAuL;*>{DLpoY9AO=MX=UO7hC*J}i^66_%G?FPQe^xc>}KnU`~`$V6XY|C2Gi{{4!A zC1?3b*y<2&p{USN8e|(!c1~O1t>9RGoJEi8CC(au3Cj<-%yRWRm88~q4lgI3Eb<}1 zE)ko6R$Mh7t0UOq)RsHjZ4^ISz_77gD4p63dDV} z{5(y%WTQjz0^?FFBc}2G*zD72Aofdr!`1uohIvLzc46{>1IsSRm-S1*CJJN=WFN{t z?Y%#58es(VV<5L-8M1LqW658EWeer+5R%`zcP7~)og>F!*&y{aEF-3V7t4rOC)-bh zI~~9?8B^g@EJI%ER&W>A-|&$Yeuia)j&$*kOj5grN0$(Ai%h}`N;q>ql5-`Q=pxKd zIVIyyA#ZA=pj--)g=YaJO^0+W_6v7N2QlkuaJU1=6E*;q&OY6d&grSm3Pj$FOuz{RAFlK1T8so=-gM>eo4I{x^8RzhmFP zS_))~G~s(JTcBQ#%bet<^}pCJJiw4$!U#=gjWS99#vp$J`h8M*Y zjBJ(`9Ca`sf@Fm{OAqMFGa!cSa4N{8`^BtK_VJE~HSJIV_Dg+32V==U7*{=+i*h8% ziESc|r667SAQT15aMD8(o^{sv5?naa@AI{|58jFd*~i=U<1wCTFCVWqBe*k`-<;C+ zy7c4t8%zT_$&MjGepE^mhTtvE_Aj@u!4pjUdi*2xx1~aIF~aggRa*Z^yqb737ykmw zk6dZ|n|_@CW|1m+x&W^rUtjjj~9`j zM+4HK_+Sd;H@&pM!|<0Rv~md-V);EVjbDo8_rTO+vHVV$x*We^>OY9>9C#R4`usRr zNWo%X5G}$>ji1CjG6%A(L3;cJmLD0@6@G=~2glTF@FL^ya640f`ybXh#ZU z7N<)#D!}@yWwOG4&Kf@g>#vYW{1Ru4kHIpj)noApyd?#af1h&_=lU1Tqd@kdR+x`v zPN*NjQ?NeY|HxV6pJ189>eYBY)>H2m{ZngvD=c$BmgM@s4FxjE(k06mnWXzry#tn6 zuWpOwuu`|jGH28su^g7_U9cPl>RquM)-0@_5!j6a*~jUUjf$}BGxeU>o_hDjeyMNR z$5_sE$KvH?4jhkH(jG6Ul3h@ai_eks4(peF@&E;`l7iGLaYy67@KPGk6II~={;0Gh z=lYO|y5dFTSGW}%kLQ~DSL5l%^YL(LPqtq=@ID3l6L#Xw&gmMmQG=_X&T{9WKVc{N z#m*Y)dey)Tvxmi4o6%SC}~ak_9%h-HY>eX;%^o~-aZXN{L(*+TWjSVlm7 zDV7mZUyj+OZv9cqXdDH8sc*Q-SoZ0ixa7^8OW{(AHyO{t^2>bb!eNHXjpt!Ihvs9y zepc{D33oL#xSV3SeqV4XHg9P8)}I2D%kv{igVJdF2z`gMV)4;*F()cjE+PFW?f5)$I5H9}MZ_t#Z*#9=+)}X>n zTxuG)6PK;gSFn_M^1KgT|E}-Aez<(4_d$c0f3~0`Na%;F zO@#sYLbJll@G!ii>%cvDy~)2H7r*CMI3G_ZKi}nl5L2+E)+emO6(s11rrFUEzwYSc zdCsIIyKF)bzbWt(TxROu8aSRwLAgn|6W1BvgEtu8k2e|5$HPAI9b6driNH_cGM~@u ze+m}(g6Ji@)OZ=LF@6)vBuW=v3kLom@JG0h$^Q&bXf&_?>nNDnSitwu;Y#Bl@Nzxw z8T9;Pn3Su02ijx(*-x2-{hZSdW}_pp9MQ)z`3SPm<79+tyOy)~A@FkM zzjdnZ72~1C-EmnGOs+pIqn;G_g*OV}%1UjZS##w;=10P}8;yql0 z1w(kPNQ1qddz%fAtL0E^C+W$7hvSh<;$-_}TAWG2(ob?UCktNJFSu)Z0SbiWkU3lA$I5q{p1_{68`6m81 z9{ss*K)%&PexX+zY!P^?z}w(TlfONVCw<`?Xh%VfamT=&0~g{=Ccj(YVqEm4Z-1Y_ zy#_P?hM9x|NU-jM$C&t`c#826c)sybc#ZL3+`P_r;Do@Z3}*h>gwsgKnF?p&a^rJx z!B@V)vcQ)F9)o+C{44Qv<7;9Hiof;^ULSZ;;G6LPlRq6-8Q+dezVYqN4m>Atd>;iP zOoa#WEaL@ujq&4wpAP&iUT^YW#06`7hhA;!n6G|on(#I*H5FFk=HL1TKE&gUKgE;G ziRN=W*SHQ>8-IiKx2d_O&PLntgi#98B^$ND>#<%g4|LY}!B~!SbqS8n_wI+~N3Jz~ z1RiaCBp#=h>;E7M(yNhFX&D`h{Zij>Jho@T0}kWfpA%1hHa+v*faS!pj!JSd`T)y$ zVF0H(ajqZN77o)ME`9-)5s}v!$(JB3q(F{iP1uBG2$L5goH`FIang_E%U?znW|ZJc&EPFHy5ky?;?Q{ZU>o5s6w zF|u2Hg4tzq?YIQnNqR-#EAe!h#H?TX7+pibGBc~M$MUn^>B4Xao*H;M-e~e~$0cih z{n=Q4I$YbEa)l9?>~~ z_s3P|^ZY-V6cn6AK_LyOr%HlZ!HmGSl88P)h+zWSf`IkFud>kH3Tu*HG<5&tb;QFsv zr*Km$yKI9y49kad+%qXhQb|rk$DYWWSaG@YgcEuFBeQalD|nIw*=I%0PnZ?TVYMRY z(0e8>@A;?=I`pxLOZ{K*D6@gT4`Kc{-V7GX)X+T!cfbABK9?ahjsjp|Y`%dD0 zy|^D6keum;@(;I22X@A`{m!vTkQEeSyMnGJE)Dd<`QPVUlYDng;G^(J6CWIS2wqMH zlT$ZyD!zt-nN%pHNqGkJwsX1${>&Qq16*ZRunI3W{v59|{yOk?O&v!+P_RUYkS^?a z0$cb)E*c|~hz?!utQ{I3_-fpne2rg+NB-!2Bc5bD#kq*e`^Ys{p1_i0k`?tyC86T0(t!C>YhS$4#1F-r&3i^m#U|b#7nLRJlj~15 z8c2aXERM#0;nV8a9u*HB%O@siFpnfT%znVKLZ(dOy*Mmo1$tQaAI8gXCgot_aw3|F zyQIQ3u;vuLjm3Q1O4n2A0Qto(|9ouo7X}`p z8z|c^$MwY&*nKo6@L0US?89w&q0IdK|0xP)nuKaxZTvj8bL2(rm->d6 zv7IB!<>EsJM#<{f#q&?#kqld0=q^spxYkVnnd|>Dm#~3-M2{LL%|5)hLOP(6=u#|O zz*G8Ul0Au~!(E)0nGVS=tqVH*jfu;teywykHV>J;Hwn@}i<6oT;Z}jS!5hsGZ;y-W zb96_ROwva`mQ;X{aLUHre!8vg|!N<2ALN7*>)baGmt2{|l7rtX4e(xpp_Xm@O9aX0K2 zzUKqmNnCmwr)EYZ8DXv!6S2&()l|yzqr=fF6v#fGK$qo2an$L2mpDV#oCLYJOvN(9 zJ36nx(xLQX(;{kn2ImQ!UW{5q-A#w&s5uJTT{_rWuKz7x;;u`Xq%yggMC^|KD+G*xc;A8MA z)BX@#Cr;K+1H&lTU=mKlt^On-Su)XCIA?sWb18A@z~UhOY~UrhhpGQEF2U*gY2bAV zMw*1TooBig95TFVyfkosTw&@D!n2Hz!>f!>#GC%ix%Jb5Q`3TUgYk&K|Hiq$a>*^0 zZ1GdhX@yMmT;Lb*AoBHfM5ohIYyPf@&FlZ&C>TuzP1plh{_WizFE#GvTtx-x(2O8{ zN8s7G&eWfS3*yaw1yvM`G=9jr+N~gWdeiuBfs61YQ-3d9Yupoe{Kv0ve;i9eiQE#g z1=T^q3xSv7L8gJ%aPj|qgKy#C#_u{8x(yg|M$`DPGnjw2!l@)w(7<9>;Uj0rl8HVG z`~|KeKVA651YU2v4)<#C@t>TF+y-AdB5s;6c0^N;$0JMwG42s{j?#tuMLgX2Cg&m& zWJIGgo5ouN&WkCSKm$5NCC<8n!vhb%^UVs64m=pwnD_~J0jFB&kerGuaDKLP`t9zN z#P3s3YZCs!8#A5L^-Gnr(hAz4EdsX+ye;m<3N$|-FV(9hXU@y_zp`K@_mhMRh_YZs^mg72IveCg<4r6r*-i(i- zKqln{&Kkc6%VC&oznrTsp+Jt)bZHTd!7{70!dNV`T0I`i98h14WtXTc@GRV(0_ngb z&KiFdKYkIf|FbUPle8d>Q@R>INdp-d-{PFq+Q3#=c8Pi$yd3MC=6;S>v;@%mMY?csSnI<<~fC{B3+I@vU9_cX4bQ_>%&e z6k1_3UVsm96}q0ATH||QnWXByu-v4kOAFqd$e9nPlek4R3){QwyRh5;QiU%JpupZ{ z=N-c*7`Q3zLsVWFRr1tJZljZ{8{Wth5bog`eZUAFvk@Qc^6#ZRUF0_X1w4RBo-Vu) zIhXa@g4akWHwkayp{;y{ckv|S+Q6R#UX53q5&06=8Gn5)+i!>DTN3=jmquVaB8Tyy zQ94}0tdtRX@oZj>(IFj?A5DGP;w?t;;+6Oy8kPHjvCio_ct2?z6o{9aEu4T?8Q+9A z8{gtw=vMH05Pv)H3Y^=#oh=(x(a$FC?H75TwyvF#fCg%EoZj*vcbUrTHu57tpkN)dvU!rwBHG&}43bGk z{CryhUmW;ST%`>XAB#7#LcIaG4|iK}L@9?l9nCfR(Q z4jyMb7cV#U=LLSa(aHHQ6D_2m`SyN=PvG@5*wU@wb6kt{9xv}gW#XPhOmrm$!zs`T*95*k@C|sJ$-f!TG@gz(n2XbGcpD~Vy70@MxOB96 z{(mP0gG@ptUSrPHbFlrS^L<#(1KQv`Eaw6Bd@P5Z`VlNgS-P}{9>pt0bNx@A>oG4s zNeVQ98xZ^r4Ya0)92Hw!oLU>)3d>=p-Uc^kA8+IGdpm3VAS{QSx-Tw_&7?R_3QR&7 zmcvpjT#V(gQeTSYC{SOHS@BTx26!a!buJ7+0&BJ5P{ZpKOJBDY$tRU$S zZ$f>7KQzjTW(q?j`Frw5C+R?Pm=SNwAD!fKJHXXneP$-PI!dP`zaTz`cd;^w(h5A! z$8r?3AweEK?{qG&jt2Vpa4d&aCl|jP%VD*@b2qbvasx65%VF7z9?Pls7H86>Mik!` z6#NG-Fvsy-xT?UP7v|y`<9UG}4!jWCU9brIh424;k^;L6o;C@x1*`Eov%;?eufc`w zeFwh}ydL*5@p?R{(Omz2r(jZJ0iW9q99_~h-VC=H<3Gc33NAE$64#mbsslfd^LBC_ zmh1mgTYz81MVf$XZ~?QtO|r-M95Ajh@jvif4H)l!$RX^p58_JnS+* z>AuC)UHuAvkOoYA$1&`}A|Kx=@GgOO#l4C;yY!w zg0emQ3SYsCi6`fF;y>XkGvo!Ab9puHhZmUo1DunK8EaS=#Gk;it?(2Dn`v-+*P%Kr zC!TcSR~m5cqdHQGoFWg?B!SRFkWfmAL4a;`}n7UzqFR?|JM{0 zcJ~#&!zGvd`}Xaxll{vvEXRcfo7oEBu#OZonH%yu(#It|v~uY(K|21#L{iB{*kXiF+8o zfrlFZf;X65(5alil$!Veyu|o2JSH*6zjWXp3QA4Fo4C$+BVKO2%hmkZ&Uhf6X?!`Z zGMp?AHU2mrhIvSyY`|yE8vg>zBvyZg zWs<7bV42kJ`kRfuqdD?i;cI#GO0D5kDtEWJpXS;fgBc^uoITU zM%@X^VWrMtIqcM3upE}^-LXtMbvG@vbKqYC|BeTn{J(J_9n!1mZr5?#AJ)0CLwn!?zl-_(KMHE7a4;z{2P$y2 z8KOsUp05ynglCy}=6WWbaWS4`d=lQ=&v#&W6LbALvq=GWE4X*5uW+824(RjynfOqg zaUFgMFYoX3m*K-q{J*%!Y`{(vxJ@76^5y!si!0!-X~`@-$0iWJAn-+asWw3TGThIs z@E*M8NZ+CRajEIR3Y<4EjWhrGz@RG_&KAjGveiVNAn|PjZ;uOH0}^kC`&_ka@>Xlv zg{R>v;|K6ilm7@FnVR*}z#>;r<2vwPpOC~i2L1z&F%53Uqs)1r>ka(H<0wA@#kkmb zALrrn{9U&A;viv6;IX*GG*FHQ4Du_u7Edz1!MWOPP)!hjM=jegBe0T!O4GoHc$4v` zxa4TR!Y`e5#M4<^MGtRLZgECg@H%o0#pBT zyxDj>o@I8?JUnhZ*MB_~uB2d+N%$KN9_%|5O-en^4e1fi$pEqeM+H6xk23X#;7P{A z@ci*y|Fr|xQ&3|PCOHqvq$BWF5PvuD`*^jf|1mDSsB=`_BCX%{rYL%k4Wv2#pN$U1 zbp=@zx0%=3N|-x+T(?t=4&_zo1|0^_|VGyi&-f}SLdG2Y)rDM^ai3Fsd-=G`JC52@@F5+b{p7GH#YLz33P<9(mvxTnnx!M~ z03K%IkKjqhi|}IOr|<`+{W`p%G0ye>TM9Nd7VvpMXMNb*b!yXiap3MaH{5r)7cMtG z0534^i>Hj_o>E3suK(9ku>LgPzzw+Ibnly;*E2$Lv04$tKM4F0?qlkIhHH%LaPu?L z_L={TfGenVD=50fCrEs+z&&uGYe3@r;%egq@ham(oa zxG$b*>i5H4xg*j^elZ@#9B|iP`R$){Qn2~S2wWNXn!wlM8fhR|GSLlqojHsj$L(1m z2My!PAG7gyCcee=DEb4(n$VMiim{!em2LrG&h?%acxK=`@KBRqi9a!i z;T!m4x&E`hq=&yyu*&qX)2+PTFY_zh6)!OEia#S?H{f{u1?Jk6w0AXLYucNSzcu~< zM;FC@1*<5K>vg(hqR#_=9r#;3$mIWkrx^biPdDC(tBn7|D`QjeKPedPJJ4(f$FX^R zzYQLFv5#+$e_@MsQXPypnD}A%d$YwC;&G<^OL6?8Nw}MW^|+-Q!Wz89RCq_?#_!_^ zm-r5Sj5nJ0vbROiZ^nD!-;Iae#{6${sc+yk5`HiVlki3ppNi#Lpu1=Wwj*?V5T70R zZd_yP-*+3w|6gW>?~w2})=9Jp=bPiU%giWhYYwYp@Wv~Ahlb!BN0D}L7#?7J8g5Sg zHYCVlIVq+<4m+(dHSmnUx8qqRe>NU5&exxVp#ClLV-NB(hC2>@{~)RnUy}}Qa8u)luW$^mZxayt*|^bQ*VRiv75RLmWNWw{f``2 zJ5V4`xiq0ImZx0m_E?^3sXJnM=%n5S%R?shu2>%Js&~WkXjff?c^2%}PY3p-ppt|G z$dDmA(OD~;jPuN2M26!J$(JT2|3+ucpN#(?zMYFd<*e~)oF}jUwcvRQ*`yuyn0pN zisjX^dM4&Jy3u#wRmQWi+;(gJ-S{)(crFEU+pG!qW4TRMKY-;nTKy1~7ZU0Pc%AWM zSZ+Es{sfj=I`van?m3;~sG0(~>C}YhvE0?FU&L}#seT#DO{IDnmYYiT8(3c1sNceJ zi>H1E|J`W5|8FG)m1ZA(faM-dD}03I9#H)WmU}?;YAi3c)L&w`e^7so<%UK5EtdO< zWRcH5t)oD0C^X?mEH4(-KV!MxtLw2`-_;wjJbqXIf#vbL`Y&AOB;POi57veGU*8Z_ zG6Lq~^_%dM%s!Riy;MK-g;G#+X4(KZ9F`W8j z1)l}+y1?JyL8ksXJnkm*{QoBkDk;zr_yx<5r3=6RgY7=vg#A+A@VC@AbLf(b`3595 zpa)4ZXZ~mMWtVlhCs|+I__y7?<}~d<&%pcQ1*U@s;w8q1;5y?{=ibr*M(Bi{K1s$h!j?yI)?cuDGY;q8v z7I+3OG4=1jWm7vhwpWR#8{c~`$Da&&y72pbB*>7dAH=1&0|hdK?>TF{7RxSDe~e`W z)t}-DKs-X+g9o@RPX8SBR={#E9vA{nyUv5b(8|SVmO64i7i4 z8-Bzc8{=I6f2P3h<9h6u`i70z?&CKv;(NasvBFGxW-GjyZ_Z$gmr+U1boXJ|=cUfS zVOe2v9^oC3`;X>}$>~szcqXRc53@p8-QxCvJ7U}6U9eyH8ZT@+yqk$j`-kBg zH=@jcK3-=E!~^jvGvvqO!MFN-I24aCJ~{B|fzQOFP5wD}U24|P3NN5wlSvpI`0~Kx zaNZ2xp{sF)@pX8*@r{9}G+NeA2c}Ul*HoB^3vTl(xDyu{-xK)$zz^WwCjSw<*mx0M zCQjB*2cDv!xN%lyqiVdj@$=a3^B1vS`1U(&_xY8hGfDj#**y6i(ItGNGVNuZm$~}M z`ejmlMM2V|q}5EcHt_ej&TPTYcoPj4NrN=I7gwQCGyRD5#1oA7$GL0#iS9~VbPccn zTe$|Fr=S-J`Og2~0a#a1GLK1w2f6t5xNw$V;UqlCcxvDofp5plW|`~%YzlhM^9|0y zwdVZ+Z%GB?-|&xgsH5x9E)Os%P5ek)fIGSPWw^JA-;D>v6leo)P%zRY)Z^lcU8DV6 z105eEj`fD5Kb9Xb*x$u3#T`xjZajwgUM~IyuCndpc(EzyFrQaG5Bd?v1>P-i5iT+L zd*RY2eEptyjOoy6c!Key`ON>Brr=2unqTX;@C&@r#J7BiU0~b`uQ5IYFE*ZxYmJ}6 zRmOD>G5?Df`yPKwg7pu9f5N3E|ChkO;o&C!SKxo}7!%LN4>v7nfft#Ct#Cdg!ZDT{ zX8YpJPx}rZh--4Emr_t=8W=i{l6~- zwOW9C<2A+yVL7g~fxcMI3+hAhNaIpG#<)M8U_21dbY}i%qoXO1!$KPzjO8#=55dcf zPsDOqY5Zio#&|g1XnY2i!&>vt!pWpguYcL-Y$;&UY)^*l!|Bdi;WoTGacM&0FFI@d zWh}E=y$s8wRlk8p;kFb={a>8j^_N$-6kJ2XHZCEzAhkBo1=(X- z65Gr1<(D`86ij!`m+P-weg{!d&S6#4Om+xAzu=rUnu+EGo{wjl!*C(4G#z{zFER1w z@fzc$xb!*m`u{ZwhEkv_d<&Nuzl+Bh*WwArpWvb;zWx`u)c6~0JGeHDC-)z$GZXz7 zRQMT}n+ARj{5xJ?;(y~QFZvEd3mF097J;`)Y_9*?P_W5V*d72lrzzgwQlm7(XZ2S!F^SW)-GNFH3_p-meFK zJMaoT*W`bI`&_?kRKk$TasCg^f6KR*eUuk6##=nf{IdnEf`n~xxv7vJxE)??;vEC; zf}^*62MX~b<8CnpwWeV2!2b%oAI@9u8$1ZFF)qOc@A&xPfd>YTkEUR#sc<|VvBEcS z60S5J9{9|_Bk^*Re;(d!d=VbBva$U*x~yqIG%oN}xZGEWD)1uXiFoGwjSWVV15XP) z18-`~k9jcIq#zT`#)TjF2ImC65BDt}^`YJsdDSK^JP!o7j3u$<}A zB^y16%W>nAQfH0V;yX=(YxUg}qB zezWL#9ylb|4!NP>so0*}0m%mSqLR2;?ucsm{Qvq)TJYF7{>Vg+nv)<;EH+^2aSP{t zuH>$WAue+H2aM;NF=(*ZHTb>hklazVT-3C~TVlV|H?+c)m5sOA&7y5hf;3Q!i&l5$ z`(4xP|E11pBYe$P;PH5Z$$!;Z^J@aXjq746Xu?VLZ9CKlT{aIA^Th?Zg7 zflD5j*Z-zRV@RlDg?rMfZ1FvKiHYAI_yOGU3qK-{1b!3`Gw~;JRh`eTew_JVX9`{* z!TOcJui@w`-@seA#Q0r2)3`S9CxKVT6f83pzQSva*Wv}=_!a&bcthY{@k*1w3D+6_ zgL|y;?Zw$AxO$m_EdsX+ye%GM^7HYMZ+(O9@fzcu19xfaINF_pO{T)0xYb(UU=KXZ zc;CPW20j?e97>mLRD$g{D)hsxCTN`3|3^?T$ozreNL<*Mz|ZsHuExjWZpO#sJ&jMm zdm9hKJ&aGq`>5sh|LGL`OAGLsxR>!ryr1#8cz@&bac|=b@d3u8@qxydVLgnQ|1F~{ zDDX>t!!Qs zP*6pIY>_tb9hNOt@4>Y|c7ZlnhGh#iel6Dm*+TU;<$MVR=Gv3Ae=L?=q`no)F3igH zPde}c1u}%%K-;VNN`59?4;qlGRk;}YEk(gNK=T(Nm0&i4Vc^C-eMY zS9lEt)h6K~+)=|+|HHTUBhLH7y#C)n!6vhX9iHYf z+uxm|HO#s!yX0~_^e^AQcwBDs=iw>1(5-MKUS#5b<6&4@kX^p}Gf}iOHVMa3kT=Ee zf^uA7{2-PNr3*hi7x?kOi}7%i|12J0+FOI;ynlRy-&0Uz67s7#u^1nM+x*Yxm*NtR znsmuV{qbNX-QE<)7GC14@iADA8ui#}jz5{@S}>jjndR!MvCMLH1(sQ^z8=dgSKom1 zm_zEDuuM|*6fBceJ*}GKPiCnW%pgH#srq(2%Xk)M);7lP!ZK+!{~lapd@q)xM&ngj z4mmPw{wgk_ScpTsiB)KBB3#?N9o3N*e1%OqFFFHsVVM)^8Z2`{{Wg|KrCx#c;v(0U_po31iAHR$Epha*Nsv?PMrLxC0(w;yGNKJc^d>%0#>2yo`zCd?!$j$ zztlIJBMq3>dROw&OgdDOO|O=#u#D)&OzNkuY3lQQd+GcCZlJ(+;O4-$;O5Q!5Z{K| zOm&y*h;L5A)h7N5t}%WC=e6+lm*cCLw8`^tIaB>kK_vxxG0Hv1i3snK>|uVO5HC0J zF*u?Fntu}Rt}%Wt@JoST!JAF~8+hYZzP;sm zwCV64xB|z!C9BUyyFSmE%_JO+t6TX7jt_iN;8VoZZ|&Nfh&Pz}lLJr1tEO`O*H^dI z6bxgC(NCjYUfj-w|i=zfcT+wJGL6z61@Fm>`?;5fzw&i}%dSnumk z#~ZPpif_Wp@_h$y34B`9Hhve7}fIYX}Qi}P^@3S^g^=dAHEEW22JG46%AR><~equH)N6Yj>v$M_0!aqU3w z`|)8kkR12aU*W9v-@`J8)U|jd-kJhgUxTx|{$``>OHp(&3A?+5y_~gy9(aN2z`yYA z0Fvs^3Oj%8M>XW`~dI=x)K>a6kCu}n(! zn^-2TdO03s{4TD-u_nAv!IZ?1Q!}#fP2NJ;6D_U8o!K(8n4Gy9sLUG1OFcQPyE|Ve-qo~<$Z#3~y z65mBTkclqDkJ6z|v?s^;EIc9S<97$X@8!5@!aNe@n+gx(C7pc(kKs+mi}6S^0?*(H z#?RrI#xG#$V7g>^{zJjrrr=db`ag!mulv^%3oP0!sqh^(u_S#TMj*^j= z@n&_rlk-nl)|Z^BiN}X=7|0gv>=Krn70NF89yl{o+1;gzN%P!PBS&fj%cvSrCc zIXtq9_ilKCcO30O!Qeul&>fc<_X>PK;68Xg9Za^E4xWpp!|9TZ&d2M_2HftP#(Dlf zivnptE8K2bnzc(q^WD-{3 z^>^+nUwD=b`EIZB+KvwXH=FtrJZSe_U7s@16?nMuRW3hG$VS)TA7^QPHo6u|`?4_q zv(W?!>=xgM{ZijB8QU$MYT~km4`bVb#{xfrCz%dD(B_+saD{WNhY1!ZipZsFay{1|O8%lo>xKVXaX#pGMgNq_0UJ6Lv+dL@=!p#A{Q z$5{%b!~aX|)=xp^b#5?BLb0b%zzJ+Vx6laZ}hS!)|v=R78^4q!mo1HcP7W~$1 zuK!!QglCfi-{U1%_PJJg39rYR|AVu}f5I{+)EjWJi;{wD^ef&x+{b^Hc+8ORPJ#?c z=Qk+8+CU-hi}kPJ$2x2Lczhmlra)5vYG;jCVA-YW>#ef(HIFap}NrHBC352>YeJ zVNYx~VDB28e`HAmCkG7-4;nZlXy7apm-hjuh^sbA8xejN2P3DSWhf(DK>acN*o(*~lkCNA~I2lcNuaj8GQN&UEG^oU82 z1|AI>c-+LLfz?eKXc>KJ;!^+Xp#HZeF7?~IWkxXOFx!CwztlIh#dZkWo47PkY8#+_ ze-oDu3=HZYZQ@dYoT<5~P7^f(EWNacN+IX+Y{fX5v!+iJ<;dCNA~se0@3o zcr%$vkOtNU4Sa9n(m?*(W(cX@4*R9PVJB=yu#<^P{Q-^jljFZ-bd*Vu4jdCSaGZ%t z1LfErrq>3ZfbC&>qp2_LPsT|H)ALWW=*BMm7#PQWDVrg$ey5rWvcl@1!RJj}8hlY3 zOopLZ^sB7ST3d$Ncsb%ya_6w(4Y`3u8 z`m{qMNRnN)(B#V&ufk=G4YZ6tGjZ8vU*Jl){-;Z`=qr;T4YYcvX#?A0zi_I>wnICb zxYRER>i08o>A(>OW%QQvcC+xc=J)9ybZn z!0MoZFHKw;_!`^#-R)f-%>Vj^8-fOIG6~Ya;-GU~0TTi)@#rbD<3_6y&5fb9tGX5!L;!FY)|_n*+{QhYv(!tZQT|xEl zX@iCILeBkXntWN|6kKOkcx&L9c%#IV_4DfOP6|f#)N4T|x(Bz~*ZY2KJNN+hOMSyb z*miKx4Lsdu1;y@lzygym9sJm}m#&{%s83CTZ1LwogLOE6&st8sic=ea!3lHRp{?C#&Te|CISB-^HRsw)hLS_!%>#U-B1_Cv(xVW@&>1>$vNk+&LQII&>|Tw_524 zb^VH0w^KVuOWg`Cz`gtXA@A@t9lqIjc(-qu|MF3(9AhRuyx<##j1IJN4XnhAp3Noi zf|dA;HR;Foid}rWZ+S?yq;pi_M&z%xYyclNTjV-e@*R_uN!!ZBufg(NGKH@G)88@w zN7OS1T!r7im&azg&w~i=T|w zFQEernbaTtH~H^(jz+rpZCKvkKg)IS9V~Cp*EtvGZ6;wQzfkN}a153Yp_IA??!xk6 zvE|Nt{KI*G5gCkSlAeKA{wEhLa`Er5e3gri(2@V+wtI&6BUnDfIz3%q9DPcGyx&h} zZJ!2qiD_U0TP1I=D{(96mf=X?S#ge*BK9b4bACp~F)Sh?2u#1y9AziMrc z3M?P3E_1W^SzLQZF6!+%RJ>~@s=zv8vvJipjxsmLN_ep=A9^k2 zq?>HPtrXQCY_$HopQ!ZNU8a%6zeP%}Bek@_Rjgv?<$f6q)b zns_VM-f_j5sAOUeas0Po1cp(-ETbUx`FJF=oDocB`9i!2r*VGw8;>&aU$A^oX#@!} zqL=K&X9)R&!yuXzFU0bp({$4DX^6e~Fx#rmd=Z69IDrCrqY)dDRG5b4Z8o}vWB1{m zOw;_uXd#xr1(&!L?%0bsXVT%$r(=1OX_@oO*v^^G`!a%@Ib+>t<0)A6eJ<+bDlEeC zk;_faYp^|$blQ(CUYAS$+%8+V{y=uYO0ITp(oH#-kMzqQon$*Aet-bWC#`h^#`ooi zub<)ipL1LMB?a>7w$W~dC5LbaQ=LmbelIKd0Z(~0*Lc|dr-V;Qnv2!($1ux_{4SV; zSN_KRf@}Y_A-qY|?6TMKYWbQC-N&0Ks51%Yoq#vwq6*icuTN}xR2+6v)1zVy&i^Bq zY_W9s#bKN$Onb+j%wfDf7p-v}YJEy3S{E0lf4h|mXHXz-BwFSY&N(BK{NV6t=U1`( z(WuNFM)8QI9r_B}!?fR-?81n{)YTu0i?-+-ae7E6C5}gJ!2Lc-HkU9@8KHg`fnO+!IxIJ`U~&|Jl(n5NX`Q-{l(@nyb<@(_}RSwuQZQY>$d3Z zvpFob@*S9p<;Ui8uEI}vB||F5v0Qv+pTnU`2dB9B1*0;_Z@n#IpUQ}4&SS*(=6-+* z;&a5br<45A^I|4ldw;q7odo$U_+hTWzUMOsaFO#QEI&#;!uba*zvVv5x%UNZ0IqYs z0Lzb1>tXpdmS0xy;o>{Q>>T;2^hvH@EtVe||9@#$0&Q1So|D{t0tAwGUWS+CC4o#% ziCp%0_Bj<0)F%`p0->-(Y20U$6kfmtsN!&{ZEaUe7h)^BwUi~cwp|?@+OCck!=Wt?EtakMY^PL+Yg~d!J9c z7B{O7LkX)1{3<@X_YGB_izWYoFWd`-YJyk16R*qr9}HN{@DK6XUCFF{fq6G<_phK9 z?DY)GpWw5*diAbqz#rkWyEpXG<9ZV)-h)#FQ(W))T5P%NHUB^SMt58OQ0E3e4KismuCh$fP|(bN{-KU6VjaYhQCun`b-==z zB|G2l{&e@416LpDs+4mb7|jxzD-%Qs6G;$6Do)dkn_PAI3n8Wh#Kj2K;nnhojooV%FT*1ikA332GrnVP8+F4_7{&r_-aJx=jL)M=g2N8{v zELBmIWQ-laARn&{6NuAy8tJurmc zhL3c17b>PwhDu76ICY4t%^Yt_gqz@)q|F! zZEw}Lz%G5d^Xig#M=LQ8?Wf*J*0ysMZVFpAvTNiGSEh%OtMXa?j^qY4dr(pN_B`Hi z^T#^dr(k@7D2@}JMuABrKQ(#lbzN#NCuF02&tshxMI!-BY2W&YWt=BbZo(w&3a6E&wA)Ex;7eoua{O=XhwO!qcQ)w88NnnwUHN^_RW5G#Y}&Ej0pC}S{!u;n4|D*F~fHrsbT)>%2b zc$8AU_2Pz4rX(vp;+)c@CRM3UGUq!K)hsh2g2kl?<0heT*u^wAlhgf3u^@@EAPKTq zhEiGoWbzt&(^+Jj-SWL;+l${lT` zbSAQ-+|x?xtmAl0g}vj6&eRA+4d*Q;i33<4lZ7D$q|$T3g^M)X zA6V%5+UbM-04@As#M~Y-Y$6VN-zc??AR-s9O>b`{EUonR(n`Z9wx|*>?MZY$flxTBqPeiqeAE#V7`aRofS z807fdCc|QEk;(C;EBh{?RR;D8Pj%i}#5|0d;385<7Ezwfj|*E_sD1#~PTKcC3rNpw zQhwEUK?`UbNbLhZ?p*6HK8p6{m1OO@8?L;5wmb0CjZb&3@Tt%ureP4r!ssB3?H@eT z*=SEY+L=5}{-dPl>G*B_4VNAP`z3rLK2K!G( zJ1cwy26>tyBFiODW0AQbcKSgoV#Xo_XQ4_Wo!Wb!>Co4=GDh|^XH#3K?fK7kwq4Ld zM7zkcdPc80w=ECYJD%-q9u)K=`1YK|GVa+)B=2RATJeuF3X}vAp?OFXB><&Rs!X21 zz;Yop!YB4LB(#{BEuQOaME25TY{fjOL{b}`r2)9d!p=exRg>iLnhqkjEJ^>F8*AGWkI=gj3K8$a}Ya%qusBNCQVW+5z?sX6OT}hPsqn zJ7mM_kW?gEhcwQFP8f1OPDKPilW1dPptLi%)q>hc?a>Z7cdF6k;rxBSv&DXS4LNa5 z!y@f1gv=Ispi;^xOM)bpn9@u=unU_7kF%Vo8Kwo8fG08m0GVcKE({#lyfe^BEK60W z)-;cLQ!{S~Yn|FV*N}D74Kpvdhl%o3*(aavOg5W*r+)oYnkyYU#6u&C6e{Bg(*dV& znnsAqV;#-`xvi7{)E0QFT%F&-yO-$n4^G<%_Djpjra`TGbUE4Xn+!HNLO>#=5W>WE z%W-7$;I}TQv6ml5j$gm{fl9aS1;>$fgU{XG$nC56b_gR?G8*z@Fl3Yqk8hguyBoiC zXQ^DtRO3pReZz5NYH%S-PiPwARD9b!SEy67L>`~4#vdHxQ*Mknl2HcOC5oaPbslE_ z`vkIHs|a-hodt>|nlUMQDq9&hbMVT2@d2)6cQIM{@S7HYTRvQ)V#6OU$=tzle;iq! zcf%x#7|ISf+=&oW+do)AHcd&UqBswM5E&W9Jnrd)-FhN<>EZudLGE1YBXSU^L_}Q1 znF>;6Z$1ey+5M}?@`+d@k&U@Dz?*n1>_?zT_RLje!e8`DVt213I|k@4IDRNSw06h( z#aw!mL&UcVd)NFUFMk{yf7dFqWANL{8^48~4H=u!QDd|6$Hl9><%FS&eDg%pq;6{b z7RtBD&smggwR}WpOEV&JtxUyeb zO?KE@SCh+p)X}7&uE48x9>E|y{zPZp>T9|K-@5`M;#_zi#xx)?frvc;c$=d-7%OCn zI%m=$oqfmAN?fAVm6vTLcCnVdYYhZGFtsCVprZrdPOl}?gWtYpE!kQurY*H`k)Mos zVj`t9An%-JNt9sG0LB9j?3*Iv>(#dBTy`sc37M9GYtc?SmwL5LgY^-GcCKZvjUsO1 ziZF;NSKHrOM~?ReW!gl@-+|F7MEr+8wvOywdI^G$NDF~73#z0l3QH-~Vdf#=h}}kt zGU$dD#8;UsGv3Vu4u~;Nqmc1Pn!qX8di%LIFFT>=hDs|H=Kv)_)F1MwXBFz0E|I8! zgeW8<7|J+RS>jv(5;6xc#!=RFVOl?AYNbYiRq0wqx_LNfrtH~2=&aw`#?+p*flL=| zRNb=5T5f$i>Ec-qpCqp!xdQNbo2Yo1GQI$5iScC{Vk<-$UoQwWTjx}kGL`+#MzZPf z{Ts>FWxk2AuR7-{0eVcM-1+gfKjUg@i+@?5i}5?I&1SDluI#cr10oR1EDr$6WP$zp z%|uN}C7IEYK!_8eJ*5X{!x0`K>+PMJ$>lx*hlo-`)5N4H?4Uh$3yIy{qu{6{)E8L? zOL*=kl^`F^H8nyX{=^oteCc^@WXL?`)NUk0d-P;-cL8G~QA~<5Br|!g*nF6-bu5&K zdV8>7r$>(3Eqe@VA|%|Q7Os?!>YYoaa((#r7m>$rp5RFJ1d=BSt14g@Z$C`F;s;74 zIy8pq5Peke%;mS}_7af@VJaEV^DMKMeun(1pRzDPB85I2rf6)8ec%h^UG_IWOV;?X zjR2uVreej@JdfBDy%*RG=Yf%^G9)Pf!?=}(r?oeQ ziSAWbIc!DoFj9d~=x`GPoo6@#=X{=AQfPD&h%9C%4NZWqx0xlg*=%ynJI3X&hVmba z!#>tU@H=dZW3d1SJ(Poe=NHIRzRpq23Kjlq0*PKH`@S!dQ+;Gw0yP0NjL-m0F~*uZ z$OnBHA;%9Rnj`i~D3BNT?PQ1+9hxe@xe0tstY_>GUgB-vg=!BvKea+5AI~x)XL=I} zLmHu@A!H&#e9r;nu-ako) zj@J`iD~D1&*3EXCW_<8VWVfHhoJ*9UfuTjA5Q+WEFQK6&55p*r;Gcko7y$jfZ)xme zg@8dzHH)&;&ipNT`T0L_D6q9-t!9#(QAYb#56>gkIX7@Hz@a* znls{beB&aMm$?MEIYTdjXDnK=B|-;>{3x+{*+28Sa=acp%?^Wi&g z5BxhCY(Mjl8GDEgOe#!KWS|Y2$MU zkayWnf0_KO494g27w-fm0Jfu(!- zx5-NT>)#-&?I-So4k0#RXfT9vg`40iwI|<4a{KOoC9C`>KyxG79W|~RFwN3io&&h` ziGL;2lN>Q9%H0fY90~;}F=IdWZ{!qv&A*WS8v;}m5Ug^g5f_FcnQ?VxP50Tior%Qm zt@o0kNM+14k5E+R+N4}p7OS;ws**PY=FD*Ufx5sI;V)1!-II4KhtkLtv)!M9MJ4Y> z4hU`zW!F}FkG?}R10-nQpdw9!JVFLc4VJwv2vc-!cf+0n2Jn203x%5;Aw>`chiKpO z-{d-b^*6~DA0;zv0>^a$6&Q{f@!l_!4fd{oBUkKIt}!(M0eZ$#rqbH*4;{D~msO^= zX<+}eWVgNlpUFvf;y=lydv%8U3V{EEv~1eJX7-L}>k!pewGMIF%1~0oGc*B2kV$Kn zdYdj*zj$!}wHec|O)qtSIkp`^q(a0b7O)$XK@bDK?b-}bL%(Br+-cb5Iw_f8qI@1x|R;nTWo9ZaxKpW z4)((jl3#m8D~H+~4o<O>@Ph;{_Ity_*>N+%`Iin+bD>>ZcPRVvk)=l z=oX4leu`(D-o1YU<>MrUkeJXWLI2<<-sJtvgpPwOLFW-gq{~umPdVF*Hkv$65<`Iz zy6BffJ#YeMuf9Gj2^bIS8U9J^?MCCYOfrm^YphZjDdM(TmELu3!%V^@T?=t(X%_Q2rxI4X8f`(^o zKVVwhw5~E@nyz%H>2Vh_H9z^@?cN&u@x)uX7ag=HR;F2Q6gt5uE4)x z-LCROB-SD2h{XYSqHWJU@F39qZC@j|+wVU}R@ifo5NW^rFnPUw*Aa4#J^lwoOaQTT zodc-xN?`DLY5k^ybI;y;?#x9nZ^)@5fCK2}&?!7Xkx$y&j&xqR8@I$VpsYxm@+@L9sJEcOkJ@|gA#d0{ za1U#QIl2Gq-i&?bYvh!(#i z&-TJeZE~SG01R|pxVvUE_VMqKt-C~wS`d2uGA1bnMqRB@DL78hp)*DUJrNQxa!HR` zwgFud-~bCW2#%mX{kvrQu7HOUk`Kbf*)6nb_C(UeAM`t37Di!C(|{on2i`K5B@9ky z>m!7(7qf@niXF%8w;Xq+!T?PfF7mRcJVMUe#S+}KfrX9%_$4w+MvT3HS&}n63LGMm zLdRjrtOyV>XpCS`y+IdgZIl}p(mNTg4O+Y(fex&#fx~G{9bvp51`n{XcRxyY?qWHL zeiK(>t>>G1#eTZs+@wgn^CKk)2oLOG7B4JezS#~cQuw}{ct7l@nc!1b6I;Q30E%UJS- zPGF1cO0G`RAOl;v8FX*pMiW3n1g>xoqBM#Z!t&uxuLKeZyjN$nQjcCP2CGw$fz|f9 zZdWb$PMBmVIO1L(5J&)&h~nIDQ}%y6Z^a~Vr<9|`8Xc(`b>wXRZ)i5pBFS;vFrYN0 zHK-X<+(3sVLv|FQC|Dn54JmcsbA^zjIZ&rbth&UMqJ{p@KgQZqIP;;+H@=$YJ z73LX=gJGTgv^15Y3%%Olrt#kWL$YlGQ$X&DQm0Uei4%L_6L3m5{Sci=X@X1)cV##S zj%whJKmJ4VVkBs2-D2=XFtosXw#YK1lcg>_KYXVEA3aFLZ=1i&={EtW~6ZzwEvSot*<$F_4WHxBwAO{n4-W5f14vS z2P%E~lSuxcOX%4|Z6EiBaJjI?joU?B9l|CNJ75ugVR(Om5hmw(iuV#EZcdl@fPw{( z0W^n3Xl3O|Z)tggE5xY^7+`d)FPxkI=6Ul^HN=cw2Fa1EW-KrDaGiDf>m$r_V;R&( zVwt9_&%p^t<+ziNO9DyGA#3~OQ{Fmk z?*d#M$GlJ;^I23bu!%)q=KI2Y{{eH={u|uEi<2-i6kR^3fZ&=%4TZJKy^hESMP|uE z-d6k3XUX|KE&{RuJ8M{i>Po=g3LE#?5WK83HLS znwBD1;D30IT<0@{Bd8`Kj6(FqQepS}gv_o&1GjQL7ZLCmrR+cagycS&m2l6=BuIw= z%NT9Xc%Iy5@A`(f!G8T)WZkk5gB>PYZ1=~20$;Nhi26O>CjM^p8ljLG!L5lPW>M`D z8l?#IdxO2fOLs3}Lf@jtKvn|94I@2`E=$;03p0KQ@7=(-dgZw9&o+l|sD z_7d0+rv3afZ}X;kmO9s&z9UV|gA`W_A?z^48(PqSdLr`c zJr8=*cJf5;lK?~UegOpuaEJzBq`mhmza&Hx^5$~83%a2q9_>!#)~^*E+!gMw-H zcjyX44N|5^6hwlg3m`_&xAhGydddk;4;+Ph>gyb(%Pc^*a%rDM3U zT^fMaxz(ZaAZKoGeiR1z!POp{Ldu0#KhO}Gf!8+#c)i!Y>;TZ@)!q)fXN`A~kH$Y9 zC3wS*iqZtJ|KTgvc&}dOiyZy|jWjMcfC~xAvdv^75m_SALpX+f#wFpdC1`gl6JV(B z4M0#uTqCW61&s@YsJH~sJ%x+E@J+HR<#1dpfX_4T{bA6d5fAjF0S61m4CvN%4blvc zprIVM65SMC14WH4&AyA+rDSMsH&wQE3opN(AzrA<(I{tKp&EPPa~nSGHw54&A0} zA$_E4K&Xd*d)m8w*#!D0Gj!iUD9_>A+3p~Np7p_HCL|0fVHosj$*=}k2Fb@j_=_r_Q^MSQ4u5ahp0G}s2y@(Qa#bMHm|cfYgXvpKwhUP5)$Mp z&_XsQ3%tnastqoJ28cVr!+w~O^X%uhdFM|6y*5grdjoC=Zzi%Ew|kf3t_e;I-tB;v z(O4oivy-p%@Ls(Oy@?3~IvEl~w8@wZ7mmskdNJ~(i~~AEKn}&|gOu&-tRc3hIUZf+ zZQ2rL2M=C-aNq284j*HHYtejdaAn1{tAuvn4(}}&0l7&8WCU0Q?_)w?wbH+~j`k`N z0ECFLA}kJ?O&DIw1S4-JcY1&Qiq<~#YV#Wy96q|!P5I?ZdO) zifa5 z)l<)2%k9)2N<4Tracwf)uw-4A&Jn{Nb!q)HP5b1Ybwj5W#SEpIcyyF#F`7n1G7@FC zrpZTJivm3M*7YBu{sQXp+>G+EgwLI>=h$xfmd7;0f3@zDL6P*sSoY6s*>h)rO}yLj-+jzpx|Wot)JY<^gs# ze1!SFgn1%*ImgQKt!zO=hO;zHGxUbTtU98*S^hpd5|KAi;^Nuw#xzboVLv|ejl zm#~F@4$er^SXI%x`7_bh>HL7{Wj4ccm(Kf8jO{yZL}*$*U<^mq4nvR7n83GM;1$}& z&%Q^pSY>1{6KNYe5ZTw9>?L+K(wvOvXVx#uED!z2=0xS0@ZYl?Q6^02YxZT-xvml! z$5z9!mol(qo~E@k^kJGp(y?`Y`@T*Sgbiq)()>QDeMa;9iuT=`-w(7;bzAUyu{Q7Q zlfSg?4s%7>)FyT~_C~5*!(7G)r%#Ymo5RYCPFJe;+YOy)Oec23q1m}C3(fLYM)vn_ z57*o-(jN6;hJ&PxEv$A~mokM)Uf1=LmQf2-mnKSyyE% zBw=2vJD6S&#=`ryHyj~|1?uHkzS|5v6=R1$daKNHYu%c-Z%C2^2n_;qKtOXCI(VZR z4P=`W#&{*)8uyswdsfs7vZ{f#1^K$>15FMo{@6kU6Y6CdDbCL$|U+G1sFcuES3~C0+oCtF6n=FcF+aDX7P%yXEn9q<~f z>D2osIYGw@X8A!I;QSc{CPA(8&`Sm(P41iy)SX$cxwGEW@{eIMj>ZR>qh8DJhIgkk zJqX2Q%bf>Vb?3fLpBUS79V_mfk(3~na>!+1Uu}U66|v);OIjNpCXEgzB_&mx#>OS3 z8nZFR%9T5fC@}qY^cykqHMSxtPicdPvO`I|)Y!fn%>pSXOt9&sX^7dBgNHcX|PF zXKn?}pqY{NaY2cH__rqR=klX8Ul8+Pt46-fzUcB+F{-U=G-DfJTw3j!rv!^?qFPQS@3xvC z&|_7O7Y&Dp7y%t^99p7;v%Q-rVf?QfRk{`g2U(!uaAKY4!}c{hke26Uq7VO9?EAFT zZt~ssL0h1*&bD88J~!WD!A7- zo0B?WIQp1nelE(&S>W`CEsd|)qyPh-84jNbXxpgDbTkf`6nmWkslP*qlik@B$?hKO zlHFOUDela^DUi_=ciIgpZdXZ)JLj$>)F+`n$(^+|$(^}3$(=)D486Vs zVX+JahNB`;x)LRk;~<5xL0BvnSg4&$*ss|#D-uoE1g?zkTmfS&jMq-a=$gN0eXOk~ zF>E~wj9(4%J7ajRvt^XG4C0O3e{Y*XG^srstUkg z>FzXaScItqhDxwGG+K&G9)+o*Q#oNp*F zk8!*9#=6t$W4$XPsj=}&jcvS7s|#%RKtMr-NX=O7fH8EMhTXT;SRM%tiqwR+^JmmM zz00;oxHJDo;bSvW96lm&@&NWU)m z>Nx}{ci4IsIJ~3nH+$RLhqj&-vu33_n(vL$Cy3cY$SC^JTlxw8k*#Q_c^`VPAb0-? zV(V6*`@0d{SYd}slX8bYvtIW;^n<5v{|{PjQ4OhUL^|V`=CwPdN%bb^MbHRa-4$mv z!%sDDm6yemwTwB)95ktxn&j)%BlFa)SY_ z&Us9$tNH?nEF!rtEFyIcr5LLmFQ?zvyiZ7epaO-m!Yr@U!8?cMjnzHw9^Yv0>=MnL zbAu)ZM+|Jsy;2N5n|Ld4A-ON#LM#dyx)#mg2Dzk;R^rw4AuLkY-06LZJF|j71&Q0W zk+{p#GKf39kYN1+y{-sv(P>{Tge?rh77k$x2bG-e>W@LK3Wxitj~%w|#OdDF)9J3+ z?QmB=W_LgJvhMFr9PVvb>b73>I?8n*X?O3~4V5dfyLX9{*xj`vt+%_M+l{)H9p&y_ z?>LOWY9|J7*P_#*ZE}XSyCdAs-3Fa5z#zM$kUHH@?T+$i*Hibl$J+UORM^}#x3#ln z6PtU->UQYZhJgTA9|gqQ0r7SQf+K%sfz4g}F;u)lcR%-Wl&wcS`WqFEzRKIXx4qon zUGq+RclO^B;4l*1uD^9`MaIY$GKNNb9eNLRtmisk@gOC2RWEw#f-h=*1f{tvUh!ZO z(HKuD3C4E`bd8oiL$xN3!?n)iYQwSNRrcFbGtHh zTTTIWr!~MLX5iTvj=Bhc4vDn&E{OE^u84Gp>9C07!`)edaDO^x++$;yJG&6?6);$M zcNIpu?Ro_AB=^NlTCVd)kH1?zsdJw9)KzWrH#*%}+nw$n z`>_&(14@Uv&D;uawiliZD>i8^D`I(!G#IshSAB{ty&?t3r9cQ%{N3x5Z9OWI{XGhj zZ9Pe{zh`}t4L;wWU65q!MUwoz>N^{RbP)lJh;`kq?L)CvE?naS!a$td^xz+DFb={n z9F8PX9{0F^;$Z&rQmZ?O_cy>Z?|3Z$1y zh9|{hS`AwCx$t~UI2AR}6xO;f(7H~W%wl?{^u)|rpzs|7@w|bhDL*2e(JX(f_%hKZ z0$zXP`jV`2CakX=Lb@FW@R3Z6g}lS^C)(%1NVmpTzw?a$?RV@jcJ{jP@de)b18up1 z+mtN}2p*non>m6Sdc_o&aqr#O}*{)2m@xjEvBLC4XlWm zh&>z@BAy*a1SloEtKdxYmPN>pS!1~YcuA3F`0WDT{nRL8EcwY+7r?{<@3c^?z0Wto zUDZ=pm@Z`H<5RdxC-F(mY<6Tc4 z>0l9uwcNn%;G=-Y%)sk%XwLwD#u|9Y(U@{P^!;EPKGsEzD5zUGLh(^7ETxC^JnT-Z z)!0XKG~+^4lXpu5q9acfiwf5mcx&7X-mU^~MZY~qgSX>h)N0W$!n`}6ERpYkw*v)l z%UhURT$t3FxlAy(MR5L#t*4H{CAY>N;aM+5R`9mULe3Xp7H_3yS>@W_C2viBD|jV1 z%R~cr+9bj*G=aI8t$tW_DAgg9*-TCdn2@~OmD@e$YQBSHnIx&DZk}DXktVAgg;2A% zXs$k5u?pK-Eov6(P*-jr0X_3L>g;cMa#y|uSr9xLL73S8Qo0!ZpV%YSOGvK_0kuVf zEh01&`$0w(?2Vd0XSZXE-4ssvnQa>E2!&gqY|Z!>?t6>GrNijkgwb!YOb}U%eo|yT z;p}{xn_#^^vX@#DSJ_(D#CkV#Z#L7g*2H^$Z%ur*{V(fxRvunZWu;-PBAoh70q9SadLJ-E+5F>7e=IyLw0b-iC>46Ai z73=_PLK|%e7uo=R%2BmP5TK$DXah7vhVI2;2A*M`w~U}T8Ch)1=8H(IKKa1%zlzPh9xIURQw3IFFGlYf~ zvx9vy+j|zt$!Zd>gY0adF4T87i|N~|n~Vqo4iynp>E=ERf_E7Z*tsTrul7%|hs96y zqH*PdlB`l$S9e;yW-KqHYHp3W*x10_3b6jH*35wE&xl2|Ah;p+F}$7kC)jpZ!Z>2F zwR0GZV+qzVg6ijJwqW5Q~}CPWfr z;%d!ZRZ5<&I<2{vzpp*Lya79zg(w@Pdt)LUSm9w=q1jQ^#Dwd0)Od2Egjv`n2UaTW zsS(I4^@o8|l-kc0Ml{vw2Vnw)SfIRE8Mvoq=USxQh`&-ZlJ3KLb+;!NfmyD)7hD7t zz-4KeT$1E9f(qU)P5GEDaD$Z-Zst2htzX*q+UO_=eX> z9~JJbG?|K!NHMeuXjOnl1Ps-P;e=UKsI9{4sD-Jq`#amRM-Z_r_jeCR$X#JFwE!gW zXe_G0(ufZE2%F%op0O2zsgVeEbTBpju5#kNcR#Ju1yk36sZn6+8Za>MTc$b$Q={54 zH9|49ZjHrM3|K5^81jn=v}I~&y<}?OH%!$k+@f*HtInDGFk%QcI^xVhJg)5~Hwo=5e64p0cj`mOlc9}f( zx|O?VKJ>we5c(j5$RwSnbr+1;Bj|84x$rx-@~xkZ@DcWtPlPwMk=wIfzmo?vWdaec z<7E$MWSysd-Pi$rNjIe!!+Ei^l~>u?9KKYU<=SAr#zC{oEemE~>&KtrfDb27i&TVF zMCdOTLmFk_^;B(IdEUt%??QQCSWvDb^oi~q0pAzGyA|^-z`ArVjwR5($5yOAQ;C8L zjDST4o$Jk`qR=<~4D=nY!-~Nv0Yx0T!u6?neCLe|kM(!2z{(h!1Vn7z3pDJq+H4sj z+!ja)6A7dgP5$^hCQ|b*GA-n>l@O0`h{sBZM_w!OC~wdhOe7o@HmV>6Fpb9QR;Ce} zC*G<-tMZ~bm452Cxx#Q5+Wr>`=@t}UG`%{ zLmXJZ@|2;II8n;t#qDUg@<;k;<&PYrOfPs7ljqZ*<5|I7?N-Ylxyo%lmcy6mn!m@j z;79@S*Fe(Xc!d-zf+59Gha#G<=66g`D+>gjngE@eD0Hf@712O5yU?k}?B19NSfG&D z8ZEb@u*nE-O}w3QaFckQT2!c+5LxV;-Bck{Efnz*WakkPQT}Zxhw`(ikj-cZ--Z4$ zpv|9A0RIK%91DP}I$kfe|Jrr)~T>*YT`J*o3-vu%&wIiTI*^I}u+J%Mr#P@CuYe%)~MVp>Sag zECf!*Mw~Zwn|-||gRjjZ$voyDiQ?6-6U2B}WBYq5F4`m)@A@xX)GC7!Sbwj2`x#rq z+je91NX$z(k`l#5ICkS0f`em`Ad(0U7XFrtRgc=eYejINl^aq81Q%Dn-4Y$No%|1% znY?~^E{48yi_X_XN-na;dbZ^x#%Shb6^!k%a*LI}!^x^aI(8Z^;c!;-E{hBk#^5)c zRNijBpoXBrf97Q9A8jVnUmYf$muCGpoYcN>w?g3L`pDnsWU}O>5$;47fM=VoxqI{l zC!zC7AF=2~I1pKYAQ}27arR8REGM(U$wi0=Bqx8*h(RCWyu}X2UP8c)g z%82R8-p8bYfVq33T-hl#=a(V9ZCu&^*)m2zYzFDVoQt>y#-tf}Gqji>h%LoVAiH=! zcKyo>NUmh*f97Z_jQQ zt^Y=1&;KLB<;~{reqWuiQk_y36T|0}{fFN5%bW`xVzN--84 zBmN7r3kr`B`(849eB>6*mR+yag%3uI3#*)t2}Z(T8SO$g zCL#>!mwd#Cih?C0MC@Hk%0<+QQ(n!$HVuMTAhlnZb819H!Swn>MDjlwJtLyCRQHqG zstdM4xG-2&R&JVAxoIN(f$xG4NHOl=NfYszOZK&94@Fp(|w~Y+fh2wN*7g#$y zl4{C%YR4p(L7kIxHvS}HPO&+Y8wHuiDK^Bynx!_Td6oePy)*&Zq?TP73@&zM0f_hC;D}v*Ho_0OL3x8EQF7-^t>CKasr`vwlpu#SuD%n;>F`hM}A<1-m&fOOuDr@ zlQ3SW0K^fyGe>Z!Wf=vnC-jyCEfX1=hjZz09GZ^6)smIe*6l4SL>k9}I3%sd!uLIF zJNylcSRqa54?8_3oexQ7cFrpgN9T66B~;Ww4l3ff0IZE#*ZsB4fSvPj@*Zx(fHn+h z!+^NC@jngtiX1RD&t@@CY*x+FdW5JL0M-ZGBNXQHcXzbbca39fzX)SlN3g)4B&-eT zSO8`V>v6TY7y2B_@79}G?foOdol<5q`mn#T^e zv3~iu2`V>J*0Hkucu{XSiq@G+^PAa*{JxR0KC~JdL|OK<)biKm5$YcjZ<3mE!c6}m zHhImfc+dJXvGY-b?RaMgEX;M7i_gtFho`5=qX@rfYnx^eatRyb5VRufR_--n0+Y=x z>f7>X;p8i9#Uvb$5az6qTP$|$*}uyArDY^Z)qMS{mJ5xA#ff)Ir0!>-2?^9z&Z>8< zb4n_EN};t0gnDYF+N!ea+o#w|^S$Ft;UcXHlc`Zdxdgmh~Otm`3ih zE1LDfF@z&1>q=1vuG-CeP^!Ks>h0#ycU&-D^br`Ml*}=aZ5VxnxYo}C@6Tahj_&Tn zeJY&T*0AI;8BPb@9geMR_?R1-%d5vsP6Rw)76%uJ1B9w&`S*xp^yPjQciqb7I&6~R zaN!=au7d5muD~gm(h*x(({*{GKivJSVFRvjP}fo4N~yDt-A+XXn7FlW&y9~0tA>pm zH^SVHo@MA7IwQJ|rl_qmMS){1e=%Uf!qx_n zvK1>fumKasB+5Pmn-omKW(BiiBik~eK#XVTrJLEQ33*+|@9C63;e2{<#tRww&YKFs ziBq_v{SvF{A2OW0fQ44Ych!GP%ir|O9YKf7kv}oi0WniQz;wZf6V_jF!QCtp`hFOQ+y- zoDOO*Tp#uPdawjFSmE~dQ*$ChH#CnmU}{Q4^TbFUFMgaPE8Z@G*1=-I!pNJ>Ua9;O z*x?bK5}%gu@rk+8(iEBL^~^V|Q*S8)h3`Vn2(uNNGKCLjq*fjKvyzwLe^N3v;0Swj z+FO^U{z32F*5&E~N`s<)NLtm|`Esm=or1O^#%RtToG$Ueg_UPTIkcLn>Faw%UcEQ$ zYk3bGVD{1+8j4~4N{eWSup^`42uoww+KGB^9M~C^xYsTC9Kt6^Sl3{S9(Q^yUTZJl z_|vpig)cMTjA=CVJ(|aNGnS&=0;g}|A$5^7Pd4xyf8Hyox|{dYIgcbUDLvFV)ewL?&+oMBc&<~CMJEpGU@YgHI-|B ztUI)%=8iQU7t`djuEq>nGV#iS<#0xS%gRwK!lGQU;>D;LhA% zEAsBF{k1$KmhQfue62{eo8&hiSeTmSh53q0=kt{bgkkVe^|6_+9sG(WtISbf52>;wz^r_<=M9V!8 zGD@}=hO^-hZgol_JhY?k?1LMdSzov2VPw>Cl!s-l>l?k@1)2m3)%+SG*sOKGSe&k# zv%W7eeL@V^q>Ly1$|uCIgKWHFdQ}J3aYLSX$6R9T#%}Q ztS*zRZl?FKDHp7ziSsUq#3eJ}=wLFwD=U5^USU(zMcxDwi%W&oE2^KOE^Naig%QuH3}ZcRy? zfh8|<;0B(of8lCXzZT6kNT?>^o_1MQySd9kcJ}dj#jHg`S=1A$rndHFlb-0vMn4hW zDxd0<5z6o!R{2E9HHuwDhT{atq*3MK0)w#^fGbTJQCgC5Exa0$(f(Q~EYol|+iv2R z%d(yvXj<3dY}S)0NwUw3k+{F9t7VVx??OXyOX!wJM(0T z!f{i7Hnw_+>Q5ibj#QiT`g}0^vN~1uz5hn07gN=@_I5t{vt>G-Wm#LVN|b%q)Cv#W zrvIf|Q=Cq~r8|Mc)&ddFy0dC(*_o|*YAoQ8{#0Lq10tz8b(5Ydpo(uB=ctJ`&SSOP zOcU2oR(EP!FB07#bWGo=?m9+HWUiW0WdjTEWov5sIu9cjh>F_D4%PHhvn#rfov-4n#^Svy}em2kc(a7$p@u!AExSEVQ(@CM~ftEQQPe+L`4E5jKON)=dN z=i7A)jYbARfInX%+qjCIsqOx&venG>Y=LT|FJrTwz26O3*oe)7{POmyxB(d>1`gE) z%{mtL+(Ju}>nfisAYJ7ERqOZ(xs7;pvmr9e*{MJDat6`y^89mk9ru(_6U|5Je9xD* z7{D*<))7V6qH0#T|CgTel7K_7=|J=4TmnzIGq>WKlzM90j=MnHM`$KaTkC3HxP_P# z*~X#{bTZ9L9LqkiaFnEqzBADfhWqtZ@I3PJl&uH>NBGn~BmstV%^m=httx zWnv4gxv!#+RA1NbVFzCvqpt8Z8Z73e6xDA{9s2Feu6rrkNR(qvhaN|$UT3_(%3kUo z{Q)G!dF|mKaAM1sKgV{wl%d)dJP?S^g%|t8MBGU&2?b^2XQd z_SNULNZr}jezHb;ukP%jb$YXCuXwxAcBLGn@d#pAeA*;#vq%wt-Vk59tGYjnawhIL zgybIFLUa6sEbQI8tj?J4-E*dze5T-hlYgZqpRo;p&PYrU;^z1;U$Src5R+AZtvmAP zF|@0&!3~Aaif^MtJnmgp+TFWJPgesv{>cXaUtTwf6yBx12T_iQ=*jb%cX)UYFU5u& z`mhPVzxn?v1P2U9=D(QhF9Vz3i~rK81?j(hBgS;E+Ft9mN7(bjF@E7&IR8SN6S41t z+p%*WTYI#-%@Mwj9XvWvakn9ZH688LTl&AM{`pdGoLC7C`zm37WT-{r3W&S5LQwr#Kahksk+Kk90a<=GVS zRbR0)AO7T)mO}qt#UGx<%5pUPjGZjaeE*Th#Nwu?>*I|k@ONgga>wO>+3}A{lHhIp zMUDGJg!gpx(I#A;*yr8k2y;6e``EZoq+G+)%8pY+Cs2Zuh+r=AvC?RtY3}&!lTGSf zHwO*fV%BA_6Q6X7{x#XcKFzxcWXJ8lXKf8DDYN$h0`?|v%*HN)mHv!|z1}k$aomjC z5Zl$cwkQ|w+Llqc&%ZseFL%a%oOwB@bh8;%`~4Y>``Ox0=Whgv>KJB ztGqw6@mX7D)wAr)Pj^NO5y;VN-Pw9A9NM$Y_u0U%qD^g0t^2tbYGI4<(ZE~UNveNq z&g~*Q{+SFb1$^CrzXnKG5XII*cNmK<;F_ohH{f1?O%%V{fKRM@6guiYIq{+C7j()F zp6qV=2#tMdz3Z1)@~MBDMxL^m(>ujGMrg-Er&G-G_UzPYQxE~4{`uu$&VO#g1T;3_ zi_5~)MV(pq-?2XUk6)+(Ec_XPWLrihgUw~aq#Y3^#q+XR){zze`x`aULN~klt0hYCi_+?j zf2GWWtx(@<=;to6h3BGKcpuIC_q;^2aXK6J&A@I_JeN!*OJb$5MueTDh0Iqqu!}{-Ki@&|a95j_3|8|T*1}dNZ-EU=g+;{g|rljup zcQ=@ELSv5k6A9R#KlF<~!+z03Foz94S13A%0lb23IQL??Kp?YmFFdK{J<}-nfBiK@ zVmY7-p$+1(Wftx8*HrDxor#YhyEtjSh!HcF@AqfE0iT?pvHS#l!1#k!C+e4B*E0JJ z2>l291e`nV4V9*UurFxGSlbH;uFLLqr@w)<+Xq_o7d~iJL#0AsO9T5uSUfxXLkFP{ zQ1HD$iEB}R7W1Q8O4Ky$WyL@Cx*B-FGw$_gQ~{Spt?u&%&0FPg2z(`e-IfFAqJ6nV zZ)kN5FKBhAQNKyItEEq&!4ChJD&kwj9edgLKQ0kOMr4@J7MvfE*clFDRm6w+Uy8_d zO;b=g%0YEU&toSHC`8nTML(S*MzSZkV{`7=-Py?RsmE+n%x4T@${CXFEu0H#tmEfs|xT zN@%#-hwJsi=xhgYr2rnWmoIRT0yTEyHTVL_=Eg`>F7 zN%l&Bnug~YSm&;J|9S5)2Nm67rT9D_9Y##)Zy3dgg_FsabnzYGB-PZ5G5kn4dBl{< zQM@dIm_k}Oh98O``FO2|Q5dMfsRh1o z-**u|sB^LT)Iv&8<3e5?N9x;Bpz$7F7EeqUPC^^oABC|tE_IlnoHJl@=4QxX}N2+QKnbig_yg52cLf|(-Z zY#bgOolJVsXxVesGl~d}JNSw&WTW#Dbha{lMKHZ989`KUI51h@A_3Y{HF#KVHmLW9 zi~t2j*2>YdGGCQH$kW|W6?FpV36{CZBQ~d`bP3mH|FB4v?$&33e-eo!sN|?ZtJghevpNI@}cB@IgYQ@)UxAO(PVWA|l zMKyd&Z?Hjiy<07xs$!K8h3(>B_9g*AVncs_H(%U`tTajVJP+#&HBj{07tHQU7MgQh zUKiYvOK!0##spsCVfo;h?7#3(a9cjnX>-+{f#gA}iVqt^{-%)X{~FJ}lBBvNhMBK< zBYudo6?KGb2*V1wO8&Hfno`1RybOSm643FQH|&Qn9=ehwL@XMn0Dh?F2d@O465#WC zegYZQ?Xh|<{Q)O5W1ZgEH!|_tOJCd2y-BJ1pldK`px4TY2VPJif;NCT5pe6@H|4AH zMg?8fVAAz1^~KS?CUaf(lqz2yqOj>^yZz!Ot_gdv85VG2n^Kiu`x;g{>nZ#WrvwXD*=Q+#)Pt7ho@k?BY95yZZW=9W{WS$N{J%S81e7oS0>&ZXtW-f+@#*u+tRTVB( zg@Ii71s1t$ptUn+5Y0P|Cnd^^{ASu6_}cO0MMbWS1|K_t^fh-G2VfnATOD#eWoPGFblR;VOw*mwBn#tsb zFv-U4QH(v}kDEdsw-CbqxLEhc*=p>>8|G-Q<^Zf?rjjw;WPc4E#Nv@7 zc=^Joz2{BVqYQl9&BO=Z@KHwihX${libzCuugCHM#fTDRX1~F=6qAj=8Y}iUV~s7j z>{!oYEPU1etFaE1C~FD_9m{W?M*237wRReUQ0X>-QXenuY^zK>?=_tq6eSYlv(w4x z=FBIh&9VFv-aawZ+ zdC#JEaQYmAb4p3@_&C1hPBObW6Ezo_C~MBe@$9)|M6-k}ol9e(^CRz)*SNU zdGSI-_Ocg{ea%8dq>9q<{OCe*e^Rq_`Z~95+7Qp@EV8h9Kc3evf+tY4i04NZwK57( z_gGZQi06~;!ElPpv3$inSYoId#PX(ltlrMW^TCTr-$=6tw<6E8via%U(+)Q;s~3~| z-BRp(Bw*G$HafeA9a@t)nj(2#0{1L|=~3uU;2V}$k?kXJ2KSOBZRw)LH#avY%-_7% z5}JlYe*WI($tCjS`z%CHV?Os0c@GO#A&&364}xl9y=kd6>xP8j*rlY zlTWQL41HrqKHO(b0g^Gt*NO|9eQ<}?w2Lb&aX_0j6;>N?dryTmZE*W6YE)QpIv%># z1s^8Tw(^1I*~`dX%^h!BX3-N$2qT}&&n|0)-T=QfR33=xx3mGhY;LZB0vz;PGyu83 z_gmTvKb~Akx?4mwolCQ0MRR|v} z%5Pgvx<{DZBbMV2uOJ?txPl}!L-bqGA{xO{E6ArbQNkCVP$5&%UsYgn?PvV>YQ;vF zkZwWy8bsSFNN>y%q1fK$jgb`(D|!O1I}bff#^lN#139Y4s$Qzc<#|jm)(yvkizasx~kZ6fcc$#`{w;Wt9-=<2#44*zyZakjc}lA zFN(v9r+M{87zG72kjHI;wYM_0tuw=TtC~+Z)Y}4Eyjgi7IE5m9W;1G37*@n9AHk*) zz_5xO&X+!_!~o0b;k^1$GFdE0u@`_Zau0oPIQziE;8sGFQ$+8$6}*;uFFfN4f;{MV z1kZX5!G>(mID)Tv%<8IP1mA-iv#U|6tLoo&_3bk;W>=&5fGt*6Rb%*;Eml{7F+7Bt z+!x@p9gVNzSeUBA6we>?Ta_6iu5`)Ms8_7=;Mm7WyLO5Njb0-lRvXx0j**enzbq)e zbQiod=78>}@h!VZO8I_d^oCabR}&R~dBUw$0uOo8CVTUpY*Q{y#?&Z(SK^;HUd76| zu&Rg5zI>)z)NeNHZbgJI>&mgyWx6l@HdWa;sih%qI4F6aZPv|!RN71gFR8kQ>8h@1 z7Q+X@s?PU|SvT2iSBwFvstf&WO~BB7@wnClD$9s7bkPJZ2_D`}aPB0B){BB+e?W{| z-iia}wTUFFqh<Dp{zH ziNt*M>rId_HG@di=vQ*2I_zb(SFl~|eJjz5x4?VURTw{paz!8iXz)=}qn zfy&06y!Z&>JDCaW3@$xFI*`j(?Rk&j*2Cpm@$A1~O(ARc@8lhiA|#fXhMj!$QJ8mR zurK)xuRIE`Dr-u2^3YLuM436alb<~bqa!n?ck;OR;U8oMy&ZnPrMFGT;3`oeJM$cC z)!EWx@HVQm9el?zL_{XorVm;{4gLV;MnYkfNgrU@Ei>`Ec=ZQliSTl;tOj=-x4_Ol z8T1?{KiQm;Ro8Cio=lKPm@%W?hQM*>kDv8 zGQ9szKKKhnn6h6`ckLGz4dQq5gI{3lSI(|!smb+2|0tZ?A#6>bq3L)%m8}Q z8FIhMY-}qJyy*-=4y(?~yV;J_9u$k6JSf9|a zd^up?Qa&gEs$;zho385eRb3%9>+I4n$vPMxg{ZFT9L|<@Fg~i!L{V3c{rV(nnPfxX z6{=D17R zd>-nEHOvd)=FD9_-BHfEOIV-W^nN@ zu$}9GpoV zn=vrh$4>WBCpIRGs5t|JXB;$xnzEJ8u^JdCGHk`>d_FFmmMVb^8TPQxn{wjVvimvM^CsAl3(l9vrM=O$B7iXmKLT*W9SGaha2JI5-r)ez=9bRqw|IPYEYCl+S^Id}!im%TR6u%V~#(39UEZM3&vaAzI5 z;O?>Qf=QaOyiX@OUJ<-;JYUm^exnFdbgK~%+rAY4CPH4k_-9Kwg=9k8RQVTXPq*-W zo$2I61Y9hTu_lNJlT~G|3kH!czxHXKl|=g{N-7rKrYO}|9E1+zO!LlQSrT2Tn?Y$% zopsp8 zH7Vg~j56upz$?4c8&uOmJ@`p?p=DqV?q)Xfu%7glmLRdRDPLANqeYOI$J=GoEQO9E zh7ZoBS4B$%8gkU^s(SMk*|b;Jma)%UV;fHUPip)(41P45j_+myt{Ucg9YIU!{c551no-Npx9NvHJMc3YYj4Ujsdu+-Y@xr<8X%%1L=Q#yC%f>|!@Nb7oD za5YWfA74p3q?|>0nt;dC6_1s_2k)JDK_MN&uN_P?V*5=>(Nnj5+h}aosbkbgrvp`t;dzXS$}9%qf}cEnQH0_kyWq^XJW+UvlTvJ4+YLnm7IK z-ZK}XwD;Zfy}hT+p4{%BDV=IIn7Uwo$=thVl+MqYe>eI*fU&MZnuG^in%Z^q z7To44ojY&g%vshDt_Aa4R-={%iDrXIc`oe~o*j4&;@N=bJf5ijASlxB`{5n1f;Y)| zeC|-Xp0eT~y@pO8w5f#OI*fLvzFYX*tLRF8X&B8*{$*O4mILS?k>ZF{vt~DYI>N$( zSJSeX*>mq+Fn^(U!R&c+r%o?fP{Ol4v^cJ8ddbwgOG~HUT{aIixqCqgXv4`w+L!Ms zpb`9%hj!>c7(dZD0)6ICP3wR(=EfH6_T1#sh9h5niwiaCPY7G~jeN>@`at@RXgdt~ zv!GLZq=ob6&zo-{H}9UgrSpN`maD0Y9{2KxJTxbBMQNJWO?4#aFKBT5%T!q+-evw~ z9y^rgblitgEjkUj4YWgEV4}3*_*j};Fn=ND<(@N|0Ldp`dIm=@ZJlL z^(ScEu~mCfKM_yw`Sa#2=$+%`qYLSk{Q6O}ov;sd#Vp==IPIL)Z!3fh*uon~6sl*q z@TT4cN=xVS3BzfB>U*3&G@Pz4e-0n_wHARd0dEn0!DBA1b$%T3qAcw8G;P34mv$Kc zuq_PfL8Km};?FWX8vxfj-w%0FHq30RiGF6fGPFZx5UEtD0_a~5w-p?cb{_eKZYMmbk*adjBJ5*aSEzwp?OSFx_la3!D zlk{vVYc7!a!^n%W!DxIG=`hgY2pV)m`aSY444ehT1?>e~>%7%=vDtRFto;h<}+9Z^%xzo}P;WPN8Q8bL6x`WRcMKkH>IsBnf zVEUXnym1umLiat!KOaTYVs|`%S>sP2X9`E>(R4lyzmq>S8ipvWitidtb430lk%!Lw zFq%F<|9U51G=@&2ljib|#?Z9(2Of4c_pzW}szlwFOU$Dg>4uFt5Qm!?g^ zP*3B*q84Mi+Nf!A8PrsGkRmD9y!W*r=*Gy`Cnt+XgVnUXOViTk-KE@VIsgjrSb1SVTr$tQ+(3u6v&!e7 zOjoGY-9Sgs;q!wRZ=eql@$$e;^d*ux{rMINv+r|hTad4QN%W=ugg*P8m$sA6Tf{#b zPm40=EmAggKd8~pgtHX4W1~x3TaP|o<0B`~X;)k!Jy@x*veH)#z9&tafHv>gl>Lo} zxTa*`-KEoA)0PYpu4~Ud{Idy|_N({s3lr#d^uv4j$cc1S%8bQo%qVE8aI026PUIyu zvkn8KH8uBP8kS8Ma1ip1yqH>xJIPyA>g{bBL{0N7Nz)3^^#tG{2rT}7J1y0I5Fa93 z-kv2q=N6=K_wtdq(99{?TM+wqT-wsNUD^RWN08rve80ocN#vIzy&37vNNZ8o5AQK} zUxD`xc%P1R1>nVB7#<-Ar~U+rzU$K7e3QR>3r(2z{JqL6yo^+EXZG9$r87(CyNdCC z_*Zr3z4)(^D7Rp}vr6Wdco#_M^MH+PRR?b@LJ}?RK3;Sy-PJB|Uz&Ce>R-hmDJnp^ z@;2Iu9>0%IxQ&kNbsY6KqJA8nEIh6ABGj|;L-3x-E5^`?u{)NgX*VGI9`qnwg7E&6 z=tteR+~1aSgHR`?CjQQ&PQ1&Mr%t0CljoG&yJYH|dEPrz^b?04YDfjddw2|9QA`c) zn@sz~PDi;wOz;wsg0|)X-Z+_#OdF2!WaL+gi6NcyH!uOIAojQuFq;45S4^Rqu~Fq| z()B%t@+{mtaW+vPhj}hu$SMpEk6VJE#JUbeaELvrCnkN_!Q0}U=wp0=i?7erSl^yP%hMI zmXAji(;oD!kM}R8{UeeqRM3L_qGCFPPO9K9puXc4l#98Ge#D>X>j27{bs{oi&TMa~ zAncI}KBRq zpB^C9ADU^QU*Ib*fb@V#ccp5Reukdn+58J%<)t@XJ-sqbyAE)z`#uzts*R0KmGf?0 z-Vt;Vf0n*>Y?sQDrqk}RS|ClXc{(8#6G#g13Dap&Y(M0MU9!qO0sh={xVbd}{yFL+ z4xv5|^*;r8|57?skE=@41}ZsQTS|vTEJQvZ^*2}X&q`@cME~V!T0HWjmh*>Z(1hmv zoaOwv8E~6xmh*RK(9R=)7@%4ZJ)Z;u;W?gxa$NA;2O?Q|@I5{uXu>7-Y@}LRsy4{g zqLEF@`4uxEYgsG!l$msB$Av4DhKjz04v8l#CsoSSAiil8ZJ)LlAj47ocX*6Aq^{i&-`wQaqDR-aT+Hh&gf6gy>Qnl=qE;t}dKWhK8bix$y6SM#B>p^nHu zFq`&I3j7N6mhjC~O5-iT4aVIjzc;n`KC(2_{I-T+JW4 zgXT0-QOr_sc2;Go77Ch0#Dh z3|b&G;40*WK1@a0LBYK=j}94Xwf`g93qi8-T_|qnw931Y7wxV3bmWD+0FOas^j3k- zrZU9rNM9|Zi^`wII4+Dm08b;{tMR;!NBq?xeGbp7W_}0K19-*)wj-Xm&2j;|9q;?` zY<@6Jd&ex_jr3(aZ{ZoXrN#QMzDQSTMS`**?gK7F^ehsO)3dKH=q8K(DaS`(FIs+ zAbooQ?Gc{7F-;T9UCg(Z)BG!}?0qPL@zbpQYj_tSkd^-#@9kus&sYfShVGt2T5i=Z zL0#+ikwC6>KI&KbcE8HcM?SsPc=sSL(6sumL_W4veg^Wu$K4Dt8U=!VR)c8d6#~Ic zi|A02ymWJ#?BOA#0&ufe#hxP1XVvIgY-rD|vX%d_~;soHQn7F=1Y zcdP7wO#3!>^6LgGF4O7FDC6%f#%9Hd#Z>1}OQ;X{_d6Q)1P zZ(l-(M7X|7)lOlnb<)ql=a|DPIb;Uu+;X%> z`e-?#G^8IPy~1kt2Q(8jw(=36xlmp!FPJQZ2<=AtXi>OT{w)7nIqk~Jd^DVYx{xNy zj(zkBk+!d(SHxO?pPEcW`HdB{|BY68E^Rwdf8^CbYCdy*l|PBRa9dXUubcDyqY8Q> z4L!wkmSMt3r!1pabO}ABLhD!1MociLPmX4l%_98b0@^>*%Fi}&?A7zSlIv#AogrdA ztL|1RU^94cKMfb15AtKvIAz)@SejaOB|B+o&4 z2J&$Bng}B1Y!AL$NssA6C*u@R*x0);Wua@W^TM`U`RN!<1aww@eRH0Fz6w-4yqhPi zrgQ1o+F;dcy58PpDQ4tCgHQG-6~t?E*t6|x-hVC4DOhaIHfe8~G;&uU6)cT#VYhL{ zf-?gGf5h+d%Vi!}m@kj;KKwFU3JBHqkEp%?;Sb z{p3pi&kbm{WiXH3h++0z#piCMX^z3zfH)xEGigYsUHI8e)b3b=iZ`#~uWqD6NI(9| zMw(0Fc;8J(z8498YibkrsE&I06OYrJa51ZDVC&)UZKB=CX#UeCdbMrN(2Kn5K?r6s zr(t^a(2JLr^1hpC9IxQe#xIBRM>*}GM_qIA(pla&M3ebxPP@{B!}#2-v`d7bQWInZ z`JBz*_o-og%4SR*y5`9;~m= z6kWV@ittx=&`$i}N3d?+Fr4pt1f!lAe(};FUcV9Ru(OZQj{4#e7cZsr)V;Jb|HD4o zE<(&m?6S-n$%j0OQFn~wGad!K&yM6zJc@Yx&?x@Vqgc018qK>rMn}>O*YVpQgN|2T z&tH8EjsUo9q22UZV=rFH;;B#4B-x`2CUe$UesLT4Qnm#ITsoHDy9NBH9?PFYs_y~( z2L8%=+Kop&4x+`}V6~Stj)G>!@T(rD-E46;T;x+5LA0)q(0F|gD#r51AE){H!5c4L zI>7IL0#)Z8r%7Z0@9+e@8p#b$fHnR2k|*eudhIyT?=M0=K6rwr&<*1y(fOXI!TT?< zE<-_=Co%7}<9X4OnD?Ox{DCKd=%I=H`6sa)({8?asShuC3eiJUH4P&%JieOtMp9T! zd(zrl`21>`smI-V@zMgt^S#wHQNJ1aetca6$RWdS7^3O7@^7nY4jIc+x1yzQGQSSo zrza*0gfd0CX)EaY3BMDcVzm=y??^Ose9Fa3qj~r3G=<+J6zzha`Mv)sbX_);?|KSI?VEb>(i*|~1pcq5XeT|Y_~NCG{BPSZmE@;E zb35{D_`2Q54}KcDb8|7D@-(JiR?sC3>Rpk z=sb#qCP9mRq>OLf32U6Wjb?%yW46&NiN;rMgWz`LJGViMJMvFe?w4)gR5s7p4!(`$ zrQ2yY>YK$M+75akePKJ0IW>#_Q{=bI7K+@3_o;z2ZJW&p)xh>Q%@)F3@*>UTtcIr2 zqj&HZYS1YAPAPifqk+*0tUx`y!!z{y_DyBbK!xR63(Kl!(0TO&{@gS0%tsgSkC4Yd z6d^l+XFr~YgqAJhb9aK=LRE?p(fAhe^*hjN&m#WP4%#1D`OOX-Syoo@p*zvZmX!iL z(^0z;WFovvJ!JgD10cx158~_06Fb2`ZMEzXzs3L#BLYi z(>ngyE=WukZ?_wine_j0bw6-cOz#87=Z-C5WmU2fZdoj?Y%C=ktHNT@KP-}s5JHlK zxJd{hin~bqvxt%+gpEZAMTlPr@m++_5<=|n^UR!Q=h-u_-|wsUInVhsXU>_KJA403 z%^ot3X17eu4w)Av^M%_7gbVMTPOZpuk< z>s4tUo4uu{j;A>zPI)^Diw(-jE`b zKDRRmeP#CW#jMwwmDwSS8SdijU5mqmTBP4=I=!x2%;|L@E{xY$-ZQMRC783ethr(w z*1ng0=^3VL)iX?k!c`GkR_)1oDE@bg$^1LW-t|nlPs=6zbHw}EAD&@St$jb+{@L)j z?FW6#;gQ=K7TR`lx$Km^PXB`RRAsi)bK$NnHZpfP@jS;G zEYBV(|0&B3eU6b|@>_PnbDTPIvMVLEU-l>d6HechZM`Jg$s?DrLd&ujED8H?u%1{F zp5LPE-~SrtXJkk!HoJQ*lYGs#*%NCyglo6Wj;W=;IoZc*!;@O9Zr!M7 zUs+)r_v0+kI@@_EXNIvmWKUTd?$>fqUSs3tAUop?*2VOtVLs=iXO?nb(JK4XQZ8q? zZM24M=xvb8NjyK>>m?RKdG-SSv(?x(joBj>GXx7?;y_MslYRCjrvDm>#Yg|%mpSQZ;zFildNOwED5}w*}{r-)O^-5 z_H)iV3~-BAsd~eK+2dX%H79%7tKmT{OAl(~FYEC#eE(IJVNv$?SHok%(T8LYe=Y2t zJNnQ@Jx`9z&YTtQntk-Ouv3eUy&4;PWK$1^yKWOb8SBQ?C)@BE^JQ4CY@20Vy!vKO zUdGwJB74^|261#*qh4=TEu-%v%Ces>dUjYzfNEKWuJLn zhT*vE->-8_xdG|?1~(vsPRtIG|4u$Bd;c4p(3bRXwV~@nE=JHuWZ_y}<*s zUEiec;RCZL%73Q}%w8h@T{|#)hx~W*!0duISr6&#`)@MOIc2{Y9#4OJEvNg_PR$Nk z&P=X7BYW#|IiZ}9eQJ3$oxWL4$Aag!e=Gbgm6>#U{1P`6guz41iqh@U{I6`OU^f4o zXYyCzwXM_quWYH{J^nYB_oTFn6b66s-&H1lPfod&ZPTR6mJ0U9%gNXHew;!x?}Xhl z(n!38!C->Y_}r*S7~JHn`L|%{w0bhGHog<<`*CEao_E&xS}dJV^VDcy)N4(6m4I~w zu)yeZ7;JFX{9mx_wfa}w&iHp+bw+l=ig3TowQKl;R;zR{GUV?RAtSan9^si>u*FY& z9*^iaZokDReG!k?Dwp4Y3wKTjOK42;5C4+B;ddNqrU8m51 zJOP)%nN3H>bxunVTPl0eyWtgb8~F9R;fa}%W>i963=G~Y9fe8Jt#S34@vBm)=s-LP zYlqIn(@gx?_+#?rMW@8yj^~>EyYWJkzqAF9scTKZs|37CfcE?+yvpSNigSnX9x~U! zZoERNH~F3M4AZ~~c(chLfY+0s@5*1>GDC%Xr=e`AU;+UF4dg}&gD0>Zp@le2d^Im= zL*l=6meNxGdpwcy@?up+pdGJ}Mq?eZBXHhXi7(8M(5fnaXPOka2Nz;3P=}{eK+b!T z|0CXPDrnC-oosw09%dRGftMVRrnGFS;8MJpIiw?yxt|1?Eb$fw4`O-mn|dae_rR&= z;5y?+@G9fS@H*r9cq5h?WCuQWcJ*a~Pe_nitqrWjGV9e};u7Pp@igOaaEs%YS=zsCLR-aWLALHm$OowJ;Ib^y6-(Xpm8ejNLylmC| zzhjPdPG_QXz4Yic5^7Bk_gha-_Dp)5#U1f*H>5j$PXz@GvFq^sAL0`i&n}`7`x)z- zcVz^Ne~eF5nm-Dc49>*w!j*univY>$`3xzvqVJ-M8Xvu}s=+U3~Np{w-Th z(9pOG8Jo?icMs2<@$k&wo#PTbpWcgv3yce~on&2bvNbez#W_!F`K^L(CSN)*KwO-5 zMN+}ZxZm0CkTB^pI1?P01WX`7-hvx%setbt;%&HzC*dAu72J*GExj6_#Up8ei(qt~ zcokQf1~*`N%df^aY)ktK2+$jbj@xm=U;;YfNhZGn%ln44g8uk^^4pOh>v|lP_YrIU z^|+pVyR@D;8jKbqAvkekb?_K+lhN4$o7{u6belz-R} zIs&Ind~aOZJt==whJ?XAl7wX)z_LiH09$={cU72A`JHxlGi62erF8FKYVET2)) zJErfkjBqvW$qwC>N(CAHpo(;$!i<1Snu~GypfusKrGk-oxbfw<$I0m^SMtZ;X{RK< z3g=WNmgmO{*&(^-lsWKdYsP=PN%(+({y5&k;3GWJcny|#&HoJR=VqkBmfYNlHGdl{ z4XSgoJ+<$!gU-JwqM`9*P9(AiBi*U=Njb*sp*--CA$y-?C>@ISfDzk|Lm(rRro7}2 zNVU36K-bp~h0+biBq4;hDJAX=ztyDyYJCkIpgWrM{tC zas41ZmlD#!uegXveZ|h1^GpG0@Mhf3G;k~anLTPt0U6@Ocnxmv`~_Zuqe)7BEB>+E z_&_|~)ORpWJ~Wle1U*Q|;ZsKWuEMjie7-4~#WeY(GuctZQ&>Ll6wPY#+w2%y^LN7X znW$;F|GNRQ)_rXQyO8wFLPX$MlP(uTHW*Uh%ngS2tR_7%hnt{_7BprAQACIFO z3`S@Z&NKOY?8Ge~j?N3@ABTHMytFSvdIbrADKHb4o&J6JxfR)OUZ9m)FB53flL zeerPOJGl5u@%5N%S5*J~xYE@BI+o7_W-f98zqka*76!j!8S;1wgWs`z;jkI&2M1*b zI`14?B@yqZ1LAmUdAGu2^Ix&^-! z{q(HFKan9pKjSJ1YtyNqgdr=53giSOo!CPhcc?}1EJLW9oa@(kL;9J?mutfp#u6`= zS^3baUR^VzTtZxFD!2m6r&gswInm5>*8BzdCXRU_2{LKdVEHts=6{Ce)30)fr2KZA zk;Izc8q23)bK?9=aD+?HfZkX>CaOLP%SS)e<#@jF@p#zqB>zNQdO_m;SUwRNZ>eAq zmXD6c8^`}t66B+!@y6v5%ST4lXJYwSsk#cw$4S-aVELG-`aGP^2W^W;kP*5I*Ib(9 zPs4*WKSRLFB*=$d<1H1uisi$y>esP+SXR9p%ZFvv?_fD3@fHT}V)@{*`hC3Fcr}&} zDa#>d|HGisC1`3U{uwOCe4X=m zSPpqVIsZt5yS3pdN0bnIAeLjU1#ZJ~%+;@9Ip#fF2U2ZQ(J?M`J_5@jjaC8m&%ts? z)2;)#?bvC_m+PN&UV?Q7yj7_+{L8XfnxO#rCz~>sT6yw=h_aCmX+m?WBAcyZb-+ zM?>R}yv7h(Ha@HZ@b9GzM@q=zx7*~6wodIOdY z=_Gw$I-vV6L-w23!#|=P5)^F>jei+S{I0ulVlqR#JFe#&xuXUc=wtCF96bfYqw&8u z+Clsf&a5^C-X>wIi<5xgv3w$bH64(1`6PBt9B;f(!SYoBdNKLeS@Y#1XY%y`btFjn ziO!mT^KR_Fd>w%FSOS(3Al867Je?scBtcG8KVtdr0gdmpdu)v_z#GYrmK`MqIcxr@ zSiZBsU3`K`yEFchpaHiLAm1sVz5}nO19~oh9?Mq?Xnrlu36o4fA6#Mrj>aR6kHxjd6?oW~q`{ML-j#_5;PJ*Mk_0(MT3{P2 z-#MWLN}M&nJC;MH?ui#0_rfcT%W%DMA6&|aM4Mdyk0zl)6Y#Nkm~jOjVSEyvZae_z znv|H!AdNLM12O9Lnd2Bj`9!^VAnN*Vh3YKN1 zZoLh6(YVy*S7KQu^POMCvZ^Yg{ilLlKJp~XYOV_ygXNfVGaH@jpT}}c)myMEvym?T zcs?g5%d8-bJJc$d8x%$)nnPSGj>mGy*MQqFGt!NMEz2TZ<<_zY(m|ENHnSKu|Tz#GQWz_O9gH5^a<&x{V1V539W8QOD#um7(jVYCUj9#1r$h!+~)jHN^I76!NS zPwBAwcK-RLF`pt0j<_Vr=M$bmzC8ce0(=QvP+?!_#fkPb$;fNi_5j5ub)o%>=Lk$tIE zX7P$_j+W2)W9p2HE-+F(Z|H>X|fn)dQu9Xo{--cyQluFB#=G12=V}^If5JcOjo0EGWadU&7?syoXC$V(6%pJ0}#myg348qgtaGLsL1T*)LAU*8j5gfr33m4i6yYBCCIt?_7rWvz zs}IC|?@#g%_k1L-F!?9o{E_aqJqUyA@kDl@kUE+FVK9$`DpOzqZbgA;k16npD-idA zM>JT!t4U5wTNlLEeEFP*lvi($r330b{E8FTAHLa^gk)=IY;P<>*aOSAZN(ceEbubp z!?AoTm*yWSVbGlfJH$P4vNbf`&mP+|p{$mB}{cex7U7FzN? zaMxD!pN7V)vBWR+;_Kpk*FFKSc?G`r3T!a>(!pPhrGcIHZa#wfIN5l$Y%K9dM)BG{ zBhc3bNCU?hOM#1{0$OFuV5G^H_{)tY{yr~$y2+RLhs4^x6nNb$u-q%~jf^JgaSg$~Z$(Q((j3xdGFMh1am-uUpC4SaEv~Op9 zjR}wfj~YvXmDt9wGWin!p|QmO<;8C?`4Zo_kJ*1IuoqVa+dv^swuZ(o#uDGpiyvt6 zrGZn7CH_h;{_2bgkOJ2lOMw|)fmtSB;%kg0{&g>YxyhIKcZ?-Iv%xFyiwTedzZy${ zJZ}E%2(^`)!KRIim$Aej=EWaw@~J=5c%(^?0>iul=bL=#(1pelf4dhy#pFx;RAY&M zwpo0pW$?TSkOH;FQsB#G1zHAQn|z7?##rK8?bm#Sw!_KR(Ae5ICqsd5UV#!5APsak zmIhAu;?Fes5?^I3@i*Xp52alnc&Le6&5X_bPX)J-V2|l!Q-M@C>%df0!4j&Fi_M)T zUmAGIEB}nim-0)DCH}J{Ue;gB;0qHV1->$t0y*5B+750lcdJbsH=V{3f2bE#C}Tv^F18G|mPZ>+8^_pK;=6nCJx#te(92ljFZALsj`H39OM#JI zfd{<;Gflq4&oPz;R(bIsntX}>*jVDX>dFo`wa+1FNkXzUG;U)o1rCt{O#v-~LruOk zP--mkL%sN6CST&u$4%`^fyrKhJG}yT8%z9iUi=FtUm93yEb(7^@!xb!+GoFbsN@yc z{($CtoQIRGp|P#8G|BVPynE+{^%vcJX>lGMo z@+JNvV~L;Q#ZNW)5`V8T@tMXKy#g};G$V+ zw-c%05nN*Y7@i-!x{Y7$eu!I{=Zqg?{g&wH@Bi|xfszn!yqd+)*GH2eFPHas*8E~D z4X6*oc2yjLla0%b8xH6k_OMiw!sTwtM&*PBzv(9hUe!5~ag;V`)Gpzucm| zVdA9&-{DGWFxvS1A0CV2_BjMUkx)p5+YungeCLCBLSYK*g4aBfj>{9V8_waGJO7E| z%lStS9Ce8Dm*Y*^K|BN38^48DJ(hOuQ^g7r3g#sZyoXmCe}JWf@y2_@af$I7+}HRs zEZf3aGnW}0v8xdf!nc-pJMVQeyXv=Kj+22VDcq?X^GB1_DTwT(1hl#%mR~V1OgN-wIMU%PyO(3DZDS=PD;z6U6Guc91xFG4! z)3~4Uvv{oW^LVClEna2(G9E_#t!0OJ{vG^4!YC5jxINsdJI5UF?p%gv;~~x$;bl*z zk!-2p5}aO`jwHSe%b!1^^9J=#$E_A6`48bPy=>Hr~k7BR*v694v=Sy)~Y7d1P6CVX!R;GUOVtJ(eL-=V2Kkbz8jroW$+1 zjF{$kz%pX$jyU>*aFh@Rdtey>cm3tv>m;l&?^NCkuQD#gGD+ht47%VEPVxYwD^4~Z z=@`qZIMIvmule!$r=f9>CQyqMxXdds+T_bJy3$zUr+M*NlP~f28%z9iF5aF0S_Ute z04cE4SPFdV3dDQaGWgu&OZ+-xiT~G&kG>_kX^43BduW8XeJPM8!4B!3aeyn*(73m; z#P{*yk2d+zp<|6D{yZ=Kf+*kZzZ4kZ6}ZJKFxliw{GG-6dlKK& zK9lGJ6CedXGL{0rN`a;!Y#ID+@+E$=vBdAxvw3_zPB#7`f}7fx0zJF}hj|4KHyRj$(Q&=#?rw1Ui@m4FY*6pEb+hgWdEBD zsR@t*n~kMF`@^`HJe7|B@W{FEc;|RnQ^AQ?e(EN=1tb3fXU(61$D90yj7!jfO?Vl< zd((mhIkoOy%HQoMFkD{AkaC@~#$S)+_jIaBko+&5HUDdgC%@d~@7yc4=4W;x;Vl|0 zCPfQY=_d<2%?L(=@-c$#xYj_Oe)*tb%bV;S;zsh`Dm z**=exjdxNXk%~qjniIURIk=3MT9l6_HU8m9-kyg~k@Jtd@+s=g%V{Q^Ofq@tRa=%+ zC+q%GJmrP7OXNG;aPsq2sbC#0yegT5+a1Y>5Z{p!vT7=w;|fy28F&@>!@2*80$y|p z8t@X9ACszf6?E(!Tl4q8tH@V(#^o<1-U|mWCoaUFm=WxP)4U~){g;i8-;q!(?~#kP zFzAL$jZ3in7?$RD$McPQ;#%WgSbix>evIr~Ck1I+oY}^0y|L15-(m zJ<>_C8p|H3+w*O*GGyvgu?+bV*MT`$_E7V`!7}90x~KlVnUwl-V$$CEctwT^^`X;a zB-lNyFe4z7@Istlm!>({Qo+S|^ebrr8}Dev<6lV&*!bi#wj(+QCmZ({Wt{({!ohAx zt}+4AU=~k#CGED-~?QTx2A-gC&r4+B)SGqGQJK=hvJR*df|n*zbik_S@Re4Vg5-EHDM6} z6+;s*#_h-tT?Jn{Yy8((I;{Q%%MPj6W7z@qkJuiPpED#RTSMa>oSCBEwxdOvr8i+Y z1bOZdJ&)xO=&V1tH}3<&!?ud!Kf*F1ItgFvlWO|GIhk|~rad{tnRZN1+oPRjx;AZm ziUvh^H_j?vQ7KZ=?bewk1N2ao$lp zMxz2P&=!}QA>0ki@84;DXIx8uw8xY`0S`0z1Mua%**AK*P5!l5eg`k!IR8!{;Zy>4 zASJpOVfoR#cuNIO;d1gB;VA!eEI+uX`CsE4^0fooAI*cwx0C!fSbmI8<9EhAwL^0K z?@faIlAi_~gXLHH)D`$V3T#h;bnr^N#N>~|>&*x}iZ`45`M7}cI>P^l<<|pcWB&6{ zkc2g+f~}8Xh+Kf==i<4>JK~O1*oq3IL#0@LUNGLc2gJvdADxQHAAw6u{$*HxnvhM- z|9tw51o_Rvc;o$gxT~q)5p3tcV|b>CpO2RqKZ%zaKZUQSJ{DEf;m>jXN@-8pCutoC z^5ci`mJ0rd7aMVb|gsokDR0ZmzBJR1ewKJ;4|C~Z|w@S z!bwZD1VUVk&qPFJ})m|9z~# zrYRl#$60EZL;RnMSEr6=|MllHr9c-F#2U~QOOMsvu#AAZ1j`<)yJOj7bx$lKr0#|F zw>hP~;m5Q7BtZi%B0%;~eF>HkP+x{+gw&(4J*HRUWNT==+E@;0HSYUG+J*4){CMWy z7Lzc80Qr^Bcw?F2^~N>WHuxw`HlCgz%?FpLZv}~R`TiYCgL;p6zk#c-OHQ>7c=?xU*JdjC!}DKw3k~QU)t(hRSzVWo?}C|Q*Ez=( zaQ}CMmv9pvO#uzK4Oe`XcnTh2e2?>d3dsGy0Vg!iFY(+RPfE&Xf>IJ@CJDijc%AXl zIREQ(5N|wk!NnVrJ-W@ypW=BcE;r??@#??z#cZZU@F@v18Df3>-r_{g-B@oJit)z! zqyq=z@!urw>G=rHy>YFHKL&rK?aB3j6bW@C?8Gk0vUm`0GzDhk;%}1%AH|!Ams>1} z|3J!rpXC1^UQfQB7s8V`HUE(0Z|%&Hljk3);07;XlIPp-NK?TS&r|VulV6SNjUU9D zjA!F5u~~m~;879=|Csb}zUM`r7vqs8{&~F6_$9o|_%*!3csZ6i)O7t{*_1#U9s0oY zN4P915a)l2CmDZeh$-+7c%es!Y zFeu0RgTxX)%31TTz|x?4EY=?+miXDuGX89QB!UF}C1VL#<*fN1;>lE)OM>M8=dAfD zUSr9LN}YpcRjIeevZ~bEVwRz6KWGtbPlBuh4amc?Ow?_$%xZOeEUQ4>0n1M*t2^Ri z<2`VhacA5wV-ofvVVrRxmfv313cKK1Ly^>pZyr(N) zh5OV>|qa=(B15TTzm%NXqJ*MN4?VX8F=_l=_pt7tMIa)6Q7IaSEu7G6cb-P=_!azz2=+u2BJ=j$_#aUX4c;+>di{j`I}L0U5#h z*p9#=&x*JgyqALlg%8!-WlLs+WzM2P{9>9dEpC$MdhAf5-Dp{NH%=uSxk# zBMI`0;aXwNfac!Db1t4~;&;T8e@n`@$199?^_*_*Ot2>j^0VaHfkMw+u>734<`;WD z2+L2MYkm*UhvBg%zYI@lGROZY66QB0@L&-!j zhpSJXe_v!1@JP>>;~rXo{IPhN@wK@4&!mGBJm2j3R$SrYIsfv0eiG)I3Z`NCCHZ(u z1^0QL;dvGwX5t^g(~ak0`K5WSZ(-v2`u|LlKnxF!@J3T$Dem}JQo*a9-}L-8E;sS- z;Z}bqj7vc4rGwG%em6n}A1x%VMSK)hD4oL^sV4D+D(IGj-`DAQ6{G;ayCpFLS z(670l7H7;J4>HG0E*>LsJWFYjX?BI@v3Q!9)z{+X#uM;5`tj`mmfcm}TiH}M?Lb3M<)btZnH=cn;Tom1?< z7a5ljw-^RrVc8>fJ?@D2AwfbWbGW46&P!)i-zpOz&jCO5I`py0 zmkNHxtIQt$j@wO0_INY4d;E_nFZKV2n|3(EpB4T-neYFl0zI=8oylJ+X`l~#AZNOi zoN?SH9oP-q2GS;98rTyzH9-A)n|vwX8|VL*j%sB7r-EZlg7`Q*+y#hF@;m^S(BbIR z9q=a=Tuppms-(NY+s<*H`9(F)AKcuGYy6exZ#{pH3v>kOLc3Gh z!^U(lTILY-k9O7$UDaf1pMY^Blu{txIM3tZL8m6)geM!{<{Vv2DF3~e|Fh=?Jl~Z6 z1J{eA_Nm|>5{gqvgYs3#)-61@!u?GA_IP=ily8IEZIyUu&mEoP_UXVLBovqe1-Q(3 zUp&pYtHhgG-wn&0h_^5(!FjwginkU)cU)oed*a%mO|SpMpce^)O+XnQ9=}PHIyiIT zVJ81*JjM7}Y*$4EPBuQQj_s=G#;O}UfqOo^!5B?~G?=24EW78hG@#4!eU_yxn||cW ziD>5`#N%S;JF)C>T)sun<}ALPhVrdleJ5i%B;#HDB~|kBerV?)?E)5&AbVKkyb0R^ z-G?^!0JDd(t}ns%5MAzh3|?ps;Wao@oRdtF@g!6l-{|>P&$r`|CjM^RqeW6*7LPNY z?s--v^WO&45HQ6QcnsGYFTgX+F<*o?7%#?KjGx2l8*~!#yJ6VQk)@Sx{xjli4UKgK z*hzAVTzu%jaB}6CAIQZ=MyP;;EWRDfkS}xjS96G@Lpo<(#L@xv7A!l!pMs(})+=*1 zx6LHzGn&`vfNpY3zw~EJndwDEAy z7keIwCpN|N`u_?NYMK&K!PR()aRzTOo`~~WB^|g0mm1%J`x#I5Tx~6{{~sV>qA4&F zk7m+r!??;l+dFtZPCNgBCvBT_;2%6*CmHd3pU$IIlivjwldrdQCp*hwWB!LhB?%P- z#9J7gfrl9n!6lriG=C_T4yuP?>45rtJO%3x-0iIS_u%`;=gb(t|F6y^XuxauQ365| zWCVV8*8B$i82Kre-|>vtn!g8@5mR@@GU?)tUs}WQB#zd9%b<{iWaE22u${&4vP@+} zbRF+-4mTCdiM14x^FRfbV?L1{i$B6LVmai?wPfdE#87@G=SnOcN=f_jByuJRX%ga# zQH!9f>5wd&8Nms7vdO<0*J5}6@X~j1S7Vgc@p;9^K^y-0S&1TyH9vfjjP)G%yDbH=gUf#MQq?RrCBzftRoko@^>8 z!fTAX;dGm%!9$$OQt=Kv=jGRWei`>m%JchwBowzzDtrr98NcgX5X21(7}`AlRL`g5 ziIiXL;y-eRY<$UOGjsj_oP@ci!LRW~I^bF;6``AA{$+_A)Xg6(&J^ z5?*0CGzhojR4W~li%ACO@7yW=?srn&$E7BJ3*Ov58L`x`I9@x{GBNE_!FEYPiq1x=Rrsdf$*FC(8gjFWs zUcA}(0nal%&%s3v-dRyd=mvRv&?f;S))ab$_9==3k6u8LCHOS*G#UBDfsOq}Kc~SSGdl zs`HtDOoFC_aRh8K&ftI%>cD@b1CKjv1yA4(q&kFELJ3}^n! zG0}uv0!pyXiSEvt-xHUSe-H`Mp>v%ze>j#opuPxC#{0YYd!04^z6=SqroeQ(3?J+Y zyy>h3-o}5Czn#nf-C6TDW0@1`e{ef|sEgnGg4mj$*_Q;FrJ7KL;H$%5_lov`7_+tjK~+b-1sYO zN2DGn8(+PG?TD-x#1)qgmN6@%-~TJWh?igVNJroYQ-SPp%L`d%O?dF0$sYgZc?%wE@>3TvLQMJ{<@zVlVd7dx8MSFLO|JY28ui~H}>EN4c*?(#BZ4%m`pvLoKp6BCM`y>r6!h{#VCg4n5Wb!BB!6yG{JQ{O|qaFAHuiH22!2cwEzfM6;7?0Q? zBV+4`9ELLzpb2GOKp#BObYYP{I^0bF5D)ibdDp!2Me%s)91#9PR>pvC6_^`lspo%(Ss%Pihn z1W({Y$d8`uF^ASTYy4;Uc=B75AaktcWwAAXn+yrE%rqevkHFiz0^OZ8zbBSur|yL( zW1UpPoi+a=EXz`T36@o*&Rj;qGLtYG%PP=-EAbW_k|299+gbA;#sPCeJr~O)R?owQ zcqKE9i(T%`x5sb24*V%b+t(Hoh|&+w1#Z8{$>agCM!%Ih8vgIrmR?&dBwj z`lAkIc=lV$`+ns_Gnp}x0?(YrADIY6Vp#=wT%cRbnnZ_kaM!^@d-{9sJGc>lxT zG!iCDLbU&3@D#2$6+Y+r1)O_8(&3jqzlw`Y{+oC_lRTOe9K;4Zk^E@?6dKZ%NK%N8!b$g5x}&fLECO0l1)B z(t%TPsqtXvf-s)M_eaho1s?JW%*LZl1&`vj2PX0J@n$omALI4L!4=%`81ILx4ob=& zAkLVC5-*@T-cXVhDD`{wW{y#X1KvJ73A=)g<)B3rz*bI7e4Amg#&i zf05_Kco_AyaUJ>+%ZVr6!r*H>1Z`+-c5J2p$zSQL`Kxg5(4>PO zVmYyC{>NCBVYJET|2`o>mW>9i#Y6DfB*-3YeN}AD-xkZVQg4rC6{+*Ey~}NjWzJ}R zdn|KCHs(KfKqSbdh_^84h-K2K_rNko)Sa;$WA$EGu4d{&EEh9%7i=%zU9sEb{Li0W zNwC-N?=MS5XSQ5k&dME5%_!dMJuJDSDM>2e6)#^XjMp=1E2&LxP->myMtDZ#c^O_v z2e+5~mm&U{gqbAhvdF(W2+GQmWwe{;G_ErFd*P*&*Sp-4aN%u9eOKXf;~HGjoBCz{ zr3;Ud(8C0*#vA%19r(oa7oNYug?*FwZ}D8}3!~b@V8?5Ch&4I63ogZbVxE7+BXB+m zolU^qxRdcxoHkyM_b_fdE(mrvJ{<36d;#ugJPofn(fs}YJ`#qT5m+XsKo{4+UvMSX zL$u4ayxYzAC_L7bABiU!KY*)^-@vuE@%mpYY#^c11a!QP9vUBm3rvHf@LH4qAf9i$ z9G9E;-*Abs{PygIj45y|30sUu<6KkVAw0cba*S)ROxk!0gGaH;ASmkQ{RdL5QYs{S7?H~tpO2x|WKSPrRr10HMqONRL`$4CQy zC7{~)cRbg4GnOIN_%zAZuEUQA@0n4gUcf_)))O%z|kY%R{ow2M-^`}eRtRS&!*6`d*PyBDv0$k$Cy%@<&qw0$L? zS=Qhj$MF8AKbj{5f8qINmj8!44oqhKR@ZZjb!W0{yW(10NR4tTKMmKL{D~5Oa`GmZ z-|@&Por81~&-Fh&fg2DK^gM7pUS}HY=iGw=vIh@%`7=Gw!PU1Xr{0w~e-O`tQ*rsc z8)8$Poc~k7PBsDO<3SXNH@<2eSF#7{&UoA%Nrx+Nt;z52tR1fL@*gv1{&P=9!j)90 zw@e>n88U6~GtXb(oKuqg|KU92^|*)ePo95GO#5`;cM=Af0)OMlbZDz6Hw+3UGOJHb z8r&C;H^+DoF2=oFd z`4@V=7%!u|jDOU`C=%wG1|P)hha?Tm#`8@FR^r^VlKc;x2UDALV4Itp=ePE}Bkp*X zx&F5&q2{j6(Oa!$9S@cQcPD-rSDFSN$HR@EbYAW{@Uxfyo9939*t0Up9{fYXDsvv# zdlHkVD#`DHi;at&b;vLA@-O#12KP1PufY|Wp-BVdNtkSWqw^BCM{j!hD?Go4XPWY> z@fPDxaNo0&_P)RwNm%Y0$iJm|z;2$?xXM(p7v5;RAI?1|Y2X0oau%4(iSxbu5w|e^ zY=KJ&=x8b!je}uHg;$B0BYLW?!RyQ+dk=3k{u>WEH!0ufJl5^-QMWSxZNPE2Hunj5 zgsETvo@{(7&NCgFfLECOo1H6C@d&)-<-eQp65hw_Oa&j~!W%mAA%wVsoo)+)Luruu z`2R2{!{g6O_V6fNZG0TAH9iT~8D|EOkfy>8uEGpnYXTz|e;B-smt2x`V3~87I}fDpXv&xCPbz4cBt+f@*P9AjBOb>6@T z$q1};j@u{U1FyhGxXe`WDPCdxC2lo3X`tSDwQFFXDb4eXJRg7yN1N+^2?@2P!b9;| zjZ#)&(USY2P)lovHU~VcNqR*VEhK&y$d;TA;Hx;hO zMOP*b{)C4a|LR=i4%xwXk)JUEJte`o7p^w$jqfy*@DeKg zW`!wmBMJS?I$wyd$9fz789vG6x4b(D&NBJk@WjcTf>mw=C*t+jBptd1myAn%$K722 zZNgM9;9gv53Os<1q(NQhZ{Q04{Ruc4b8+H` zhru{}qN(sve1h=@IETx#4*CCKxm>H)dj86DeTIa7roi`jit*2Qn(=RVuJLBP+W24b zjY$W>X`K1Y%llkBd}5NH*^z|P*&`j&QoP9o9EtmzJsyF_nFcPy15N&PJP5aB2xJ7` z#C0Zq1>TrA6TDBtq??i+eT)a23RCw4!I{QIc!=?-xZTZ3`N4RA$-fzIHu;mWTnplj z>;GMnV1{T~vjD#J!t->zqN##ZFbkh;8eDn_zB$4_$fS*2DodF>i-hu6T2%+Z?U=uR#Q_JAAbT8dsh|h8Lw1;#U*@?F z9&5^%{0Z$`9C)tx&hEO}W*z@zAYjLHCe+B1M zC*|M3eXGs&{~Z!)O~5L=#rPv!a$i!xr#Od4G+o>df3q#A8%n$MZ*0QIM!8otFz|cj-^8N6f6y@r()@l`d)khE+;|eSe>)xzlN{Om;!H* zAkXzQ;4Lgq!PG18op>k-QsJM@n*TSJhgRx;u{`Bc2lvMhxztI

    19o^q*o!t#_$osZ?AmU`FwS%31-NfUM_KprxwJ7IaYt1iIu zY*)PxmS@50{csL1L=GiEM(AW`&9B6*h9>c6+|T;!MFB~Y0yhyL)&jTSv+#~Cf3dUX zKZoUEvib!q&yv+k@l33DQ0tvF|Hljoa|j4Ykq)$fAhrf{zz>@W`Z{a=F?g=YALXq1 zSKxUjf2OnMXXcQwfB-#Hz3Z$2@8hS**A8xR*8E2NjA>xM>9I9`f4s!xS30}=OmGGX zFPeaxoV9{m@Jr-t2NyeQ{&V;>Q~qmb&Ho0!Ve<1Hj2-85{%cFZTLh#?kwb8}vsQ2< zmRGmxzW5ze;ib-+KMKopMD-O|9#W~tVtGgvZF2p;h6H)46>nj19hQem>g(~Oa}rO) z^2kQ>Z^rUWNPR1om+R`=vAlRyPr>qPSvKZBzkEW1+(yS+7~G5HHd=ijmfLRibS!tx z>W8r0HLGW1xl2|*jO8v`Jr~RC2sXL?g~2=$g)OV0mSuehbSzo_YnAdpz}fc=)-AKfrQ} zruiRXxd&9Q!Ez56?Z1q`XC%l=Ee-er%MFD3D=c>`>Uu0U6zcD=+)${0!17vA{S%h! zy?P^-%e#y}TNwOCf;@hYw=nnv%j0+TUwDL*eB137oNNt^joAKOaQMaC#PBDbl3*LyI}UJdG&JsuZ39InU&|H%b0}V zA=bHZ3+Ecwz&T$2aL*Uvxu*O`yw3OvT=Zaa2Xr;gNWy4NeX<9idI4X0{u=i)6?})s z%}6TTfM*&vU>UJ^z(ec;h<#!L7cmzsb^Jk3nHeP{DDd}dNXSG=D5Q>aoVcO0oSJmtNj%P! z&n$KcI?3A1X&$h%=Uwo0Q^6j1wQ&JX&q_MDud~jvTbk!*f;*Zg1b5-SrhH1t*BJyz`1yh8KDb3 zUyL`oeCB^D7)3(moMecv#MQ>*JYVm5B3@|XZ^2`0lKSqzwZ>Bu(>@)jP7)$NfY+D; zGjZj^NreyN@y3sPe$w+(c&>?m4i9I`Z{N@G#H&o!Z3IRONY|r z%SSl=Fb&F_Y5Q>VJy3Nxffdp;JgHTfsv zL60Pda3CJ`hhs6gHy5PgscO9P?vYsBj&b7CE~9s0)edR%Wh{L{m< zUo|ax?^e+x^zgA{$hzT4#)pWB*E8K%JO$@Uhv?P|csg$9yag{b^&jyl=M`Mx@+Zh! zCJUcP8oZf+$;OjC-{pB4UT)&=!=*1I_0169n_Pb1!bQfLG9(PVC;8Cn?sK`?VZC7} z$K&yCuE(SBOp`wyFEr)fz$;AtMm&uM4{_ypeT;n5fy~h)RFKf!1zd(Fnt;FL{R5T@o!4TZh_!eAhycp*ie~F9VN;+Kc`FqbBaJk0I-~StI z0^WqHGywnQc?%wE@>BDhI|nZ|`P<-ebeO96Kfan32P@(ZGynN0H3_9IL43I9KAw-p z3#*eMz6{Sb<;Qrw3fGzV8r*JW)B!pF@b32{A@Y2@$rSiMEa!=M3xiLwoCnmOV>u6~ z*I_visQ-uMJfQv-%Xz?^|H9yV5(=2*2aqH~)b@$kTA)3aWvcFgWtplwVp*o@J+LfO zb!RNgRJ|9LW$MnqAt#}DnQ1^5EXz#Y70WVHcf&=-CAieMJFYP9iDg-9`CeGg3-0{S z8;M9*VFLPKS$10BXuQGrSS-s<^DD5d3iU}?R*`xDmSv|t8MCTf`wV#{39<||;0!$2 zcnBV0JQPQ>Iw}wb!^F&)Hdqefoz7a{-S`gjr3J}f8reMmuOmTbwH9~{%dAzufmh-7 zBuE7f&YHgoe@p)ME`N^&u{FOlmPxJN3y;wKms_wx5|WKCp~Uub+<0~KPr-CG@pAb+ z9*<{PE#E4BvHFm6TqmER@%$*xOpn(gF}x3$gq-`59zKKXO#Taaz46Pq{JrGNw+vSr zzlBE{zl+Bjf4G48H_0TdA)x5}q{7c}x$)Q7cJLc7{|C=M;qj*YubzKj!1ymT0e=%P z<-?={jkwM@=gH>Y#&a&-V&ZqiMgP|+{!t4?xDp2+CH0?~A)(YHoQ+3+oCKWjD$rv% z!t-UGN8<__)cC9LG~?^=8sp3jUcw~Lx8b}sNrhAJv`-S>gI5^ek2e`Vgol5c#Md-; zCU~rQLNFiKm;#G%@L5v9v$)LoMZ9rsl3$01f1dbt&u=#~ufJB3P-6;wAZ8Vm(XOoX zEja(nq{7rfUdb4@^t_$t)_A;$Z)+{r|Mn!TGXcAL-W}(xOFFP8UTj>5*BI~b`9RMH zi4^<04~O?-bm?0-r5Q}9gVGZM@Bj~@<85+a|2 zSD6CCaZsOBcrotxP2y3Wuk?I19&h3^cyZ+D{L4#g5~{yTD!j$>9iH#PTTJ}Dp6|nj z>y!Fsc%FrONPg5lBk%|b{Y-&*c%tz_&(C;Xg6mBDQk>q9bl_Fo?*8PKZ3E81nLIbk z+b?3)n*zIfPJ7-HuQBn3p1a`9CchX@{3+?s!MNrp^ZLJMoIrPEV-kAqjcZK>$Kd70 z6?mg@e?0x?q`_10eB(1BXOe&_FW?-!+!Pp&C;gJdUyN&vM|r-|^VN83Ff!xuAd@~AnK(a?A z#EW}hLq4bO4XN0NUdL}f(V-mj<$=Z3SUTLo`9&;;tkA{3mf`#_Lt5l2Tu%pdlUu45 zPc`pxE1YZ%joV?{;npT!%6Gv<4V{9)6q3ImT;?3t!B@Fuyo9UpBvas3XD#ri=eKb^ z@tXgh=MQihhoBV!axwcC7yg>WXTqnOC$zvlOu)8ynDGv{+PEDqpn(pqfg_yb4)H^# zSUR9S3Y$5Q3Cc-GHtu4v9nup`z6|L_*mhu~=gV<94R)bY+2aRso$2uGX6E=mOhWp% zWJn(O`~)6s@}I(Ue^26{!}Z3so?r324Cnme%FFftEfV@_0)7`)8-M6|jpxtsaudG} zuQ&b%FWj7T_y^WK50|ecp|1&e6c55$!TWfm$^QqBr33nKdGBXA(U=bP$HiEmEsw*)P5z_LGXKU? z;r_0N?@I-yfi1YsfnD*OTG8vlZ;h}XO7U6wEcd7XoLW?jf38I3D+1#U#% z!}+Gdzi}P;om~E2&vW@U`Tg)n<7@DE<43S`DBgJg^E@wMq35S@l_{_UFEkbY59hW? zDqN4JnEbXca9%M!9Jg!R6rTzDkT92J6K`Q~G+x52?Mi}NzehT2{^fW*`RXxPX1V$* zEVEoa4$CB0XRu82c;os11QKMHYru_IX1RJ2mPx9<4a+1|-+^V4s_()wN!8P^EK_wB z%cPAqdH>)2B*?7QfCsTG8}&>q%SJs1%d%5Hf)^S;hGmXu{(LNRO#LL5IVKzPpD&vu zK_*$eg~2meCY5>#mQ|pB5z8!Bzl3Gdsb9e|>D0@x%n9|ISmp$qTz|sgZ4zWs#akGx z#P;H{3MU&s(TMHEz;OLFL0p;hf!y@L_%k8_E2J`{}Y(@Xp%qv z2l#_EjeP9?$0LDuSwe6#FdehVhUjI*bkdDw0*G9TsbZQA zJZ((ULwMfDV|xDiCKBdw1jhi2W77h2ftPUD%iskWyb$;-j{Zd8H5@(}_z8wF|8X)w z!Zo|56|MrlgTrTM@Oc@0A@CZG{>Q)%bC>|X!{IA{h25h1sQ$+}EKP{;uQT{}z$4=V zQU1*td>b&qB#iugm?@ipZv?JI)cAtpy;#P-N<%hfU;%hM-T&yUJ{AdckdWBz=Kw#v zd)gxxX7GL#+9RI%pUrKSvB>V^oZ*m1b$>5F*?zI-GnWOIm zEKE!*>zzI4i5$vfoc8twUkDz#pb~g)PPrVcvs*XIXr>lNoj?9X0V#U2Jlo) zPwWM}@cPF7kH7zmgwsGUq7)Cwe1-w>!!lhPk8uQn7Xx1b`ed*8Im1c*6~L41L_qwF zDB$^Sihl|G`|G*=e?ydz5;R?$%m5R*SA6x{ zmPmjx$fx-G=fcRO0_@Hb9smJt;cQl*&v`9T3!h;45MbKE*BSl!z;sr(vHaK9;Xl}q z>i+V5=n-y}Y?r}1hDhkUN74iM1Jb}BiYXoheA*4EV%i`00uFx%_zDjH6!=CCuLWMi z;kSW*D~(|y;{3lQlkianZv{RU3`U~}o%Lh>662UduhOo-RKNs}2c`lhcp@+rFu`?T zDj>sQNkRgZFd3MFwA+!Pf)d$kG1}c&(n6zZv+m1k?Thb|kFldf-mrcQ||(Ex_S5 zz*NBahtKT*D;&NLnD4;{fYV=l$HTx$4?_Q!OAoJr$pwj*V^-6nmb0=Y5+K?Qu}uCA zOa&MYE_B(fIHe`3FjCdP>#+)G19oBgk8%~#A$b${FbLR-=Hq|+-{0r~y8qy~oF+tg zIPg#-X(9eNJ@9-p#p8g_;qdOjv#d0~4!nfJN(P$^OzVdLds7CGFlsR*41lS`@ekf{ z;2B&CE@e2$C#-yeF9+s_;7Z{1*WPgra5Mx_{TPC2&{T9%EbkQ$!F5~#+J$R@-{D&H zKn6by{27DgF2D}IU6fXguu{XE>pM->YNQi&N8N3d73j|Jv_-)|H`(Xc%fB2IcQ9_D80508@7TD!MXu5sU{IMCl8}K`S zNQ2Q&1m4Qwdx7@>zoB4Dhu|&Xc_9*NEMd??Fgo{5D;S=^qceC6@H-s+S2B14@K!E= zPhfGsl)nlbu7Us%Cz5C`5(Z9A2|VE09A1#Yi!=B{;HS~zq=i=ipJpfgV1fZ}!Vn~9 z$wwZ-{!bI)9~21)=olsVabP+G34RK=3fv0`v%aq%--ney z`eDpJnvf980l`W)#dCp2Ab$uea2~@6{e{3X^0#OCe_}Yv|36?l<_W$Bcos+huaG4q z1n&UP;|jb791T%K(5v)5@cd;d!;fe_x_md}(;lfk661v5Sm0kHKe-J*jNv3dJRAv6 zf&fz>VsIM64FX^~rU^b1n9lM9pAAfBd4kUY=Jmk&!0E5O<04>A4}_&lI0C8%)?^sm z%jMHYD))6}PZD+=8zFr@!`&3BX(nN_%km zwEXN$`EPOgRDf^u12+8GB_o};506u zGWbn{0TsJ<>GxbdEq_y{{HUGxz(E`V72uEzgK1noWw3%Vh%4<~I+e?(yKj0Y93eE-Q z1>6s(SX%x-l%Zz)1spxCaCL^?-N23ZQ-*)eFkG8q@OFm5zqx!`zCBa^LoS~RF#561 z4I1+pUq1+T1p(ip@xaNCGMJfRa3q&c1volWeh!yU%l{B~9@oPcJcjo32|ohCe2(B! z;N=|tIq;<%z6y9Phpz+XhwRtD=?|I~m~Y?<;YYCm^FT$%>_)BtmH3$q!;M@%ZSe~k zhA(sZwET{bcNS=8;Pltt5w;?MmuMhIKpE_xVemCBp9(M~Q+_I!Ps=aMls}ovNBOYh zlnjH@I0DMxHyH-M=klolH)YD-%H`AY&u7ZN$mL`HL)B&&yv7kw2L0gt;m5Q;aQcI) z1?GEjD3?#mACM`35SNen4^^9CFpVRi3|3?qoXX|X9ymQyeifHb%ioYGe>0bl`43f_ zVQ>dWKpDK0Vekr)$P;Fb)7KXCa}fInu+|B1_|IcEUG7R2H2+%*2!H}mqcj0j0^w-`o3YhP~8kbMYe?3$FFqR+J4}!xp3}$5*gc$~B za{06e&d!uShs&n|+@2|aXPnRK2f01~9MdXJznFz`UL~hAU46JQkSeKk8HPqx=6j)IoLsJgxw( z@O|0AKj>O|d@{=DG@E;k5&vE&b-=++|mw^AYXRS0DO#0)r`P$!5|GdjKQ9;WvO+a`@Z8b3ng@(Jum?23%$Md%(3@Yo#|Cz7+TxlouJk z3V8j{I3|?Vw;`kqAklnAuod_YVDxw-(5`<+mjPeT@Dac~{aL_ke^H}*-z%mM%Nt?w%&L{1U=02UEX=NzAVZ%I z%#nA2X{^~~(1*0eGd{#J`(3Rxixqepc+#~@LgX)nrlQ|^`5CL=?_Yo(Jyt8nL-te) zp4H&3m&)>oLz&SRkMkJ*DKLG|FqHM!Q^52=!ZlR?PywoCxL==y02m~SKLDn_-l>d1 zO~7}+Fejd7_)K7YJf6Qf&gJuV9j8clj}_-WuZLfn9Lz~g|ENjh&=e8{3LzDcDG9JpIcr)9kY7(*5|#^@O&@MC6t1z|OR z!(X{(lWYm_vp3dCCKKpY;In{}9y)w{OX;^4LKU+i{0}gF6?-7-k*PQx4}ArimhoE! ze8p8^t#k)tIBWvOi0gr4fa!NSk{-Ddc-6X8*H4{<9=bMNC9@^OcO$^f~aRFKVTISb1e{9B}cXax25f?cEY~(p1-gVD0C% z==z;jxMDK8{GZtU*d!Z#KudfHg%-7za7_oC>ThQ6(Ek@hlZ|5pwS(}60}PTb+B6fhdf!x&^@oaldWUpUjXE034nvj<;SAsd zIeaGYR1SY|3=Yp(Uc{3=*{EM{%rHtL&?hG6Qq(d8V&=YhqRw$f`X z|7UZtMPqxWSGlx>{{p6QMfWqj#cPTF0Pzxr!|6T>K(Q=j%Vztavp~lK^8#%EzHtzi zC1cQX90VHKM)g%xp#i*b3=|P-;je(F4NY6T8Tieyja7y3|I9~)AP^aY+khtx$5$*E z1APG$3Gl@X-wu4%h;%ozzJoWRz-p2YJarT%Eo;zwz}JsX1sHNXmfaq0rCLOf@n3-i z6J1KzE!}R%p=om<;RTH0M~fiY(b)en$h1q(UyL3*02l=*-a;`LCbQf;0h6wtZpW*D z>EDK*&G1{%!Z4F?=5|{nP9(GyD-S{iD>$vRrr~ z%8RK{c_lFY%jxGZ`Xx)DR}?ge_3&%J^zVvOfusFjU53rUYKuZJX^VVd8nv>XwfJga z8tWx8hMRzCeBca*M`E_o0L24YmrpqvUHq%G0j~q|+x6LqH=y4MyI)}Y|M-=d6i__Z zFx`ATF#QbIX*#51va z_c#MR_)!~FKimJ`J`)Ts$6aqFRxHx@A;6~)fK~WCVERsIJZ=tY4{d)ImJw8OGUitS z)8O-qSr@PPA!0Q3)wK*Q5EWfBJ;R$)8n=@EQ=eupK4Ed)@}0mH70Z`2*ARWzwp_{dBr&jz zAn;VDE`J$fu?un718cKsA@nYMdtj?kV)l<0HeH8Q8t1Wpn(Z64xJYZZKMit*Bn%{X zJYOCXW=Cuf_qdblkRuVF$)VV~X6v4+TZ(Rrf$6(a;LCw(tCDQHZcuM@WFe)&n9n`t zFl8AzbW>TbY9<(YvKIJ~s%wExF4$Dwd!XmKqAe+gVn$5r(+-_=h%C(&F)hSeGB*kZmMML-UJ6MiD`p)w zTR>L7q%3k%^kHLm$VyWMQhMV{(o1>thjc$(Wi78jxAf%OFPA5Vs^(~pV+NYz<3ClE z4QF$MqEHc=B+Vb{FmK%{v}c=RtL3xJEy}T!U1H)WTDU4LSoq@E#riNwIV_izEZ9oSwvM=v3+Frf#Ncx z{TIT(VWMR(^cF7?HFvq^&OgO67M?13#!^)#Z@y9<6Y7#Hs)l4Z&}qJ*dy%&1cT7jN z9no}E*>OGF(`CgBe9zK+=tt-;S+6JBJL+&KGD*xRvYt4E5eum?4|}4GNSPvILt98L zb=G5D=)-Jlq|S=0OMx!*o%L8TeP=xu78mHO$cpJZ>#+j*z4W>SI|g$rv%MFT)9Y$9 zy`tqXrjS@Cn>UxoM8t;|5@YXyK+TS@YLNF{Ee{!-JCP+)d$l}_eEv##CnJ{thGev^ z7B5?7&vj2&>esVmWZ&1yW2;?Km%LUUNiOUs>@dc6Ji}3gK!%BmHRQ>GVJm@S8lEi5 zim%l*vhSzm(U-ki-XUK|jjZY?3<*8Y)J536it56e(gPS8s%>h4f&W7dc0E#4kAthA~(dNTZ9-Lo&V!wASkWX)s6ITfPR8`4=CF>~|P{VSh zfJ`4G97yVegtN)K*UQ_J>7SPSl4)<1w>LD+lPt}Yd>nT?$qf=k9QEYV1SxwIksXtnnf;rt9*J@)NIGG6wj7zRW}@w41c@4B-CA9g30PxjsuHRRSd;Z z70HBs>{!072lYlz6;ejcXKgPej%Go98rlAx@*c%PGz^PEzSz~96+uaMl(1gNHnqcw zN%@0kAvK*|VKl!ANfp*-%~7YCppbEx8g7NOYV-3!ZJh23xE>YMQyZ^<7Nm6ZYN`*& zx&JQD4<$pfOwBeeQ?eDwRe1ZmurjS-C>N79G({)UFmF+5)PiWL4RzRA(eh5WyH4!$ zxGQOqaUOZ^y|Om8xJd8V4824&Z07L|Ic!HxL8K zmt7T3G+mJ#$(OKP$mCC9hR|^hbGaqkcK72N*NR!ysMWKvIY^EuT88O44ty}W?+2EP zp~Y~xuxA<*oFfgpp>3=&j9}wX$&xNPn(L9n zJ}UcNC-YxEDzB)DuB5@oWWk{GL_1I$Q@nL=NtPVN@$|qoOv@Je8QzeiJ27tgxIDg^ zT_X|i?q@v?N1bPVRO6QzDT&{bh4eJ z&ia@(@jp!5z|{;*k^?1>bVasoSizF*X`ZJVD$WEN)wxZRMyHCHJ(=)ox!+~4l-u$f z`J+$EQkRxL@o9Nch~t25St87KH4t4B-egw2V_FUtg|Ew!0=+0pzUYd&2j55_nX2d2 z`882Utadu+rmP3$@+MDyR^FwHyd9sFrTl*8cM@AyvG3}hshWoCi@M^unhOsS{M(kL z%3|uQFQkN@wA0|Bz>J=GL#^sVFUo_u7NN77EdHXrUDvD^!L470+hrADP&eeO`Y=x2NT7Ek!9^Y23T;M3 zy5VOnEs zBXF^+Ti8``Toz5Tu|*g$$cHI~`DEfw#x>vvjjAPQl!fuD5(SoAw%CA_GdXP$rMebVv`rN8IdJ7|} zu4Q?OuXv`5>p{hn$b>$^h#}e3cr0`xVUcz%g0aY9bVK)ylx`TI@i~kpA+;Nc%zQ@Z z+JWTWK0=?avfcz{gL9iF5wVXjD8C}C;{2x5KFlv78r>AZlp9F)%N6dH?S->K&%~W6 zHWtfvaYFOtPD?j26PDC-$-3SxTd)Is$KP2 z)&;t%h=Gq5Te294jsXX*;;N=&v+xJ(!iiB-L@zZ?VTG(=tQW6HSY`!hm zb15Q|9G&hgw2$}Yx+8mmhC5k9kpc@&cyj*ELR+Z#q88Y?9pFH%!}?*fG%@a6oO)q} z>aK!Yew5T?*McuX!8u$*kV>7}YmH9FfwE`n=;|r*10|#*y5%gzcL247vO7X@dOu-! zSVUEiF4sF%-5tYvbkW}=DRU2oi|fS_L}$q_(OXLMeT$owx)K@Moea@JnIv+?E9D`W zgS(Kat-^@aqgsVpud3$xfsadk!!Zylp#5VR^hH7f3L^uW{L!jfI`@&Mt~fwpAHhHI*lXv)4XM`vErHbDeWao zvW>vTRRF!$mNmuIbroJ0Uz9u#7bJRJCx;IbCe!T8!k6o(}kiWp8t9wrQEnv0%_QD&o?diA^l2eBX!w=4`hr~9B zyZ}u1N)loa0tJgm#>Eyw4phVn8lHm4KN*38Hk5vRp_W}n+=bef;extvZe?uOjt;I- z*Vv0snSa8HdX|{jBe4CVR#DSLUDa*hRB@g$6h(EgZQyDS+pk>j%3yp-5ki`GylXnn6yyRd}@O85SHAx@m}_tb48#rz*0q*@2_j znhoD99I`LoEc~{Wp1WMpw{V739e7}-ke447CX#ReLD-o*`$yqxbZNha`4+lQDZd}!{ZJY#sa@8M%pUjd?OSME?lFDjeS&}xT6m5%zaW;}t zU$_t#vyv<#T1>Q5Q?^u5(nU?S$l13GM~1G5lci(mIP{9T<{)x#k-x}Ya!RumXx&%P z3=24?>XQ1u@t`b>?pcsEcL-0lBHAH zZ(g-sr8*Ik$SUN*mAL`WqC15(!c^%_tf59#gqIy2C6%mOjZzn{fn6^8$nka2_8b{j zxJDU%9npT8;b?H3X@=~S)SaJ?-YiUX?F>&Ra=); z)z&qQ( z5#cS}3xC-k?-ov9r1+}tih<%I9@w;XKk59OmD0>a#w6@%tzG?p!Y}tJT&_JVrp5%g zC=@ZzT+BGp3tZoj5NX_;GEkGD-u5P{SgK)n3Z+RgB#DjEHi|KtuJ<0A(&(ug`PH9= z{$$lX!p&sxMl7Gt2MB%04r_%Gq<*jPC^=zBr8l{Fc4eoDhNWA9MfE*SV1}mmFc-*S z8!CgznQMjV6FpexvK`$9=(^?hG=r!yJ(EmdC-fPR)9QxdTpQkf*O1NY1V6X*<{t_} z$ddbnIaOD2E!lzN96?F88hB*(c9s3e8}|wG!@{}uKaL6pMebhsQXFbhD8&E16C^4i z)6F5>@tU2WdJhe0a;ar|GvqejCdE*D>dz*{XsD$AIs5%kAFl>2^1wj z%zTq+p2;b9N5(Ga=_Z0E4A`8owW47x>^HV5x@omaLqo}fFO>J5 zpjdbw;;O!BN+u2}Hq&D{1<8re3*VT~<;6!l@$={(-6YH!f?z=z7OyPh0u)i7Qq(=B zOtg1}$-}$_$N9^a*X!S0;@NTU>L*42N!rE>Z4+n+lw<}nY-L@N9JvSCuD%Zn?TUwl z?^GQdH)@DBg$EZgH@ZVEepcAEDmw`Iusz#>_W|(^D(ToF_+-L!!hoTHW*{~Ko&wlR zx~(AS3g+xGe>t%q6b`LYcdYBc5Y}AXHzl34O|J|i&;LWXmK?TG*q%J!uTm#_ZW3yw zrCo4I?IGNTc!=?I6zsX0rr^I+vj0Ou{Rjk?TLFB)fr^NtK*L*^=7y53>AW7MZ-r*U zU4s}8SMq!j&xNGKj4PfZOlRdW{@z2vXfoxm!f`WkUu*{GQyf+t7oEza_Tl^yMbpyY zW^yFW!1Fg8J!rTmmV)ca^+X|RhNNn`CgEKb4xTa$REZvKE^37v+?OrH1B)nxcFky7sJPIEvW|7o6&2X?PkunuaW40!uJ& zlciB8naNajj%3l&m9)9zrp+2R?udiPdyfj?OvH9sxa6}C(W~J4Jn7%UdXjA=rykk^ zm+XxDG)y{N3j}zX6*d36vpgIE9T*n4pTmsz{bsvcO6M3E;M90IsE!_7@w(jEHkJqqbbWJo(MU@o@snSqeiCni)m_+Ii3TmwTivqCW;$R&O zm%n7<3Ki~a43(%#h89nK9G&QeDXu}JfX*>lbUojthf7Ju!P2WYw!}{29308hB#VaC z*NH{kqVpaRP9h7R6k0>o#~|SFt?LLRa1bC7EzQDEc*Y#PghQDIbHS1%Nz~xxY?1+6 z+u^ozU|qEB4CqcV2uHE59LTwk2tTRfz+fpF+zy5b$E{(Kl^cXR2TD1E8hNxPWJAQ+ zl(xp>viCo5KDm37;8$he)38`I zNphi_EI*b5VfY@dL#boK4^+e(u6RLcn+SCQXA@qu!uy2X(M)uQf|x-A?ZAvNBn#^T zo94IBWzx73lk-FlM5qKvh}TD0ErIQ{0BLBd><2fbHNdDpaUs zx|*%}J=SpTOM*N^S+wjpY$eb(0o*ON>08+2O^sahk}!Fq1J^@f<1SE_A+MqKBrnfR zMF&U$Uc30X??uE_#4Xem2QP4;dPRg4Te8vvw^(@;M7?QsIkEP0`lAaAIX_BOPR#ur z9^|5zg>e%_$uiNM7zVr@_MD#NCZk>v%;EZi#n`5o({7~!rr0r!fW|ocI;n3KjtLQ4 zX23ZH?W79(H-Z>&YSsghnqKEob(Lul@?llz!M+hU3B852#4t$X9sQMmEo%Q$(3&iyH#=O5*4?bnu`A%|Ta(*K!r?*0 zA;B{}C7|@jw8Fa2 zmAH+zu!5kKZ z_BYw|p3rwDe0MUu6+SeatHJ}smQ-y|iEyA~|@TmtLu8H70qM!K* z$X#0my{db*X{h-AfP*Vvs1xdmI9$t=6LtD0V$ydm#cHyL|i7yx!s*Hm%yl9H1 zlFIwSqMdEu@nLz>t6pq5WYzmZ&@r)ND0ng@vjY}lv}x2flm~Y3Ao3NCAkN3a5PUSp4KxKdyn`!091Ex$aRj;k zV`0EVRfWG4)}f2YClgP8deAWOT>I=}Vc0}`?g2VomZ=v^4#dRKnyV2e|3`SFiih$T zVmu8H5w_tfIvKWAm{RpED1Xa`Zi8b6`yg4oRrpF((&2r^7lc&YllqALCeQsB6Odls zBk~Yl4V*3U$ct3}D;(V#1TKtu9bO&W`rvS%ng}~qq0Zs5^x>3~Vg2Ijx?y$TAsOz& z5jP?sz7aP?Zd`?B;SyXo>Adv} zz;O#|8%{Qy{19!XlAS&kzPeZO3kznZX(kLYcpF7g$M?Blx{&ie6(;mUB)nod_)HNx z6#F@uyb-=)>bG6J-Dkp&diBHh5vVBUz=3aQK55-33?-QU1Ibfg2v=1RM~^rTycfjR zm|)b|@zlXJ2I4?G3t<;9HB_JMKLd{7k2{3hTVV|#m_tHjYk;tPIAp09yN7t)fnl>u z$HY@aY~oDW6uuT>OH899iEt8_(Qu`~uYs7s$g(PA5Nq|YzU>^?4!G?MusIE;=dP|C z$bVWYc%h`)EpZ72h;)YlT264dJK( z?jHTc9(l4)Wh~ieyGmbJ1#S=^5E-U6Hcc-&!46oBK&#JNsyGmLvo1aps+DE!h|<5Yu)uxx>N?npR*S$Mih%~ZG%@jweN9kHe35eZ&zx`-fWCTaH^ zG%Nv2^aFhCAXE^~hX6qnk!JL24_;S(Q*T)!X{;CI9zgCfw5QR z#>Lu?I)vRP;54rJxGPcc{9MJcoGrkd`l(U9YZV{VQSqSw+!EoI1|9%1V5iFT;@2gO zLk;3yB?SRvIOHOD2Z69++^)jc9*x694u`MCdvMW{mBtyeD+@Ae=gNYCxI^tC9=Ur9 z?iudfxiTz7dsV#Dg{K`BfP^Q!Y`AkuHQ6YcDVw~CyRg8uVcx@?hV|c7_SL8Lt6bX) zryYD_!9{cd9Ap{}J;WY@D-0Szb%bP#7T!pUh(Lt(WhXbwg`v}lj>GK?9DCGPK>Gw2 z{&?j{Z|ohs)x?!Z0D~XS3ELq5?O&M~(u)Mo!eao>#cEfQtDwT#*z7^9X0|rAD2gJz zHt>0D-$q8xOImq>)(e|0cA=XDOA`=j`3cn)0V<4)D(PwdvBhXjawW%djLV{pl3nK-Y= z7L62VSL1~o@W_4P!ok#T?aG2Y^A+Jxa^>L4Vg1a&M09U}Ban&1n?^nvTsf+WunV{g z5G9PjB1G0ii*jt$HL*e27EY2l*Ge`XZYN81ridS0b9jP=-4LfFW}X)cDJ2Jo92rm8 zDvTIq`Ae6cuypRClcMV)_$csg7Wg0GJBC^yUmaSRcLbc)BA#IzvW-hXOUFZ_NaJ=N z@XvzxnT3E|OoWQV=kg?6MmA<{IUn3Ko$}ZbikHHtJ5A9X@kR0w*M)#(FszB0tYdWalyRg*Me4vPrGDSnPCqo0MWL|Bn z+sq0T$XBMKj+NF}f{)CoYh_*QT4veJTh=v0Q}}=P-siw*`M*CupVK*OueH}+d+qhw z`<$VJmm_u@iC7s$3bIzUiL}=&b1K~xML9Wj)qrW~N4gM&Um9AJP(@L3JJy>h$A-p; zE938q!Y^|GzQu8(wD=)LT;tH5p|YnR*E*S|o*=&0AJ;T1b=uOb9!2@yqjaNlY=`8t zKb|HBwQluWjAC+!F{*_s4m++wv%*#i+9&C(pt~fkJD%YySs*b1JkG|F=A5$&I!(1PHOy3DooKyVj*uGi`1V0|v0tF(KF-md(Y&I#$E)BjAjgy=NNkMvT=Z*7Gv zMH?KJ-GpLA<|#@ehc-x&G8S!kzHt|;PC|P%Ze9O8v2k4e^U}uc>z@xaj&>RJTBb7Z z@+&t3*JGaH zEi1#Wb&x9AqKmf0p_vsavfrYss~$)9hWD5vme2nS#=H6_yynER!3@Ok{-;25>d!RE z0W_W`QZ&Wma+aFUw+X75ce(8^^hV=*iTiDu(PXGKM_5E6Eosv7Z}K_8p{Wp0H9IVd znTa-~T~5Nfu$1GR`?@=)K(sD`~G95xWkG!PE{QiESzZb9HrIn zcWHUc&i4tSi+1bnJ`?D?ajCj6M!T}#p{h4rothF?{9(nF@R5>I1>r1~Wz=$5Noj{? zt2NdKzobi+_-ILF7i$h5+cT7AM#iFCPzo>&tY_2bhZpVN_*;lseOc4rm7FroA;&M3O1Apv~AeO1w8Izj@X(%Yz+SzKv@6@EgU#1c`eb zt!dN4CCNvd;_?+!M^!!F=C#Y9g}8Rz_ml-RqwPz2L{;dOw$XY7zDc8;y&Il$y;Km4X_xj~h7VULd+^VBcLtl#$A?V*b<|xt>AC{CB zrX7pe%y|s_H$4#3!|LTc-ur=GiHU9}o(FzE)1w&C`yUQV2GkeGYv4Qd^7!W}j=Nf@ zQZN2ybi)Iww0&G(J%;b0bK+X(iNUl_WQww$c33hMYROlaOpjlBore{;k}3uhv=`1e zEKXGl>|HB`E&Q~hZQvT&R`wa6prkXc)+cq=VM*58-g}<6<gsM6|*YJ<&19a>eQu`D=D>=D{)jSSHjd*uK4+_ zfNuqSE0=R)D_5u8EnV?ys6#s(>gu$yxhq!93&)Z-rD$+i^20@l7G~kU2WHU}-sho( z3ze*>eTz-;`37y6jF9f7oW`**Ovwt@7MnUAZt6``o0$?*o82~u(eJh~JVQ-!c>#k& z?ptunAR_*IX4MbUTwCC6j{#y+n|V7NZi?B4xt#got|S$+!R1t&xnk62m{2$-6ov^k zr4~hH$-*r@2cPiz3ANd`z#E_6)RdP5spG&jJ{29E@U{6?S7H~dD=FWS)ofcNLZ{gk zdl+GKH!+pjkR7l zg1BYLQtW0&!7z&h;nWd{aBAM>t}w5rAGU3ihY<0-N6AMOQ=6qUB7Zdpy^MG|>zUwm zx~2mXpC0{1rQm*Qp5hhud%{%e9oAy7UKrvWSOe$NzlI1E-44l4@BVp*_QHY}Dc z55yrL4p=RZAH<;`ZVF=9@J2g`LqHsoHN-q3%WSr!{MJy#i;SwF3J}65bCDK?(I5@g z!C_5Q2f_l}Z+R2*O<7fDbJjDr^v}bJ=-U9v;K8isni;hVp+USI%Dsh=e?Mn*{wwo! zih@kfnO{2!u@IbnAJDcd~RVEL6K`l}eUnpM-nvQ{ZF@Y*R62@6ePcJSplGb61MHgEi4bo!?S zcg?lwpB7i?vldtRcC@_+_#w?z`j+M@@1UWN*|lZ686m^$+Q#pxX4ejWSIw@S+ktz_ z;@bAU#ZmaI6$6F@IO8VJYM`~FuO$z}cG$1URr0q+u1ya#g1r(~>GnpZ#KWqqe0U=a zWWqop=tM9O?uUaRYzTx6aaf&-H(oWlcKkC0u}X98{AUORZH(DAhMi2?FS1^L`vQS=2$ z!u-Y+ORgy<7iOQ3O-wG#K9S!s`y_tH>^t%MVY}C*2Aevi275c@2fLhwW>e=>M1czk zUxkR5WkIg^v>;RGyu(4>&Z->|+iptCx4Ueb+0-60PKXOK!K+<~aY3%6H8wn}u1EL>P;G~nmR5~P3?}V6?wkvN=4CFTvuT@`{2Ko#1*TVT=8KLA{$n`5Jp#t z!9P)5&I>TC-&D*%f%GVMilo|<}iS%|n+|r?{t$7*ZjXR9kfn0|HIDf>BW+t>j zV3EdLu^V9%$QB8Q^TJb5V>q^) zIvlLSb1*2Pn;HQZ#mq1}=iz35&3o__oi`>M!eh0nSJD#|k z($GHrh`SNZ=o8<`Zx?&MP>}^DVk zR<8>?>2or(%VL}KG<7CB^Qal=Z<&VlhPV`SSaB>#BQj|2|BcTDJ605vB?=P)_`fot z()IycsiYlyHIUX}#r{dqdw$~dSy4S2c@u}K-mPZElo$l_9HpAdf_R+E z6S+!fJ}Il%PP|)zSf7X)qEd<7$cY;AnPBRE0K0`chkY0hYwS0`5JdqPw?7WXsR*hl zq4hqJuX|jU8R<20f+BYxLx1zxF@fU8VO5i1J2U>T3OLqC38qEGSQ*BB!=ZD;)MDMmjqtd54s@q#yUUt>c#-a9KNHLEd{qj|J$_HBeKrd#n)RVoL% zL3$PGQQ_w2ZY^{YIwsgu8KilkbiP2Qvb@_huJonLmTBi#4!wzi_0?I1sKry>?X>RR zSu282k-(OhZ6zrXz+vYrgTZmO&@j0Flw6QBRB6Zma0CrCpMN>%1}~-@w2|9Jn~rQF zR>nD3wb5Cl+Yr-Y>h9T`ZWtXT4=+3?=#J5&tQmYJo*-%-W9;7#QTLcu?2pgXuv-?A zFPgOOs{z(s9bhA#bwb~UH-z^HHpK-IZ`@E~ieE;&@tFFnQb)XkKrBPB{s@L`)r|pl zz4WRUusbux8V^ga>MZ6CpBD9sw0OQt!49PdvU-pS1DG&?2?Ln^j{`K*4Yw&vZlng& zcH`PK8SCWdnlH)Va5RXH9@oRVQUuPI>B@0oP12oQm@FR-0YGP=d&hMN7I@_a#5BSg zHK(DcZ1mhr9DWG%V1Ic!BygVRDptC?sO`j&g2f2Y2Tiw}{21--x7e=7RK%tN8J8R= z^t^Evq%@?nglN^3sB#0rIjn*rFyEw~)eKMR0hu*zgxqUZ*0^F-;!5aZa$z5V3}!+~ zQ(T?U-?ElUinh6>AcdVd zosR!FMT>!HYe??SQYCA-84{x0g-Zyt5W;vKq$LBRnA@w`5@aGPY$n&MsHt4n!I4y) zS7UB6=zq<90%nfFBOTXP1brN?dE+4?5&*WG7>4g1EQTCMO_j|-vk_*?=OFRA*;bk= zWAA`dj+iRD-vQ^&d)HJs=nhEiEhEC6l{Pqqw<#ki#l{?_v zubC>%;-Kx%%jDUPCAQ#z$sg>hIhcZ%dv!azGu`8PPNEMy5H`!yeu?5O)lgFmMu8Tsddm?Cgs-OF=BxhV zEF02KsaZjKzO8mbu`1)vQb*9WI=ZZ-f;S^Fd+GzS%iYzs7_n)dw+xYhM~L|UON3DJ zO=W}rY?iWM$TO7{+yUo#%2ambuW)?B=YIkv-Jg{xm@1EBz&qgFi!tCGaGpgN@D4bC zZiDVgsbUlaE%Us(_Id5X3my|z!CNlVl2Or#XemVVKb++WvN_iDR_F_l;Y@t1+o)#{ z{rRbjtY?guLOiF3rddsCLDq(1Dxf}6lvG};%yK10tD>_dRTa@+D%UHDf>2%%Evs<^ zEwiE^s%e-na^Lp?-e^#wayja z6qzv{X207weQ&Ghz}6|_uz|D9Yal-lZqTm&8T(Nro8SSbm?gVgSfHMjP&r38pWdwMd z^BmY}@sfsRh-zs@${!Fbc=$Tgu=mY4Dl&HqN=waJ5NqnD;TQ-2`R zD$czeS$4ab2EDIzD@36#Xizl>8qXKrxMv~YaP$p>D&FF!+KMa<((?LN6vV3C%(1Cl zI<99ah|oY ztIN8+)gtY!vMy^zTqEQ3hVmCiD1msjqHE}xEL)ytr*>HPtrCAIUz+2n6x%OdpagzA zDC-cu(KeWP3h=_4(6DTr-|j`-wAIb~%0B*B-p3X5H`S4Q#Z*xk3k|*>pgrZd%Vc@h zOx?YrXhup%RKs?@XrSEA^U-JrHK24Pn^>4pYi=mguuP`BCUyO z9ekhI(l6pZMf=9-@766b4ewXiQFR|1B-<)S2$v9jy#smMI9hlit)cV40g|wAn0PNE2u-Q7O+#nAml196 z^@l&*gg=p#wJO$7B|f}MrA3yBx<8Gg8+zTBf4(iojJDb9M8(-f_ut0#@BZ@)BYlH`>(TLwDIBT{y2 zF3p_0>{eX*EFHJt`6;Q^>lmiEcoiKor3Yt+mw1d8OsSObPKWlb$jB@s9ASzpTvc&n z+Doc|p(WFY4wu`T@$hEC&ItwmJq3beQ?gJ79rr(Vc##f&A>n#KAJv6fOuJ_vk{_&8 zPM|f}t)&7A^JvtJxPddl)4Jpthbf;>(=H`tF5t%f3VpcK6)W-`O_CL<*g~&w2HJ|o z7NpDqjcuvNhdW(rE2IT8Mn(wbYfB`}+NF}lRzxq(NVNjz&@L>c$uoPjEnJ?IGWL%& z-=c?RrTl((b3_*$-G4U)e0MmkziZU}VsodjF!#SHMLC0fRefJbY4^u|TKGvf5FMsP zJ%0vKBTht5&YUW=hcA38y3cA!+CnF@}KiZG?f}Y#Q50m3pu5lEa>4%#m=+pB;y7))c zkI7$lB*B+0*bm2UMA2oOMyN)vge>_L=W||CY0bEn-8S=}XNrjECX)DI{hlGsJc$mG9^#=$Gbo?2t6U1Af~4k>h{4R<_*T zf$j1IH`mu;oU3wud1j}GvC`IaZSdfGI}8_8cssw4OjTV&FWm|kZsf4UrIj^2Yg+}K zs@CHB6NOG(7(?6^>RFghJR!7ta~S<{VUr}D%YEEp{ID2QfWBE7+ov3Q|F>-w9}*ClN&KKV(~*H3IS>HRPLUz zp}q9d;x*D$)84FD`q-DM1SiNb>^)6vmf@D|7O5|QF_0*AH!_1WW+?vsNwA@B2gf3|ssk_c%6$K;Y% z9Zivu>U}!vnY*lV&?>s)nZxy+a=rhbPNxeSI<+W@ZX)Jf_<_#!WW|u8Al2YR$1Ulo zf8nB4EMKxvwa$iymMuG5VO!QkXa$F&r>VPmq?DuRpLBKc(E8rr7B}>6@oYfv)yrF} z^*s(eCzK7ve?mvE5XK9YYBcumUF3oko~0B2E&>f``c|}9`IN5rv|be(R!vfM{d}eC z=Sw-2qu*DA(v~8xI5gyy@T!>ee1T_15#5y4TtePd4)r9{|Q(ZaX~k)b!?gs{e8 zjo1vLa4ikzNrm)*7hBP3F%cEdy?9o)N$tNh=cU$CPnFl`>X$ZJg_#X{p`!20Yw8!W z;>;@mWa>B5+>KqDtZ`z7m2N3*`X6-f#+$~vRUFvVMb(pt$`oP6t!_&qDz%l4kxOVH zbb4tI{)~FYR8dm8PbPEz!Rf?T$JcW``062brc_d>uB7HvOE&2{hZvVr8Zem?mxO!XqCy9y)zndp%S1 zMcJ?UjP{akVf8czw@uYe%Ip)fsxs-aG@{+NH<)+9_MvyA`!;~C`;I%)t=_Sfd!R$> z(Mp%SH68KV#ynv}YZEEKGBw$yJc7B4=(z+L!h-FG!1qj+_?1FG6guK`o1I4FuIJf< zM|7!Y|EG>ycwFr&d3bK&LFepjq&sLd_3Vrecy2-cJA7-^ zjFj+2omU^wXu9Km!=2SzR`?RV^m-2mDpyz1{taALl6FlR?Y?WOls~*3-LUI1UO6Ko zxcRF)-KI`a=)_?)^g5#>?X^3)m0XvBRLj)qloKi7Z;CH^iRSLUD?*G_zJX`$TgE%K zyS4Rq(8Vr+OuJKgHSJ0&-$1+X=^+ydWXjpoMS4ut#ELC@Qi(Kzut`!O>6x@!>!_#~n7URR6HAhR)fat-Jk$^vwP))`O@YLPnI*P+vzm+p34?Am0c2$~{6` z9C*qq69@Jh2gb<0X>(}Jf!1x|1<2>u_=@S?ScNZZ_0=hQn09}ox0Kd0m*(QR3}b19 zL+Rc(-smP*ZJKVqvtenfEIgGWxdPf~pNtLn>0a~zEqOD}x{!OM=B+sS=6HSfX}S9B zpP=0jwU-*HZ+nu?Ig~1eE?hwO9(u~PNCcc^qG-~P{)_neIuBO<3ZIUnqu*X=gn^3c zw^P-&K%g{!hMf~Ze_VZ3)7xpXzoYe4Fka%jP%+&8X@QA(VCS2HNZRNG>=n+W#u`oQSj!oFwJCT1IyrZ*3PSOBr^(^zX+b=ugLk zn|#MP6n!E&94(=?6C>q^lIdOP#1pM0xA;^eiL>4%XHlPPsu(<3uW8jP4wIMM@sQ}LOeeg&+hH2 zEA>Ti!CaE%#N%;;WyWTmn7(~-FrN!DYipgXhBp6TOp^ zn}sjX(hs^w16Z?#p8epOt~orP$`AexbG2L@#S7JnSs#|E)+aEzXNT{l%|CkS9%)W* zO54OKNDjA4_vRGYen7l(;%6|T-M>+9e}ifzCUNp9=}TmLdc~fPdo&nd-+x>)279-n z?carT+cILVdW`=;*KJ8=dLNuYS|L<3ma3 znRJ_Xd`QpzD=xyq?IHbiideIwz4i5}u82A}lC*_Vyp@$NIq-EEFTt~lv)gB_)nes< zMPJaR-}GoF1jMsQ2hc&asHfh|8WNP4MexcNJWRZH`1YH8Ihpc*(mCgQ*FWz#-?BmI z^S|&hT`S5q@b3{)u3`MNp=IJrH2dD`F8kI}diLA)CVNmRwO#1lc_G%QFpYnshgX1m zZ@6MgZ@6NQ+;GL4Z@3c7H)Q;=v`Z20vZN)=xzJLMTh)}Vyf7&OveTkZzvQWmr#7E} zi_TK>cV7ye^~iry7GnWywsWR3%NO3#^e-xEzU!f{isfIl`@gTbAOxc4x3Xq&FO~r# z4gT*}^yiB-X@ zVZk`r;XI>y`Gf|v)7WU&>SuEo>lt5u<%WDN)CcvC*Ky(W+@?HPts$xoCDjxV-Ex}4?Zu9*GhoX!2jP|n2slAL){4zcHQ}4FCQ%U*Du1))2Mo3m&rN@=?MEg~r z@J}@MXHlwh`ig>|3svs;ro_UlH1wBnQhBu^;g`?#Y*6?swOwhiXNF&BFXOrJXFBW3 ze`GsoCjPdSKZ9W{b^hL3Z?C1vS9|NvKhvD6e@!#!cb!K2g%1{!D$IV~l6e=CGwDvLGMVeK_*2x%PN-NyR53}jQ-4tbHyJm759YCN_|(ryev(1EHQ6##U2IjGl&JJsWfk5POI9H8#M~1 zO+Fz~RXm$$Rpnl!JZ%%(0gC<*2gS`MZ(I=Ry%8%x4f#fTRJ|A ztlY0uTmXKpW|o_v$}X&hO^xQ0#6E5lbKBI%bkk|a{5ExHgdLH;c-ZNbv%Jzg`MXah zybeBRkcyKKh=nub1oo{RYxOt)`>>8|P_X*7zHrIDq!9I!Ah8H>g`1fzTutSGH(lGv zGQ!oCO%O&*+lFp*+2S_3wgr{2#o=mnJHfW9i!fKQ32+CwJZ2d`%0Rr76A#_U{G6R2 zPVdfa5$aa)%bhB1v&aQY%Qj^-x7eidSN@Hij8JzAg7UP@6szRg_Q|HKK^DTp61-zG zTh~I>O+2kHTiH^bWEc;-(h^D%PE>gpi;7fVkO0UIMyez0F`=#0eJ*h0smx&f zq!_yN*kG2?MorTL*ccxET}kE}c)RrnqAa$?gRc8N;hToa-yN1C*L)&z7yU=(w!s6~ z$u{b1a@@2LJT_!EK@|(?-qHiAGJIFssY`+U7AE-&Q@y|-~AA7$e0LMAr>01zN8O7hwY6w$O`AOZ{yXCI%XkT-cD_)Z>wrjpm~&J zr>TX1=!V~}p}L?;2IsOP?bK1mZ|bC57v(tcb+;r~GM^CQRJ9iJ z@$l-!pR5*=4zhzsoG*x#wB$Jo2`G$BpnI7#W6RSlryByfcwK$W>^s;^eZgd1g7K`@ zLf^y`gs#74#y=>u83#*A^~?tKR>xR{n3f_|(px<&c`aG)o7G1>OmyfuU-DgQq1q&l zZ!QXds9%XA{nWTtw>65D5CSb(!OZ<((E3zaa(@_}0JN2CbbobB1ORx}^SYi^rHF1v z*D!y7H9A;GRkfBErz|;24P&ZXb@DC{;YGRUv2;mU3Kq7d>sc?iTF99@v@sjl5x2Um zgH#GOOm2RTljzW@>$2=aP2R%ZSe(m$WDVL+c&v@IRnL34nuMfLhs+h77s^Q6+rnORx(@-lfc?N>>x05Zbf^t zY*%f}Gh7XCyl9YA!lFG{ma7)gX0I~Kwi$a^(g>(dup7IFWsES`rSI|08KG8^!D8at zt1|g3y(rvrvv%c1ifs2uK9>Eug0V5S3&w_(W zQ7-vs>h0UaAtin*G<@Qb4xvVHIlR(+4!@_woHa#a5&9r2n&!%v{_J-nkRgcrd%Yi>=In zdIaU*-M$?e>PFI5sG;&_y*9ck)sl881scT$`X@H$KBQ)0#~R*zANj)oQth zt@2ew^gP2(j!~oSVo9&!CzKh2gf$wg?%)OmulU^OAFIBh>K=HJdB&-|rwCNxdC9uy z8>xUL-&3s`AE557)kO)`+s|=LikKqQvE*y6IQ{`C|6qbzj7r%5kxu_FUyJeTB;E20 z|IMD9sP>TN9rhzTFcHB)OgrvJ=9#44C1+Cf13NNF?I?ksKl*AWsc|B@VG2L8*eR&= zM5ju-)OLDPmN`Y;r%&sqFDg_0!K_0H3&~b{x0S*oz1d(k_$8g6>sM){3t7jeXRA|X z==hT+RCYESm90=yn3-*up?1;J)=mCXc7E=TyP0Y$RcQo;#CK^1e)wwFyP)i#@05hG zkXfp6j(F#uLuRSkpL))j{eS4WWw!bsp=XB{2QeRpo@I)<$<92ij*=6IyUCL0sir#h^XY`obAGFrUe zmhvpfgP+iRxYK8!u=vmoho|*6_JkUDM{&+PfvM}hOC3?L!T&?(3=^HA1EOgC1N2e*`CYwUC$ ziUy;P)1$897`*K?vjZMUhOBC4mpp1qhwMW{;Lx90i+t2b0)UMT$u~G-9#7^YpXnH0 zv>V@>o7u5^wW;j0&&YF&aDhjQYzhqh>5{vWs3seq)m60vWu7<+%a4z!)Xoo87d1IIF=+4uyX@ z2={4Fw3)3dfChyGaTa!_K<&~>0EPH9so$x4fxawjG!|Q^&c4-E+#POZxldy|3S|w1 z0#svX3Q?L05w-5jS)@MIN|zVxN8`FC*~6 zjED}zuz+kEoAs?K!wOPNbc{j*uNX&{S+ z7>jY48Pagh>jFZpXI+E!_>x~xza%m|RaVP-tm;Eqq8vTNVmHVYMZAgdWo$r+F01$S zmMrQONdB8VNnxj7ks1SCOBPb1j+7j=wtDf{Msl>qvz!uH^kZMy+PAz!y-VyuP-G?e zsyC?@)ONC#P0(KfH?BYbyQSS9!aUtnC%aJ!2Qq{hQHD%hQp-OFd68WzL&T7M+Oy1Z zBnktl2?SQY8h}aIg1BIi9oZsF7UYwjtov4AWIflDRd2;16v(hq?#+&Elk1E#z~1cA zHq;*iQ`DPfY&S54y;<&d1C!o|ovFv9^tse_{ zO`X)O9O>MW{yN_566WNg$o)=AK%0Y?oTA--$Y}R%cuj58s6Qk`&(V%TzMnz$94ZRa z9}OzOQMCDg!0*va-u4As&!6l2yI%O-$1c99w$3X96D@65L#Gn_s7#0v)X;{{_r%s; zM9TBGwDT8Va^P>IY41yu0~8IWnqTMT(KBV?5FIxRTLgj2!wY3SffWwdB^%k$5#KjR zuNbf6CQ&WZ`1M?!#HEdqxT)ikJzAiF=KzN zPJFMg#X+@)UJw`d^o@Q;9c9Z4SQP!^h*kz8&O>NO5lawxOS^^z6z!fCx3u$xmGlv} zYA$`UP(Y5*c5jI*9FnICH$|vUApI#i($HLHLr0~j#8n!an<+FW`nkJHoT0h&8A5Y% zz^*C6B=%J_2)j$g--8f8a!J;O$P!uTiJtH4nAe1DX(Ns3*I6|U0f*CT)cjY*avK*SIvhYW>j_4-?OP*lM zPpbIf`A>)^Iie5i`hnW^&)B1R68rK8YG>6g}_{RfrVT^DiOfK^{np&geU=IuVgja69%La*E{k0=x1ZN+W}8#P@2Cb^>$Z1-`}q-eXbDhicz?@vAHR zND9A3s#JUekD<4GkFC1^)~sijzQD_#TuBy?hOURS<0?O~k*css$)5B1_+ZEHR zRfREPR2Dt3e_Z1fbqhgSTn| z2)os0*pO@LGKoQ-GuNcPVAhQK*%rL-k-;qY-7d7uzZ8Z*< z_1jXw$|gGRW+?aZyLFKW4(h^(=r{+ed>!Y1Q??aF+$uaO2C*VVEdpf^L5XotXYw<1 zhmxVl>9|;ZQtf;jBFQSX+lvq(_<@d;;1mF#%w#RK z;1I!W;(ug`Z~i3pjE>m5SW*P-@Qy4qinQn99WR#?82-X+YYD9F$o58&*%GMg$YNWQ zRUM@D>Z7J7fTvNxeI+GIYcI!0Px75>O`cP`39FdU(P6@ga)3nqo7>wZ@(EhJA~~ap2p#ygBZ1{a6A?QRwmY(w(Io6vVJ-N}D)qv?B8AmDOJR$; zuC|Bvgz!*s&G$Wy ztd|_MJ8b6bKC$3K@Lo8cOln(C2%_)!xptMETFuu}MEp56hz)5+eye9aD1lt-Z{efj z?_yeyTu-@(mv6RX_=A+@KYTH0e}+8dFoDx~aPq!qcQiI%cO@LT?n*4Zu3LqhJ=va& zk!ng$XJ^`zU*trqhB*rPkuFi>N9Ue@H?$M12drLvjPChf=QMO}2Qn!_=%wsQAId>m zRG#m97561aDa-9Zx=3W@aH**DQ9if}-bGIK9qd4sX?g{TzbuQ-s`2Tq{;hkyUhiz> zfALEnGN6qI9ni{`+fVDX+eBL^cMYXnZ`w1ufRV#GE_cXqc6oT4D1cs{i zEVdWS3ZvtXFYaTbdy$*8wAKrE@_X zyT%yXVKrZq;}6Eh`z|u3olcZe#a}pA;mi4gniQBhUUk}F!Pio@KqA{x3)^rPB$9xQ z+T4n78s_{AY3G~MkF>wFB9)V9?c3reD}#cdWPE9_D6`mI!^lJA%uu#%7>QIfS>-U| z3eOxCqqN~9_-Dgq#x?pNs~tukkTraF}n+=Z3~I+aTt9^^!e{KxfN zoyxu%O`g7c%BUD+5a7%Bi&>3vPg}5H-U8g6pf`Awra6_q9M*YozWiE#HX8qx&m7({ zlwE~roic_wl{2_D;M#?2DXvSnl;KY02<{h$Ht-G|#2n+cuU& zhL?k)~IA|>=!3WRl$B{+-R^A_@WCQ2cX>e1V zxcC?sS2|&QPX346<23hpJij8#tnT_AiBG`wwu-gmF;YgKYYXZG?0 z5=k#Jnw8w=xQZ4Mr!ysC2qh;fxA!=X`eH9w;yuHW0P}=54kKvM-+i@5?8^ z`yRo#u?jZqT%o%%>l*~@0nFP5q4QGQlkRsatI_EsX1xXQ>1miD`Wbx#VWY1{?^}aD zfqlbD<>;&+DQ^}mjCB>j*Puhf^p$s3C$*v1#Oz*_1bvALvT58 z8UIu~99+mYO(LD@X~v+JS-zMshEPA1dH^hxaF$t0%noIGd!SP8qO zgD#r_2aTA_)=nYMlf9E!VkT*$#ZG~H)%#u;E6F6y<9eZSD!8ZNisGZpo|*kfZbJJV zXy=i!0(VtJE^=fFOPop~+w7pQtErF8TbOIaAJE|+pGeYbEqvHKDzU{pnkk(q z7T8o=2K*47odRaz)5rkwXeOI5jjSgbQ+-#bk*8JuuxL7YQ;l!2slhxCY<4OcfJblR zedRwsZudNh0kh_rZd8gMJSiFq2Gc*`@O%3$i+A^SCJ%bI^rvzE$*7v&q;t2WH(GX8Sm$$}x-*HJc51ki_ThJpiMA)2SrmnuDw04W}~kEd+5~ zJ9zs+jEj2+?wP<{#B~I?zPJxTdkftA0_OjWu(a+FRQR@2c@n&*J(ip8oVsAa)W@dH zn>QzW>Re}L=9{x+)P8Sv%>6=nv*+e!&&*!n%mkCu4M>6Oi|ofkCWr-`HESx=n=7dw zlr?~Xdn9+k?71_YO4Ng_-$O{+&ppWg{SXZQ+=J}yIb>MOIndt=UOWx(NDv6O6fk>p z4w=?$*F(1|4*felOuitcbC`WD6s7wnlnE}Ndgb9 zrXU%Ww#;XZ9|6j|Kx+F_pqjHTbBTjxK0;#Kj7EDH+KO=T60h&VxpSvJoISlCo_j4| zn;s#Fk?TOiE0>M9^SbJF-1#(iFJRw2Li$bq3@|S)W?~x2xSxUOhWkdT(aLFD%}uzp zXr&kKmvFh8MuSrRLpLS&KgdD<#;SqlOp|CO^hdZRt`YxX&*YMO`_FkKM!6ewfxH(h z(TcfFswA-eBzWq*Cw0oh!`A z1H&WE8B=G^$(|0_z~=(rNb))OD6!304Y&pH)1eWraQ-h~61TuRf}u=Y%fq6Ty|`vU zp*(bO``Lnz(0Ac8=yO59p}mi@Ar_h+Wr>U7#>tPev5U!o@TVTt-COU=`=4#ib}oi1 zuLEuf;BPb-4eo(3U%qvZvdG8CfX3@OMl0jmLLO%{Z+q}DvZ&dN#WBh>(C~}9?~KLl z*T;~0rgvt29*3I)Ui3KW850V+FkI2Nl5kzQHwM%Ve&BAyPCZT@&pY;*Oq6#47mUk* z``iZiybYcKnERhWKM&8`PYpN+&pb>S@B%#Zxfw7@8YL38t@Oc2M&r|H4D7TQaC|_g zeRvLJQVe)#0RCA#^Rn9D$KlQbW}TiS;qgZMGiXZ+pew+094@|BIQAHO@JSMB+R!ynU z%Z-cQYxH|^zK-CHce;)|9j#0RT`3rG8nd^7){J(J=XZ`Xo{f8T0Dq$`aGWDSdgp}p zq5@%8o+6=bH$5pUi*l#~MqK|74yLRgC=}O`Wjswrkd&v`%TJR9{n%5o;^Qfa$58|3 z%M%E9&|%!fKh7~HjoqC`2GsKyjyCT929F7NP6&XxS@58nvvBTXS@Wi6Khg22WcCz0 zl}CCuGx~G^<8aZ3g?q^3F(G+~J%BI6Pq?q90p=bv6L(&Jq5mEa={LaW{|@?dQ#0T; z1mAcBz%IbNzk!bh%uNh@y5^G!1osvBsONFtpHCL$ZO1q^Y-ydiPT_eAuJ>{Ae{bQw zA6JzQ@50@Ws~2b$Tp#Q0oc1+5AHr3F75azXUV;02xIV&F^K5i|66w1fu?*L-XQQL* zclD!JG!P`OM3%t?0{rQmF(iuY&1e69hD4gzfr=;dv23yzd%E;z*yCOjW6ya;YHQGa zzH%@5w;GgG5Fj`>Bxh>uPj)0<+<^ zWx(&^nMZE}{sYf^mCv~uI^2D(_l|Etd(@LlfMvF~3n4M7|GXc_5-@6Sjh zW-cbqW|#2Jndhn(>@u8RTFQDBlSEt6GFdmU&)?HJ$U=^n3*7xqe}j~Ff!8a(ZN+4= zM*J(7eI-c@@~@CbI$Hw_%4pjr463PNP)751-rSPCO-Wmu-g_r+YRhU?k`{LvWUpgb zzAgrA$2xJ(H(+iU-2M#M&0)5?h{Uqzibw>Puy_^h(7^AI!-i4PM6zX;=SkOQ2Kr0g z4A5=Z^Q7k_qrDrsb=aPO1Bab+8+;xx&yhy|pKpUta+v*cP;1V9_&W(Gb0xGumq=VuB`kb1c1gD9Zq{)n@_!kOd%hI(1wGlDrC8@) zDeTu$(nqak9m`0HWmm7-I=qE#bBaW;{4&x?J-}WnBLm6OzU-Sa60Z%ptF~?k+wCLa z%vDZWl8OCTzjCmfF77dw=_W;)(~qq{o0i*;i}KMnu&OR6vE*DoHu+VO$egbdo9bti zUL_s)v)R%ex-D^YWLM3TT3c7jnx24*?|c>S11_=Suab6Z4g2L)(%;l#U@eRIfW+B( zz1Is%KVl%8wuQeF7|5RALJ}eFp)I68nU%(Bw?Hi1~Xv!2@_!sy{_@^;W~7|zyiM@gSEf_=Ol z3t}6|!gr8in){yGx!c0y?jT(($r-hEI4$e<7S#694ov+LyT)(LS)-lAWpN_v zHXp@?y$03^qu7GiNLMmqls=W$u;3F%u`kf59^~}xw1cB+>ylV%IcXKdcc0zilu-Rn zlA_(Xw|-*KbTfM|pi6Br*RkI2u?D4`57ivmt?yXYZx`vQ<=kIe*PXreE@{D5?Lu_T8OOHmLblw& z{}CaI-o;w) zB`L%_m5tqtHHgB=>gyyXXep9R)HFlqta>j7b^chLFEohEq<4=%y_N0e$3Wat06o*VLDv;-r-@?M2WWC?QfSD`U+_w1 zeG8^=nrR223fpSd=^(sf%W5|EAm(^_O>Nx)7R?p8;UH;2Caz`s4`Pm&*$)S?ydf{J z@Iwd3ZfsJF3lo(;8i)7haDh^85DlU~I03M+maE4Pb% z@-~@AJeyehJLFz1qqMf}68mT;YT`HEA+0o}thVkn4`MCYFYk~DtpxBniEr;Gt;nEq zmhLD0LUz0gLqSGY1~txL(K|>hw%t!!Ypb_%d)fF8lE8lR6PJ3CwLDCQla+hejKgFC z20wh5+^6+@tG2FM2At0C;+vGyY~;J3TK*ne|1KG3F;~{s)tK2&SPd5X9vMxZJkFlp zN)V!*FqPvxVszD3AFq!AU%iLmrkvn`uaht*9E~V_-AgruY_LCqM;#XHpQQJ zK&23a+{q4A!WAY~*VZLSR|q{u%t04{nvS+u(H6whybXt=v)H66M7r*HJk1|F5cfxH zauw#itBRP(4hdKe0N>(c_DvPcZ|TRZ@lh09QoQ>T0 zMFPnjxS|6Y01%SLAA_o=Ut#6P5PWvA%42Zg8|(sZWXNyKavUyrwnnHc$PF=j#UrV( zsmIAc%f;)pb#qLt@d4P>8*jowemIULzQh`xAcILpEgO4+Ofx;H)UmftkZi5FsScL4 z>P<{$`1>SU-OC<+9}aqet$Ckxwp=vV)zv6$#oN&E`S+1@wrH&OeKNqZ#Zp&Spt845 zkT~|xN%T9%o;!)bM+DW?4I%8`oAHME>PftC$_QrRAHZ1(g6ohb^0y*R3`)cqZZMns z0eoc_+xP*z*3*PF{tzx6dI~go^udu1Okyr;?0ls92gYEnf=2+mU3taHHGf4Bx z(Uu7n!bg(vR=*YUdTsCz(g2LjDh|{z(vX1pHC#}PHAXT8O7q;_b5^p-!MfMk~d>T8+i|ppd7=K+iHsBu!mAlyN ze;`y|WH0@L+=KA?pMPMLohhv6X)tm2VUM4N%*WW_)6mTs_QPq|PiQ}8{{*@5G8_2` zvO^79_6ccca;Da?x(X7;P178|1qUxJQtJ?6g`_!wis9~g4EWMP?AK3Fcq~t2iJy`Q z+LiP=q=Kd&B9Xg6QqWCNZm`!r<;oh)e*F}Y6D3OIXQYowxu=dz;lb>Y&q!-auMDV+ zu&1%sY{zFLiA=wjeeoI0-p{UmMmlJ=(R`sr`s{lKp3;0YOFx4}?K_&yz+GDkyr``Z zhdI7z8Uw#gy?eJ+|kpHU0J&axdCq_LsltrE;ZMu4f$qk395ak-CyA&`#`Q@-n z#it9+oPhX0Rfz|DWEgw!Ea{iW|Ig|2A5kWv{S4r2K}D1z9X9aG0K380fR_W#2!Q_% zI1?~GN#f(ap~D9KLBL#21I8)TeL_&9;aw1{0|7izFu0_{2L5NjM*9lMkt+-2)t^N+R+=7(sNu`*5@m7 zceAqwA+(eU0Z$HR>%YQkI@_{0zalGI&5Chi82(RHo`8TuK#y{UD}`nKi!3C)MzSyd zg#ex~oF$$kZJK3_l>1Ds_O93`xJR-HXeTR1vd8&-)=0LV-ya{z-sJZq=+EzCN3!eu zUNVwJeoflM9{`^aIgs)ib_NL;SpFl*F2K%sXw1eYe@!CuqV8@mvF6x0^aYH_CswXM z;G_WjgMg0(z-s^x(sz|yW7N0eWz_ymG~2xT-} z0RjIY%7A|dyf^^94tQw*d=v1x0GRLAw*clG_<)HzZ1C#{_+$WmvMmqx6VT8N1pHGf zqeD-?BQOI4?hSZi0NfWapP_;854a!z9sqbl0GtMRM*ut|4-Mx78ioT-!15Uk?*`l} z03HR{9RQC8%+1E2zaQ|}0C)o6Spo1Qz>f#Od6{Tf5zvqYxFi6c0hrs9F~DrVM*`qE zfIkB~5CmN1Oot8n^?GDaZgd90X23H6PesH3Sbh7QVjhO4JAd07ea`Wgpf)~gAl?XgfJ392qAtl3p3elbl9iqqB+=k0+vOk*Q8gmtQqxWE{c8V za4h+9QM-a`*s2}5h&nICa&0QYu_UypK%4w3wkMRsTsmKkRU-%uhynAYI%)r7tZ%fG0qpogdL7xC{*#2k6zE$hCE*S%r)7m} zpbpET;(C+hxBt<Kl6D{Cl*1v*>6OmjR5zWo7{X#TEPIWdCK$MCVhmYX4j!@rAg* zS>T)5ez<#T5IOKon9+bK%+-XC)$2pSZ zEV&WOfRY_xQC9wz4p^QT$Rh1&+LIX@iDTR0*(M<(;ap>>FcsGxEZxbLiKgSxWw}J+ znONTCn{L^t8m~9L9ozoy+(Or1Qlq}%k#%W<`f%)mjcJFq#AOc`V`)$?ELk2T>)VQD z5AUV}-DJQo<4K3)Tu~-^6&G~zUb+SAe^obM@D>SU5A%Kp&n@?U4=*^}dj(!@{ISG& zuQCtbk~NgslIx0z=i&ZG`1+g06hu@=w`|0Z#7Bk3Tj65k)>z&Qt@-l7l)1*+V;O+P zcf@wei?HA78{&^R4`oW0HcO}YXihVkffBdKN`6geptbXy-_seJO)GLpj`$;;VtE=N zuHcZ!4i)k*IV4N5?10|9w)iXEL3aq_s1F6Q2YO7WV3}gQ_Wy=uiq*sZPN!6_{j0D{ zX*C_n0IuGY&X8WZcQbn|Yoff#jKnRXBTRy<`Xh~{!WnoS9i&?(It%N2%;hMbgBR%@ zbKRJQa}{pD#8*3O{qM27Pd(WI?tf9w{Ioz5dSiJrd$LEwYn(OyFqRI}EgL)xL z<8kb_`iB0@hzwZouCHU+p&Uuc{eOX}Abb2F?s}wzWy?e>@fN%(A-R9Ehgq&D8yLX$ zNi-Xk;1zlZi4Vl9jmP5})817spXze|;W?_S01{t^rGs?KMw77&Ks^)1bjY(aCOjMM)rzM|W&r)Md_W=HGSP|n z7UFGO{zNPvWYG9^c(jQx!15snjX#Sg5RYY1NQbK_kWW2m!dkqH1U=>jJeHDAOK5yY ze2VFy0wRbx!6g_|oOofNUd=?_P zPSD_oxZF(XN?d9D8NST;3tVUX72bF}Z%0WtW`Kev{2f*OJ=RZn$P8^m&ti=iU|A#T z9k3iS^-fq0sd^VIGp5er(XlCLPk|g0P1pm=F;?$|WlGg0m?>;@CoG3d}VrPNTFQ&xA-MJM3N@%gXIvY z-};sHFQ?racb=Zi&1Dk_d9K1I++5@|)T zISun%`?qoK%bFPG+Mm^0u0L**>%cP%&FmWeLK(@ckRapejAw0jp1HU0~a zHr|~J#(3jOT-QIBv@Y%U!}DmrWzt(VjxMKQqp47X7Y*&Fk`~W_}{qUA)15t)6 zSfPoR;4;hwHJQN^a1WC|0k>?-=lTC56jV~c1E8eBO5A^7F6x8j7#*`+YRHy}j>DtL z-!V}(8i%jL`k3zlJhZWcZ1g_vz#gCN@;5n4Ypnll)IfnudAf0X<-Te!M9r~&LQGE6 zPR^RYKb9#~ABbhmsLQadDRmbtYeqKKe>Unyfqcv?-Llc)xNx9%1(uJUX}l*MW8520 zH13OM7*}HX*qPSvhjScqw)Fl#kb=%>0cF|fL|krMg=G<@TQ(YkWf7`}VOfOg5m*+X zdL*8PM^GR$c(ZfbKLxi?Ad65d+=^w9sApqYWa_)HEK2n~SQef7J}iq)U4vzfsUOC& zh?D)7J${q|Su~pPIF?1GUVvqhsh`1e9;aJgv=GaAo^H*f=drzzEyjMUZ}_`SCb@9M z$(2eji`!dHeR8Bh-_XGP8pVDp_a$#o)mluW$c&Y5Hp zcXjdMSU)Q%1AYMOXCK8M@!+uQTJHa)Nrk*<-(A>4rZ630^XL^bWpb_mE|}7_CN9q# z))`Cw);n<8avdq6eYuWY=?vM}d%P$nK{}L#g;IdiEfYPDr*O>WZYHbtdn_LU)c6lr zJ{~EDNb2vzV=b}9cfs;;Nx7RQ7cys!ABSW4grFAmr$9b!s6GJ?H9iR!4)XDn@p|K- zSUyOo^-sg{i9_}2SUzy5KC_VZFP}8jf>9*MrxDfv#pNe^pO5+2Vq^S5F`v&Yp+shA z4wg?ZrduYu7gw41J9zw1AAhfq>(3-pu!4jdGi6w4t=w`}w|mQS{->u^Me z>Tj@oiZxkN46qe94Y9_zi7Ajh(1HRiA6?Z7hdFD!JC;3C_rUf%?}hzV-!Pr`8q1o= zQ7C88OIQxMEP8SLD+O}QwV-`|COPJ{F5yWm$5>yIX(jJL)d6xERbn~jD_#BsEXTag zc>$JVUg`V;mP76wN4ZvXNP$)ugyop4r(rqf#q=v9eh14jE_2T3&CGI4le2*MXgmq$ zT!)|F8WTT)S2E;~c244PCVG$p{dBTi7&>iZ6L_+SZ3lm1+u&(jO6?R+$94cmn?oYk zg>!Ko14uS`{(l|?_85*a739LQLo=q73ZXviUNWJx-5dhF8sa;Rz>~TGqhvSO(PEwfD6d zfXrC)opgZgzr29Zk^;ZgH*9Gv752qL&6Mtk*A4ckX%*gtdC54L;%jm9D*tr;3B1bW ze~!15xb!c_q~*@MghB@^uw1KecTNYDiSEQTr}>*nYj#zv@on)EyqE&1Kg(I;w_*7N zy3B~gmpdo>FGKi%g1JnY-faHG^2u?nP`XQMZSY_$AB)$U&l%1dKMTu8-Sy^kyR*jc z#C+h~_0ItAreGBV&};cJEFV?Z3h&}VKGv@Bzp#9aUE}}Y{w7|$EA5$hM?B5M2jVru zW8c7u6m%HjU4=&*55YyJ`}i=t#CQZQJ;TRG;z4J6pN+eo?R_q;iqFkOlcV&Qd@Kbx z-7?Xqcpi&p3kqb7G~bQCeB$QLopG&MRD(;8+SY z;Ta0#5U3Yo`3eKA@U64P*I+p$>L0OuYk}r(pG&Rr9kCoDby1GfQ!s>tF~)Mr&o!3iP-Xt2F%rum zO1EqzhgS}XT8^e1GWB^_4v~6HOo3b&wBTYa7Z&xUSS~E;%duQo)Z?*SNYq#1QBHDU zy9WEMzF{2q61k9#p)k4sFQGub_(2YV6tv>C5;^VEgRq=tvZy3J7t3j-UXRz{t}cEk zzq%-A%{=FOv7A+XoPWY{7S*JVqk%0l$uTUXKyJU)SdOv!Q!J<1XxBjTW|`zPlTWkB zfWF0YjAg)5f6tZ-63c~2d?uFDaJ9R8F2r)k(>TxnH&GyqW}vIkjk}X95*@&JENfyP z7r!pYf4EKV4fAqMr~EPOxB7-Bj3xg=JW3N{j?qe!Aou&vjHSZAwgUN?wpv^MUEh#r zEctulHRd|9H|E>UU8PL44_57K^C=i^Dm;m6ji1I#ji1Gh$B;v^2>Y$R;dmY{%M5jBmM+q_ zvCLrCywo4H%_N6pRO}L3?8#}wF&pVzj%7ynqE%VNS7MnmUF9!hnIUzvVpg^BOIQY+ zypBlyW_yv3HNOXz8Hu&vS_))Ql+&S{R(X5#hbb!Ly8#@DWy&;v64ozvkpaGek{Ei)LK`~SBTB$vY^joH8pCgfZt-uj2_t71RnRSYQIcrzJZ zXS@OLaEg!rfyWvDg-3D!aa)V%9}4_d-%!g74l;o9Y&s)-*(3SN8M$!C49&wb;Bt4! zwkc`)0!2SO(Y#_9PX%5`N4E-?A8v;LyiR7m!igkN2SbPU<(H@tubs$2uP_Ng`A9!q`o z9#{sT-V49vBs)}s{Z`-5seR+|Pp9yB666b>(k&AW!1AR{>OpwC@n9@p45jf?uzYcp z`cy1m2BjX3i;d5SDUff9(uA|HJ!a=%ztuPVx+~9q$H9=S|10IeV2M1hQ03;x2gN7_I~u2eE3+Q4WtAX#)b71d=bud@-JF z4)Kq8jL(mwpD9@53!-|Qd|{JoVCN30AzL=u6-x){mW|qC{Vpfzu#dCGkHsxZ#u%3*l#== zHkSPTg8Whwmktg#mi&{0{GmQB=O2Hs_XWw7?7E=BWD}SCsm9X5Q$c>MiA(--#*+V4 zV}5e}w}@7o1gY@7u~gVdY zjV1r4Ab*C5O9!)zCI9&#f3b_Z>tB7tD?x>|L4|cDE*<=0EFEmOXVV!f#D1%9*x6X} z4^Q)5|6H3ZOoDXK(^x8uN-MZFTSWggamhd5Sn_WU@^3M5$-gzR>t8A?3@SVyR9I{* z`CkS3t4&-w_}*CZTXGw;*MTjufBZp0D=BcBR4555bTV=2V1HxDKOx9J$;2i9WMj!6 zkDI*z?<$iZ6|OOs3J+qt2lGr^@*gvn{P%WaQznnV}BY z4roskmk#zemiGGw`IUR=`b!$EZ|E0PxG1P_iHS=GZz7N|0 z*TklQWJ>nsp*Iz3X+mx`51Y7j@J`UcdnPXRR~SqFA3^?KCNBB$Kc+w` zpMw1LCNBB^GnV{ZiQi$?e+zy#+3&AZ*uz*V^fMJCf1rs={)xtte@&2oorz2SWN-Nj z)cS^Jg9?j$0wb$$c+pt$*9G~%n7HKsYApG?@!HL(#(iuNwUgI!k}Wy^>l=1&EO5^Q zf(ipnTsjzJEFD}PvlN#7q1yPC;dx>y(q9#R1#F^WGwmpgZvXrTn2QKvE;`={)9B1?!Q#HI;ika zP~j01m;Cw0(!qy8{z?;<{LhRfU%o-9$@Bka6!@*ap@p$j=$KT{j26+pCN3T9XDs;x zgZvXsT=J{Ly8lw)%Amr;pu)Arl0PrVf6T^_nl=_Cxg9_QsP1i(o z>^C0K7)u9x1o?ZJxU^qlEcv}V)4yGGeNBQ?s5F)e=VF_Go{3BT7-Pww8RS=+xa8m7 z+3demSVY3)X*su(ykP{_8NZC>3$W9T4;0`9=GpBpxR3e!z^_=pP*|Rv7VVcht)Go{ ziz!IHX_yj8ILcWQ`e5lmeJr*!a6I-Kw_{`3p^Nb9n{qCNx835|)4k(y6f7|v$bec8 z^&L*Yw!^Ej-|8E>@0Up$Jc_$Brmp9f&X zQbG6N4J;jWCP^NmeQok(0L}L2Et)fOt_eO}hf9n%$DL_!OENO@{=Wk#=w%WP!jo_D z4IF~=Pi+?+AQi|Tj>~Z}AUqXs(gEUyc%AXLc;cmOWN)j%AP4 z`PjY|yfwCmunqQGeZz&FdDV;=uE?f`Y$KLKl#~AD7~X$CCfOr-q$I2Kdn|jb$Gn*L zUdSG)&%|;}i^!My-(opr8(jxI4s7~b@U>XK|6AJMP6sIaFN>x$*n@*LA=!=khC_`d ze?X8w$i(HW7;G&0agaa3#if5XZoff=2ZIXpOkDCGGnNiM2=YHNamoM0Sn~f#^IiWu zs7zjQOh=OpsF}P1={BjbC$`6UZxfde_A!?HV}ktSOkDE&CwBcyh5u4eHaq9KTXe{}k2l;g-E**ShEcvYt z9Xb9XTPCW;t&MNT zP|S{Jfhhj%ZzFKKrAz+F2gb->MmGj zK-~?m@NZO(qr)j!=?kI?EUQ#2^u+eG>y7=!YdXfV%Fhb&&oOa1D@Ge9&;M@>Dois8 zQsHJ}>0o}4|D=ga{?o>i|3Q%dk%_bZxip#rsqlMH;ZGBn4mKG}{*Gl$XQ&AKjc32c zlHb+jv;JE|hnWQFpu4eD7-A|&{xB1l{1L{IKOxA!+QcP)l6U(2|GuC?jZa`l>Kh(5 zmJXH%`EQxH z^80Ik(mzvrf=Q4HCmBnHi?u>BiWbqOCNBAx8%zFOLH<1^F8TL4C;dx>*Mkag1{K~m zmi(WB{PiX-9sJK&@>?Am%qV6{_g^X$qycHWg}w$cDh3;kY89CDbHkR@HS_ya0jlv*MBVcZ)c7FEBSMC z$@jBM{R6tD*7!mAy%Ft_=M8c%7>e^^{${SX*BdCPrhyzaq=9dpwShIbmUw}SpZuTH z8Xt-aXs?h0>EH&ujC_qx!7Gh#!ttd0e8LP0=FvbtHKc(T@gm&P`3GFc9%u&z-Q*pR z{*A?l;gu%;EL?|~(4@VYxSaZO{Yu*J#_{h=fzH5M5*8V6dsx~b`E1!}do20s#`kz& zX;58+FUA!VNC!tcYy2oI?W_A77Rw^=1;>&g$4C>7$9e35dH|LwRu94@#)Gl^vW~`2 z!LyA|#rB=l!($3$%C*87SbvL0_F%fR#%E$VBY;V6GV!v_o>B=)9@{=`@W+o*77ei29);hyC@f+D|28sw;taZVfHX&0VI zTueeNJaw9oiMrs4^KvPPcf*?=@je_cc+|TBe`RK{CoVq2 z&uDL4rk3abeJQBW0$hpZ_mt8t8}-8rj0fT+#wTL=oh8k$!Z~J0Jp{{)sfS@bq_N!3 zM^NCm`i9PYwn7ep97B0_dnuMfkX(51!&vq}j-edWAF<3pVJ6K#@(|wn#Egw~z7oq0 z%3oe2|0OItMEmLc|1*d3bU7_Z61roVGF?OyuuOTa8_?TW_E6)kx@3|mPtJQfI0ox4 zQb~tXu>KO2_+6atAp0+SIMU33EW&H>vd40CCmZj0#Kn*25{W0{Qsb#ur&MNiI`$jS zb~!7gy{b&w-%O3ufAakQNeU`VgHPlBPvl%1d?5jzV^;k)c%+Gchx5;LGr}5b-JKnH z%Gci(cP6f9O*fpw>HGhva3%%4DA;T;kxNoeL0{>1W2Zt2FiWZ-<_I)J^HYxyNNjqi))SKibI;O=HX zr(pSoIE|mygZY=Af761IB%DiyttgNY-i+nv|FHZl zoyIrfI#a)Wd?Zu!oKGmmRmS_^4m79_!3JUZ-8yaXWZaKZDBClNZZHk(gJl(`TQ=&9WfiLr!1_yka>!0`*7&Jde^^iAlbzEzum4Y_KvuO@ zn2z<=`=rA2&Kh5g>QXFgMmE-eHaeIBIWN;K8y$+}EKvUk%XzIX z$8wC-M_@T*>Lane^d5!%#v2~J)93$ZQ83Z0fpc)h+3li3sU=f53(vuN-oJ#$8~=!> z8E?m5mr9Kf!*gHCxiMs-?zqFKcF}m*f9c>H3JNID4ytjU@hf;ad#LfB@Qs)&Y*K%R z-l@|bc$p4MzIqp2hmUvpJ)Pb4KO6O?Kt`+;`eK;@btRTPR`S%7S@8(>enW#4)9}0}l>-3Lb6pPs5*^4yWLyc)Mgke7AL9j{jU!;RO;_8^401a~r?5 zIrrS3t_r-qWeL~oN`|Ux;@=2<9bLl6m zxi`FcJRd^kELcY+xmPq`8DMMKe|he9ct2i%pr9oQ;;XQXQ2i>F(`JQhpm~2@0ZAH2 z^Lt|b)nloD9hN=b+qL%=mK`i}?x#B-`!6@2|59LA>6pM5wprQ#Y$-8{M%+e2_a_8V{8 z!S)bb)R!-MLtLkzzFB@;eK92MFtDJx>6Kx*2 zRp4##(64fm%$A9^$Hiag5{Y-l@{88##tT^D*c9v@BoyQRCcY0Y|He14KOS#0=f8|AjbF#|Q|Q{>vcT^Jj#p4H*HrifFE{=o@Hc_K z!<$V0k9g5qKY;bP^AFy?;f?+}6Gs~#pPID-6VQ; zVt(7b@oqW5S>uE7NRvMp%dftto812?ke`Fs3a8>a7+2htE$ldHI zET?6G8{qd?&KmWOj9ktN_0d=s^<1|DpJG{*rOsy_MSVP!$6v`FZlpkt$&RkWF1>ll z9qS*BuE08CnUR8{oBH9v-TO3+uL?Z6@sM%;%gtjl1$LF*6nF;iWmfU6c%1Q_SbpO^ z-FRs>a82Nc@jS^-@4p;R3O1Ssp2Dqv^bIZy{9@pjaR-zCI__n>3|ASyhnJ7${;zkx zO%(K@K)q)_Zaz3!1Dtlp;{xN$@eJb{Y&&=)@O(Vc4B#m|Z(Ytk{@~1BNI{>U{2sp; zcuC;b@fef8EbzN{qpm4-;4kO&5M`r(aKUKq|5_0BXA0S)Jt>e2O-E;q?~7%I)cawX zA$2Jpj`yWN>JM?&_%JLprXGRk#uVt4ZJHFAgq!hVobMWZ!C4!43Cl55FTtanZ(@64+G+sjpB%IG?!4|aknaLv5e}!8oMzcUe2o?!=X@}hMcK#sbS#Ig*!gYK zp`2A~g8{8GaruMCFa25nc0|9L1Zkkv0PgQ*54XWZ=lMM@z;=&!z<#T5*a_SA+w-_z z>g$DVz={0*S2{R?T5_e^#WWxTI3(zxtBK1V92RuY-NdE-DR>z(lx~^mw7{pw6cqjJ z6V48NF7C>RlWRAN>Q>x`{0dr>*MPor)((CQ{4=gH?f(ytGLAP=FwGSF6FAE?*v6aV z5}iVZ&>1hI{uo(93}~9O4rpfJYP{a}7e{wcP_*99z&*I!_yOnSW@Bb^OV1pLm z9=O;4de!xkCmqLk!BAfxU)+JEKbB1T_y0Nyqys%K|2mQ9 zf}A#$v?>>(@{>4BESk>FwOIC;29hV2T?X@~TI#n-oQpyB1#d7mu03*qgV?OuLwq`x0k?PlG8vHTUykYD!HEA2Mw}VcbXDhJ-K2gF+Zo(F za50`|W_TZ57n_3pDJc9s=i1Cf2V*;hhho3gH~a_N)2!UYWk6Lp$61oh2rs{%gKhig zPRag2-q$hk4_3R&Rm0#C+eCjTZp$oQ5)tiMsF;C2$`8_&T@jPJwi zjUU2!8~uPD3%nrkGq}v;FB-)0AIGBDoPCnVY~Pcx085kNHYaka{mXZ-1D>RdjCgmk ziTA{1#PuQFdCoM)#;;)D{>0NQ8(kbzFv=8Mii^y(`f@A-)C%LV3_yJquEx3pk2-7o zaeO!NnNXSwmd%VR-sWo9M{5bLCQcJwdS>s)>%$T|xmPMCt&7;Gy zUBngGZ}o9QPYUcR{)6*WW<<~9vLT$;9P?GwlIy^QSdRHbMlAjp%Z%j_m-D=QDE9*D zZ|8g^mH{O@!0U)_;9{KKjN;}|Z!;n}ZBEDbn4TT@T)e;>^9%3_I&3B#GDCOb^1pLP zHl7RO(Z)4+vRdx{k5G_*fu5(?XeC~z3B*4S{B_`O@fwr=10J&}mvk=!_(k%KH((jC zY^;CYfIz{=6qHgRd(duh>Ldg2j%9%AVr-9TN9;GgEm!jI(fnr7ekLw6+!wn6$@Q1- z>-7bR2jHTAa;{B&wl(m{xWdGT1s;J*ImU%aYt5sJ@Obh$yV;#gbZS*Sr#uo*?EbtY0 zCHW<8K+B!eJ<3EMrjAoHfRz;FHTWkIWv8Up3jYaQj*H3Hcn{n^`6Hc_WTM`9tnsnV zbBW3fJ(4(Xo7Sh`iJ-z$xY{(Z5HB}=5f^2A{Uy$|u7fT^n#RimAA!qb(?Bl@CL8y~ zD~ykKF6UAvd+z2F56&H$I-R0SbV1;Ya2fdv zNRR>5J43ci^!v~>o)G_ut4x3Y4rTq#H3iL1 zhSwP1g$tVd_}o+Dv>K0Bshyh#|1 zi@4OvfaFqqJ6_hJZTj8sl>CG%OuXyc*9p`D+8O z!%IxOUd#@q_Xb}7FB;C@{U}HuCi63yc+uv5kNV&`K1`F$K%H6G0aA#c+iD@kq*Hf zO#FJh1nVMxO7gds0Z9K0U}0lH>K6mQjPvP0*T_$JB@O6xqwnddrM9$peBc3CPV02b zMuV`N#_s;hS1wa9ih^U3>U`z0vsSnc%W0^djO8>u-X#&^eZNYur+>lmK@ z>!RqF7BnUd#J#9+03|Y@E1k80iCETv`dT~#@8j~HaMt)!Sk{2L7B3sa>;DJ33g09J zKH)o@;h1mf;@gZ&tql}lSrh6Va1lPl<#%`1cn>U#RNV`g#^x9vO+guMnKaNmdJ@}* z*-vA?@qGc$X~e9_#bR%Bs!A;Hg0_N z3br%yTP4ep0haSGnUV9(;I%{sR7@Rli!gQgzo~c#Vbt%KL@VIxi)^ve-Hd8?rh@!;!5MV*;%|e zYzkTi-YRfw+j2cUmkcu z;Hz=nc5Tx?Hq+!6c!8<^P2lhF(#ANi|NlrqRN(h$JwEUv|B}kiXS0e;JckFdDD#p% zXdWHq;{1&{Ii^* zvj5rW5(-L9!dyJuH1IAShdIQ_fd9fXcJu>oz^!*`%hRoN#*Y7QYMqf20#~Wi>rW;c zLO~e~XocZ;JRP=l9ZtpTcJ}cZxS+`U*1&fLz8iNo`S;^K*j@klOeY0H&E4rye7W)C zc!BW(yvX<&+}~WP7h?NK=jX9p2hxr21;<q?rS16FvP7_|ka+;+ZuiN2n#FN+c z$lu_s`G4Sk#9L7yYpUJo)EeI%%UPx_#$ztx{=b#0&@Ug%zbRq7kDoCWG>cui~yZl)lQW1b~L_TU9)t?&|-RjgiuWfiMm$DMIA3Z(w8 z&Kmy>%OY2A#Ic+vTJSdoavG`s#c~#?Gv}pefjSRwI@ZTG!HO3kh6%+}0xMhW*BuMq_(_|N6)DEGQ#M?&srq1SHq~$<8&EycSIR$$)t6 zcf|4h(Sqy7WTr^+zZk&vUj~qzX7b`Ne}t0TZ7 zf290shP$xv;`7_s{!rQ0XVO0LU8pZFPFG?%s}6Rqh|M0#1CTSYoR_5xSuVW~I+HI| zqDKQij)$A``e|IXi@z>BhsPT)4jjK46fDK|5WI!`##gIgdkEe$aoK@C@Ep_Oroat& zm5=lJuk)J}M4RDtJ|W7-dAs^O+6I>!Zy$K)z`Nq{m-vrxT!?2hn&ivgsmzI*32#E!Y1{ z^a2INZT%j-f~U3fUWy||tW)}{G+?Hm@>WJ zKZ2vi3kQFu!yP*L{LjV2lWRL?Rm+Q5gjg5t0l3Qe6g)gO4V)$gIJuiKBTJq2kh~pu zIUYrWZQL688_R_!-LlcYxEjmNOiuISi&Ja7BaY>?(Sm&`kkd-NAC}WjU5f3u+a8Qt z6K_sJavgEj{NZ>z;`uH<#aZJwUCjDxOTv~e;W-k-n(zWHG4Zv|8efMu9Pjgg!E$BO z_^((_L-lW1&KmW`i&=lCQ!tDY*@O0DQ)|K=SWYYTURX{ebqThQaywyJGaBC?%bHOi zh-FQv%VG*-(P%*zEQ>_l4a+fBACBd2rmnzpH&geNd?$HpR&VS#{`89N?K^IBE`MC) z%9hX5S$Tx>HkM@&S@w7u{v-au4RDwD0_=bIBl^z zE8?h>f(u{X+R(4o{c+S+Sp(;6IU89#%uQT^nWIX zfKT`>@Lz%d!K+Mu_EP=;L4#TLK-SPcxX)$&QScz#(fBI7w^}~`|0o4}X#xHO7aQkY z7Dam+cfxxZpM-Zez8ZHho{z_O^E>zy9_?lzx&PNm0TnvBJ=k&_rwP_8*Fku;@u_%x z;}r6h3V53FGkA{i*LaEXR+rO$>h$@483ij$!fCj~bT|dCHt}ci0^`-V(&TS_1urfe zABs1a{1G@WiF5wTF`Gs~fvNBut}ORcwiwH*O*fvbVp-Md*Kq58-fv)8q#9p_mty{G zko5Pvv%CLhqdzI=%m}r@CM>H|-GD2NdEqRXLX9`aa!l1Nu^b}xmRJsvx)qi~#J^MmGLJ9RhQ@iO!N|HCPeMW+cBSQe4GCzkVC z-5blIQ_E+`<*ZRxVmYhS{ji)x>VbF^|94x9=tK|7c>f-@*XnU+@s3BXl=IxP*C8ff zF3neCS+o@rXPIp^zUd-v6L>ou4>hZNCkmE#_p5$4yy*&m9q5gh;NmD<#TVjrCO!w( z^k4wQWdPe;$-@U`IEUpd>x!$fURTbzlJz&^2;bo-62xV$foGf{8&9$+QiRs)&VaL;;#l? zieuW-M@+xQ6v&imhkpeA3)h->172dBcNK@gc=N!m0&jy`9_jmwx2IqRBWlJ7kXk3Q>Pa5D)LG6?kUkTt$nr%C8LK z*95)}k2UqD;3u^|x&J>)!R%vv2QT0SW&msPViW(_xr#lK0qlNF)A-(j_rc3e{r&O0 z@$Hg#S||7au@n?snHIj(52E;4@0d8r$~7S}e7ZymS|E;03Yz$?@1Kzjf0 zPQeP3&=apV?&GXeeti(18hAS1XzI_x(Q$r$8-!GeCi!SZ*F0@t zzw4vua5|(t{?DgmaOpt5ho|B`#;4=a#%JR(#-njD?d|B=yB$x9O~M=smKopYJk;&c z_d$GJ;9u}+Q-1?)c?Exz+AQ6n(i?cPdV=49LvUPU3c69S%=ier+_)EBXWSQ;4Dt;g z@2mr!5yWo|Jo^ULUxjJlZW7iR-;Z0K=sS2=8Ze%ZI~zZR`xr08lZ{_=PQJpCgW75` z>(3@^JGrU1$4gBEJL6GRen2_A-gtNCahY_=F9_me178+XP;jzua6ImA7Tv?R+QjGM z_c`ropZ{m0&+w>IeEmA-a(5lr<;JG*c7fyFDX2CL?2R`VcfuWp_zp^O4+cp4$pD7n zIujp`2aRnT)iq0J;3eF8sIUJTF87Y3w%t2-CsexW>ezDcrq`n>*`^&E11| z&%nL$%EtOJZ*^i)5>{&=|YiMZlS9#pz1osH)X^Z9q<<;M3ruVaSf_PjQT|7%#O z>u65);Eo`EPvHCT0#pAXTsp$HVx!WW6_=NJJ=i- zp5fifxx^i^v3z=K)Pk3saV#8dPd+|1JB0eP5#|@ zkeueyznsU*D7cOS&YHx3;1eXlx!p}sbcTud#bx8#M$1W%8JvS>pX~>9A6{epP~gX$ zll_-2pP(RrlyBe}d=wq(dHyx-X$G{_bl#q4T!y=z=j;Cm4>#_Pk2X7S4nAf)&;PkO zC3{>=!9dgCD|mqM&$yP`bGl`s|6#dZt2YMzCvbE#FF;)2^PA&}3(Wn03krIfgspLv zaRHuWyrcL+-{7uzo_T&>jElzj_&#_TJESu@2-n0W;baOFd9TH<>B^3@_iEy<)8lD%(XQJI8Jc)4*Y zUTu5`E*S3z&`t8MX&Y_KOWV61-^2{kd@_Si;kiDa?|-CVklBM5@kZk%xORf?;0>I2 zmG?V%G9B=!J?Y?2Jl!1g4zr?YCe}4^ES4QkH}3!aDX>#^LX(6{R26s#E@^ClPqyR5 z#%JQy#^>T&%>Zu0bC{uIll%W&6wD?;7uj1_rZC<3s+_ zmW{^Yd+ucFKT+@;))5xoo?7EO=c#D7@Ij$2e>J zV*HAU--BZ*(1iOacn#|ampg0x1N@e0;9qBrXJ$vyJ0@P@tnp6xJ>nS(AD z;~Xrn*=YP;EUyWv@5l0VUHu@IC$H*xSe`AbAH(t}TKz;!fjo@Xf~T-N>{i!edDyIe z4)d_N(Jx?ml&tZWusn)ZFTwIWLj5|HCm!nfO$y{erxv`8JP9y=v04% zG~pjCk66^v9q9uKbu%mvDAX;mJXch2j^%!@&c||l zS8t8w<@aQh=f7p9T*%u_f8INN|3KQ`Y40t0CC@Qc#+uh>M)Q~L`Z5_A`ZaLXM0NDW-8W-WNiIe*e z-}&SU=F*&W5H}{I9ZU>-Ev_;RPR28gZ^CuPw>XdC(kJczuJNRQ3jWpt=@0*l^KSHe z(CjWA=TGr&iTfLGg=NOlEgQAQb`5Qd{Z`+wJ(e{Tr-jX;4(IWPGp4vR1+r*%G!^8S z9fYMrJp{exG#xLL ztMPKI4@z6zjZKH!2Hqa8pJJZL>`cLI8qh`8123D}HtAjtNpGn@d>|!q_qq_*nGWaR zp%eT7-ol-ywQa1w+*#MyzV{H1O~L_EV0;j+H12{Y8JFV~#yy;Mk=+->9}4^kjyIYH zo}i$^bU)%}a4+LUSf)JP_wN8IYjDT?_vGP6l%e5B*+x2 zH{v6iQavQ??@g`oJ+Mr?x)VE4Fx;1lpfI&4Y4 z?BSJovYDZ40$+z~OneH?zuC|5%`pXiOhI+vI|9$a!%hBuxMYTJ@F6_f__4qX0>{r# zFxgaCg!5Avku>K$C^sva=m^dF~N?k$J3|E-9QnkR7 zO?-1~k8wWsTYbaU*dF6?qj^IkGu9!KUf4dyGDAzKl+E(|f53UXWX>_FNDAaj!}tsb z9VQnN-U0aomI396%V#*+m=0ylbi#IzO9LN_?SKz8^;!RXj~4}Y#N{SIIyf1RH&Z$+ z@CZE3#LvPlZ}ErlzqrtNj4|_{i7qh(;&HgxRJan)F}?=RH@+e8w7@sx#U{TRm(5BB zDCZx4V4$E^T9Ejjzz+m|2oEy(kKyIU3viwBvw>e|baMV@qL(OGZz{ZoM^*bNd<%~= zUXEv*Mfm}~)A%E)&#t6fi|7;VH@^K2Cx<-gpXaP4=kqyD8dyq}EV8$;bdYua(lj7z zViUFl%G}q~dAQmPcym1RD*x84UO0EF`TKug3c6B|ZhV6Qo<;?|(#^otI9~?Dus*_b zae;H;{k-U8Iv9-Wa32@H6R(=>+rJl=-(l|mHEBWGKV3W$cs?F?hi~91y#7J&g}CBs zfBXFwmm0TzfG08&{fAHw#bYP(uP_4`hWq1#UHnEoIW`Hk6s)GfeO$uVxWL5oALRCId=Osru%Cf0fy)CQfj64` zUO3+Lv~Qp<1*=U5WAO&#dvV@1en#HGV~qdA!;L#U#33*~7WX&4^dYW)9ZbP}BvcqL z#|6fJ;e&-wNT;Pu8Q#X-T4z{7CuwSLNP#8r!YgVO`g#7j;7VzJ48HE_I?f=#Bv|FB#r z(k&bPj^#R_{u9e}K)ngebwJ&KgKqFMc#=5t|M{O$rWhA{#eda^?`V- zaT%7=RO4N+oTln-SWZ**;aE;nbp@8QEZuni-;)A4%`~AmmeWk#7nd4WV!6<0ydUmw zJP=PdJ`u}xLG!Ed3bj1{A3}kgcA78@Z!jK#^JGyaTQ(Yr<*ZPjjpZy-pNr+RQ=fI51rIwXE#gPcsDGIT75VkgyRN!<= z?!WvPECu!KzJWSv;6?9maR=icaEb9RxU2C7T({WV|No?569qcLe{nLx zq=0>Vv}wFW;LUOAOTK=qz}w*ACcZtcc*WfRccx&>E53nT;N1fk z#`AEmH+%<=g^%%)%R9coU2w~Hz1s!eGw|NH)Z}*xyg!~{;s-y* z`DY6bC85?N9EL|O_XDWFlZ}rGd`#fu@M4oc5YK+kw>LPZV7Vz68hAwDkvRW--@rMz z@B{Djaew2B1CI+F%K#>t3KQ`HLgI2kG`TO_5wg7hxd>Edr6^K^^?uqA_cpqH$xgXGRc#!cx zW7a=kwQdT;r{K}1!fAM%@kl(^_#9mMh41iuJkRJh6pS+!CgQGN`UbDV zgN&yHzB%wMc%;d{9nUbHgKH8e_uou(9|fc9e1{L=@y3q@UJ&>hJkR7W3jCs2?)S-- zjb6s<@XqP}^HQlR(1c&`W-J=@uei{>D)t+eMWykLSQef7Z)_j&{EPio-;jBn`uCXE z|IfXEFP@NVy*#4f_5Uv}$|QSKN-go(JR*{7{klx*VVCj~3=AlbxV&I-FO~r}cV3O< zkQKZ9b(it=EX+`eYcG!huqE?PBlQh!DX=5%kR~Kq@<*jT-H6kIX3^dzF7bGnE8kQtT%s87XqMu%g+@m(`GwvT$xG6^!J z*J3+>$$_WhN;>RFtFp(>;xT5xF9d!GuQ2h~p5XY~f;UKL{f(c2cW~9W-XGv<Sgd=R5d?1nUif|G?u+{w6%zIP)Zra@Y9wS_IxQaI2VtNv6WK zxZ1c7uQA>Q=dJY}vOmlz+7TmR@g zs0=)ysd@h=1+s|Jjc-E5_A3=m!Q)K)R9tGVgv0R+6F&pbGCm96YJ3j9z0o}XA5FoX zjRo200zAj~B7C>;CHP+Bad@t=9Mb!ZC*TK+uf{cMdHz3%f(Nw#-+&)7o`UUpd=vIt zeZvfFPvh6PRLg*~B*~?D^Rc`?9A}*SVA%n2ED2L7kUh`}?_-(rhAyFG#1bT&3=c+nN|EFZaK|2 zu>ArS?H_F=nT_ua$I(>(;&KmMgj*-kZ1i7Tg7vlKTX7$W>;3-~3aU&4KjE>afgPUW z0SN=p7ni%^S~H+?a2eJYm#gt;6MqFyqP>0GfPRwtIMxvsKFv!oCgBLY(G1{RTxc4+ z6&D*X!HYKf8F?e{JAvQB8#kKg{~u9Mev|(TMdleA{M$F!0xve+5|1Qbci;E0xl>A6R&NR4vEi*y|X+rL9hvUvBJ_?UDo`okF zzl>!-I)K*$FB8Wm;av&}k{8XS3cm?~YfXa)ZbuP6YB4|`Z!}_ibNSW8<^KR13!otnE^hE$4_^+ zYp$d#@#xKy9ZK(ipG!hoz`!%n*Lbn<_xMLvtzL?^d5%4zLA~~O!9{qtq;@tMfxDXc zR6N@FS&45U1Cajd@P)>L)UO174UbAHr17_K;a2{TEXU)GKMee7;Lq^_$xr&1J*HsZ z*1o~-ah(})n?+oT@$SiRdAmL?yxGsdNIZHQU;muI=LfzJ7gIlO_EF$%f z_)6oS@kHZ#Ji~YcUSj+QUNPOgIs7jQJ~Rpc;E#->=cDKo<7Rl3aSJSmOb56*mP4k_ z$8yNjTjS!`6ttn>Al!xwdBE`>XRT0<WO zj^#9{a0Sh-m?h^i9qe=!&jWDsC>5WK<(O&wA1sTmy&FIuv&V8_I#b+6XNaHe3Va@J zZQ>U_&-zYz*|xv1KeqGYK`xLza+kgi}!NY_|bTV z8Ne~PIcuN=3DVvr&hGxpClV=;Rhn*Do)+;U6W*Qzsqm1q#vj45%GL9+tZMa>cnsFt z^%u?>{|d{Zboc*kw3-50wVLofUS#|OE|}@#KjGEJ>+zejeEffSr)uxtao1bD|HN|d zi1|NT3;y<>{D=ETeM1AbH;;N&iYy|%6n{FA*N8X`a~xE83|V}2CK*5_Ey%s%EGz?P zM_fD)%K-Lr{u#4_y#D7ZbiO8&?BR0f^RevVcdo($EUUV$i)UZrKinqQ{@w62bCz@n zyeD34;w88y*LeTWMEg-N@wUb*Q#2UQFun%QHGUi~FkXe17;pA6&vx7Dl=EZ8fwvLI zCZT|W5j3zHdnJpmn{&F8ya0h^fa(e?1623KGC*~2ECW>c#WFy3C64U_h<+6Kt-fI( zwrk)-6PGE!2+uYbxh^u%q?cKLyWZ|!7JHI}uDkn$+Q82TUW|vD z{8#aqJ=!&P@Ft#b{4QQ$X5jsoS^pbM!G|Q|F`#tgnF^Kxsz1YBjK9Ek2EW37t8ZA1 z?F`oQS2o$fF`4wNxgqAiWB__v?QkK#Zc7I{(TbclbFg$M*J|-^oCUH6yE=bwI+R0_ z_X?l?BR?x~{<$xEf&-&x~Nx(3uwV|xgm#eS=AScL5%xR48%%*Ys~D0%881;VL}G?9o?&SL696z7|*A)h?PuuQKK3OBfJ4@CzM?C*!=1x`UbMCS0JF`~NMj zLOSYfbSoZwr&h>Dv$1rb@w+77NiN;@V87Kj+=uNR*O<8M;Hy{%!20L9Z3@J1<8mD# zen0Ssc#?^K8u)X(kpa779BuY0XPL>*_m=w)pWmaP!UT_rv4%k@ls325?YgLFz7nyWu%Wg*1Ld;3M%o z6F(ZSHm<~z7yw=Izif0FUfKyK{Zllag8a^YkFO4Vec&7MDrP|Uuoe&Rr}gWR%evzud&7 ze$5-Kzj5ZYdxQk*`FOI4KZREvpof6p4aLh#y!Qh(1kn+|Ai?6>-ccpnPvh&r1DX<%^Bz$qp!12{FP zKitHn{?wrUbQ7n3+%Pj}pxPuz1Fr-Pyk_DufH#8r%S>GA{}I&x%fwm#^$q_74McDG z36cgnVtY*YHE|ihe%Q`nsfkPdAwm6N|1a%J;HE0Bd>gthAOc^1EV5&>#8H;!R^440 zLE~pMQGr%s(ZRdwprIj5>K<(U7tPTxXcWd=bIxVeSE zt(kJcz-=w{@5q#k`j52Ke>_u;`M>Aj&K3ec&maf_AGHuTkSQ1S2R+$e0t9gSN7SDW zI4eQcEEoEJ&p`tpvLdvb2qi(l2fQYw2#Y7ml#BYS0B7s3$&`!w9B_7--qC=Q{RdAl z;lr9t1OEcJ`3EKy;A{iOe+|IYsPVG{`F6uwsQvaDuxv2kqratC>x%5H?K@ccE(_aEZ05|{aId}x%rU=WpkkTv_^{tlr z$7jj~1Ap7BFVl-@I8RPn<@W3;HuT!-To8s!%h>vA8?kzhX6PK>^b-_;Do`t{wbFZ z;v66tm@Cf#k7Ozc2H$BR_gsk;rxGhT*dg;IXVd+)&Sw_5?%*5TVWgE z&Hr32ZI*#89){*P+%Q)~hr_N%&U^(t9@0$}kJODduDfL~r(ExjnqKl3sqa9>lz ze*k>r52~ey%aWm2U5WYSH|&NB=DKQWudMLXcY%){Ri#Luey@I)OPA&2 z-^UQ4hbts}6JT+lV1n$xQ-H<&fNipTMEn6_HV=UT$V^C}XFn?7wpt(&P6aIT{kKX6 zuK_I5_0viCBT@c5ey~_JFz5i5ba{>S{xz>qmgVdDYSjvcl^a+${XLqp)^CV6H45G9Jn6H#dju48Skk z-t5p$z}I6)mrDGPPlW!5Yqmaz5Y_xPK8RZ`>9Tqeu<(ALCM$ep63%+KqKUXcGDN=u zEbff%mF2HZ#&dgUU|)(q1q?&PqJds$m+Pk@kokk@4b8U;uy~y24uLQH|8yGC?Y`bz zHWA>@f1_HukJKCd5#Se4o(|FZ({bSJosmRN#TZv+;H{XTnRO~5Y!wgIOiJ98FZLB1NxOpf`xfWXj{obZ-KLxkOvdi#-c?dA09E&8u zC$&MPyM20nhcwU#U<2q(meoJT&Wao3jATJ_y@*Z!Y2b3X*X$)XKToO!X#BC z{S|;kYq7b=2K;G?&MJ0gIyx_jQDL8UGC zRg?I?kieG#i`#A+B)xY5Z~bvKxsET&?>q??SMRSjRQKs8YqbQWj%O<~E1m z1i+vF5C()4>8XE*VZj)tV|oSPGcxdZ058tKQ_ckg?^jFLNQQ1Xum7reAMj~BZfYvN z472#7YSLrD@ulZOA{m0@0<7b=tEE>ZLk|HKal*|K9(^H};iMVKOX{NjL>Hmmd60-K zzZ|fLA+3?Ch0h3 zVDY3q9v*<9G0kPS81Qys5y|@h1vq~B2)tq;2`mqxScXHlOZY{=HX7V4VK2g+P{4Xx z4tU=POj_Ba37241^fVb*1X%p|d{yFa1H1?l70Xy`K4-2({$B+gUM~@*eRfdt+i%-3 z$U=nQ2P}S?bvtS#B3%s_1k+jW0v10eAISRO1}uIXKAqHi0E?e?PgVN~5T*E$>J<|I z&NVT1Cm?K%s7>Cc_s27Qg!~QZPk_Ziw+gWUV|Yd;BP1k?WN_ z;*3SpvuRMj?e}|t#XDgSOZsPHwu+REZIXd_CqCdEuF_Sb>KrY*40$=iG z;x5)zvcYcx78i+*9a?9AU4vzW?KmCtM*xfD^BbjzxBYj#=ZD?UmJBYu4%;;(_FdUS z>vKrGQTZ2NFJDy&T`vs%z*R#%3_{E1N4-(jW7jjZAPQB3*{WgqR$pn>7V)=shP!V4 zx|;2nrfQjv%lybRM@+%uwO=?nuQaf;%=9-LI zh9A0tVMm5(>b_mG(_R%~T9Wwk^Uu;Y@qc`)%*NV|p;DXK5e-dM(>yUF_|7HDc>dB` zgx_webYBx+he?Eclm@*n4xQjlt#AaI6-K$bQ;xJ@0M?s-?Y1YW(9N34s^$H z!XTikYVx;smp`@8cXXAhy6W4Qfsvu6O>{||Z+W|XUPZUG$fRC?mEbemW&Gv0%ah|m zF)_7kiBbosYPD;8rkCPFtH2Ji0j&r>?mv5&RaBt`pB^H-_`<~`Wy6cgS&-Sw~+~a+6U#~NBN#_I-cjVz%gB4XNe+I`30lM!~`MEMaXDM z=p89;P4}QMRM#|A&2Xvic_H&H-HUuDa&0I}O-%P>WQtMKp3Fr*x~|0cd{~}f<#LSO zGuc$uZQA56_t$R>YprPfYkw`z%$JAGsX~rAPV!-@(1{U^bQ?X>Lp$^$O?5)*P)+qA zf||iE9z~8$#J9G!l|;U2=Q=Z!pe3`jDc=AaPhk0>>iMCeS~PSuM+YlDWv;J!c1`E^ zJWCc-9D|y^6Jpm0VLIpr-@mVX3SabbGMyjXS6&+zw3=*Gva7c5J0^7_m1!mmTxLAJ&?dLlLH)4&xbxM1|T-rb!{D#@$imr~xKwVuDC&zGoV`?uItDTr)Ii z=s9NKN4n?wo(I|1(k(jONubgC~Gny0BlI}(XgDzu^2I^s4^yQJN~@2}7M(U0?b zMEmbZ{VL?*i&5&LvkiuX{Zq$}g%MlaK>sbZ7~gC(P(a_Tk0He%Vxc#bQc(;1fr~JK ze!RClv|5M?wLU9Bg;Fe-N-WVg-A+6W(=;`C@ehBci@!{*`GKwKnrE4zN?~UQb>&=| z#c$hRu2c+EfBEW45ZQs|u+R{jxN3#G??8D&tf`)<1j%s8ikWDvoI<)yGoui-VLHUMV%+XI z(6Z;TLc(HQ#ofslyW}AVSa0sBMFSTb-S-ZbQMdC!7doJut}VA}dc!&_mRMtJDMU5Y z5>8b%|I%N`c>e4la(e7B+oL!?J2#(68uXl!f!aPv@c zdQa6sccQgwTC>WmfWNt#)apvDs4c#}Ocu7Qk{_4J#P+YhFO!uORkJitwV`h{*D`I7 zuRns!K3>z{?69IBax7ajw5-6H<7$EHMNm9pi2sLCLLJ8lOv9rp>OVxt$0{&mq9B0% z80jqVw2&_xPGQ8w380XF}pLZ&Y* zKvHWsdDaK0YaS@ScL-Wkd`Tax4k?mu9=_E2X9-v`Nu!h=qbW6CYe8W&p z*r0(0ABAff3|1A4M4#50bG;a~vDzFxE+X4lZpCC9x~>@25b8t6p@9E+DEWsmdPptH z!tC^HH}p&~mH8WG;`X-A{67A`{_;$I(PU-VEk`P2`Ltm$u}?pO994nj9T>_XrngJA zC`#7Ii36;WLMAEYu2?5_6uGMD!Z#B+s&2Z1@V8%+Dwh95e%g`b+&E&c=F>=}t_oA$Oq^%wMpVdVbJr|JZERWnP~*I5 z-`ooO;pU-Y&%%nA`lAq=rpvfdp=ha493GQBq*0?_ZPC;Q?XCi$P^|ow)#T$H^vTsD z$wVh#hovnIpzQcgRL@tJG|}h%v>=WnzGc~}7iyMIaqMNP=3uq@mh0-KVF`sTyH$(| z?h*})RUeGPak{k+{GL&Swtw9{imZ(z(+E_mQn+kA9SrrQ&5HAa#=J0M2ne_?{3FcQ zeZxY0Ac!9Y%H*AH`zbyD1dp6s*jojs+O%&52_G_V8XMb|Y= zb3MLz0^$J|_mW}bTZ`%&v&zrzCF9!bJ=II5w0}K&yrkA%v~9}34H+F85}Wcs3|dLO z4&2)V6*?VStc@X4^66m*64K~U$ObCZIyCkhG}bPx;bX}ZguQepgyRXZiAc3InjU=< zo#t*_z1&;J483MJs)<;cX;9yyRM+@LW6Aiq^=p@v6SUM(*tv}aEw#4=S`^i6-*KpI zI9T?+hI6LX*5sye<0^N}sw=~qP7TM4Y`D@~9bp}B$MkXJtw9x799rZ>4%5BRFav|% zw7)!t9~e)1DxQU7zQ=SI-Z+0*ispFNt4OYq0Hl=yXKEWT$vnbKD6ZVYON zW|C=}&jFUs%yzz#`6?=OV8PC3VbGY4EKHf0*UqQ$HNOeWQqju}g)G1Qdpoy3c@mji ziKr84q3ydig?+0=QgKWnL)(iWf}9F>;OqESGWB7Bl7V(;CsbD_xou3H+>sjAHK=uH z3K}7|sk=JT6N|nhJ;X!u=^Z^KPX`@!18iQDTJRcbF!z1#tgO2~;t) zTnBChcsdQ77unk*S~4y+l+LdZSx5uP?2JDnxT_Oc1i*IF({VzgrvyfyCXkkulS z!7m#Hj!l`PyQY|fCuP*AX?cEnS6i6*AQbeX$$h zKqtJko`XFiYl0PG<9Hyab&5Kn6J@@92AMQ7MeBrBqc(r#ujTP^AtGxW--}V(xa`VdAZL`*pH}|N3vpkuxAYgkudI^AtxD>a$3&;N##NS*i>FkjV$_ zFE46D2Lt}}v1H*V3#&EGQ$?8kyyM8jF?5WM(3=zD1QbOE&AJDRDAW*8t4qJBjtc7_ z*P}Td%y>W%q?0X~YXeKGk%dsqK*KK&)OcX3jR=L9>;#1*ijsJJoU9ocg-`Cn!#DjCm*qNH8BfHC|2<@6M z4J;czYD14g5ysYa)vHk>iIexVEFHdYU%9Wb5JEn(Mzr=tx41^8#;pw}%DuirH_pv) zd7D;fdp?pOES&URPYpC%*Qh5P+>wjWd2>D&B4^!dT3kfBxoZ{@Zbqw%QPVRIUp=1; zUs8yldY~|DaxE5B;b&V2#{OnL8Bwt8mt2Tn98g=;4pOSyAsK~lAJO_CLh)1}N$A9=! za`RHSdl)la9kC4`sS;3ai4|0st3$Qgnl*6qQ%z)3z=BXIqPVJQ>lWj8|BRdygK?^b z9(4oTHGLJ1=(XWmf5R2sHehsapc@h%GIn4GcVw~~8iIt?nFN2~5%NqgHYH@0z>AAz zWvZstGA8Ht!ccNF3;8Engai)L>EmZTNha~jA0wlCVKN1d>l$`w+E&2KY~{_5lVz32 zF<|3T)xj!6@<&Vgd6mdE9SzeY3~d)$!sI9IBQxh18cbpz6VNr_opba)*$G?IP2g*A z<}uZ=Rnu^I?;pt+K6Q{Xy$4Yk5snWL%knTs`L2EBQ!xve4v(bGXo#T>A~`_{vsJ0u zxy`!l3rUD6HeSrJJhmajITh1`k}@>pwPFpKy2-!rBwU^@mYrogB3Ne|uJ6~sV%1=R zT8KP^E|4jozLP9lP{@SSxf}dHc9N}eq&aXV!lv#MKvd&o;UCy}ymX-+h819-i z>wPU+yV;Bo^x63oxp6_^dL3Xj)n~xpK0&Jd$*0M>rOY!u9gA5r;IOn^Bv5v#5~vha zPR}!Kd~p{UUC$*bWV$hjawvAml%7t*ek72KC=^wNEjm_1EeOPsgHc_>z^kVR^UU2I=3TeF?i5zi_iH5*;JenJ;0>s zQv9ql`=u@?(f|Y4B@?L{=r@g2Gd_fAM9l#@(%ll%TcsIiw%sm!q7Nj`F4<^ksL?sQ zfA2$N3V-wk@^^dOg$3BiU{S&dL5i0V@DpApn~}tiq*J7!T8?W_ ziw69Gmr1Rc!SqF3o+1s#Kx9novIM6+6 zF$ZC9X1M{wSu*KOVX|8)Q)~~^V7e;IV_4eo%~@SiNOVjrHmbuWkxDd=0_>(u;pRFo z9`Zktso*0aMb(19j2xV_RTtf^in|b+TeIu4%yeLDGR@GD}9Z*bAr;Na1yEPPUe+==SDxVVmBt#0o?BB;olFlB6cT zYr=9^IuO2T6l`EybyOeDhEVV0)sf1irN-ZHT(vo*)~Ug{;vXAlow0P*sk1(@bQYya z$#U+9{hs)h$aT#qqFw|;2)16xAAF7c z$KT;DjmD^DV)EfujYuic>SI-yCY}l}hXTL)x5&hBpUEHV8aNEZ9`Zzvc#{c>!(%XX|wI4t>G#1Phc8{UezhQx^va!$2l_pu3Udr9**nF&KP|mP#>; znSuCJU95IuaifZdbRiuXV$|1=y%WGi!*s^nTDqXSq7dhjNUesBBnq?WQwkb0;Y?+? zHK#Gh0*j8?Ppib86S~t~D`!;dBnp{msQOM!m}*>b8z2>C$9@ztk#-}G!t(R^|9O@; zb6S)B(@Bt1hf9m6y-N*WVAJBsM`~I;Ipy08rMiTw7Gj%07`Xy-QfH z4v(kESrAt%;jEA98gG($+DS`J>-!8;8jk!9PHo5-!9h~D9kIJc{9C^vqeoE>Iu6;S zI^0U8#W(LE^ZD+Pur~j54;qU0knix1o+2apjJL^l{?ET63+IH97s69Zafk{Xs+;L} zP|bQlQ^$!>kVZ#AMq{;E4T$@;rQ(twg#PJ z8baaN70Zoq^oGv^2_LW|T>jX*WcqB)L&ymJk&x=DsydNm)-bRs0u9MGmIe=w4z>08 zyQDfBVR09DaK$Jve@sewt64FC^~ zI{^Ck-X~5kE+$4gj_)RtK!oAc$MKo**&mRRvvKFrv!S9rI1J%aN{wq$wi8`1A&LLOVNQJ3jOs~7Xq}xMb)H^Y7{TNnL zYNHDK?~n0aFd(imbh!DC!69dc{#XwZQi|~Os{|q96=Ek)eM-#zQ(uh zN0wfIYv&>EBr)dT7>aFp*a31(1r{u>SYi)?rbWKFSO1Ea5kllaL;HhCxO(`B2gtF= zzJ{?#87?T`q=&O_^0f!POv{2DtRit3r0a_M!2`%Zqwqd@mgXW|S;gHzkALp~sZ|(u za3qHyQOh)#2gwt}}#rG!utuetTJQ<1ln=pXxZahmfzHZp(QU>bj@s;!7=cNaZxy zP5}q3oJ(^wwe53gBcvo^4|Iksu_;xR6Pf+Wt8$v~$_UWGt@s zvBu%FUASG)NJvP{b*SS0Z03exYPcLKjVy`O0hl9=MBdBoXw|wT%TmbPw-HT1@(;3= zahW4^XBEr5Ztdjp$^X|7WnC{WSW*)M>QdaQN6u6qziXBVLGU4G3{`yemvI>Rqfy4|LO|Z3Spz#gEl(nOf6mEzV z4F?_;!{DzEQ=$rzm~ivT^>GM>hW8M@R{lgG)&yPbt;3?^^*Up!JdyAnl#fl#84XH{^D zvFc}-UMxBo=w9dquvgx?7j5D-qvemg=LGY7sDmr(Zf^^ou7b zi(?nhSHJ+k+{Q~rfrcBp$=R#8o6_RXYokjFV$(ji1DoBEFgr5AFQ2Hajt`$XQ(6@N z9~87&ocN*-pM+d$hfUxjWMNkt@_QVpkC%f$Yqi?j8Nm?C|_$G(S* zGuV25FhGU6D6qR?KZYY#BoL}0svwgb_ZS6-4A+WNuLaF%vQELmqjCsRx=5O$c&!9a z^|+dcI1j=+@P8vAvf(*_EoHz_i!3(^(-bFK8C@ylA)PUKJc#?$Y`F*?&ic%${LEL# zakCMMg3}=YCzcTydg=&8Y_+w0{?ZKPV--Dw>5jxO^a1e$SPx@oDrXkoEs$p&Q$r+L z3yWmpN1n?EeNvfmHvCSZ z9;i48Ay#Q2Bw1&;Ff~^yGQ5kZ8yYfqvD8hdam(ZjS16zCg|8lWsPF}z97p)w_*2Is zv^@DZWi%EUj4`-hAVMTUSgAo#*rc2=?M-&cvK;OBunD9mqr)bUEX1*EYwZN;>Ie6l za7?g})`5gZ-A-L6?dVd(td0q;D~?v4~E_He+5 zsPG6TLV*n4rn+c~655f!B7Fx2vMz9pL*|n9E*FGy3F!8``@FK$y1$hB={}w+0vEecPi!I7AgYn-3_^;wVKDacS5Beb@f(x!tDkHB4ynWQ5(r`Q? jJee=MLYb^A_+`1Ytd4R$P=?$B*!=vCf4M@r{lEP`^i%HX From d79ac3f9a86d77d0f3cdc8c59bb050dd03fdffa7 Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Tue, 10 Mar 2026 01:09:03 +0300 Subject: [PATCH 18/18] fix: formatting --- wallet/src/lib.rs | 5 ++++- .../src/program_facades/native_token_transfer/mod.rs | 10 ++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/wallet/src/lib.rs b/wallet/src/lib.rs index 9a83e94e..a3c58a97 100644 --- a/wallet/src/lib.rs +++ b/wallet/src/lib.rs @@ -326,7 +326,10 @@ impl WalletCore { } // TODO: handle large Err-variant properly - #[expect(clippy::result_large_err, reason = "ExecutionFailureKind is large, tracked by TODO")] + #[expect( + clippy::result_large_err, + reason = "ExecutionFailureKind is large, tracked by TODO" + )] pub async fn send_privacy_preserving_tx( &self, accounts: Vec, diff --git a/wallet/src/program_facades/native_token_transfer/mod.rs b/wallet/src/program_facades/native_token_transfer/mod.rs index fd24c504..1db864f6 100644 --- a/wallet/src/program_facades/native_token_transfer/mod.rs +++ b/wallet/src/program_facades/native_token_transfer/mod.rs @@ -9,11 +9,17 @@ pub mod private; pub mod public; pub mod shielded; -#[expect(clippy::multiple_inherent_impl, reason = "impl blocks split across multiple files for organization")] +#[expect( + clippy::multiple_inherent_impl, + reason = "impl blocks split across multiple files for organization" +)] pub struct NativeTokenTransfer<'wallet>(pub &'wallet WalletCore); // TODO: handle large Err-variant properly -#[expect(clippy::result_large_err, reason = "ExecutionFailureKind is large, tracked by TODO")] +#[expect( + clippy::result_large_err, + reason = "ExecutionFailureKind is large, tracked by TODO" +)] fn auth_transfer_preparation( balance_to_move: u128, ) -> (

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 b5OL;UA$MvdvJ@iX-Qd9wUw^y!gUkOPmN$Hz delta 131489 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�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 Bh*bap delta 120604 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 JT3k$4zxYGT=d|n^ZJ=wRwT!)6M4Z~}I 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 BuG0Vj diff --git a/artifacts/test_program_methods/data_changer.bin b/artifacts/test_program_methods/data_changer.bin index 44ffa8cb4527e753bdd1fea20ffae6f28bcc4dde..9bc6966a15d74e0ef4bd1d1f31e41b11691c2104 100644 GIT binary patch delta 123473 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 delta 119495 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 z zg8DC9X}kl=VW)BVUjC`Zjj$YbvM~SCQ4R%iSR_k2YKG-7Qs?58#=BxUtTf&V*BbAR z<*?Ow8!U&ldLJB5>g4*Dj`ouRCQU0cWFPi+)(U-b7vj={#78@8{5mYNT75m1Nvj@@ z$KX9Ekor$MyX!BnZYj8ngq>Z&7tY$iYAmx_{SB^gl1D1vVZZPtl-OR52ajy{DVPnK zFV|nW{5E-pS|lee%^QL4_yrc+#?t4S~ zs5|}2asD!H^R{pAbv)2`(X-4yTkv*}uoRCs6_y2Fj@O#_r-4`D#_#w6e2wQDeXOKnpy}c=y122i_Mi zH~H;x^uBNJVBG(MdS|18h6T|Pfji^zzCzR$&o@3E&sbL9VAL~kufToq_WJxR4+a|) z@IxXv|3lwkN#OHwk%^b${>B&MiN==)zS3I${(Th%i%f;lIJ3eJU>sh^tk(PfC-7Y3 z<#@Kq|1|KIfxpJ9Tt4$Z6@6z4#Ov`^)8Nl|;wOGU|HHG5YXff!yd5tz`Kful^hzw} z|5TJi!Df@t9M4?oJ8XgH8t)!>@4)-wr6#{Up7g12?_fMTc6|Ne`AmHQ<6%HY1n!LI zn+Ce#wZ_NeTH~I0;b*?XUbx!$Gz|Z5 zYy3|9q{*Lxi+Ko@^v|jCUJ7JVX@&c+Ogi=bxWY;9cxGb1@NM=|f4b&3iXP{ILwxO! z8ycR9?ZzFDtWakviDzL>_1S1sDk+#=nTki$m;`xZu?owGn>g=v4fhCa;(V9iZWO<2 zMS}&d!N<&i-xO}I@8jH~blwm{RkyL9vl&R^y87Y6=6Tx8-)aGCLYc!u$Z zI9p8zd$|s_Q6Nqhe#sQe0MvEZ&Vlp`E)@R{H?i2xfu<%dTl7F|2XN>M%s*Suk%Y~3 z*ntM+`h5;wWJWwF@C7*Yh2J7&fiJ~_OuPcm`O4>ye1ZAD&J>Iy!Fp`q8*t;*zJZ%? zvGF84!}!j?_XM7nrC_P4@BrRm{0N@6#&Psj{+n~P zj5tk_oSKininr|Jl=B2EE1+J2Wd$^Ur>psSJ{jxfvk}>@DY|Z zR=46>AiF>t9EfENHGbKsRJ?}jKSuM01>#(L;`WaolZtnd`dTczFfG?V8Nlll$R^YV z{=qWo3TZ&DR!5mFBxkZS@sx@FmTVlZB0pL9%BH{*@lq4N4bQom`f~l1Gu?a&X8z(E zcoom01AR99Jzi)!+<88yYOD{JkH(u!d??;->feFeNQbV!mvH75uK)UQc`XGc6lg;8 zm$*r!f<9dCf?JsQP@GS^qigUETw*$S8JC;*w|It$=f2Egc{9)dwZo$+SZWe3#7+O_ zx5%Y|D*|7Mi%otdUdw><-2fkv{NH?gvvKZkSzquUNx0Q-ft9%M&vwx|W?h<{bl5Ab z;U7M~6Rt8_WC)&#^IV6w;YB7sAD3fkL3a5!czM<&{A&UG$PC~poNru;WkAWoPcjC+ zJn$8`)Z|}!(+4VFo+&W@o#CY=_H#WLyCH(;3)>IqopgnA;D zNu|CO>%~Q`Ew^L8@Dq*LTwAg{v-4p&wLXLGBzqz7OE}L=!q@OB!78L(XcqSh2_bp_(Ru-%7kv0rNH_Qz%)MnidNCIjl8POg@V zux!!VRN{xOYv}gAz2yCWCs1GqP#pLa+_cVb;=VXD$z85F(Tu_iO?)h_HXe_2vFsxCc)ZE@CM>&5S2p$g|2PsW{%@4;op({QEn41A68 zgLstj!}!{)DR`8EamKT;>@ywllUVkd`Y9~CO#KX&U7((aKf|pkkV*cPv&PrpEc>9o z!nYLI<9;3XOHJL6*dF(Dx$Txoy4gMB`3cKW5Px3~cg;m(Q}Gr}(}>(@l zcA3VHyn*w-Ou7Ty0Dd-WEEl7l{>!<#scs>Dsx9!Yc#w&=#)Zv%{$6;5@qU31$OZ)m z;fba~2fWa@5HB}A3eRfpJ3I!@H$EY7ap3GJ6f86q`r@U=XW&i7XXD1XzQgkamj=EF zw>A0Y4bA62C^+FZ|F+xv@IaiAUBawgj5pyn&YSRDtoQYMzQKTQ_ow0$@zP!W08a_r zw}ILJr&F-XR2YaSw(t#{i~E`mCgN_!&*2Rwe}3Rs124o|HD9j(iz#T_(s%d{Zf*Pl z&KNJpg~p%aGUG4t7~^m7T;p}(R!M*H_5UYRARGPHz%_U?hfT7iqgvdWU7+5A^YA_t z$S!ODe~C4IAeLRM&d0@=YlW207`nO}5 zL+U$mC2mfE^tZs-U4MD~PeGQ1gIvN7&f36Fc##>vCj4*mb6ozOixO-8-dHB7dSAQ} z??HhKpqI0|{->ip6v!-3mUPq)%dA$Pfm>s}T#s|scoxf~RNshY(yDL9gN!HP`8cZy zcTh0#4qxFeeEFT;cjMQLr{dLj`S^5fuN@Cyztq${gzdHCAnpm7L+F7HOWQ6MVxY&3D zmH}#fBbEWGf5mnV)L_5V)YW1;2evHM`A3#)^44#1oSQY=D{x!9)x_ILeDC(I58h&d z-(W!dQX+@h8FHV!H_s8qO^j1LlEfeAFz$G6229>3b!AHN$(;h#WPa zV(BkFRpacT6S&2qU_X~|v*}QF$z%9W;%SNV-)d~Pz{i1C;x_xXcVkXPU*Pinyw~7K z-r4AT3I^`)6E@%x#=ivqE$|`LYGC!<)sqMLyPB!@( zoO^fs=znw|yWr3zJa%iR15QPU<5J_!Sn`u49UYDTzSsL0EbYs}{7*;6QDE1&JN8RW zT~BP+_+%58HM|Jh0h9+GhO5i~M|jge>vS~*D^0?fz+>@@X?`F78+UK7Ys61D2Yv?6 zG5M?TIFtW%y`_H!u$F?U)BP8VcX*rIYU6A1IvUiQ(Al`@eeI)6Tss|ogqI%R2edNq z7lBvfO_Cq?&j7yF0vQiphqsyrf5L@%zJp(JJ_8_?|4T=Ey~F*%K|a18E-^kJaK3ZW zKTUL?U>s|#Yj`%E(pwu$N9W>+Yyo{Sd6RQIUIuUrmR+R24a+W2SK$RXO@R#fmBg-p z3SOh&HIuO3SsU1Z7ZTseHL%;ei8a0l-fC{q_QG$Gzo*MDcGmn;@R!rF{(C*IiVOUR zufejBrT&9K{fA9l>c3~}XL$)(Z4#t`kAenPn7A~s!!{rlS4G=R}=Nf;4b+(7-V!E)8648j$+sCNA}d1@(uUxYWPj*O%juHw^z4){6~ zm-_$46{h|i7f<>p;b{tN1JAkysUr=1fh$Y{t4&-6@C~;0zcX>Ezw@$&^;=*T*FOon zQD7U`BT0y}q=6o|)SMYl4%{1;n|ME5X*>W=H7>!6I&l3@79KcIVArq|`-M|2wgasD zF&R)PNwUi>G5Ip!yMy+onz(GS>C&ED|C6Or^ngi_2Hp-DSZdGAU-}{Y-!^c$NstDn z1r5wFacST|Z0kR4;!^*;pnkQ9OZ|^NWd7L(R+t27U`NnE^pW2}(m*3@>*tub)IS2- zE!f$_rT)>`pn+pdf;4b(&_KC~O9R7#`om3J>fayKpK0P!Kl@0~z+)ys8dw%Iu-wF@ zflq?^pP9JSPx1WCZh^+~Jg$D>_kVVxz;42SnFMLzsGxx&6PE!T8`MAE#HIdaLH!C7 zXa3jJT^TfRl}V5W9ts+mW#Te`$AkJ$n7GvcIH$HiHK^as#F_s!bteQ3oM;lHfh&RrMwqzNzdEQt%EYDqqe1=IJ}&3~ znz|>02A=W>@rmfupn+8;F7>|(>aQ_z89=iYa<11iZ7SNO-tqM(6}6G0IRr{S#Y| zV87JVU5M=fJKxAN1Ue{iuLCYN`7*#MuDzsxZo%#~39?D=3mUv1&)O#wb*I->4ESMO zIzAJ>J6`+*UNX)5WxRZ9CaQJ$i*bv4Gx4A8B>#P!KQ)uBFIYjrIuhg#ND@}#BHY^f z2i$bJk8i=%#N~m7F8%_ZkJ;k!fWE;C@NDPYl@0Tc$BVKPGEt>VnD8lUJT4Re zbeasP<7YJR0(S8&c>erM{GL#Wzxp`?u+NwH7VpWpyiX>Y+I;ZDJR>5m(_^ zY!Th(2d&{xG|y(DC5@65co)l8G?lvif3Un4On2dr-|+6a9)1q&`z`ZdKC6{sr^y;W z`z-@_rCt0^CUJ*#JWB1DiP%+fe9d|utFcB+osav0S#37)O<2B3WroJNM_fKR6Ag3& zT8s;B_4VJ%{uD*s$7Z6fuEJlxP=S4%ack80fBXSqMe?y38Bkv=A4n{9`R`!)z(E_g zi5qQBJ})rK#e3k*uP^{6k<>5VLjJOLQJITp$5J5g|DWMT_!5@)@9U)8EO9<=*UNR# zg^|jKREk{#H(~iOS+#SkZT!`XEz%#$q&o$#ygL)kbMcR`eASEFLfPnuzql{Iv%Vm@ z7t5zyr??K^#PWVX-357nGbellQN?z4(ROy3>!9V1<`;Kpzn8@2`Tu(q$Y(Yux?Rv>cOFQykJ+;EKHGl}-o?VCVMSxVhZn3# zI%pX+ju!99hmkmp+qig68$Qr>SG#DY^Ch^=gZ@17AYO?VHs<)3NwJxNJPLFlP2PuJ zx!x)HQ>w&IYMW|s7|p?EA4X00<&REg7nWoB=yipg#E;@t_hh0XH=x%0@uyhK7R$zK zbRz|GuI4y*`#hgl!}6)vVz))E#ch^ys&x%Mk7rKIMDtyPr)Jn?W((Yb;#h z4L4oe-o^P{a6HDuzr^xErcyGbzjF`ajZ6GNqA&9=E|^Avd@5BZT`iW6ST=R>;|}H6 z=Z!{r&ZDus4M*4Tf{y%%(e3`?G!4($vwi(hvEy*!oahF*0i0Y&dmJ@cJxu;Xft@tX zj$jjVCe(d)Azr;M6LoV9%)s)I%&pGV*q%q49LXAgpNan*FKfKA3%lS0u7+$fab?$( z{85VS&l;ZaeI+x(V^S6Bx81Q&&sS<_(Gvp9}_%tY(lfd0hthr>$eQ_kivY|%bi;@t0i zCT1R6#QA9~e^jbSC!6@vK@A7=9=3;Rhruac|NotdDqI5>P*9L=7jbwelM+`n<;3LH zu+b1E%|CvPPrw_R`NQmHyq!2xDXzck1+*9Or53LKR9uUvIJYe2{eKfv{$ew|ly^Jh z&YCckN!W;4>(=NrJiAG|`b~ZfmLH?fxcpD?TDGVh#&Yqw@j~7c!T_sWd_Wl^JApf< z#>oJGD&zQ*-)fyl4cRCCF2*#dv;00RKQ3S98d!tnx8h5j54waofc4xy0?Ut9m%8{0 zEWh*lEyI};oOour0i>^Fi`~nwVC|9&=q@bZF_ph_>}<3r(^tO1NKZsp zVEIBK^KE>6oEj*Rxg;?>jTxtm zC*JOAoD@Vhwmj5{j+}6jasDg28XE)7S(s&7r#ch~&oUqEZoD&)ai*h`YLi-HSep1t zb~iQzLi0?~I7w6In6b=1w7YRcTUv)XnBdA_0_vnlTog%{rg0Km+M;w$>ukGq+t!w- zB@ICuPK-`3=d{}UG=T5p1frI{J@aKv?SPr|Y#-^>Z2A>LrSCuXRKuQ}#&IMij}*(W z@k*?lv*sG`8EI4eik~%Bv@^*Q5oc6$8EdVxec{l`WirxStz6tyl}Pp@(Qr=KEA{cU?1^Om{TsVI&eOCn{RV1)=EvTOXO z_B0k3H0?^7X=0j^6c@2!JhV!NTv{sPIAu=5I=U#c#+erHNvfVycGckoY+F}Q^@EgO zxu>xtn7w4b_nE3+58u;Ry?8clAp+so?`f=#cLX@gt6Pak2hOtX!sA+0>B(MfYnRQ`o;0HEcc&^C# z@hf(07cAMn&ENkcvNnh$RW3>q?xe9WLi%8DGs?PXl7q!2bmjAm3SX&Of=ahZs%i(|+b zN49qg3;jKFdG zw(*f5$xOl{mP(uGG}Nj8#O9{i( z3xR8iy9UJn{d0{I>KD-qplbQDUZ7J;3J>3TwRWqXcJvi+Z02;$s^u-(Q_ih!H{|H+ z5F_tgyCr%da{X#Y7qI9V{^4BbTJ0bGZR3)5%uGx<<9VtZg)E((5)EeoMU}mrq@J|r zXJ(L|R;B;4=V)foR*{B&<#lAU|L9ANLy+#zI)fj1p|Pz0*Dt-$xFiU<=5c6L9CNFY z^82^E+E{xc=c!0_mSmAOT=MC%V3FmCjWe9sG{xWW+Z6afqGU`%jQ{wHjW-AI{TUz& z#xpqkn5X{rR~u`_Rl;LRBSct6x=1JM{PQn1R{7U|-#F0k-qSefoEqL?i{(*XX%uRx z{pSB|tlU^b6t-wIGlH)jz^K3Sr96nACFM>O+Btwl4zqpBRW96g-K7;)u|td8VftZ> z(@@0`#1>{IbjZ+QTtjIy2Rq9+*9fC>&(Zzk&w08rf53jzL&&1`kcs&;DMmtD<}xQ` zs1UX#I&{iv$q;}bo^rG`rG)jQy<-r;u+*^aor8L|J;PH^D$7vQ|J}=t>lX^3URpyp zV`I};<%;aT@;0EsXL0~L+yen^(*reVY1AI%7)Hl zQ7DwnIWO~{d$BRE`mnV74$Dkssh@bdORT4!9#rSl=M2?}{Lu8yVJ&l<7##Fv{@~Xd z7ql~GxuaP~ZHNe0#nWv|Eho|QR`sMkUonHUU8UkvE@%dA6{##z^KMvDOHIoo+Z#}K zEGTlT;)M4`)SM%V3}PP!5DFujr`l%>upOuTp|LEgwr%B1Lkye$D-5qTjkK`cGb|p` z2B)>0S6EY=@SFEQ+X}R&+8=Ivy+Ql^;cc%s zE^lW_CLs-}Q!W-*+PZQ9d2Ys8oMtRZu{=Np48S|^lq5|uZbP74Q%9nfSQLuUeYa`U zhgb5x>1*VuzV+VpB%uQ&T{xC5b3i_*8-!LPk>oOE2-pFiurP@bq{rG!!MU}RfJkR- zUnbYr@b2U~z4W4f22uFdzIXLxE?E`W6qYzbxFQ7S+{Qk56HvXQ=8}V#%zo5yuu$~5 zc%pof z10J$r5BY$}ZXs22d=S6tI1*6`TqcU5EHs>UHl%B+?Dk7H#ao#aEg6MM=u}DSG^K+3 z6-~0FJ^R-Y2Nz^TItz<9c#eV$Ay8p8bFwUJ8I*CTkr58P<4DPL-;`IS+qc-uwp^FC z1eH;o86Zton3%;opK6l52Ly;Rcot_76LBh4BK_`zptC5iAX;X^0;ggzcOF`{dTiFO ze!M{r_xB!5#+J-_;yUZl{`P~(k$uA~_Olq)KTV;rImiA-I5n&Le=SsX$P!HT624ik zyr1JwD(4xSM^;zAB@{G&%K;Br_54?ofg*Tf9yub&Xq55PIBO`v*$@TM!e-1T2lYRK z2r34=AHOb{&8D+0urDwS{fs)6q;ifY2Xn)b2DbrI!5CCdbF@|To$G-a*zYycEy07hsYmWvjCu4`T~G0 zFt&C*?NrKEw+z}tF6y~<<3fMqp2m@R)Hb$s$9C(sY~2hyOtp=G8UPWLNE>$E8;}hL zyceNNq&Y{02AvBsGNq;z2K}l_ENfL#6p=f&BEHOCnzB}=7@*56i40|tu&RJC{hux% zhqjH>5caFRT@=b@)A{vF$l`!zDPV+H zq?rP|lPZ7p5+Va31+_Zj2z?@_RO0VhLatkc&>;##8z#;s2~1-FRy_L=veDnNl+0TN z(V#>r1+*493Uw^Y7vzvjXF9Zihm^nldUD#$f~@qD%g7hctR2uxuIecL(&glVHVlqH zc`8bg1ZA0|(=+!v4td*9XBY7Il)4XpAr#lAk+z4ve5rJW&JAZOHh`w3$kM#jD?}K#sQ>DZ$SJ|>Gm{sP zAM_6&MR@-q3yvl$+Owyd=A?Uy34B}W)Wi-A0U9a3jl+Z+!D*bM*_lOAc}k0GiKioL zyj{n7%5l~*o~q;4la}d@pPV4`Hq_FWAQU#Mdjji*`0-;=qr7E;92yvOmBDSI3YaHV zncjK#1bP0`V+>g!N5UjvML8_t-Ty?syi{2@cZz-s6S0s*sJdL9Uhb~A*1x{6dG=vk zA}<8iBJj6!{))%RiDOBuB6NO8YT}3iM_uuC@`bf@vXaz>)yv zNCW>KYEG%*eCMyePX73S6KflQ1~TxQ?;w+ba%iT}0tq8$z^}Cb!X4y`K}cyP;|PU& z)HrMu`}gc5H{#cjVWk4~5{F&|>YqESxyYY)Cz%KgU||?@g>r~fN$h%$ZVFP=qG+60 zROMtQqOkX9!XI}RxnVquVk#v=;wrKzVsf3o^*iXe*?kwh4$vNSi<*pMHMvxL^KNoN zfWFdvC*e zN&no}k#q5T$eAbCcJ;819H}ryhC(VXLTVz7h%54U-9x_6uH_&GbC^@at+gD?5Drbe zkqQ0jcahcpwx=4a{jHPD@ivQ9EKt7Y5{Q+tcHM|G(QwFAqb)W9hYO*)RT3L@6~lx+ zb|2ZiR>cXIOrv`W^*yb+r=@C2f9rk3O;QyiCSguxDNqb8h7CZ#vSImPF%&V1zyH6< zF^ekaLkM%xu;I_2)m+tv8Ajl((E+9yI(@<+>lsyMdhn8St=D|hnzJ{q>2xOf*1wW< zZHSNJlu?@)t6YfM(r7#U#&v||Yi++F9pOV>ceK~oM2ls-p;b^dcp3hOx056NufIh; z;n$wqob>uv(?etjTIbQ(hF&)vSxGfb{LddEt#O9X z0R>Hp!oGx==Ii`#zDJJscYcR#8HY3Ah%uPd@acxTb^g=;PBymD7fm&bP%mT}I*%y4 zkVkE2OeqcEf>bgAV<#vg6`&k?L=J^w9zII1?71fuZ2NjLB zNbk5&5ky$pqKYl>_x*reA7s|5ETeIT#80R&_5brIx#K-jLAX>a=$=v{FU9lDR@JtT zmSU^m;3pm@%l)Z;(mceU_bOT7mpw+#JE@jo*W*_4`_g0N;kS);9*~e0F<6y0`!D|| z`HKkh>9Wd zG3~)Eq-8i&p`INUwTmdDi-C(!A?}xiLmH5K!W_b)hC}%pRU9^5=x_fKi6&<^7ne#< zF~(1iTB@Gs$VxYA8SuClwNyR7;>ToS1NtISE=tnOO7!%Erfa@x1zsBUD#p)0L3Ch{ zb(oMLW(C}Y?ks=agXC`ihZo5q{#*ZoWB!}!&><&~m@A$6Pd$P1=KZHM zm*?Jjv48R>WXyl!C*&XeC*RjR)USJj-0pAtHhJr0n#C!wE*hl>AgSmDoE1vwFWcRC z_vGxWY30^c4S4PzOnvJ2n{V;Qy+Y>ucRxfHoIaX~DmA%^Yd8-%+VWkn*XY~T3Y}Tf za9AFsKe^cnw9U9?$n;Q1M{r^NZ+4NDYk7=B4h>u>6=4Xlu)A(4;U__c<_67?9t#++ zy}QW7T9g|t=y2PQp;r#w1|6GOMgPOyWYt>5jKC%+<8m8@#=IK($V3Loo}wtTA~7xV z;wt_}{gg!GxDS|#Fv4vS3wNFBbsj%6f9_Lc{#xpAQ35tP1_W0kS;pH-lG1j1~ zjO*A;YE+K+w@PSlZ``b#;tVZKDnA9+J^GyrrtMhjrDVf`vcyXJpMH zqOLuteOF#O=zgslQCcGRW{dN_#C{eYYd@_GpMtjqwvj=@O^hzB;z-r6t?TtG7>~*! z-^q6M+D2v3O)K_)5pB_RwF6nyHfwen6j2>RLp#uGv=zfsK@J%QQj;*W&7!j~2bR)l&jNHAr;%W| zE~dgT33ZNctv=3#7RXpikpxAk&Xgxv1EMtO`NBOZM1l-gi2UupAZiRCBEYNIsuV^V zKpU{hGdFOT8O?Be8uzIaYsxIAwtcuvoBJnI{@;E{RtA_KIVs9bTp}QL+&}P3^pPYE z`4%okFcu*%g;zfQSLB!gK`btI!2`j}qH{Oy{3<|-E>oC(EE1@m|Lm{GvH8{ToHZJ~ zk@_JS?)++C0W?D45N(-YZG7+yX$3S&qF8f_M$izKk-fTc&>lR0F&h`_J>HF>MQ^ds=a6MM=0fH7zaE~8T`Y;HcMJ>R^C92SIeh{_V2 zY=*?!#&Q1qz2`%H&}E0ZDlUlNdKm6F7Y3+ayxnuxFW!7F1-f*!!aLZE0o(+VT+9Y& zG>1M>W=B0@ zf^PBI@{j;*9U8q|#vo&V%3ku`NtvNTC`K(h)~IyrG7_K$j)noCg%Sfi=eW+v{k?mM zZKo;jep7)IK80XK>5i)gbVOHsg&>C>bL6pN%6<+=uPQF=l*(Pj!>@myEN_b~Tesvc zF%E4C{3bREn~%ne?*7&;l9iGFNUQ8yWIMlB#CoY|zi|8Cw2w!@q6C%qaTy<+cDt#J zS*nCJ>M}|ItzsFuypP!sI}_OuO%!PPL>GJsXVuGjurm0wA8StdXPzhL2DsG)Y}lr_ zCTuvmQ2aZ83ws$`99i7rLSKrBfv#VK1mZ~Jwq1V3_VlV8GtszO8>T4Kpy~rSNBObe zkq<4Q2sTjIMv#O6izc{r0^k*ekNK}PCjGa6M@~8nowhPBcSpcmr1WDikZc_7A-KYV zk5)t)FpNdWx;}26?|=LPIm;jP1UbR4ev!O?65SjL3J>sCT*WjhEq;~g(W_1-{i83E zE%kT9_EQU{DM5+eRITKUQMEu0-mIHnBI|=JOQdt5L+u4gjP9l|IC==r<1|VT*Xt}T zfG_{RO9WSu4RCeXwiHMd=xOKCfiIJVlR#4}qv+K{Su4M_*NuX!)?b`>f6>ci*(3@L zu!Yb+fU#(Z94h~9k2DwiJ6|UM9ONw%6dnNJ8kSB&fBh?DU4Y6TLvDqV6zrnJx_|Hr z`J*7yDW?J!6%7?YlTv@u@5%d?0GkVOQ{2W}+5Bp9p;HjRVXu-iZho#YHjeZobv(~? zEix4j_2~r`0mYGtaIrX5D4AvG9W3lS!u3pLM#PBaG}@^<69JVL8h3UwK&b|xZ{I|? ztj;w&C9(kYG^Nucn1HK@F?``gX@oLJ2s#rXF-&l=86_9=YG-lcx4lMAKe@h#x*NA? zL@_+?lafGbajyl%SO3gwWbIhSC??bv@1_)s{Kwx1d7twA<|#Wr{D0)*bH^-vArdz9 zu)=jy<)3?z9DfsQ-VzA-C%ABYOa={THp)7gFm8c`xF`mxo5aFX`}OOaOZ;08Xg)Ze zS=QFs%`P_o;D`YiJ_>#-Ek@@-cd%KgHp?& zWB1#w{pZm2k^9d8?rU-GW&1h!3mVPK+ZMOy5eGoMGlMD}3gSiFQ~zq+aKE4L$im4J zjteT6HYy7>a1s8qqXdRQN=pZ^ZrU$jj2;WzLISAoAVK#-rcOdeB%s+Nua{}ppg5aM!Bv8O2 zRL`hajOyqk96JDV4p=Wg*BPvgL2H=9=UG^S)1LOA>XA6KD_L~69NqSPOCNC&-3_bd z&>s9AU5&0~F_=T?oU2|V@25Z?l)vKO=D8c-fl!9ZG85(K8%6w69Q|5Rml1Kr1n72e zo;8L<3U~BF19iadd*wg)rltzeO~oRIFPz9Iafs%3e(g=oGv)?7gZW2UJ$LdESjbR9c*#5mo=k)T2AY3_1v-ZdePt}5(RhRMiGq?z+`feW5xywgQ-;11 z_%(}WWeLq0GNAMF@TBm)fL`-{tT4q8wB_PvSiVGti<%`!K`W;0aL^{Bs8m{f9fabe zC-^1^T8>cOL3IbXH@eDtKnY@K322t%Ln(+%k;!(8Dz$4Ub);$y*kQqn-hnmezumw7 z1UYUkDo{We60AhaM2ZspM1gho{Qk5B%{K=kMf{HH6y5=414IXx9@adkzFWJSg;swa##;i8$~3os`mOGOx4F>=MzEm^K-`~E;BkIAo5UTu@&ol zUi*1Bu%=WbA<`mLDmCz{&XQ}}9J>}Q%A2P+x*&1J73{bF+AmOfx%kkg83#;{%PIH~ zI8KxUZvKX4_)yaJMa>2697xIly+DrWi_m2-Q9El_b!N}1)rhO^?t6Q`8I)PkelsYJ z>3!S5J!gVnhb*ik{YeV$eUntDK`P z;DoBC+5zgOaq;DG618Jw`w$fi1xkYqm{Ug|>RN;WDRtfqh$;{+gN`kvAjnRjh;&32 z3~|rW0-mbi;qPA3{LC0IXe%W;G2oBzRT*!WHZK?l1_z_A@ZHNW7RbQRsB(03)i`3D z6geTfT5O8D8{K2N5h+p100treheq^J$NCp6v9qeh{qPlXg#W~{=6ocS2A7oJ{opIn zaAN%5E^A(VKHwS0Arycf_+SpIquo*gm}>^d1;^sEuiby} zLD%9Rd?yuOIh`|y;osmid{{M{JLhx$F4sKz!2JI>@s+>yyIgbCf%zB7@4VL^nBc$j zPvQsn`Bu_ArWxEfch2+vO4nTIFH4%i+yn0SAI0zUkH3HJoM8R|bLQof_}i1_5pz#| Y*nc074!r5%#+*z4Z0D;<^RplQeV?z_uPMOQ=-bzuP!Q87id)D{I4#X?i_S|DOtUQp50RMxn7t<+IR zOAGUo7b*;OwY0OIgw)LRWM&;JODj)V$4X6&;QyJK_g$8wUf_QTU^wMhR9F6~*}!)D4Xk z&yHsmg+FGWcGrhQas3jBXVq8T$nmokVd_Aub)}+w>vCSEll>0McjY`y@Nd=fMx~502}pBu#NS z>|4#3TKnIccCF1%w7TIC;(VKCHqyy-{gak9YH^=j)+aVi1$nC3W>L&c)H%=R6a{uG z+~%)1>}o@_``IjNLuv_DWV@#$z20cbXhF88WSZh^YYS9BLa>tK+TD@k(_(*xU8}8y zvZb3+RlgjfS*VumNBuiDv{^h*bF_=Ol=o~}1m^ZYp^Q4u@rpyiKdCJRf^!#$0|AOf z@IiLkNsl!dlq2|@HujHvmb_AuI3FPCqmo~Bc-+>eDK7QT^}f7Tx`5a3)8L1abtN54 zSBAC-)$NtrDb+x*uxn4h3QuT5wV5){6n#V~j8;{f1u}DS>+sB>r9=Ntx3}o@kf66@ zoL)cC1iZrNWStJ9-uakKRjVBx8xu#&5ycUEMoFpyU6!Lu|qiPCQB&iI--^DX~o)$$bq^V8LB+Jy>vRL!zssJi(S8+EoBX*K+EX`7HFF@17Wq+a5llg`FoEInrz`D=I<`hn+7Ielw}-BXh>-8f>vV5Kk2Ri3;1$rPd(MtIkrWfe-$cVP$y>R_wut4_&F=mm?k_jQy8#8b9i_cUXcQjY! zT9l*o;w#CtU35>~7w6E)(X9${`CM9wj5XF`n2Z$o)r(LQ*Wq^# z(3N9i3#i$m*vy(@+NLSC4KWxHu*Kk&^St{vDBSY*dKaE}&x{3|EBuEg=gjC~>QX#f z#e$%WW{EEr?s=e#|44P3;%SnzEWm7A_MXy38>I@I5{xNuTp5MimSetw=o?a?IJUl} z{}1gWZH z>ux1yU4Y_-FQLnp9k$)*s^kP{79PhyWNpsm#0G|-DR+N?x(jp_2q$wrr=b>L3*_dA z)p#jY`q+v&ivzJjgAmvAwg7NSXjCBZ4NfV)V%2aHz!x0x;xmr#czK{|n|s?-QH+HZ zzgNexCN9r?j*|A8q;wW^Z7cov&30=&s@4*jL6Q{pQ5$Fwa|uy<;#hg0+PPq6#r)>QFsV zRs^LdS1e7Jq6BAj`&;CQEK}&GlNH;Ypz55B0Z1vFK{Uu;p%AZa9>lv0;^pJE&wzM` zsg9^Jj2oyVJ%PmpE{Aw~aPbz@$u}#trLTM`mv5c!`~yi;b1KAJM?I{fjbtmtTLR)_ zym^uu;w=Wty<<4f3i0Yr&shS&V>YDxsMvQFKJ#Tp6&GE%a#Lh`!(h_BEx2(I=Fg6>zH20V-V^4Y4_O<@dZ; z7`;rr^t5)<6nz41!_a1I4wOyURbFQakE-D`I4uYh*b55dxN9B&8xMdfRKk($f~PYp z?(y(+MMW@$L?y?fVS51O7`9!tHJza3glPd@&o{m}z_tv&0e+&Mh4^y|F+!+wd5*%z zfCGfaiws=I-j#B`o`woVQ94uZY`6y$%3=)SdIrh}@5Td?U_(ca=O}%ib$V2d?(TJE zMkk>gN+tB?cSlTPlC(|*MJjP452qz*4fF{459;aHtI0(a@saIVZYa9NM2-S3Qw+`7kCmKU%(kii?D9Krbr}Ni&KeQQptxl?Fbl`j6|$d zVZkDze89IeZcTB~;#m;LzGkM~MNkKSrEq5o{A9LjissBlkmh_0LINjw8)L*bhvr7>75WB?0dN5wkiI<)LK2YJrJNMC90o4`SAqbdj1NZjQ z*R2(UD}iQP$bE{fIa!OqBNYNwRGSqZ zQj)gJ6uqcUs7>~Tnc~w`(>AkG*v?;dL@v^WnhX{=6&jRm7=kGYNt7+{z22r&2sLmZ z#)eR%rWdF=^Y)PnjSF=Jgc<~)u7CiG|14As7iv&_p$15yR;)0DiU~7050%+`0riFI zSuKQG>?71nAynr~2OnGsf>3)Zw($87YMGBv!3i!@9uI_2J%yYLIn9Oz))T6AsVcd5 z4l**hS8m9tNj=Ur+h-|^J5EeFV4bPmQsRglT#t1&FYAC6+|GRQn|Te=b;ele}u@h7}w#XVRqD4*61ztgEsxFX{vawe`2LQ$0Oa#rvy5w@v~G&B?&@lZL39Ot? zDo&2U$7@`=&I}%Ux)+$@79(tEN?}|-NF!M-+zxw07~%>mnS~N(6Ov(`^?%`Qe4Gu; zXE@B~VQxODJ`4lD%-nolFy{mZz}a}3fNuq6R94&keHph?Os+GIAIj*A^D-fp-Z1Od zqB{@CI6pCXKtNF8R@B4JX^_WcYk)9?@iCzZ$9f1=5X`w^NK{kl#|6cpXuq<>a#L|w zzfrbW&mq&5Ms5qZQ%jeHDLEv-&r}%z?rg5(ikI=8#oUR&->R3!t^KWwJqDe?``d>>iOL&CY?mK)hd!o0g@`Ty8d;r$PV@9@=B4W7h9P)s3fnXBP z17`hMiY3pRb5`;^Kq;^Z_2*JtdZI27sK59tcUio4cPT30IQZZz0)-Um3+?Mm5_5PZ zSpvU$uD}rGUr4g#UJXYKwYGo(O3u@Pe%ulKNs@vqN-pOH=fZ!Mq;jF&V!Fxm^jpG% z|4EY0PaHl3Tv{FY*OCkulC=3-5%KYC)f7iuXGjwEF6|LpT}1xCWTe5cM?te|=v^fl z4@u5O@E4N&D+dO9gr5vRw09(B67c z>!>L@9cpv0#$7p2Vc<->#OoWsbk1y{cAVHb`$%DQL9*IKi1a^8)Q95#MDU@z5d6ts z5PZ-S4fkH~pD7l`QlH}guLSQYxC_On{(|DyOwq^x8;iUAnZ^H+-~zAv`yW}n{VoK* z^A`kf!Tv=3&pJ_{#Qq;C{=X9Z!d(bH;3c@Az80^C7XKHDl~(^h2`;#c*{!?_#jkoP zu21kY&|)va=!dYGtWs{WJX&28pZyX=u8a*3UCK8=iAao&i;N5St?t(09^N4*EKyzE zxjp-3wAzlDKTzXY`R8g-L1DYaNVIf61;1*FK@JgvebIL04?aH2X7=@2PV!ei%MrN> zJJJ8aZ}B{$kRWbtY)uS(%Byc^`Wd!mM z=7(J(bKEdeG2yVj!oMfdTR7z?EHDuM%GSVRqCCM6VacW1f`Z`4RGegnpd%O;P!{Bf z-J{rW7K6MMMD63=oY(?_;CWpz|FSh85J~ z2xc35bcEVt-3Mxdt`$5N;n6D|c?g`psa-#z5ygY`lD=#|ci)-1u?Lp1ZgmaOgH)R6iIGf~FD%(?5_CZM1=m^qElTZWfV z+QX1lx8X9IBsM@KBc_;iQW&$8nA#pET*)2rn-xdLBiIC=!HL6{*w7vUcQGCgd34Sr zD}s2#5)1q>xLKZOSoVlXd0tlx_aoM;d{J-0utW_LnlPaW6Phrg>3^K?u$Zt(qR9{^ zKc||e#CZsx0PYC#R0;g&Umj+yZqt<7FZs~}?}gLS-~H-w4j+oKO4Yam^9^?5zQq^Wyg57r@wxD9a=A7(n_Oy5a+OZ9>?@@B{`0jfb%$o1Gy+%~<$Bebk z!~>0l6@yC+x+u>L^n_JLziMgXJ_)P9b$%uilb8tAIBTerhVx}8z9KmohSSz{+xTZR zVG(@A+y$Co5j4DWEG-{vX655le>%O3z0q(xzqd6&|MYN&mUc;O?-J)Kg)kX$(#&nc z0j~%hz#T4}j#x?t>bv$|S9k3kC=ap4!8AQIHlpAi@o9B)=tIJE{-Kxu~kq0T;YQ)!xLf*IUP@AgO;$R$Vmj)8{=s2mr>*v(JB~8Sk zqF?`Nd@)g}b&)uHG2`n)Iqe!5-BQ?}=}U1x0SDbs1toN*AZi-T9MX*RolX#age1orNnHb$)^AH|rnlLtePFUxY^npg(}@EU`FOM#^K2bhX_c2z4p-!5 zY$M_ZOSIO#BK*Nks?kC{nd$l=w4Y5=2)oD^=~|Q|7v+!_`dshpaFh<8l(3i5Xq}oE zI&^U7zT(25wVlnhh)`3xk~9^oZTNP3H%j_!!&qCR1YPP{oLuR-I4O0%wr)tDE?Lr^ z9veJ}ub37WcaS*EI!T-*@icx&GUu#K%k4z-ha|QcR^B3M_^l}Sg#FP;)`wDQ@kf_& zk>E{Q(#>PDvSgZB64FNdH8N@4D^IvBc1zO3p2kR%x&o&)KFPGf^{Gw3X^Ml(Y{4X4 zzpR+^Pz%yVoIaLxV@@IYy)ZjCFWk@4>uLG0osy8^Ml@@9D=F^O5Lz^R-`(mf#y>nv zy;}plJfdC)n^<{j2>0dew3z$@dTUgNP{@{F4z+0>gm8R(lTIX#_8dKgC=QxADzde+ z9o1a&v{5tiN+s4UdD)$w9vu_l952OJ+-UWfR&{g1*2G-+oOF6*blqGo-?>6*(5OB{ zX)Nao1r>jstC^fDwI^LUs$+m>urU`sHmX&CcVTKp+cBHea4Fl_FfuqH7_+#Hlp{RF za60C>7NJ|jdq`*(UYgSM@NQ+KF2U2sPXDT&i8J=W!u8{0tv`n)FDeJty%#@7 z*JO1ho?v=3D~)(mn(#3~U3M_FKcscS*Em}du3m9DdvFODTN#|cppgN@tAwR;{L^a;B)g=&_t^zIeEd zQ8Z!vTFHpYtcsK4Kht$Jbu2BP@EP|QIP(9pV$EZRMFW=n5gjqM zah558a_L%5629r$%;s@4Q9ZKr3!W(vyI# z{hqBDy0C@t=ZHJqEAm~5TEX;-wRBN(r_eJhF3KhMGexL+e&pg8=S0NiAIiCAVctQG zj{Ev>*kRw7!aRI~?(D%2Co*O3RU9yAjcrKB@V=X%?E=$*S4$E=U_R*-d zsRs2lZ*6C3a>a+~j!mHI!idVF8wd@Vp$#D9QN0E=h@Cif+hQo=u0_DSFYdupx|+{Gn7C` zjmnjoic~locDB@l`*osy|2f&d66T^HTqy!?iye--{+Ji2YeR^X)$C8`#tjj=ogSlC zH#DagHu(F%5!N{{H^2UswCVHNeWkcQvso^JO$tep4(kH8{J5>8sB)g@&k@LQ27|!6 zQs~OKoFUt3 zMPQNRhg_v|UdWa-u6v(ed||E}Py3c;ZPeHG&4+aU#t1p~zJF0Ii^#E+6G<4)6k|!D z2R8N!6=QEt;X#)huy_2RO|7iI0x!x68a5^KRMlbMoJPpTgE*xP9$(2Zs6yI@+m6qJrHJ{MS+oI+C z#qBDBw~y3UUm2#aK7!8K(N1#2TNg>ocO=VBS_^t>#{!2Ov=e8)_i|$}pV(8OPuPjB z-#N>$g|^;PU2NawrtnM;x} zMymipQPmCH$m8?}m^#Y2zexvX7$pb#HNrZOb$lR`qN(klmavkQ5U+7I5A6nDe>n~MVBS8SG>gLzt6QTFCG)%p~cw*0+Obi|=e(#e)& zNo~aWQy$ku=awWe9Y+JWH-h+pN7j2b>-CRPt<)qx(F^=iSzk4>BIR&moxZu=zHQ7l zvBKq9rFoUQc~z?EJ~2ntV@O!B1LgNpgmS-O<3BHxZ4-DszpuF+uH{o`^7&et%8_yu3=sYOjdZ?E28?~6Lc?6Vqnw0gFGf~ixc7UEeJvJ2Y$i#|x zl;Tm#EnrI_?SJMo(PlmROVSdI=eMN9w5`NdxV6ev(eodPCP{orF`e_#Z3l>ezgR9a z59gdD0avcZS*@bKKg&uR;JRn|xwSg-GCfUs;%>-v;>X!7Z(`+XRReiyx24h9YDdHU z19H|`{2UD}1L)T%8lVwl$YxVRU8xoGWYbAsP1^wx#m)NaOWxF5&3Z zfrZjT4_~t^M8wwUl8nOWstjuXB*YQ5J;M>RKZDmh;BXIrQSXyCpafK{g%xzf}(>6L%Yl}ev>uwvqO(lwY;wf;8k zMlGFnqY?E_P;$OX4AncoMbBRC(N>sR)ms!vqVSjH+%>q)6T9YejKS!dVo&+agZbi=6>kMKP&I$9~T&Iq+;T~2di!5lq=^!LJObB#`5B|U#Fl@E?6dz?o7bg+OE5L4A3@l(mUQY8*=3%939Ek~Ohk0~Z? zVBz+Xfn6Ru2Q9afq+fa6;*7$WcM*x3DKx2>Qc-eKso?ETTLTng(fRPL;W2t+>Pg6 zXB&`LaOCuU%uLi|Id|2kEQ6>!#gECViql2(Sh1~tPE(7YTi8YFS1j11?hy#vE7K`N z=XmX-{y8ZY!iR<7q_YbqRoDK?uh?0$I@ZuG)?HI0bi26BvNUyru9sh}v#7d`re0=4 zE$TjRmtcG!)4P1_j<>2f5Rq*DhGqJxhpqDFa5`)1ujaP=RwPY3skP`%Qgfs{eoKno z2tss8{~y^Je>GKh)vDP=e>J4#*L*9X?X+2r-gb*vUiG33f$v^n!2#;461(zec!h9w zF+fdk6v9`ieJ>3m?N@jAKoz;Mpr=yhk*d{b$t8SNLR7)#8%f4&W+k)t=4{Dxp7`j7r%Rx zxf-fdI9WKpFtO_m)o2L}Gc$W5V_hHlv$95N82ho2+Qz{(BDJ^|zDNY&7C7$trPO%8 zLI^FY!cDzk^+yI|9kR4)OQ_9i*AcAESw0Zj zh~8-%`4OTn&lVI&G95V<#xC2`Tsbdzkl9pCY@}g6t#YK13bQq+Z25;uehWn(E}UI% z3X72pZq4FD)X(_IAcpXg&YCw<^+c^IjE!gpHUR_j_>?VarVeh@66k?}-@9S`a1*WB zm1gQD?|>^p)gGa6EQK)^I7cLp>nw^phG&~;H{2IO)efYQ5K2jJ$%Lx=S@SS;t#v5| zTk7A&y*Erv7iI!wjdPpB)nd|Kc8C!t4DvnNR!l$Jg$t zUETSyYO&fV5sNIYeBLVvzc@9z&eXR;hzMtX}wr{dq_bJ-A8Vm(%z6deVAXox>RRTI$IwPE0Fve=spy$&eGSoc!0ZmCv~JrO1XG2TYnEkCdN-4 z?e5w|)%3&)P0mF18Ka4vO;kl>zy@|CJJe0Z-D=Lxn2|XFH-k)R%@G*hOu61#y?@thMbEjI?zdOXH1wmDCXA^yB zNsy6(jo15S@Ef)|?n7Q&;PI15S>JCYa7clUG!&LW^!LFw*gBsW$f~ScjI(E6Cnu%+ z_mDE@8>OvNrthPmwwM=cn1}Cd;s0D6wAN8PW zWn324=h)G{YLEK`5!y00h(HFoG)Xo-OSRMZ8N=QhCeM@t^?Ll0o-YsQni6jb>zSgq z&_^tBk4aI-nslmGF;71=Q37jMvFd(s7J}YwtJu;0YA>r;wq+&rOIJHcVE-z2&vZ3f z<#@2@Rczt_wL>G(DRqxzQnVD*jHnM3O7XU4`>W2eL z1D)dSY)7V=9eVd=?_l=9>OndE+Fk78V70S;jCdY=E5LMMF zMwjjnsfqu!%Zi6ot**=Zq5ngdt3%ZvOzK+p`AD@n`+0=wkRRky&$IB6>fiveoNZg6 ze5_!(7D2N*nc2pXh-!KRyF60eWYC3kaK6iLYT9mAbNnm~r;Fa39e|0lax)6vL1BpY|KW22E53Si$Z7C%N^`-i!j{AsR> zW9~ZFtC$PFP5;AOL&w5{8gpG4t9JIzWq$-|CrF}8L6YYY_*NevgdKiVJ;ZAS#jY&% zYcDW4Tm4=Cx(L}SxMx)-Q|20{u4+3O-GVaCyEkI=6+t`Y!Z+-4iwSPOp7cE013ulw zFl>l>P>x!ywih$`m*I@cD$zdKdfANlo`^O3>r#NG~w?af6FM z+xj@1i4eTDk6nHo_9&TM#+pBYl-pkIGoj8F2q% zoUhAR)(ot`kl4l<2A87C*wq=BPPAxmu;w$dsgNt!$yUrXM!QkQPR>+22kI@j;CO5G z)F^h^5BDe&^3??nq4jaEV$m8-HCyxJSY0-X~uc%f0BfoENT`KBVjWe5E5po zbL+E33GsF}h#oQ9(3#5D*pk`awY|p5W*c;3p;u?C;wBX$MFmTF5_)PZXXTT|sw-c0 zUqp*;D$w-!xkv-`iT-5v^XIBNy@SNh10RvL(8c{Gu!-{wYe6V0ou{6Wi>Q1<>Zfx6 zU&JM1xh{FIZ3|oZl;M5XzRu1+Wh?@!QT>#U7-HumEE)^HHs8<(^a)>J^r2kyGi;3%vRUOt?;7W$BPY@sn#BG|gnFb9kh zTVS-n0x}8=Ccxs03Jmi_JTEIy+ZkNdql-5{va4v6TusHQT*iQWRW4&y+g@ibmyGqu z!C$8u&%Pf0f&U^foSks<@gb~1pj#Xlhy%-R&GPWDQn+RTe_w6IPu-1$Z7XGHEfQlFH`aoTJ> zZJfm>E|wyM|9IQIW-;<>p4#B6)8BX^w#R!A(tNq(CGb2fbGbUGiy*YPQYK<0M`gOQ z_$1Y`G@B*AMrMt!RpR@HNS#XFai3nU_9AkLm8aZIpH;tB+laQb59G&PXG8CCpHbg@ zB^2WZP6%-MfUR7K@VT-Er;*AYmaqygL86^zTUWu?8$i$1KEPRDU^0bu8)$xOWE?_B z_>9e2gBF>Kea4!u#UT>Vuy6c=1+9}hfYZD$Si(AWY!J?u+Zy1`VVPs_xi| z`33_A%E2O!`rg1|LE90d1=p%>v-s_5tAcHqORF4iVBiayDzh)Ae_b8!?}-gQAI){C zUOoQ`CTICd>VM)@nJ`;^q?$(`%cTcJ?caLaPe}7c8~$+{j~=}6JwZ~2-{%?~k?#xj zOjYzY6V%eA6Id(TDu0u0X|)u;>y>S;-}ScZdcR*WA(3sK-;4#=G*<{Nrh&^M-}Kbz z$hX{MUQzLlNldMM=3c)`9qd=&BLV$#L`!2JK8E0sBKRFvuU><+M7^tdy?QQ1i62^@ zb5+Rm!GJu$?H;mC`*(p(oF-T&8a+vRqro{#T}P#xZ1Zxif#96z=j0}o^FoI=jZ`Sm*jH&qNkF>|DCmMZ zSWmdL`xvf^>f6NP`&jeO)pq(#g+uZXuIi>c^K*4AkrWi~WmhjEY)lZ5Vy}D2muiI0 z`O5oQ`B#va2o>F&?BrL-F^#3#FBwb-ak7j{IPMjz%XRW&oNrwgL=unHE$YCfjhAG4 zh|AvK#U*utTj~bA?FHeRL>v5%m?d?iY_q&r*AM#Oc4JCv+-kGYPsYAXegOohpA`%SKKyPzh^mc8j7^Q(%BE0UXs z-F~;#pHvx8z1-U8v+B2Xj_lXRK7bsa=!-t26JMdX9YjK?w|U-_b(Xj56YtT3zvXYf zv@*#tGR`eSVCWL&ge|Jx=RzFf567q<#H2#keS`{Wg3+E=uwj*qOjp0LbPrEnP z@ULaU$R?b2dur7^#EPQ{ThQdw?m2`+6YCB@eoIcVt!C1L19ZvyQ|z*t@E z8cFXb_>@>FiA#G|tkBMN%-K}u%rU*~1l6voGR1K<(c9kB7xljTqDEG!U3O#Az<+*7 z32w&Vc1+F^3x2@mH1VS%p2bV-Z$896#gZg&-}{hlwUT!2MI2vuiX%B*K8A}82NcIT zKgF@*3O`^(m^3;!JIiia$t0`jkam_$^dqaK3>sK4g~z{u`nE5`G<__=HGsd}&ZRK8U1CMO=Hz z@$wFzHJ(>&#W;|@_UILzt!E(y@Im6pwwJ#71IvNqUFA!%t@tCkO3QhwW$GMoZNeu? zakCqrC>0jpfHV#e3ZQ*rvs|PFV_Jpt@0L`^MHYo-Yw4@z#gKC@r|I_ViKsuPE z{>-_^_BJLx93fnPwC`<}6u70L+wNa+FumA%$mVCh;}(i`>`NBhgp6(DMFi4KetK;= zM6KpKNkTRIf6rDlAve53FR_u^_cs%>eow7O?<8HphdV#NdDPGRoBJNrKiwzXX2M9n zV5CCRAzMT99Y^fZJC3-mcXZZ#%REiVFv;+$t1LW({3IEY_LHrcpZ^m4E9v60#dme} z1eytJll9-~BVA)D&B)kL!Ki45WJXM^8>WZ@fP2}2W~8%hO#N9lR{bg)-!<-F}!n;oVMygE>nF zXD+m^#(m9BkShrTs2b+Zj3h{^^u&NobdYw^6@5LLt#^>$y)7G~$k>+h2IC>bzG|sE zX$N)ok6}%t$zba~$f7uPqkD2RH!|TQ`;BGmW60sUJh7-c$qjwBTDS8&F_CR*OJc42 zxrSR_VJF*?UX8>km6b`NvZRVNk0l-2)Xja%nA>JG-*#gxe5&5X#>bLjZFQuibNqX@ zB+kv(?7SWSDNG=RxC%TbG;wBG|R2l*0DU@*0%A~2YvnNj)Z=aky^|Abk zc4fV{oefDMajgyjj^ucF+TbzZC-L5bZFZ90?BgU7-J}|LV^OyZ^K<;_;jCeIa)SKw zF#EJS`I&q>f}QF?c9ADXvU&HCK54&=j8v?^Bcmdf1}Gb$#8IN6bhax?@MPf0!qXkk zMm*(s^6{)suq#18ZV)*Sb zkxEBk|AG=<7nQsj(;l0VJ>}6!N3xpc zjn95`W^V5InR(M@=07?!KRZ8nCR;R&+{Yg6Ng8+S{z#;fj^R2IMQMz3@1Q!uhCXOl zt^!UOW=D(s<03mfh>hw_7DoMozA1pOVZ{wmrp}l#ZH7VDv?r(L&H!oE_YylfJC^-; zAL$rV^k}5gRt_YV&X-^MZG@=d@BEoRl+EZxIyM`DSq&Cl7!I}pP8r6vDwVx9kc4%Z zF$)XInK3sne_F>GGnM99k;)V3zYY%<1^+X~jGe+dCX?aXA>j1nn$(pYP9~1lN_M0& z6nKevn&8QQSpMHIc)!zGtR|T}OJ2%m&-Ni;ytqZ1&AAPFxvUJ6SM93ZyjwZQ&?PI(#_m|yu%J^0@T>WW__9hhcU_&_^Q@^L&U4^6GV0AJWxK%U;0FM#*u3*ddv zqi+=cNi4y@qfdA%1iS_?uPa06jVOb#;`QisF&mQtzB0wG#DZ|ne2(V}8-1_neVu>k zdp#FpW30<~CO>YsD`zJ_6CblH;b=IE%4>MKP6BnP8#<9|=O{8Xm))C2V#uLfHZF~H zBNuYn^J%0tnZJ&`nMNX;VxRXXs~Z$dj8w)0&cM@< zsgINPY)3j7L&7I9%K*|^TY=v``m^K=lFoiiC&6sWy(Ew`tQ7UxC{yu-<4KwHSnkaH z*mg}Hmrk!GN>%vfd*kuy>qda>CByR~{9yLnX|wW$gWyf#k1xyl66-yXtnTmy`tt}8 zg(n%00ds@4`@ltb_h*e4kY>!5K_bW(kF#zW`m1b)gh@i1#Wn2dYio=!7oM2<>J(iW`a#n6F2=_$MDC4PwjDg^O@FXyE+ie}*%vTaxV3 znPp8R{_I7BpVs!7k;-7;oww{K$s|L6fHD=RTG@!=8o8o^_3)?fTeAu~;ArIA>xu zIG!)CC!#J;4kX$TJ||6u9T(-Zuwe-DH}YB4FxXcASuAci84%fjR-`fn_(Sn<`|yQ% zS_8aw!^yZN&1ctV9O?reCZDzoda}Ok?nNJip%c-@-$lu?$B+;fIf67HMNhJBBgl{@ zXVK2*jKYIZtyDkBUK~LNI1Zqm+vYNK=6cfgLS3W@|0m-2Wjkv$f;5ZBn>K0Yw5gq@ zP0h*W$~u1zt}p}t1w8lQnLmg18A4Np zf7j_-&@V9TAMDEYAMN$(FQY#5J2=ii)R&`vJgy$E`O(f^7)@H)c3^N$d?+5isH1Zu z*}q4TFt%tEc{t=Jv~qJgkCL-@2~ZldBO^((z$w$l3yV{-=COvONw}V3#Jm{&q88C#HB^GtuJo*k)oOtbv>bG_7aTK%uB=|)rS-0y}JM=e%6u=31 zh75aX=%am-`wkpBB)M-Y(#g^6kul_+24^u|JogOX9+m1ybYvQ8q+}#R=}KKqrQA0D|r-=vw9(W8|?vI3nE31HmQI$%p!fXBEUT) z6DMYolz^`RC!znb0=7SkZ11q$C7JpbO3pBNV5GhF3E7h-=Z*(#v|m7b13AvdY~nYe z8gO&8j|WG%i{XDhi>L>Cnt_>kO6?KKF+B6ZP{XYr3W-pT+9H(eP0@yWU)MQ#5epbc z;>h|%tlK!!r}@{5q~-I$4c)sI8zEFwxZ}`B<>^R~6nv#YcQ~F8ETs4}yMv(`mUWL% zCdYxS_NaZD4agz0o16mfICS9;H{?@KGyI&3z*~T4DV{ZW z{6jwTbytnm%^YG3cn9)81 z?|f|rjQFaALB*AOF_Tfb5S6~2_5zOa>9h~;zJn|SobJ=U9Pd1DH^$>|CjqmD6G*cd zqyA~sal1C)BD_cA=_u;hfC(hbRDN#+`=A&8{bnx~UqXM5Q4palaYZN_@f^_03yUPo z>;CFVK^uP#p+A54IGN}dyF5a?Adc7k z**g5@sORmxyHd^n&!(FNYa}oK%?R6N1_~RoMWwMTwNFVPQ15w9a zficD?yz_u+z+5%B|IM29e{a%qdf{RS2K*$aU8w-@{o*=UeY|9YcFn3ox-S8farwbnb=RnySPe&bYjxrWc25_6=xmT~}xFL9t z#^VQm->28NMA;rs4?IDvE}mrK{W_it>mnlLjvoU|+)#&*@&W=59v~>}Pow3N~sAi3~WuLUL=wXm`mJ@}26x=GjPLg|pf8r${*KF^>d# z>z?FwEd%l<&zfoPZBJP9EIT!g^uEXF@)U^Sx@EwB$2)iA2K*b|xs=hbcOFUe4m*zz zdw+p}HWw(q!vsQbzHrbV;0AwyX8?}!nU-%$xY8Qq7XfbK15W@9vK(H73{-GA8XXz| zmISz`PA7fTu&b*g#RxSh1>#tl=hm!ZCuU%$?pz%yRCPE?zThRtB9!v~@;FZ*g5fdn zy8FBvb^l}8**nM|J7nHvP&?|_o|&Wz^UNd-*yWkT-ef4gk@0x70lOCN(uY#kET6>r ztwDVYz^uV`tvyd1u}8wg&F{(&5lY!Lp1Qb~<&#G=61#zYHLG(P%G|^WK3V=}aq~&HAx3={Qh(ZRfPJT( z{0I0FV9r&e|G&L3dt*Ks;-9clW~*;Wa$**chTghEvTpbS(xjPzcNk-FdOId`R1!9_ zg$s~_qkMY->>TB%3y{pAY_br?xi4;l>axT0Npm)KA!$SoY+_RvlHOrKFUn*s7T$@A zbG)w7VK1^Ov`6+tdm!rjq2#pZKMIe9atdGzO5nv5kk(-a-bU1OZykmbY*VgoVviKS zn_mDN&Fk^-Eak$B?(GHSoYv?4t&ze#Psd8Qb^5|QR2cAh%*Io8177Wg+1tf9qv^Sg z{a8$<63;gGBPC?Dx%C{Z$c_#fyQI#JQ39Inqw+F6tW%9#!}LjOip7{UnTgzxKZM# z%}=YT?a98}L_#g6fwDf0^Q6^m=@0VtOaxSvKwp3K=eyqM;@|V$gHWwAzSNhSo@xJ=(C=E!V3>m znJC)v;w&4?NEdQzuudT(e&FUo)TtBM55UkS4ymb)XAvt&OMkvo>j$rRU4{ZXO z&y!9lTD<^nnOXV^Sk`1V{RLE(v&|ej#Ex@l2fNKt&a>!^qz&o*DEoXhe6$mjjc=qV z-Px3lLc{iK1T|f=YHBl>T1r~6I~z$8HG?(SgzEmN?$6FVk3D$CCa@}x4cmkvkFiC( zH7L8Lb_LhAX6&6!P|NY`vrV9I4Euc(gjLQGUj(a<2WP5 zsHb1VsG01O7a_=%Eczv|X#~rD38Un(MK9rh4wpBnrq<5Y$Hq>+1TD^+#Nrs1(G$zK z4&PJ6et!u}-NAa5Li5f~Vn6a$zPB$z;(MMwQwq`cWJl1dU4Oi$Hh~S^N7`8Yusf`N zoHf}D?Hz7`Rw=>^uNGbY$ff<^=0hst)MG|GapXN%%*Hb>j-vu zD`{()xT2;uMPUs+IMBJZkp!{eZQ#lr)?yn*4`PG1!Fvp4`?f)*F81{{OtKe29mP0vb@M!*a(i|kL-Hx6c+41cV)&X_{NHC%3S4cl7%#>HKpynId)K^F! zR{aW0G=5V}Eo^%)!4D;NknULJq#a<$7`AT*nFc6&CwWM#-da<8mF-!NJafZN(o!qi zR#SVHTSIepW+w^NGPc*$UX<V zRbbI!63af?MI7oHc6%45?8#DhlhK%Y^KMLe<*l09(`@=H(62^iq!kw5p$tgf*<2Ks z^2(apTV{4@3yERZ%E(X>dxAYep=smo*h#V}uYv_mw)s_(M9NNZr_)iW1x|cmXpLXv zUf?|`6>fjyQSHa3yaxMAc;9R19iiLWSu|~ApP|Wg{!|T{b`TCA;dNrRRG+G;^(fNi z41OIvSn>h4X+iLBYe-`;-3fUmfIgMIS` zxrZ#dEg9qlgSsO~u4l;=q_1VoZ#A`(P3%Y53EQw03UIsvB3#dYs384Fbq(vbmyAd}kj#$58g!J~*SHEMh;9SFkDj zNnh=je=VF(gWZ~)eY77`RR^-0`;itU1l7VrXH(KfONoPrW`o>d?ijYn4YtIyGj6c6 zdvI;-Nw%sK6Er(OnjxHYH~{o~mW2S8&U3pohX zQkKk%(`?E?&Ji1X_8_?j(fbHMsNk2pn8VaJLGLv-=uOg38xvX!Q3!euzKPZZ_Q{*1 zy|%SQZS8utc{L0t`YjlS!jj*DD)nqx%i63Yt%OflkMoffw)rhAAdmg@7I~Nl#Y5o8 zMfS`g($=)%9vzuW;w&~uYuIPJIfX?W2FYVs`e7_<4O?&+BNVas55v+=vXHlda*~aF z8&E#m{5CL)*zvbP+9CEY-nNl-_!~U#RyOHxXam3ghPI<@4=*y=nZLo0b!Yw_GFmI` zR}0tq(*Z;^PC`)^s2Y35gE11=84o)5XSY4%K2zC)wd{WGBOW>egT2hAAHm$g?BEfM zIGKHN1pL@LlyhBp|I#we%9VYM=Uurb%GKzE@M z#1;P?na`ZzwXio496W!AhQsOpoeb1Aj;O88V~39*6G(Um*htgffhe1@>~}zE0$ciy z(3is;8sYx>9rBAxGKaBGEAi>^{7`lWAE_p9A9(>|h1!(^n4H7g z0bc}sS%<#^e6+b;FqgNde#Yn4nNCQkvIG^JJ3s{75?>{-?6O$H^?xe*}B;IKC!!AI<_!kk(DIM#wD^=T$Ri~hWvFoJ!`%kmNI4$3CSFb>~s^Klr`UW_02 z9_e^b#z?u#;Pt7tDWHp11RUFQc9>O#TsN8(@CT z$AEVL=GT1;csJlBKJaUR*ZaVG0PpaD_X0Mq{qXrdx8gnluP_Gu5(pQ3;LCuy1dR4? z0rUGo2K*i1F<5{B{{VQh4}1+UU!c+c3*a?A@J%c3Qxs zF(82@_xFMEOL0iHuH6qXm%M==2zY`I+^_%@b9^cq1779>HwFBn4;%`(+y@Q=%vHje zpcUY=KCm6|w}ATsfwO#|4jcFd51=9*x?xld2F!KGfQJI+x@Eu*1AY>4HY)glPwTMJ zj=PdV*9>?G;441;mjmWkw)FP4%Co58cejiVs{r#mTn4-baQG-T;1pcNFCW5`!|cjY zB29hwSw*q8se?;CfE2xTz06FXi1FgQ>7=>nBpY{6iIo2LR^cH!S}dz+Air zd>*bS1M|%RKE^9hPQX=MXaQd(D-;V{MHWmyT!)7M=B@xV3j$Vsp(swkb{)O}`2TTr zKk!{m{{zSG=hK>EG$~3epK25>h7g8fe!>t!`lBL*#SlXIOj4r|hA0f7vIrrB5JCtc zgua9j8lxokd%f>H@16I~ef)mDJnNe3#h9P@Dkehlkd_$0m_%Mny24dA_hO!hwq zQtZpHzI9LH&tcj9JadfW_q5_4Zn?8^dAeuYm49?|ZW+Bw^s_(ioV%Q7K4a?c{G9*I zmJjh~zJk`glJ1>x`Kf3pEN}cvmQ>UYFE-v8_c4=i4=isa)ciiUg7!JV#997+yhKuQ{J#J3_1Q z5|jURmV(uL`3AnhQ6KN`a8LL2OhzQ12OR^`oM{GzH!8MtlMpvchs_t#CY+Iio%i%RW_~jAfsz2Vxmf^w8mE5hsZ^T!ALMg=NUq%W#DgpQec3 z$9}1Ay#J?U7xbb~j>&JZ?4o?XqR@=Kr#sb^ewD4!Z^^z_+hU_7Qh% zaf6>=IShMZiI@G79ELgWEc7ClNmbz7jT>c|QyJ$Ye^2Jb8LqwMIG#U3H~xVu%_RH_kJ~rnGUza_?d!c6_cbHdh!+^A^LSQ!x*t)#|0n95nB$LeXhlJV zYhH$UE9{s0#${}gtZ=g%p^kqf9g@E{%81Ot(g6;Zc*MH>nRGyhyv1Kh2RJ>%@yZQJ z2e#t;6Ble_RwyH|N6?|YOgtjKkFn&Rf@dC>aed}48xJV)9)jha%gK_ChT(}~*?t*; zGbpG?qWm{EIt%-yzOmE#q(OPjBU?OZW3s}9B#DpuJ84k2cna3HO3N-DW!jStUoY!B zDC5@8kv^4zaff8wI#bcjxb{%*Tk*2Py>G{>`gu>s1CH^Yf#to~$&!lh#mkNF$Nh$N z%SJ89kmK|n3gpe(TH!q`Z|GKkfNRVUuE2H1pW;QvpJRE$ce13TFL7V~0;67y`wioL zI9l*61r<)R3%5H356wjKSWSEclT1crtn*V$G8vKK&hN5I zWXSWK&)mcYW$9sjF<~FgqCmDl@3+3gvW2=&cljsT0`)mqc9|XpA8k&CTyL-T|2G+O z^+Q-jSnpoC{Kx#0A)d}=$`-sqfxbsxCe4p#1Z2`|$;0t=W|wS@^ZIApAf=*wyvmqg zT#ovl=;Pbt*(Z5-+?x4U=l&`tbD)fbamE+oW6eIh7*`ly>hhBwq@%G|-?A_5J?O0Q zhq0_rJ!flk4%D`Xg)EP3LEga0n)rIsb~|fGyWIb_TsmYB+2}@zVQy~ zNWSb@>0owy{v!<*yMh+mG-Y#vsBbL93(X38;Gfvy?MRa$J^`=5+dE%{7vOl35`PFU zF@7Hxo}6(j;YGrS6!;Hpq@s^8uM(PWu^O>_v?89xtg@VYXK}KmqT{iA)FPhM#2)*ZjuB6C;`#JUoGjT?v>gS~<77!k+hggmx+9h?R2N_w0rgH;I;`%7?Jn3^;!R6^ zV>Opw8G#IC@%8_94m%lvc2dCZSWPcw$fXf+Pt$0nq|7*NzU>uk0Un=@W3V5M1JXXu-FI9JbFJNwL;{5$_m5GnUwOEc; zY42t{&*VRkD^31)cp+|)Y=1h+XXlR^k%>R@AVWUMIq6XrJ;L<&Zlgp=_Ywo<5p0{p8(`A)*G6kyd;uIS>odN$x9^KAK?5= z0q1}HOq^`dwp~)uEQYL4oRAZpi)9Ft4z-N#X2^7rQ|qE&NMAN_8PQjbC4UWGFv4HV zPRVYc6eNxE!T~QQK~^Z|ft#H*ek=Zq5s}w|a-vy;SCgMCspw@apQw{vB=vuD*7)yO zK4B-X{Uo04zC%)=3AET26~mQ>Ui%ZJpQ zv(bSR$cNNiL3A*d52vXQ#qt3*br~Ko%KJ#%=UnfjarK$W#~NgWF2#HjE~(BIkHt%x z;#~h8q(DAamn{561k1N(R z_^m6@3g2Vd0`-qrKJ6G+AirIQ#2ViL%ND73#P&GvjQvvIxQTazt{#zzj~X6QrlMVW z)1T~fnf2m9SoXPk3YLAo(8W7#lZyATz8Jj>%N8a_Njh4HWuLEf`9ERV=c}Cycz3Am z^8RxEkrkduf$Vb%Vpn6?=UQPgmVK_?h-IJm<#3kz`|{n}vX6T@kHNA_#yOd9KZr}sbHazQeJM5v%L8fuz|5>Vd+4Q^Y_@k^ys^`DMA z;MOlg_G!?=&yyaKE=zsmm&TIch{v#kWMNRbHygkwV&fGs#J%xI+?oU#@_~3XjyDir zi_5a6!ebO%ViG>XYgxex8jy2!#g2(}g%@J^P_n)<`k%AL*I@Y|@?uwiRHwumKObl1 zgU8ZiS;74jh&5pr&f|l|Jt>eacpuBBoHf5CYZhyME4&cLhaENgI&1tuET4{+T^Mgr z0sCJHG~q%LAaQSDE-bSU&lz@%Qi|6aO2_2cR{+xq$t@ z(IoWf%&avDyWzf-zCv$2(YP2FUF73?5*ZgOkHU1oyU7}uu<%8~;|AVuOXQQ7ekbR^Te!=qTcCFB1r^FiX zgk_hhyWqmJyu0EO<3c>ZxCgFlGS~mzC|J}~z;TOL7#HJJ#(U#DhEzMSFK)+UI`#fy z6EDHCOEi86mR%Mva{WJy0@+8Ja0D(h?uX^XqVZ#}oLJPyVL7p=Prz~>Q4hcsPIBr! z73-3fGut~{Oyo>9hElm&$qxX^VJN#md^(oHPCW<9VJ4GG;(uW|tkj3+a;n88E`B4H zqomGx1D2zzT(AF!Zjp))tJyB$Q7rpZ&bV?d_!Y}ORqxq~YdQ^9y8J3Ehgo4d>Ci!~ zdCEn;bXe+FVcBJJViLcGyLN~+VL?6+2@*YDwaueimPxpmN}vw_!7&U=E`wSl@u&835-s(%vc5|!#7hT3)gR4Y&;3ueSSUmOMT<>9eH@k2o<(S=G;Cz z@@hDH4TlNWLphAvbm!GCYprkzhj2S9`)ri+6<9`OS6Y=>{5+Ns(^>uxmJw2y>?*g} z-kY#=n1^d|{gT~y{U=+b6|Sa0&SdJvSms126{Ld)_2Tg=E68&VWU-8x=D&jVJ3*v_ z=^`G_5+CmJ%dm{-3C>fS<{t$zOCQT{@wkEi#7ioAf`3*UFThK012T8^cI>ISS|k0SZYGQN82o#f)NJNZ_4uI}_g%SD)){ z+oN=J7H(jJdeQ>-8`h_{#uFS-iJ8q?8YTtIwC(m?dHv&MgQ_0{!Q zI-qXAuQ)Lqa-$6t_=T6p#xf!W)SYNLxD%G|2uc=40L%CPsCUNlT|(-fSiZDK-3!b2 z2gOTA24Qy!O0)p)iHGpjJAd#VuHG50e8ePOCfIZ=mDQ=Pybz`FJ}$l&md@&g9D#?J z{AE}=qxJXc#)LNY&&INGuKt~8Hl(-B%DXGZnGVVyKc+LJk|g(x*W;Y?{4QI7t4;p1 zc(d{IIQ|YFSAUH&WJyOqU}-;Dm?J;&Z~bx~Sz-I`iCsd}0ZRweov@wdU9ey38{cOu z?TIe82Y&>kgLx#$D0emaIZ?L0@o);{`>v8D75yI`d6)N5*sieLG$5Db$(^}Dp}stS zlocFr;xflB4eF0Iab6?UH(q55q{96{g;^#pD}2OQ^4|^emz%ice`GBAf17;Hk-5=k zlOPoujitiQh0RBxC-zHyV=rULKOx8;VB*sLsowG}TJ??Ng9=qXf%VikUTZA*bAtRj z6PNtQjV1r%Ab(|3ob8tiUo;gY7pv6H&9^uQ`=!2d3u9S9?;yX}#HIbcjV1py&5zg5 zE*N4Gq{1*`sc@ZEh+mm3SR~lRtFWnHJ1F=yEGr6 zJnWbH#x};1-zUi5FNr7HFFiUSs4zIFaJq?0{s?1P!Gs|HIun=tYGcWt6X)yt*#&hb zK`K0MEESf=6?7YOqmN8n@;@<_{DvTZgNaN2Cb6zxD(uvw`H*(Qe&H}Qmi&G}{xK#l zD>%+r@-GVV$6#GQ>#1+NJg9JYP~jdEm;72|S;1>T{u?GP`EMCZ{<s)&BA5Hpu_k#3lb%W695U<`st> z(u}+UXrH`FcqXXuoQcZ{78y(ak3s%A z6PNtoj3vKdH@m^yBkn|jU+NpX8B2xZn^nk-PBd{@!O6ywKOxA!&cr3Z+Biq9|4#=M z7McX9@Pe_dU~Q29vx!Uouf~$!i5DPt7k7~tByM5;*Ee=G1ybR-pu!0zF8KqDCI6Zr zf1-&?{$yjxU*PlQ_{)u+H3?GTd1I;YgRc!T{K_Ez5)+sF%Zw#|Mv#B6#*_08_k3Ew>ZHOOL4~(WTvo8mSn}(G z{00-3{0+vEU%=C?3f7gZpIxvM1%BZuFqR5Ox(Z27ZgjMX%LnGc+Xh!{|NH`isNqkrNZAqg)X}{pF~};UwHSNv8>>z zAivzirTycLC4Y?MH?5ytaJfm43RfCSh5MvJQx9^Z2TWY@A2OEww}bq5O|iYU`v&>@@8Q=^z52$Ipu*6g!f+Fp{4QNjBmj570Ahwif-J4?JqE|Zl5I~$2{+U9_u&E%8S!A&PfBjn#J)q&r%@q zZHp6Yyd9SI)jMFj3wO*?;FtQw&c?Du2jh)1GcF|+9g64Q<6Va3`)-pZ9UY0s8Xt}A z3XjEp;rf5cUa7djR_@j7S}ZHnJD7d;=4}-^LOhgOi1iD0Y^A7I&H^$P4B?XrG4@F@j$AAXMg zQs4OSo;>Mdh|AK+ZS}59QrSfrlH@k~Q{E~eTO_vuvX49N!&|*@Jj8e~mJL$hgJqY> z->BmTcHB1=@3W0=1y^DF=ChZuehsv&;7ij%nKPS%4QMoRIZ>te@|z?1opHRuvi))g zlrafXp}VnEI8rOP{G&}=@{cu^{ELG8F(xkgmpjMnmkKk23ik#T?l+eF*Mt0}CN3*@ z$5`@z3-W(Y;>q?)g+GG|+jG3wInhy$pQeR77-Lz%ez^RRjLS$x2jE)cgRpI{G_J4f zr-8%cf~3AQI4r1ehKWmu&oY+$Yl3|F0tdfv7i=u~4@rL0`k4c>O@gf8QDdp_34Y~* zZqZA$Dkq*)9}Xk4g*mtrzpyMX@g%+nF2nJx$AfS*JHvluNkv0(ww);$PC=pZnYhOI zY+Pr2E?zR)ub>96H}N}hhdG&eb+W>{ajEe=eK`I`nSxpprW-$qSFnO@;{K+i_wYBk zt@Gcw0e5jO+=nkqV}wq3J|0h@)Sxcw4qm{VSFs zSJz`1A$0?m5mIlEeDiU=O;|=uyI6`Wj3A$wB@=6PNtK#*#m_Sw64-uQCZz;c8>4 zFr!(8+~{5tm;C#UCI6)${}mIL{3XWm>;L}+71o#psqllbtRQE<=0my#_6r~7GM4-v zLH=$g&iv=;wJDGaM+X&-HF3%BZ!GzvgZxSpm;6hNC4ZXFm-8P#TW1oa!X3s^;VEAs z&VRmBL9BC$+!@=a_v2dt1k5Iufo|P64EYVi-V%5)Ku6D z_rr{6+@Ya(HVw$ZARU~Hr(+#~Cvc$|kuR{UFj@GP8<(&C-$7jer9mxNL&Dd%i~?D~ zHU}rx__kP9pl*j{4ybp)vWwI^V%bIN&R9lRojI8KUtBQB!IR7~{um4+9u(YXwHxuHc%n-K0(~R5VTI2S( z&bR}XU(89CbkqqKu*K>wxJWIp|GQEkKc%Ayg}BOY@z&JLFT|eShh&# zNXdab6EeOU%ZO?GWh_I!&~<355+2DU`PsO^V=0g!kB@s+a1+)a9g-EkkM+lf#M?4S zWs>O@7MIepTVxU*SIU|5`HU+`MJM2rMcxB&zt~yHNkykpV25-N_Dg-^K?gJIX>f=e zk)b9oE4&KJuQ4S{D!LkvdeQqD-0G61Ssy)$$4NY1KOK0Cf-xk-L&ls~iB~TsAzo6^ z7p2Sr(?IT_%n_5nC!UYDAYaZCL&Rpz48t3Z&%n~5Wc^e)i-HUVC%6V~c8=Fi{8lU- zRNs#Kna_+&#}kRCUH#XbHUAAP9ag`E*&w%msx6~Hwm=i!$99)|i2cILY1t)D%k}(>)*vP~XAJ)$~GdmYM?P=@FT)*_SaW3xip z#~ZQj&_5FcOMd1sUP--{i88b&C$>?}$ws82^YOGS32_fem?;HV6Yj&&7(Z#= z!X5CI6w5wtz_U#L2E5RWVCryAY$l$Ii>R-2Y)_n(AH7NzK59k5w<{xKRKoy`V&tjUvI%ONASqT#COh8@B#^WuE+hc{9c(ha59$PD^m}`@;heg zVfbEC{|0R5z>Rp6$)AR+jI*~?f$M27%^G9~U%~PtXu85BSbh*q{U#n~{5Jl> z)c+I9BukqF<{&mh8 zug0f#;kxz6i@KR=uu*?DVdMtA+UgY}! z2L-YZHQ_HTvtIo-mcvTD8OxkeH)1&~)#)RXqd?sf%VDin`PIU8p1@I1IPC%%6C!$7_jmBI5c_!c!D%ObTLu ziDw#b(T@>WmT`UHJ0kE@8mw|F*awd@D;SO|jHlqfroE@}pKP$4f8rH>?Fy1L@SM(7 zP=AN@7xtvXZH`K;@wQkxtZt8G1k@d{Y_Yl%mJOEmv!tUg6vz-I3-^Rrf4WarSnjOx z~9TElVo;Jn)ye;&QJ49pW%wiFq{l>0h|JU@Dy99M{L^1U?U!kgxFz zal2LCW3c=JqQRKT=q=Ir zB=9Shq|1_ues<=6;(d0`vCZQZfiJ{;zspEv7XJDj_;TFO#K&bRs51rE;6=uh@Dk%G zxR8CCEWFGLe0$*OxUb2-2ah$*K0v`#Q}76`F|NZhiFAce1b!y)bGX$HKK~`$-}p5= z+&ddBrC^jVh~CAs^|)uyH{krWzQN6sPdr7BWS{PGT;imI>1bD6L0nygC*rOy{}ksW z&h`H^3S@;^VF=b=GL;ofa@P3uSbqUk;tQNL{w&^1dwCQ{{2OPDe~0Bn6)$rAUrT`; zR+{iLmcvT@E0)7BSz1Q*SdIdXH()tR)Elr&YV{^8M}hiZEI+v_3-dqCXX$vNVG>&4 z`Np|;v2km>&NvS@7`MSiSNIjS#TCig`EPF29=k=ZKfFUaE8=NoOFBK+H zpua*ZUW#RlcXJJHc?uuT!+o7Q`7MaAmiu8lNlOABf{V>0F2hrQ%;@!(rymr^&(tPM zDmo62WuM1ez%%Y)xSyE=XJGj`++^Y9yVN%xy9=H^ zj!(6)!eXMSbj#=;EL&L0bdg=s^Y~P}Lfr-DVf}qx8NoU%8xS9+)K9ZZ$Kf2;-k78V z$@=B`J&gi80=EaAj>nl1x(6@Uea<9)6R-a{L-VrmVMIJ~T_%?JgTSA}&iaJUC>UcZ ze1%JX@$qkQx$)Y-zXV>7N16OT@qk}_dz)}g))X{KfpJd%=H3F!&lo2QcSC{O;06CkjeULLnY#yel4KygQz6yfRW6-V{H{t!IGcm&>Pe0G24pDj2)NVovE``tHq39d9Ai{+Q6lO+|64?H38 zb-2jn-;kwXq$#)=%TH5lgEfKg3Oo}pH2L>q`N?ao|8U?(17{zjAiu#^cnU8!UWm*7 z^zj$*aC4$rjK>h4&6 zg0N~T8}EVrnUKH#??r)M`2JsP&xE~>;7rGfr(HTZ^Nq!FVp&Ti zITOB)<-E|3Q=Pc&|M3?U4#Q#>ABtr};@26R8Sle#7{_t>j_98#kRjBBq9eK3Xae!e zu?)G!pTlz4*0~j2z?x-?^=kJ7mMzXFE~nxKEQe(~*TG$m;&aFA6UW~XHIM>13N+yc zEVFu+TS3R8x!mGD&a<&hvf-}5{f^IP-2cc3_=4Ei z9NUx-yAu~5+dyBl%jDWI0NY7=THqmgh?&GA@U+63gh~qR3N8&i7Ed=F7>^fkFk6U+Z}grVcxvFAF+cO3Y`|H3jt>c8=#D|!8|1)C{Y zM#AnCNCQ1iO04nSund{HH_l@h6uA6>&Ke(#dlJuc@k!1azaIC^lAr}sDez~e+~{WP zm-@zAu{|-Bb5kn2Y`r@SFF2KVxiTq7Qb~@gLr+V^lX{%d7STvZe9?5 zjK`P;KF4*&U*nC&YXbimcpdJr*>|uWPy1J$~`X?lojY< zx&L7PG|N%bpSYZevRICiV&@H5HkexS_y3mBmHb^@ws;%Y;EPy>yvkMhWGLU7J-Azx zaq*6)^X)g}7da2XHvhiB`&=>>{>b&i1D^6(k;n$C`aO3~w|Zi8GBENoGk! z=LWtY@I|<<$-fLo@<=LPKMh<(L0SBaDrvAP@O6Q!@j#P*Bd#;P73Z6MemfpwJRMiy zWc^Hv85B%23HM5Z^d(+$qx-R6_);ru=g3QP@u35wNRoYi_rO#2gYhO@lwzO83tz{B?Fgn%b)oow>Kj|)F6B*=@!ES4c|@4OgGhvF^ZTG8qZ&J#Gf7`2SrnhwcPvpcrCbnn3X;-yWyoa_IA z6qGOmEo6lZ;n{dVuAemL6D=EU^3iOUeT zAJn`!-oTTtSUnLAN0;K{k+hkHEX(a?{`*c%*S3Jj-~0yu|om=Vbk?;P4>f|L{60 z6uAyfcaHl*{yl+fafdCtHocCBh9=hhmVsO0k}bQs_0!YU{sg?ncrq@|%lZ{gjSIRaZ$O|!El!sNA8!?SD?Gr&^Kq?ld%V_oN9WR1 zGKXe}vnHW7sPG`}u(j{NY`oEU9`3n~k3Z>L=tgMYVa?+Q20j>P%V}VNtMD8J;$%rh zF9m)DSDN@6c%kt-IBMhTFL&;lO1Ajq;mzZNhRggn6^4>fWPAqRY!7&D{%+G4bNSd*d1t?~5mLs+A7O zwd72^dfTqaSGiO2G_Eu8)maJ_lb{{=&Q(zV6!^EmzvHNF*QWX#@N~Uea?d#M3?4*Y z?Vl4~iyKUSwwi)=+xZ4=418X-3G6JLV!JNW#!0>2md1H2~Lg~|K>HdC;eN3roe9V_TDl5>BO z5U=n=Tx8`KmN}pvj%Amq&%~9u zBL&ido18U%3%;Is+Qk<+v;DHLPbru}LJCO(KRL%?{0o*{qF#?@VVx75&Q7fHE_goi zy(y6Pj&jy`IbL(MdH?_M6l|tKZ&%?;XRRC!lTcL ze3vU7EM->82+SYFH!9O19f9}A*G0DYCp?aLIfZgq4;qy?$w@`S0-rI8`9IZc;W;GC zGOoZ&jW2R8bSsz>#2*X%1YT$AKNI-5ECqc!`yqcR@GH2?#NWUpjo-lwjh6@hIPgkb z*u}3e`(;qD8kd@c?{J?g{{h7Ob9u8FmX~63Tpx&QOnxbzZ+t}HqnkS$9ZNw&rfc%Y zW}18$FEtH38u&51%EX_-?RN58v=HAz2V1)iev1c~_*%S}NtqMJvn``-&r1^c8+1Hr zj&&v;r<@r0WL#+)9E6v#LcO?Lhu50;4S1c2KaJa6 zT0Fh0uU{Sb#=z6?@+4obKl~~-1xsi!*R5bNuETnd_cN}g(L=E0+hABtz1cm-Z& z;&u6~r(ikk)Hh){%#x*LbPIl%c>Gw8^({*5 z)=$C96udyfHq?l3K%BL~U$7iz>h*XP-rD7Nx-hZEyI?u&)LrprtaGY7wi%-1DUjn* zE1Zbsuu`9lX~blk!<@Vv8DcoEAi zS1-nLl&D|BauliGz;YC*-@8`-Sg}#`f~Q&ri%hISl%eCD-?txdW1O|5WE6PT*NED~LP9v)@_#p;1mW zQyC)3?|drx#N)$Eo(=OyCb``9bM@aF$=?mRI!dP`f6H_E;4*U{$xlbeoSWq>5ftQ; zAP=AO&f}rNFrRQ7mcy#Ei{Fgpu-Z@a%@)cH$R1b@%Rcm2PTdzdlP)!)%K~4KrC_W% zj<3d*J-a6PRJaz`7*_|rG4M2OcfoDgFMP8Kw!0vEmr0NNj zaP0(tCfoI5R$%Jy9(Ye&W8(YbbuDH&4m%zOO z?~WJsHP8R|reL*cpf7HQ>Yn}X@4!J&AeaW&pt;#Y7Zo^9d_@q&YW{Kdep27Vo{Z_4NT|2733uJiZpe@X?M zVn}3CWv+;#+l-IFw;ErDZ!x|fPcvSIZ#Le5Z&J(a|87@C(T!SwkHu4s$Ksl!{1%SK zE6oVZ7L(u0b@(H^6zeYf59dts-t{Ubp{vjK^OXt|Y%~pKaVyinTwG-QFbJ3spu7I2 zqjxEgeX0q|vFs!DM_6`|`V%a>Nc|a>NvvLlWr)>ZW7&o3Z*U2A*MGi=lmgjDny?nj zkgI>jGUV!Cu?)Go9#1uHz%r>dz5&auS8u``6>j}Z!hb1{!$uRLtCPb@-2%&Dr_RN4 zSgKoNnRMzrEOSWR2FqcsZi^RQXI}rer$7!HP3VB-uu^xzau}(*V0)_Wiv7ad_pm)x zzi@skK2z4Y7q2}eU$=^``?QNC!T{tBGe^g`6t>af5Gg4?O!gzrsGweMyTi zE>}88#qUQc*5mNBcSg z#dxBL?{f`XCLB69z|-&#G^lq>&tn-eUE#}tU&YHz{7t;lcv+T$=!C9K4SW#z zlfa+h0+at0-b{zw61c3nv(b?h+u74`l&wu5xk>` ze~9H*3w59Wi^mT1`RR#?htMF~&quFaK{951^g8efc&cgO6x_+I@ESb-G{1sLxWIJa z3B1C@pK%_-3ix9%lym4&8){jc;>a zN(ZuXoPHQ2d>Z(3TxuHlT5Qe(TTbF)W#Vn{M&owQ$&m9k+&<3nM+Z*z1+fR=yup48 zhT(QYyhq{z#^*XOlp&?PM}zqMz)#^(aeY}o6&6yk#5DLK&Kv4i_^PuEnXF)Q5Km2R zo}Ytzn)c0| zpTfg&)93%bqM%^7Z{Se9$^q z!1xlWZ#?z}=6{(f7*E1*;|aLdc(U`z7RiWw62!j<{1skh>VJ!?&hZ^wdjrQ`&M05- z3kl+JsbmEQPH7%54SYE6Y3ldGbIqi?1lO7PSbTtqKbWPU>RjJ}+0LczJn&r*|0(b< zxX#r79k)8qx3>ZJHQtQp(E*xgN^W+ zJRLu3R`42LWa3NlV()D9t}7^XTfF6s%@U$Ef!pGBzJX{5+^@oSumF!W?urMF;hxg9 zKN2q-t@&L4&!u2ZQ$Z@aza6EE~D?2Km_cXM9tHsGuvex5P&KNXFpV5w=~V%)FNui$b#(RiHm z>{K#BF9-1@f#1Y+rv5VAa8ca8T>toP77B_k_AC6vxybFajyE@tcM04T4>$F9!Hs4T zo`?&X1Ifbu29`PDuD^T|t*Jm#_;Y;Vk+{Y*a4ueKj^i3!k2z?l%^$Pz%O?I4e&58~ zPvh10TGT+0|c(d`vfiDkyCC*&#>u2#3tWb~hx%hF@p^x!=EbEVZ z9NoeV!Z_bROFY(iOZ=4Cf_?Bam}^s9e>i^0tY8X$(fAp>jLUPfq@ouvm+R#IN19li z6f`Bg9(XD4aJ6sXT|ChELp;RzQ(S4h3ePnDpSa3g|G%f8oq2t~9v7SVpZIOINQX3Y zD`z$n-xsmxWwewWGN_{>KnKVk2I6;LA=sbn2kH! z;PdC<%(Sl2l2mdY`5jl9_y)Yjcr)H;oK4-%9n2KpU@l&BOV?;)PSW6s_-}@g_TwQO zj~AN!3An;+z+{|vqi=62US@m??r>96JR99XK?5t`wmn|KD|nOH=j-slSm(qJcO+Y^ zLtcRGi0u@_3j_DSrHojzWO=U^1uL2gQqi7xqw&5t#mj5$z!`V}BcvTT2j>viNp>5S z5!Cqf!1q|o^}m*a%&oq{LwK3-T%32Ck3Wtl8ZW?0jGx1sjbFlJct+HV9?4O#7LRmK z#n}FI)b>v9>0E)h1h2ZoukcVTkLi*n9hKoN@lme93!F865tjDUW3a4HeL0p6vB>#9 z9bHMmeH8RV(t%mdk|FU&usn84mUJ{1%X2;TJSU{d)}2;uP`UM7B?v&Ki`-HB@lr#owW2HxA$e*ctcz@z43S>5#!+~hiJy<49m_49dODVyPW24D z#5j8|1#(xb3HM{UsZ`Ixa#N{(1j|jOdM=h%HtKm;?(x*~@kho_;gQ3d;@RjK3gjM5 zD?Eqg9#Fjq%RQj_Wh^hX)URT>e^9@U<%UJQ6wCdD`W-Cy6UoB!@AoKZY$`}cA7HuO zYlRh9uJ7tku{?fPe~#txyZTF9;Uu5?S&jWt-}o(V`nzD3d)wvbaX_8WHCmeHT9@Yi z8|U+Ynb&>|yf6@dZyJ!l6K*lH`3kngeyMNV8aJ(g_VZ0#>i0JFng4wMk4ccPO4&PT zU|$oL22R5E{$OC>!FUZL(t%#ddEz>pcc=fm;)l+J<@(R>_xgg^pW^~5Bnv;ii;Ilc z;Qq!xI?tklJhD0Rp62oLz{lgtxW25P3IiyZZ5licHyEGpJcd0bD|ji0zZUon++n)k zfOl}&UEa&_C~>@g8vK|78M0*I_kXaRL|1Tef17WX}B0FS7#CRfR$Xz}^--oj@WXY0_ZlIt5ccMUsXo0iFpT)9^)X(F7#xG(S zVvR4xk73;GepOcV0{8!Wa6jb%)MP*pHk6aJluGA;Ijgc!edST=qv@L_xT1d#uJS% z4?Hfg)UP%96LF^2w|716XM9uO>}^589k|j|n1NR^WO`r!x^prFd{a7>AyvPF2b$Ln z@8Jd${{Wj^oQ+mc;FtQwPqE#{FI>d8-!f!{spQPIJ!d)@p(Rw3GhGdqSstI+@DEs4 z7$4SY-qd;tpQ@!p8S>>L9-o`_vqQCgsk! z#*FB0*7EwlHwCjy!d|%Ge!ma*!$rm=fe#H_hD%KTQFwvzad?R{^FI}xWD3Ls0}sY4 zOasGl`2)U#XW=2n=LNnn@Wr?y$!Gnn@Nx>)mfu- zJYDi{?8drf{hSD9P>>rJB)%8heSSao3*UZ+?LI%BNhbA|k`#ZAh;z8CAnp8!sV{S4 z3647yub&ZkOAF$)@O6v0&h+>LyqpGmN`o|;&sC_;EWgF=aew0-@ka9XOg98aH~F`6 z-;48bww-HmH3b<8bOqfX;>3Z=UHojk{t>^z^YMV$-j#tb4LlZ4Gx_6j&eP`k{{#x^ zZuXbsd3dJrO8gofDsUZ2Kg{(V>*c!$ug9HT{1lvT>Q~_m*7|dC$<5~azk-6CY2D-p z(BmO)lmx6R*zFOn1vIdqi=T`e>?(O1p@i-G-fu|b(hnHuc@k7{RHU-A50&j)$ zp7r_pIR91e_PE@1xD*dDJ|9;Y-+{BMOu;J@EHhq*XBzJ?hY>J73{N#4jq8l3<8j8X z;f=5P4lkX<@n;L(4HA~){3X7^$AMSko+kcf;MKU)#J>x?b`HniIFs-T3G3)F6Cj=g z9p-XR_=fL5XPonIg&PA;!y`@p3s}w* z$&!vh^f1aR*%2WM2PwqF_-| z0bjR^<+#=cx?(vms0(q4aSvQ>yc-^3+#6RI7h^dp;zi#7zc&R_wE*vnXBzL1>x@hA zBI85wGULPWD&r&YI^%xgTawQmWn~{;;tF&NFT?+lAbphh{mvSng=JQ&AHgzd)pKzv z-kt)f|FN^iSK?EMZ!OnfNoY}*6lg*&mRYTCjVqkwfkhtn3tvKs?dABKvCTgP)7Iq6 z<#!LbD-5Mz$cNr%;9BEz0#^jS5U(`(WAKm_zP&4Ojq%lZQPvb(OF{9+ zzCv~28v{?n6(;|7ywvz^-0BnG-hFuCr{1%0ws@s4m_vc}V}YN*6(;`~-0rq+Q7L0C zhw*B>`ZM3&cevnl@1FwyHjnvl6MiS5pQ*4R@FqOl#2W*rALC4D;#=TxU-%B>;acNu zA7lR8g6)HZj(CNs&;`$5nk_XX4q$qwpf*(Rkv| zeuWp~8sp0Yk85&#{o`Y>6f8CsCI+62JSoKkaMP1gXN^CLFEshj<0A7^>_sed z%3c4{(P9c@(rE*);R+|Y<9P%7g>SQ$2I@4wMKq5G4)L|4Mem?mmuhLScw|x(dC<^Qesmi(G@tOo!x_>c^nN z>r7mplKmER`1d3pkAEZ$w3*NKn-vU^6)-1Gc7`l`ms{YWxc@qz|FE;>KN|QkTt~jf zpNeg+|Ibh`pAl#kua5VG;Ps}$_kn-J(J#KiUvZJ~A9%R&MqESt9bNm~pTJqO&v&6f zI*=?pxx{u36k)$`7mMv2*vrIaM32X|0|Nq|in9w@VJ}*h>-RMjRGS`83Vc0YYvMNr zz6BTl>PO@bT)EzR2Cg%%eS-OK3mys*X5(e1!aST;?;Cs)4>x``@S?yk<7p;;$rH@K z`KI7462|`FSMXloj{<*!XPW#kaGmjLyxI6W+@Zm@|5G+7_$~17xYShGfUE!X4Q$5q zjZ;rHcW&U;c!|l+ZbQLJQ?MN_{L8PPL*UMVGg#(OvZSN#*nXqJE_jWJ?~42RGhsF= zqF}R0*aJ5j?}bw}eg*sB7RG&XuJM7mmGQy2weg{Nt0wdMzl?&srh;^IB;LmOXxzs5 zSe$R%A8%`X5^igJ3bu#wX}D?0a-0sKz#hjfuSmr`PLn04=6+bVDCIl_%ND5L!?FRI zzwMR$JRc(%|JjZDCt(>Ojo*P~gQR{|R`3}Gvc=k90oMZA1zO>BEL*7YOSl%u7OESs z<_!zvbM1*cd?br{MK8*xThlEe)9X zYFvypzSYy58BKg&TxC20Ps2^0|C>s|@)j~AvZSJ00^bq%E}WO+^Y6v8*`l6t?R4~( z9Oyv+v9fI`uaOIGgqR{6cn0-Zn)IA2d*+M3cP3FK6sJI-ye_K z&UfHoyjU%-{|~3Y?!*7XeyMLf3fp~nJ}=FrL#65DwcOiShO~j}sl3*Ec5uczYA@EFXg z+&%w)o(3t{iOrTXS#LZmNr-(aUTJ&{?%&>bU{c^Ifp5Z9CjT~E)IsXY^_Nvlr=TV- zNPJJ=2LeBYmzw;!c=3+DLyzNr_xN-F=XfCAIbK^jYWV^klDMp2wz!yri3PraeF7g4 z_#ixu2DWkaN8v@L{^-D!cs}|1;&uiuW<=xdmkaK_6v#eG7XIdgWgn?$VcA9MN3iT7 z^<2EbcpjErrt$e$=8*a+{NqgX{{LqvSZ5NR!<&s4;Ucy`8+aL)7{7`SGJYK&Y`hd7 zYWxl^yNBz)HuxR|vd`2XVA*Ht6azs7q_KAc4^B+i8bB|%PvrFg)7|n zQ6j5q(}>(vUx#Iv$STEeVi}?M zFveS6%Y!c&BE3&PmI4`4O_+vd$Ta>DE;I4%C-QZ>tRTK6qrua#?6UYK6wk!6%QRkc z9S@<1cXu6Xw@Bw71#)KElPzx7S%)YU?HhQ1TxjA4=| zK0g~>O+oq2zJY6TyZihK9>Y1tpW*o?|Es{?2L2u|Hu*o}WliS#zn+3sO$Gc?DPC*5 z32!uR#6`RK4(GfSMWx2A@fhQ6#65iecGhzJ>tG9TC%lluCRunx0$yd@6|cjc+%772 z*8JnK>|^zbI1lT!V!X4&ng8jiih`bleT8fB$f4eo@QySPpBKn~!dX|a0LvUwKZ{H7 zRussb`o>w~-{B*P@1ocL{FjpgP1p{P8Ri?@9*?F%u50j6XU#8@eA9s=@l3qE%fHxJ z^Do6R$=&ro9gU?xX0;|=t8;DU#;zF-yw zMJC~WTv_B-up;nhfmh*oS>aAmGV60+Neo%iQEMz6OcuUt9&gT?f;JRL4>h4JE--G7 zrGpypfbAUUg#A+A*ah1;(AC7{YI`uw&No|lI0e@KhZmdpF%sWHJHX8cocP`heDEnj?eu;#%B=FzAupNPa0{@3sn-Oa9D);q!>lX9e822~c8W;5O@oZZP z`kI0r0v80{2`{08@fOp;qp@^2S@`l=yx45OSZ9r2g{8hT*MAD^EWQT&rM__@w!2^f zH<2NJk^^YqK>!9gW1&zQ)hNO&gr$nsy!qeyML9jqMg!nz(G?jo5bJ z*1)&p0j7g@2fhc-baCc?Dtf>ah#$hk=lXs8K5n(2ZUMjV9QadQY4X!ccxh$ww+Or? z9#R*-89jOZe=-H5l7e^_Jc#RPP;Wxt!^?4oVUk_+H=fqlcj&*sEnaUP&&3N&{#H$9 z`=!ZkC|GO~w!<5ZJK*(nfYi7HhvQWT_zv{LnFGC#4SZtYlW`dv+(FhaTU15CSbGbG z%UPkmn4IS<-Ia^Ud@Q>tS<=x{SayN>8C-?a6iEC3bJqA8Jb`#t6WY9y6lg+QJduPg zTmuI=YrGVXG53gv<0<6t;PNkU*8Gd`1H@aq_{_xd_*0aQ?xR5VxmI`pFEJI~b=LTD zEOSEr5sr6JT#$}F!7D3#{4?!$ai&1r zz;I`cpNVCks?WwU%hl&%ndIsU-0b!Lg%tRuzVTvg&jXj5xSR)SrGcgjxzU3rE^oPb zIH*6z#HIcUoV5*nY7(S@&w~cOG;wL5)zao2*b4ilzHu9DH(*;6m-;13x&GS@9AXlr z1BV3-9AVSa$(8xJ#LTYYy=RlS!~0x&ixzQ!ln#^b6N> z>A--TJK+@sXryCf0Kz*Kihaq&_InzkOp238hF*jr30@A z^_QBs)c+%>|Cfm~|LYt74jR~O5~P71Z#N&p-LPNyI6bx_SZv}_e{fL$bQ5R(*Efy` z8W?F3q=B1*25vQR8G+k_`qNEZ>c1A$f5XI?|Gb$jXkeL1kOnpc4Qw)TssC?KKYGWH zkJRsl?NPP6kIVU==YAB}A?)K5;^%_Husuvi20jPd6`W`4OZ%g-ZU2&8c!vaseVM%e zmRG-(rh@c%M$q8BCN2%$A2c}2#HIfGLH!R+T!$;yCP5lFANMTvXU59Fm*8R(AB#(j$KxT!6L7Wh zWL%-oKji864HWo=Q!Tbz*!GX4L&HguT{g|+ONU>;6-^D~MlYGTZ1Mk>b|vsq6lZ=O zU4y6~^W=CSXyzd%%G0r{yZVYOqCzy@0v-Vk_9-m)p(d`e&2G$U){VFZOI_CBuDiNk zfkcDrCM#ZR;t3IzBq|t<2O0%&qfrU_uRdn_&GdUc66B|TT~%LIef8B>-&Hja0nXxk zG%8Q#FA%(s5A!n!K8Px$A0TQ0XAyjyDHrVze!6%2F9L4-*|GaDz}fbPi}IxZh|AAz zLNK!l!Ff#x&d-#K0sKQ#`|oGU1qH5cYX1YkY5&mx9&AGJa1(;Znh^XVQ!WOuv#I?b zGv#6ce`;#~+0%{wqXB&BncgIv0J!l7q84zLgmR`_3}9AM`>$up#Q^N4_TDq~`NvME zYnl-JQxk%fO$cttl#2m8($xNcGv#6cziev%RG6tC5PZ~x;FCH>#L>ZNqOnTQt8(_VgCzzzOz&=b>qWlsBkhqhz@=NSX>@| zbU+Nh33%}7)hNOt%5U5Zf=#cMHl+xEjsLl}8vPWTDBl2Bcvde>%B9~RzhHIzcQ3sO%FUEidCltI?z@WhRr2O7DvHuS5 z=q^S}Sa=9U? zzt3l=4+>SKc*c9}hTM2FzIG!hbQ)lBq4E5r{u6-3g@sWGMfMW@PjTU3by8s};QOD# z0I((k!J!>^oD9C&6O!^X0gH6Klzx(fvHPuFA09b+<3Bo%MfbI|1Y|2EPV>+T+ zE{7)N&jJ=#GLd@{QE=qgj_A(l$4U7i2O>!Y_^@&)hyVXse7GD;B@lK(oIHL|NAxJg zsHDN*FF<_$Yja|?>wgzMWY=u)_}*(aAF#MuJwIWxe+Rt!wra^t1~lprgjxZo6#6dU#aBYqCQEoY ztX*-*bxJ~!Zvo!=5+o_`g(4--Ee7s+z5udfBX z0kHT}0en5+$(iyO0E>%C=c8Oq;7l1h0Rj%G=)M-PxOAE@S!p|9af4FyDe7CaBg!)x z-x01v4jYC?gHfW_rD@%!V^0F-0Fh`*>t*Y8CKF9ALWk}ch4 zS02|megluU4l51t93;iNPEDn6_^sIkqi0sJV+!MqWI(E$(+$Ey_yf|~*VY(#fy zMFNkx0CE5wE>GZF0Ivtk((*ZA!ckz_WI|^H4(A`x7(j>*;>YHzNrNqbZwE=mJ{H^Z z>bc1IzyPmK%Fmkz#dJE(f2^S(=}y4nr&!mZfq>5eDa3EdPfY5s1}uI%-b>)O=41bf zAA>(9`5-R<4**VO`6YnGk5ZqXl)nU6{FeI-2|QsT_VtAB($)k%53u+V>U3Lf0xW)6 zJ>ACTMMzQsd}UI9^P&)vu7(*UBt997FMdco9q}r_;&;A9%B7gm(||>i%2UaV_gaEA z2b^{=1+d5mJU!{)JAloD;Al)pe)lp^cy(g}r-sXWpWlA~EFK1XH0fXk5)9Tr@T^V- zF!&F^D};@;4qd&L7-@@?!Qh~kuj1OFCG zIBZ;LMMB{%-@)^JI1SBsfL*1_uE2Q>lHHZe@S-a_5K84IJ|``yIGSm>s;Sr-HFVcE z_><2`EDQ`&$3KCt$OcoGJhe3b8{%*6WP9PFg*Df(ZHp?d?o-Y4RF~SS=GmI8d5$Y< zwoy|)Pi48Ka@Y@Qt?fbREqMDuYl_OrUytwFBn=7+XGu%rz2tAZgkkMB**hhs!Pov) z8pc;YFAZs3uAe_Ib)D!2nrj)p=P=LmWY;$}Lp2;vwWv?MKn-eUooEF$`9Uv8lPjug z8Zrx9*$PZwH5p&{f^^hyPc|%>>Za_tzH7QnFvayR6XSS84+71x1I=_4M-H5nTQUq& z&}~id06*$Q>6D7^X$I9)n<~DH|M>id7p0SqRvg`-nrVBU$t;CMeT(Hv>0W@JkJ~Jr zQ;|L2^eD5aVQY%4n*4j4r7>Y4@f5k;Zfev*Rk_-BeT9|6&(}ctoE@k|^~2trq8LRD zn(EWfSzqkmEQJp0pLO}<-$>PvS*A=~RRu#*(^8Fy!`fW?nkt4E%dG-7sj2x(y(n)_ zse-iap;fHU!K*c@#2bFYSh82Oh&%b(P32L1^=~D1a8cEoV)BihWW=~aDntVqdyr{( zRGoLByF|WV`MmiTJ9CzOR*8fn#=GoBR8??BC-W#;Ie((Jm7B}d~>9|FU#&>(_T)mc~wKoLRo(84e2qg_>gTcuHW{YT#hgDYBya8n3+~_2lm_ ztwHW|<3vQq>8Q(2;Hu2U!L0|H<}%yV0t5e`GrPtF_q16Rop>cV)^OTxq(_9zA9c(p zUTNX7W%g`$(Ne$GOwLGn)a5~>TNPA})V5@Fif-wKZTN;21_5;~n>n)Xn4YHSP*)7k zg{Wz%+DA>j?V3VBL=Qg=I2$v^&SfUq!BInnx|oq`vRk9(4o0^)+eKPzYSxQf1GvRnyTdKInDn zTNSA4j$^5wt=LRA9GS0tU0NLKu1;;+@hr!Is>D=7b(o4%*Vi4(xAmY_r%hqaXu`>C z3oA$KUOSn8=l9YP#e=Ay>4kW4__jNQ`tcvu3eh&SisGtSbEvSk*rQ?0QiXN3_Q}B7 zUp8ijZIg_(PhD0w-3sT$?|xIdAf$$BnVM}{CJaode_5@s5QSD(&x)(o_i(SOlk%8f z6X$!h-+R@~smeFLB`t5+cq?{E!-roo@1g~@<}G>I+tQqh!zeQ~>e|?MzN)MInr+f( zK6IN@nFMQ0@u_R7vLRC@TUlzzGE;0{u`P{yjv>1mEJ26q%=f75xrSV`_=;`Pr~~w6 zi!NO1`qY@C1_o7KsMLn8x_+RDj>dPYCM2d}>Yk=Ky6&*4e8U9_uG~jFBk;b-=|7CnUu8H!o$_j;{Zcb7=@R@DN zipESgkOS%~F0*u9SE&P&I;b&jm&w@ccS`$)xyaI^Zt2`*t~@($x#LdNOsAd=@k$+8 zwhYsA97PLs-w!MoD~|PXwOWJqGF8Jq>ejhGQ@4+*b?z^&S{FC{ldx!@HJTiS zv7!dHIHg~{5F4Y;x`oIU8t>`fZI@<-hV5IP1C>EBeNCpZ=ce6BWt7Px)@_^;y~Y>j zu{o#T1}Dpj<=-ageYkd zR%3Qbqm5kol6KR#eBlewI9E8qSdNW`2GaztW@uD_r;zHZV%bn1sqMkF%M1pET8sT! z5jz%Fja2fu2mar~$avwL7@Rx5Gd`4P%cTG5Luo+>UD~!R89FZuWH=+IriZR$S`IdY zuPaoAfK;e2yRz=Vxd6uy^SoMiFBDd0y{yCr>QVW)naa0+AdP7m@Tu;qGb89s0aSwA9Lop?T^y9 z3Nu{UGgaMJT}?4emyi7j=WNqge$6gv1V8s9X;4>Fi5nk$l%MvIG@=#RY9MR<`V_wQ zfk=xG^--wz(aY%{=k;p~TcoS=M|-Q*6V6BJC(qwKRNDP%Vi~+A5x6+iEgYvXJ!O-x`a~Kt(uYn3hBD!pcMW(F<5}<} zpGt?W`@c`5^&J%p&XE8C2vb*`fH^8(@tHK1Z`~ygtWZW>gs61a(qz~23=SR|&L{1X zhPD<>*agQ-O9QY&Uk#wHAKca4ARZp$beA-CWPTyHcS{HM(NK>XwhrUmKj#hZ8hp)1 zMCAxkexXeBdjVtiHP>0Y^ZNgO?$?KQOJgdoWqGQvdL}Firh1gWi?3bHUt?%IE!kIXsgWKT&U|~GuhbmH3pAf0C`|)Pc(%cWT`T96_YP|+g1mvP zBX-P89lB5~Eb7{x3ws!9sg4Wjrvp)x^mcF02*TjjYViK|Zy8Vp~`n zHB!Yt7wtso6V?#pbM_?%tb1i|(mkM}d4Aw)j$=56s!-V%C;#v-i|9dfNiXJfzPa3A zaG^V|=Gcm*=%#}R2y6z|<>w71+DJHc7y>1F;A!xGDX~_HNYAsRi$6G+oL8}_r5LWs zsB9{}uQ>ehA;hU#)HVX!&@@ZcZADXEU1xC5_%ii8L?85Z_Y5HeJ5DUB1}i1urlOks z&-;-_VOtnlfLw?`vu${ydbvG{Fw`jaD+FKkx6NKf_$*U3>~G37rS4cR97;V*TUawn zLx{F2s)qg2JQK7pMB8xM7gntcQj3QDFM6%+6)QxF9h4qG8T$51UYv1!=UY-W3Ve<$ z>_OpY%p)TT8I@1mpB!*}?k-5(1IYj>MRY$_XYC|_bx{-|&AP!Tt z?3hNF>c_(fa?0|yTof5e*fX{h7JhTiqKj*}mE+^SF7Gi0S<_^l>9%h&*g=M>G6#nV zLSHzOm0EO&C)4o4qT0QjZbg-&Fn{cyE36u`M~J++!VyC&Xl9VYHmR=}4b!>i4QbyD zW%$AoWL$+(&3BouSRQ=-2o0`VJ%a4GcBpLY!WyH#;RKFm@U#At++HydcAyp_fU@dX zj0Jr4ZRDw;u4TH4DkD?SVXotgk56_Qwxb8Wf^03*Hccy-%8z-3^zh0(&RZ4T3X;Qa2J2G-43+A zJ7@=mgRDHt{xTc_h0!+(e%amRqfV8=c2-r>gq1AYluqRvpF=j`jrWkzosOx=%yC^u zWinFY5blYVYQ>L8(5buF^{VIiGR`|>cxK8fK6Eu4n(#STh^`}(W681QVJo+mD?Pg6 z;5!*=N`kzA&a*0@F!I_cBZ$ zJ;P(+t2pw~RWC|ArE=fhC5uvoLhwzOV4S=WN0hsAEg4nOY=oa&-}f!(rOZ+Inze}3 zQ^s@;W&+p^`LGI$zj{oU!Pv5IC@S_ECzes+aeZsyqV zMrlHmoGHfW-@K1>6=!tT`6LHVo1|hXtF@w-BDag9pZ(7t`YHJlzwcQxOz5L~@ssZ- zWBB5AuYJ-TeF4Dm=BsIJ4z`eth#lFaY9pSV4`&wMRFL{7sB7_!n2 z$8dQFna;2IFS1u>3p&2xX>zPcK&g)EYdu7j3x>6{gz$xmJ%K;=06D$ls;;FtaDO8; z$7X@Y5BYDhtc}I%t52(4x-0!)2-`bf`dPU)7eC$JO*9I{3DqVFs`oRIHs{g2qr%KV z+2$}3qqYR0_obp%vtiK-9oPX`1nj3K1lG zy9L3CZDUC0(}DpAX3sp8$`(KHHge$LiHx@y=d4mmhO9GI@vGi5-8+qhzpl z_M)ZY^KyUu@iWF#8daTrF+MIs`i6!qY~M0)EJVnH{Gma&j-$*$;Q)=cF5@!MaNj+%g*38wCflZ%?LDeOcL4t;nd+9lrii$m>6B zAp2Al2T2^ZXFG5cAZ>y1W8Nk{pT7~BaG)7Tae!g33L{2UBkiYCI96RphYo=YHYQF- zZa)FeIPh6=3qSId@*qBTQ29tcXgk@DhnvX${J6J?%jZ5whE_b}IXY0N;OkZKe~e%G zAgN75k~LIrO%I@LQ(V$$cQuo3oilN9>tiN7D#+7tsprcwyv1(2Xjvk)a_~kf_=3e8 zbPcB??rR31t1Y{Z3&JM&eYj<0*|aqHgK#Cpz{MAs3nJeU+rjmeS}GKAjf82sMs+LF zIaSZQXUuz)KYqMb~5# zN{*spkWA#FQhw6^kn`h%pfKIJJ{oxJsfi#de9%}ZnNdTFMH;eRL`W0?4jKq%Q)Jik zp_;o6McMuMeku42F{ zl&N9z2Oc9o9Zqu=HS$DFXik_;xTzIAt82Lfhvk*78A8q<9q-h<;?swbuXFhslHd5% zN#$XYo<0p}+X}+lI#ZC_ubQd3Q@FN?5|P*SWB*J3eqtg2r@KFoQh)zAd7A&YyKGhv z!O<*JH%vpb3}(Wbf1a2XhO|c+_YvURLCoEd`NnsM!oPS*xs%`UE3%ef{5(-AOoM)f zm=UfU;KCq7YS~6|1Ya?wjO34dNrk__!R|L|FBIpN?k}K%a6x_Vjn#;0S?O2vp=bn!bh8-qiS!FOtbU4znQ- z5X93JjMrfOb)Us1TqiWZwGUhtaFIL}VGA|Yad8nuS7l@nTZ-BbwpeTwCetaY(w{@| z78FW;=Bbiu{W&=JhRtMr4}6X$$cbg};W}~p8#kZ*8)6=y&s~V)dAT5~$P~p%X#^sX z+1L5vUz3@zE~();o(H=Cj$K`rUqZmP+O*(KU)SlIV$o==HL*cpBy4BOJq{o zh%&)9Th}IvN0)j5b1=6#Iu&aX_BFb8aipr(9u6Z!l5^d!(kG6>qb10zA%LK{O8K4b&xH*WpQhR>@zA;WjQ zjO+nT7Wa~HbhtW%CNhj0MLsf0umv?mWem3pw7RSKu)s$q1r&P_(NOCaDLSmQmMdKjca9y`XcP>>YmTHY$0E)z}k`> zWVss*fejT`siLorf#nHQ*>-i!wUI=0%2sk{MPWAR;kw9dz!iUF14Unv;@}y~)g29Q zDd5f?zhWz?VT}Vsp=A#O4DMz}i@!1$9PmBEO0{K%d=1|5Dw$D%-RC0}7WO8t`@t)~ zpLvy>mPu__U>)g5sP%CY;1XC=KC{AHu#b#%UtFwLaUo2!I+|Cca@RC12oMEOm}T3p zM~&1CUrgL&2euM7UP@$cIJyDV9%?`IY@^X-1rJZyOaVvW${yYn2;!Mp$UPG8OTZHF zOiv9&gP9e0kf|pt$UlJ*XfsQ2-4`k@q704?1K2^>2b6B60*bQ3`h%@8mR%kXE+3k^t8*F36F?<&|75iGfzHt+T(TcaotO|VRfoJPJoJB!^$P@qcEuvR+&o&K)8}|-keh?tS ztUdr6+EsTP7+*DcX+fi5?}Ib;mrMn z9LBegAR{VpMal@+DOfWV*P(EPMTVAP$|5rxq6J5Jkhl(SeUEfiU`hm<3SHjO;g5ku z6nPcjc#jP0VGQn5Xo)V;lT6&+>5r%pGfsM+jPAh`2$1uNB7(3=Ag6xUTzOGDp*)hm zcYJva|H=F0h6?VGg9VWHFC*E)RdqgVJDFPXEu0LN4;cvmj5sLQY$so;P#tb*!@((u zu_LdWkNJSi8YNqRWrTZSR^eQMLk|pSXtVh(Z%c>pa0fZO5(G#o!0F0VgoR-BXA}t} zVyWew+SA;^Jz4$ndo1+)?7^KYL}u5t5Y@{>*|3<%g$WU2a%b2&ckJKFQwG#Bw5W6WTR=YjAQP=P%N~3K7KGW?0*E49Ri1 z=Lm3^jT8n?D+X?TLU0F(*{(1f91zLC1)X+jV z^TItJoStaTe*p%y7DmZAdyXPGz4sWwc{P^E?L9_O!>#H*X2Fl$MYIV4@>w({uIAwQ z_v$`v1%7Dw+;zCRsHVgG!Q&&5fd1JoQiXp4k9WzCPAViJ9;!;jdQPKwqv4V=j7C@- zreQM%#m-cLmN5t~yx?Hbx_`K}*E|G5HEhO^toNP|Az7?;5QO=YNSL`D4EYF>#m+;3 zGf20iq(jYL%4hE;Crrbg2jmPxVL{56X8Ng7SxD&%NN0 zykO;wvJRcV4FY5iLlehA=_&W!R6cG%1(q?h9Pvn*q9fzZv(1j zkxp3Fss5m}wu%{r!YZ?H6;mj&@Fn896|ODf6vyol+{Sc~@0}>DePhtT@0RQbc-$aV zsV*bA&$Mj>TM!SD5ud9i>#Rc`!l|q<&4fLMc&eedIfeuQ%^L$2nkn_D+I}yS!zREy z*L;LZR9q%!u+tMFnE1pkxFqI}w}&AQLBgW#Am}T@ zz8{8L+g-LolW`{e)D)fc~zP4b7z(-12#|O3ul%O+I#bi zaro(#0i{)Z<;?OI28v%*S-y%tFta>vpm>%4^5^*P#Q%$*f!O>U-)C0&iv#dqMf~@d zoA^xpcgTmE29y@>*HPLBZwim%|2V5WW`Oq^zXL@BfBu?Oy6~!XFU%_6blLv{_F?ID delta 120596 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 BOwa%T diff --git a/artifacts/test_program_methods/malicious_authorization_changer.bin b/artifacts/test_program_methods/malicious_authorization_changer.bin index 961d3bd1e4c65ec10a59a18188f48c75429d504d..76d643b553ea83abff49a1be5d3aaf7e09e59481 100644 GIT binary patch delta 128941 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 delta 124621 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 POXaWaI=ET9j};D7QfphH!}xP63gbI7~Q1 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 KQ+Z)1Rrkv?`H^*)9b``&uoTz~Jxv|Y(j~9|} z&ukgzN4EK`uuP%#Za6+M@%g{DB*a@|IveYIwDsJS%A9R6hvB~$a0|vNA4wrOF?~2R z5ia8K#w{-5C?dYd_-HIsmTTNzwHJQ=@5p97YUv%V0^~0qy`2u_t9&^uhv1cJ4==&2X!X&`)#$C>U5Re^LMhYJM>4XT0T@fPKiaEE`BQF$sn)p38v1I2a(>B6me5aml{4N?AcIGjg&XnUoI>p2HG{~P6H(SBe1!<^X~JN^SNRPkH!=tNhkj4k2)4=-2Vbs_6dC$t#a+%55H zRbY3Vr?Z<3%U5vp-}|M zoFBr)M@FbSlPtay%aE@!`8P5}(jmKMmSX9Eb*hmB*@H7FAa}7xU&i0>v3*8!km``k zX+NjKg(_dp^=CL89-#82{8dIx19gsH!An&KR^oyd@tSxW*DAl~_#MPzC±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